From 0f9478a261f7a66a31676264b97ff3841b6030b4 Mon Sep 17 00:00:00 2001 From: x7rtfgj4 Date: Sun, 28 Sep 2025 18:08:03 +0200 Subject: [PATCH] Bug fix custom step - Loo Deployed Object --- .../Loop Deployed Object.step | 2 +- Loop Deployed Object/README.md | 1 + Loop Deployed Object/img/UI_description.PNG | Bin 72394 -> 60313 bytes 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Loop Deployed Object/Loop Deployed Object.step b/Loop Deployed Object/Loop Deployed Object.step index e1eb95cd..4c7fa543 100644 --- a/Loop Deployed Object/Loop Deployed Object.step +++ b/Loop Deployed Object/Loop Deployed Object.step @@ -1 +1 @@ -{"creationTimeStamp":"2024-06-14T18:32:21.570Z","modifiedTimeStamp":"2025-06-04T10:31:35.974Z","createdBy":"Ethan.Kavanaugh@sas.com","modifiedBy":"Remco.Gooijer@sas.com","name":"Loop Deployed Object.step","displayName":"Loop Deployed Object.step","localDisplayName":"Loop Deployed Object.step","properties":{},"links":[{"method":"GET","rel":"self","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.data.flow.step"},{"method":"GET","rel":"alternate","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.data.flow.step.summary"},{"method":"GET","rel":"up","href":"/dataFlows/steps","uri":"/dataFlows/steps","type":"application/vnd.sas.collection","itemType":"application/vnd.sas.data.flow.step.summary"},{"method":"PUT","rel":"update","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.data.flow.step","responseType":"application/vnd.sas.data.flow.step"},{"method":"DELETE","rel":"delete","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a"},{"method":"POST","rel":"copy","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a/copy","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a/copy","responseType":"application/vnd.sas.data.flow.step"},{"method":"GET","rel":"transferExport","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","responseType":"application/vnd.sas.transfer.object"},{"method":"PUT","rel":"transferImportUpdate","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.transfer.object","responseType":"application/vnd.sas.summary"}],"metadataVersion":0.0,"version":2,"type":"code","flowMetadata":{"inputPorts":[{"name":"_input_parameters","displayName":"_input_parameters","localDisplayName":"_input_parameters","minEntries":1,"maxEntries":1,"defaultEntries":0,"type":"table"}],"outputPorts":[{"name":"_output","displayName":"_output","localDisplayName":"_output","minEntries":1,"maxEntries":1,"defaultEntries":0,"type":"table","supportsView":false,"requiresStructure":false}]},"ui":"{\n\t\"showPageContentOnly\": true,\n\t\"pages\": [\n\t\t{\n\t\t\t\"id\": \"page1\",\n\t\t\t\"type\": \"page\",\n\t\t\t\"label\": \"Deployed Object Properties\",\n\t\t\t\"children\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_input_parameters\",\n\t\t\t\t\t\"type\": \"inputtable\",\n\t\t\t\t\t\"label\": \"Select the source table:\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"placeholder\": \"\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_output\",\n\t\t\t\t\t\"type\": \"outputtable\",\n\t\t\t\t\t\"label\": \"Output table label 1:\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"placeholder\": \"\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_jobname\",\n\t\t\t\t\t\"type\": \"textfield\",\n\t\t\t\t\t\"label\": \"Specify the deployed object name: (Case sensitive!)\",\n\t\t\t\t\t\"placeholder\": \"\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"id\": \"page3\",\n\t\t\t\"type\": \"page\",\n\t\t\t\"label\": \"Scheduling Properties\",\n\t\t\t\"children\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"concurrent_jobs\",\n\t\t\t\t\t\"type\": \"numstepper\",\n\t\t\t\t\t\"label\": \"Number of concurrent processes:\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"integer\": true,\n\t\t\t\t\t\"min\": 1,\n\t\t\t\t\t\"max\": 10,\n\t\t\t\t\t\"stepsize\": 1\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"wait_for_processes\",\n\t\t\t\t\t\"type\": \"checkbox\",\n\t\t\t\t\t\"label\": \"Wait for processes to finish\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"abort_on_exception\",\n\t\t\t\t\t\"type\": \"checkbox\",\n\t\t\t\t\t\"label\": \"Abort on exception\",\n\t\t\t\t\t\"visible\": \"$wait_for_processes\",\n\t\t\t\t\t\"enabled\": \"$wait_for_processes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_delayed\",\n\t\t\t\t\t\"type\": \"checkbox\",\n\t\t\t\t\t\"label\": \"Delayed execution\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_delayedseconds\",\n\t\t\t\t\t\"type\": \"numstepper\",\n\t\t\t\t\t\"label\": \"Delayed seconds:\",\n\t\t\t\t\t\"required\": false,\n\t\t\t\t\t\"integer\": true,\n\t\t\t\t\t\"min\": 1,\n\t\t\t\t\t\"max\": 5,\n\t\t\t\t\t\"stepsize\": 1,\n\t\t\t\t\t\"enabled\": \"$_delayed\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"id\": \"page2\",\n\t\t\t\"type\": \"page\",\n\t\t\t\"label\": \"About\",\n\t\t\t\"children\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"text2\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": \"Loop Deployed Object custom step\\n=========================\\n\\nThis custom step executes, in parallel, one deployed flow or deployed SAS program for a given set of parameters. \\nBoth can be stored in SAS Content and/or on a file system.\\n\\nFor that to work it needs\\n* An input dataset where the column names are treated as macro variables and the rows as macro variable values. You can have as much columns as you need.\\n* The name of the deployed flow or deployed SAS program. \\n\\nMake sure that the column(s) in the input table have the same name(s) as the macro variable(s) used by the deployed flow or deployed SAS program.\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"section1\",\n\t\t\t\t\t\"type\": \"section\",\n\t\t\t\t\t\"label\": \"Changelog\",\n\t\t\t\t\t\"open\": false,\n\t\t\t\t\t\"visible\": \"\",\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"id\": \"text1\",\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": \"* Version 1.95 (17JUN2025)\\n- Hard exit on crucial missing components.\\n\\n* Version 1.9 (03OCT2024)\\n - Removed a bug where the custom step would never finish.\\n\\n* Version 1,8 (16MAY2024)\\n - Added the 'Abort on exception' option.\\n\\n* Version 1.7 (18MAR2024)\\n - Name change from 'Loop' to 'Loop Deployed Object'\\n\\n* Version 1.0 - version 1.6 \\n - Were released internally.\",\n\t\t\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"syntaxversion\": \"1.3.0\",\n\t\"values\": {\n\t\t\"_input_parameters\": {\n\t\t\t\"library\": \"\",\n\t\t\t\"table\": \"\"\n\t\t},\n\t\t\"_output\": {\n\t\t\t\"library\": \"\",\n\t\t\t\"table\": \"\"\n\t\t},\n\t\t\"_jobname\": \"\",\n\t\t\"concurrent_jobs\": 4,\n\t\t\"wait_for_processes\": true,\n\t\t\"abort_on_exception\": false,\n\t\t\"_delayed\": false,\n\t\t\"_delayedseconds\": 1\n\t}\n}","templates":{"SAS":"/*\n\tInitialize the variables.\n*/\n%let nbr_job_rows = 0;\n%let nbr_parameter_rows = 0;\n%let nbr_rows = 0;\n%let job_uri =;\n\n/*\n\tInput for the input table validation.\n\tCount the number of rows. This number needs to be bigger then 0.\n*/\ndata _NULL_;\n\tset \n\t\t&_input_parameters end=last;\n\tif last then call symputx(\"nbr_parameter_rows\", _n_);\nrun;\n\n/*\n\tThe following macro is responsible for retrieving the URI of the deployed flow.\n\n\tNote that the loop custom step is build around the assumption that the name of the job definition is unique and exists.\n\tIn case it is not, the loop custom step will abort its operation.\n*/\n%macro get_job_uri\n(\n\tjob_name=\t\n);\n\tdata _null_; \n\t\tcall symputx('viyaHost', kreverse(ksubstr(ksubstr(kreverse(\"&_BASEURL.\"), 2), kfind(ksubstr(kreverse(\"&_BASEURL.\"), 2), '/') + 1)));\n\trun;\n\n\t/*\n\t\tSetup and execute the http request.\n\t*/\n\tfilename joburi temp;\n\tproc http\n\t\turl = \"&viyahost./jobExecution/jobRequests\"\n\t\tout= joburi\n\t\tmethod='get'\n\t\t\toauth_bearer = sas_services\n\t\t\t%if &job_name ne %then %do;\n\t\t\t\tquery= ('filter' = \"eq('name', '&job_name')\");\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t;\n\t\t\t%end;\n\t\theaders\n\t\t\t'Accept'= 'application/vnd.sas.collection+json';\n\trun;\t\n\n\t/*\n\t\tProcess the response file, if it exists.\n\t*/\n\t%if %sysfunc(fexist(joburi)) %then %do;\n\n\t\tlibname joburi json;\n\t\t/*\n\t\t\tCheck that the items table exists.\n\t\t*/\n\t\t%if %sysfunc(exist(joburi.items)) %then %do;\n\t\t\t/*\n\t\t\t\tSelect the jobs for which the URI exists.\n\t\t\t*/\n\t\t\tdata job_uri;\n\t\t\t\tset joburi.items\n\t\t\t\t(\n\t\t\t\t\tkeep = \n\t\t\t\t\t\tname \n\t\t\t\t\t\tjobDefinitionUri \n\t\t\t\t\twhere = \n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tjobDefinitionUri ~= ''\n\t\t\t\t\t\t)\n\t\t\t\t);\n\t\t\trun;\n\t\t\tlibname joburi;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: The items table in the response file does not exist. Aborting process.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%end;\n\t%else %do;\n\t\t%put ERROR: The response file does not exist. Aborting process.;\n\t\t%abort exit;\n\t%end;\n\n\t/*\n\t\tAssign the job uri to the 'job_uri' macro variable.\n\t*/\n\t%if %sysfunc(exist(work.job_uri)) %then %do;\n\t\t/*\n\t\t\tCount the number of jobs returned.\n\n\t\t\tOnly continue in case the number equals to 1.\n\t\t*/\n\t\tproc sql noprint;\n\t\t\tselect \n\t\t\t\tcount(*) into :nbr_job_rows \n\t\t\tfrom \n\t\t\t\twork.job_uri;\n\t\tquit;\n\n\t\t/*\n\t\t\tAbort in case the number of returned values isn't exactly one.\n\t\t*/\n\t\t%if &nbr_job_rows NE 1 %then %do;\n\t\t\t%put ERROR: 0 or more then 1 job encountered with name &job_name. Aborting process.;\n\t\t\t%abort exit;\n\t\t%end;\n\t\t%else %do;\n\t\t\tdata _null_;\n\t\t\t\tset\n\t\t\t\t\twork.job_uri;\n\t\t\t\tcall symputx(\"job_uri\", kstrip(jobDefinitionUri));\n\t\t\trun;\t\t\n\t\t%end;\n\t%end;\n\t%else %do;\n\t\t%put ERROR: job_uri table does not exist. Aborting process.;\n\t\t%abort exit;\n\t%end;\n%mend;\n%get_job_uri(\n\tjob_name = &_jobname\n);\n\n/*\n\tOnly start the process in case the parameter table contains more than 0 rows.\n*/\n%if &nbr_parameter_rows eq 0 %then %do;\n\t%put ERROR: Not enough parameters (&nbr_parameter_rows) to run the loop step. Aborting process.;\n\t%abort exit;\n%end;\n%else %do;\n\t/*\n\t\tThe number of rows in the input table check out. Continue to run the process.\n\t*/\n\tdata _null_; \n\t\tcall symputx('viyaHost', kreverse(ksubstr(ksubstr(kreverse(\"&_BASEURL.\"), 2), kfind(ksubstr(kreverse(\"&_BASEURL.\"), 2), '/') + 1)));\n\trun;\n\n\t/*\n\t\tThe following macro is responsible for creating the JSON request for the job\n\t\tand the given set parameters/macro variables.\n\t*/\n\t%macro createJsonRequest(\n\t\trow=\t\n\t);\n\t\t/*\n\t\t\tthe value assigned to the macro variable 'process_name' is used to make the process visible in environment manager.\n\t\t*/\n\t\t%let process_name = Running '&_jobname' for input table row &row;\n\t\tdata _null_;\n\t\t\tlength \n\t\t\t\tparameter $32767\n\t\t\t\tvalue $32767;\n\n\t\t\t/*\n\t\t\t\tOpen the custom step input dataset.\n\t\t\t*/\n\t\t\tdsid = open(\"&_input_parameters\");\n\n\t\t\t/*\n\t\t\t\tNote that the request file reference is defined out-side of this macro!\n\t\t\t*/\t\n\t\t\tif (dsid > 0) then do;\n\t\t\t\tfile request;\n\t\t\t\tput '{';\n\t\t\t\tput '\"name\": ' \"\"\"&process_name\"\"\" ',';\n\t\t\t\tput '\"jobDefinitionUri\": ' \"\"\"&job_uri\"\"\" ',';\n\t\t\t\tput '\"arguments\": {';\n\t\t\t\n\t\t\t\t/*\n\t\t\t\t\tFetch the 'row'-th record.\n\t\t\t\t*/\n\t\t\t\trc = fetchobs(dsid, &row);\n\n\t\t\t\t/*\n\t\t\t\t\tRetrieve the number of columns.\n\t\t\t\t*/\n\t\t\t\tcolumns = attrn(dsid,'nvars');\n\t\t\t\t\n\t\t\t\t/*\n\t\t\t\t\tFor each column and value pair create an argument entry in the JSON file.\n\t\t\t\t*/\n\t\t\t\tdo index = 1 to columns;\n\t\t\t\t\t/*\n\t\t\t\t\t\tGet the column name and the column type.\n\t\t\t\t\t*/\n\t\t\t\t\tvname = kstrip(varname(dsid, index));\n\t\t\t\t\tvtype = vartype(dsid, index);\n\t\t\t\t\n\t\t\t\t\t/*\n\t\t\t\t\t\tDepending on data type, handle the value appropriately.\n\t\t\t\t\t*/\n\t\t\t\t\tif (vtype~='C') then do;\t\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tNumeric values.\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tvalue = put(getvarn(dsid, index), best32.);\n\t\t\t\t\t\tif index < columns then do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\",';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\n\t\t\t\t\t\telse do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\"';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\n\t\t\t\t\tend;\n\t\t\t\t\telse do;\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tCharacter values.\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tvalue = getvarc(dsid, index);\n\n\t\t\t\t\t\tif index < columns then do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\",';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\t\t\t\t\n\t\t\t\t\t\telse do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\"';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\n\t\t\t\t\tend;\n\t\t\t\tend;\n\t\t\t\tput '}';\n\t\t\t\tput '}';\n\t\t\tend;\n\t\t\telse do;\n\t\t\t\tput \"ERROR%QUOTE(:) Input table could not be opened.\";\n\t\t\tend;\n\t\t\tdsid = close(dsid);\n\t\trun;\n\t%mend;\n\n\t/*\n\t\tThe following macro is responsible for creating and assigning the input columns, and their properties, to the global macro variable 'column_line', to be \n\t\tused in the step that creates the output table.\n\t*/\n\t%let columns_line=;\n\t%macro addColumns(\n\t\tds=\n\t);\n\t\t/*\n\t\t\tTry to open the dataset.\n\t\t*/\n\t\t%let dsid = %sysfunc(open(&ds, i));\n\t\t%if (&dsid > 0) %then %do;\n\n\t\t\t/*\n\t\t\t\tRetrieve the number of columns.\n\t\t\t*/\n\t\t\t%let columns = %sysfunc(attrn(&dsid, nvars));\n\n\t\t\t/*\n\t\t\t\tFor each column:\n\t\t\t*/\n\t\t\t%do i = 1 %to &columns;\n\t\t\t\t/*\n\t\t\t\t\tRetrieve the name, type, length and format.\n\t\t\t\t*/\n\t\t\t\t%let vname = %sysfunc(varname(&dsid, &i));\n\t\t\t\t%let vtype = %sysfunc(vartype(&dsid, &i));\n\t\t\t\t%let vlength = %sysfunc(varlen(&dsid, &i));\n\t\t\t\t%let vformat = %sysfunc(varfmt(&dsid, &i));\n\t\n\t\t\t\t/*\n\t\t\t\t\tBased on the column type and the existance of a format, create the column definition.\n\t\t\t\t*/\n\t\t\t\t%if &vtype EQ C %then %do;\n\t\t\t\t\t%if &vformat eq %then %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=$&vlength;);\n\t\t\t\t\t%end;\n\t\t\t\t\t%else %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=$&vlength format=&vformat;);\n\t\t\t\t\t%end;\n\t\t\t\t%end;\n\t\t\t\t%else %do;\n\t\t\t\t\t%if &vformat eq %then %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=&vlength;);\n\t\t\t\t\t%end;\n\t\t\t\t\t%else %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=&vlength format=&vformat;);\n\t\t\t\t\t%end;\n\t\t\t\t%end;\t\n\t\t\t%end;\t\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t\t%else %do;\n\t\t\t/*\n\t\t\t\tThe table could not be opened. Specify the error message.\n\t\t\t*/\n\t\t\t%put %sysfunc(sysmsg());\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t%mend;\n\t%addColumns(\n\t\tds=&_input_parameters\n\t);\n\n\t/*\n\t\tCreate the status tables that will hold all execution statuses for all executed job requests.\n\t\tBased on this table you can create a polling mechanism to validate that each process has finished successfully.\n\t*/\n\tdata &_output;\n\t\tattrib id length=$36.;\n\t\tattrib job_name length=$128.;\n\t\t/*\n\t\t\tAdd input parameters/variables to the output table.\n\t\t\t\n\t\t\tAssigning the value to the macro variable, 'column_line', is performed by the 'addColumns' macro.\n\t\t*/\n\t\t&columns_line;\n\t\tattrib state length=$32.;\n\t\tattrib start_dttm length=8 format=datetime22.3;\n\t\tattrib end_dttm length=8 format=datetime22.3;\n\t\tstop;\n\trun;\n\n\t%macro addColumnValues(\n\t\tds=,\n\t\trow=\n\t);\n\n\t\t%let values_line=;\n\t\t%let dsid = %sysfunc(open(&ds, i));\n\t\t%if (&dsid > 0) %then %do;\n\n\t\t\t%let columns = %sysfunc(attrn(&dsid, nvars));\n\t\t\t%let rc = %sysfunc(fetchobs(&dsid, &row));\n\n\t\t\t%do i = 1 %to &columns;\n\t\t\t\t%let vname = %sysfunc(varname(&dsid, &i));\n\t\t\t\t%let vtype = %sysfunc(vartype(&dsid, &i));\n\n\t\t\t\t%if &vtype EQ C %then %do;\n\t\t\t\t\t%let value = %BQUOTE(%sysfunc(getvarc(&dsid, &i)));\n\t\t\t\t\t%let values_line = %str(&values_line &vname=%str(%\")&value%str(%\"););\n\t\t\t\t%end;\n\t\t\t\t%else %do;\n\t\t\t\t\t%let value = %sysfunc(getvarn(&dsid, &i));\n\t\t\t\t\t%let values_line = %str(&values_line &vname=&value;);\n\t\t\t\t%end;\n\t\t\t%end;\n\t\t\t/*\n\t\t\t\tAssign the generated line to the macro variable so that it can be used in a data step.\n\t\t\t*/\n\t\t\tdata _null_;\n\t\t\t\tcall symputx('columnValues_line', strip(\"&Values_line\"));\n\t\t\trun;\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put %sysfunc(sysmsg());\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t%mend;\t\n\n\t%macro exec_job\n\t(\n\t\tjob_uri=,\n\t\trow=\n\t);\n\n\t\t%if %unquote(%str(%')&job_uri%str(%')) ne '' %then %do;\n\n\t\t\t/*\n\t\t\t\tIn case the user asked for a delayed execution...\n\t\t\t*/\t\t\n\t\t\t%if &_delayed eq 1 %then %do;\n\t\t\t\t%put NOTE: Delayed executing, waiting for &_delayedseconds seconds.;\n\t\t\t\tdata _null_;\n\t\t\t\t\tsleeping = sleep(&_delayedseconds, 1);\n\t\t\t\trun;\n\t\t\t%end;\n\n\t\t\t/*\n\t\t\t\tCreate the JSON request file.\n\t\t\t*/\n\t\t\t%let process_name = Flow instance for parameter table row &row;\n\t\t\tfilename request temp;\n\t\t\t\n\t\t\t/*\n\t\t\t\tCreate the JSON request.\n\t\t\t\t\n\t\t\t\tThe file reference 'request' is used to create the resulting JSON file.\n\t\t\t*/\n\t\t\t%createJSONrequest(\n\t\t\t\trow=&row\n\t\t\t);\n\n\t\t\t/*\n\t\t\t\tSetup and execute the HTTP request.\n\t\t\t*/\n\t\t\tfilename response temp;\n\t\t\tproc http\n\t\t\t\turl = \"&viyahost./jobExecution/jobs?submitter=workflow\"\n\t\t\t\tin = request\n\t\t\t\tout= response\n\t\t\t\tmethod='post'\n\t\t\t\t\toauth_bearer = sas_services;\n\t\t\t\theaders\n\t\t\t\t\t'Content-Type'='application/vnd.sas.job.execution.job.request+json'\n\t\t\t\t\t'Accept'='application/vnd.sas.job.execution.job+json';\n\t\t\trun;\n\n\t\t\t%if %sysfunc(fexist(response)) %then %do;\n\n\t\t\t\t%let columnValues_line=;\n\t\t\t\t%addColumnValues(\n\t\t\t\t\tds=&_input_parameters,\n\t\t\t\t\trow=&row\n\t\t\t\t);\n\n\t\t\t\t/*\n\t\t\t\t\tAdd the state, should be 'running', of the current job to the execute_status table.\n\t\t\t\t\n\t\t\t\t\tNote that the column specification can differ. This will cause warnings during the PROC APPEND step.\n\t\t\t\t\tThat is why the resulting table firstly needs to be created based on the internally defined status table.\n\t\t\t\t*/\n\t\t\t\tlibname resp json fileref=response;\n\t\t\t\tdata work.root(drop=creationTimeStamp);\n\t\t\t\t\tattrib job_name length=$128.;\n\t\t\t\t\tattrib end_dttm length=8 format=datetime22.3;\t\n\t\t\t\t\tattrib start_dttm length=8 format=datetime22.3;\n\t\t\t\t\tset \n\t\t\t\t\t\t&_output(obs=0)\n\t\t\t\t\t\tresp.root(keep=id state creationTimeStamp);\n\n\t\t\t\t\tstart_dttm = input(creationTimeStamp, E8601DZ.);\n\t\t\t\t\tjob_name = \"&process_name\";\n\t\t\t\t\t/*\n\t\t\t\t\t\tAdd the current input parameters to the output/status table.\n\t\t\t\t\t*/\n\t\t\t\t\t&columnValues_line;\n\t\t\t\trun;\n\t\t\t\tproc append data=work.root base=&_output force; run;\n\t\t\t\tlibname resp;\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t%put ERROR: The response file does not exist. Aborting process.;\n\t\t\t\t%abort exit;\n\t\t\t%end;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: No URI provided. Aborting process.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%mend;\n\n\t%macro update_status\n\t(\n\t\tId=\n\t);\n\t\t/*\n\t\t\tThis process only makes sense when the execute_status table exists.\n\t\t*/\n\t\t%if %sysfunc(exist(&_output, data)) %then %do;\n\t\t\t/*\n\t\t\t\tSetup and execute the HTTP request.\n\t\t\t*/\n\t\t\tfilename response temp;\n\t\t\tproc http\n\t\t\t\turl=\"&viyahost./jobExecution/jobs/&Id\"\n\t\t\t\tout=response\n\t\t\t\tmethod=\"get\"\n\t\t\t\t\toauth_bearer = sas_services;\n\t\t\t\theaders\n\t\t\t\t\t'Accept'='application/json';\n\t\t\trun;\n\n\t\t\t%if %sysfunc(fexist(response)) %then %do;\n\t\t\t\tlibname status json fileref=response;\n\n\t\t\t\t/*\n\t\t\t\t\tUpdate the output table with the values from the REST API.\n\t\t\t\t\tNote that the root table will always contain one row.\n\t\t\t\t*/\n\t\t\t\tproc sql noprint;\n\t\t\t\t\tupdate \n\t\t\t\t\t\t&_output\n\t\t\t\t\tset \t\n\t\t\t\t\t\tstate = \n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tselect \n\t\t\t\t\t\t\t\t\tkstrip(state) \n\t\t\t\t\t\t\t\tfrom \n\t\t\t\t\t\t\t\t\tstatus.root\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tend_dttm = \n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tselect \n\t\t\t\t\t\t\t\t\tinput(modifiedTimeStamp, E8601DZ.)\n\t\t\t\t\t\t\t\tfrom\n\t\t\t\t\t\t\t\t\tstatus.root\n\t\t\t\t\t\t\t)\n\t\t\t\t\twhere\n\t\t\t\t\t\tid = \"&id\";\n\t\t\t\tquit;\n\t\t\t\tlibname status clear;\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t/*\n\t\t\t\t\tNo abort, might be a hick-up...\n\t\t\t\t*/\n\t\t\t\t%put ERROR: Unable to update the status table. No response file encountered.;\n\t\t\t%end;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: The status table, &_output, does not exist.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%mend;\n\n\t/*\n\t\tThe following macro is responsible for:\n\t\t- Maintaining the job waiting queue.\n\t\t- Executing the jobs\n\t\t- Updating the status table.\n\t*/\n\t%macro exec_jobs;\n\t\t%put NOTE: Initial number of jobs in queue: &nbr_parameter_rows.;\n\n\t\t/*\n\t\t\tInitialize macro variables.\n\t\t*/\n\t\t%let index = 1;\n\t\t%do %while (&index le &nbr_parameter_rows);\n\t\t\t/*\n\t\t\t\tCheck for the number running jobs, to be less or equal to\n\t\t\t\tthe number of concurrent jobs.\n\n\t\t\t\tNote that in case that the _output table is empty, the macro variable 'running_jobs' is never reset. \n\t\t\t\tThat is the reason why the macro variable is initialized to 0 each time the following code is run.\n\t\t\t*/\n\t\t\t%let running_jobs = 0;\n\t\t\tdata _null_;\n\t\t\t\tset \n\t\t\t\t\t&_output(\n\t\t\t\t\t\twhere=(kupcase(state)='RUNNING')\n\t\t\t\t\t) end=last;\n\t\t\t\tif last then call symput(\"running_jobs\", _n_);\n\t\t\trun;\n\t\t\t%put NOTE: Number of running jobs: &running_jobs;\n\t\t\t\n\t\t\t/*\n\t\t\t\tIf the number of running jobs is less then the amount of jobs allowed to run concurrenly,\n\t\t\t\tstart a job and register it in the status table.\n\t\t\t*/\n\t\t\t%if (&running_jobs lt &concurrent_jobs) %then %do;\n\t\t\t\t%put NOTE: Adding new job from the queue;\n\t\t\t\t%exec_job(\n\t\t\t\t\tjob_uri = &job_uri,\n\t\t\t\t\trow = &index\n\t\t\t\t);\n\t\t\t\t/*\n\t\t\t\t\tincrement the index parameter, ready to start the next job. \n\t\t\t\t*/\n\t\t\t\t%let index = %eval(&index + 1);\t\n\t\t\t%end;\n\n\t\t\t/*\n\t\t\t\tOnly update the status of jobs with state 'running'.\n\t\t\t*/\n\t\t\tdata _null_;\n\t\t\t\tset\n\t\t\t\t\t&_output(where=(kupcase(state)='RUNNING'));\n\n\t\t\t\tcall execute(\n\t\t\t\t\tcats(\n\t\t\t\t\t\t'%update_status(Id= %STR(',\n\t\t\t\t\t\tkSTRIP(id),\n\t\t\t\t\t\t'))'\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\trun;\n\t\t\t/*\n\t\t\t\tWait 1/2 second for the next iteration.\n\n\t\t\t\tThis will keep the log file size down.\n\t\t\t*/\n\t\t\tdata _null_;\n\t\t\t\tslept = sleep(.50, 1);\n\t\t\trun;\n\t\t%end;\n\t%mend;\n\t%exec_jobs;\t\n%end;\n\n/*\n\tThe folllwing section is there to wait for the processes, just started, to be finished before continuing\n\twith the next (custom) step.\n*/\n%if &wait_for_processes %then %do;\n\n\t%macro check_for_completion;\n\t\t/*\n\t\t\tUpdate for all processes the status and determain if all processes have finished.\n\t\t*/\n\t\t%if %sysfunc(exist(&_output, data)) %then %do;\n\t\t\t%let still_running = -1;\n\t\t\t%let wait_cycles = 0;\n\n\t\t\t%do %while (&still_running ne 0);\n\t\t\t\t/*\n\t\t\t\t\tUpdate the status for all running jobs.\n\t\t\t\t*/\n\t\t\t\tdata _null_;\n\t\t\t\t\tset\n\t\t\t\t\t\t&_output\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\twhere=(kupcase(state) = 'RUNNING')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tcall execute\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tcats\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t'%update_status(Id= %STR(',\n\t\t\t\t\t\t\t\tkSTRIP(id),\n\t\t\t\t\t\t\t\t'))'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\trun;\n\t\t\n\t\t\t\t/*\n\t\t\t\t\tCount the number of jobs that are running.\n\t\t\t\t*/\n\t\t\t\tproc sql noprint;\n\t\t\t\t\tselect \n\t\t\t\t\t\tcount(*) into :still_running \n\t\t\t\t\tfrom \n\t\t\t\t\t\t&_output \n\t\t\t\t\twhere \n\t\t\t\t\t\tkupcase(state) = 'RUNNING';\n\t\t\t\tquit;\n\t\t\t\t%put NOTE: Number of jobs that are running: &still_running;\n\t\t\n\t\t\t\t/*\n\t\t\t\t\tSleep for one second before checking for completion again.\n\t\t\t\t*/\n\t\t\t\tdata _null_;\n\t\t\t\t\tslept = sleep(1, 1);\n\t\t\t\trun;\n\t\t\t\t%let wait_cycles = %eval(&wait_cycles + 1);\n\t\t\t%end;\n\t\t\t%put NOTE: Total number of wait cycles of 1 second: &wait_cycles;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: The table status table, &_output, does not exist.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%mend;\n\t%check_for_completion;\n\n\t/*\n\t\tAborting in case of one or more processes failed only makes sense \n\t\tif the custom step is set to wait for all processes to finish.\n\t*/\n\t%macro abort_on_failure;\n\t\t%let exception = 0;\n\t\t%if &abort_on_exception eq 1 %then %do;\n\t\t\tproc sql noprint;\n\t\t\t\tselect \n\t\t\t\t\tcount(*) into :exception trimmed\n\t\t\t\tfrom \n\t\t\t\t\t&_output \n\t\t\t\twhere \n\t\t\t\t\tkupcase(state) ne 'COMPLETED';\n\t\t\tquit;\n\t\t\t\t\n\t\t\t%if &exception ne 0 %then %do;\n\t\t\t\t%put ERROR: &exception exception(s) encountered. Aborting process.;\n\t\t\t\t%abort exit;\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t%put NOTE: No exceptions encountered. Continuing with the rest of the flow.;\n\t\t\t%end;\n\t\t%end;\n\t%mend;\n\t%abort_on_failure;\n%end;\n\n/*\n\tRemove all macro variables from memory.\n*/\n%symdel nbr_job_rows /NOWARN;\n%symdel nbr_parameter_rows /NOWARN;\n%symdel nbr_rows /NOWARN;\n%symdel job_uri /NOWARN;\n%symdel columns_line /NOWARN;\n/*\n\tRemove all macros from memory.\n*/\n%SYSMACDELETE get_job_uri / NOWARN;\n%SYSMACDELETE createJsonRequest / NOWARN;\n%SYSMACDELETE addColumns / NOWARN;\n%SYSMACDELETE addColumnValues / NOWARN;\n%SYSMACDELETE exec_job / NOWARN;\n%SYSMACDELETE update_status / NOWARN;\n%SYSMACDELETE exec_jobs / NOWARN;\n%SYSMACDELETE check_for_completion / NOWARN;\n%SYSMACDELETE abort_on_failure / NOWARN;"}} \ No newline at end of file +{"creationTimeStamp":"2024-06-14T18:32:21.570114Z","createdBy":"Ethan.Kavanaugh@sas.com","modifiedTimeStamp":"2025-09-28T15:54:12.220647Z","modifiedBy":"Remco.Gooijer@sas.com","name":"Loop Deployed Object.step","displayName":"Loop Deployed Object.step","localDisplayName":"Loop Deployed Object.step","links":[{"method":"GET","rel":"self","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.data.flow.step"},{"method":"GET","rel":"alternate","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.data.flow.step.summary"},{"method":"GET","rel":"up","href":"/dataFlows/steps","uri":"/dataFlows/steps","type":"application/vnd.sas.collection","itemType":"application/vnd.sas.data.flow.step.summary"},{"method":"PUT","rel":"update","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.data.flow.step","responseType":"application/vnd.sas.data.flow.step"},{"method":"DELETE","rel":"delete","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a"},{"method":"POST","rel":"copy","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a/copy","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a/copy","responseType":"application/vnd.sas.data.flow.step"},{"method":"GET","rel":"transferExport","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","responseType":"application/vnd.sas.transfer.object"},{"method":"PUT","rel":"transferImportUpdate","href":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","uri":"/dataFlows/steps/cceba973-bfed-4e95-ba94-29c0f467a96a","type":"application/vnd.sas.transfer.object","responseType":"application/vnd.sas.summary"}],"metadataVersion":1,"version":2,"type":"code","flowMetadata":{"inputPorts":[{"name":"_input_parameters","displayName":"_input_parameters","localDisplayName":"_input_parameters","minEntries":1,"maxEntries":1,"defaultEntries":0,"type":"table"}],"outputPorts":[{"name":"_output","displayName":"_output","localDisplayName":"_output","minEntries":1,"maxEntries":1,"defaultEntries":0,"type":"table"}]},"ui":"{\n\t\"showPageContentOnly\": true,\n\t\"pages\": [\n\t\t{\n\t\t\t\"id\": \"page1\",\n\t\t\t\"type\": \"page\",\n\t\t\t\"label\": \"Deployed Object Properties\",\n\t\t\t\"children\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_input_parameters\",\n\t\t\t\t\t\"type\": \"inputtable\",\n\t\t\t\t\t\"label\": \"Select the source table:\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"placeholder\": \"\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_output\",\n\t\t\t\t\t\"type\": \"outputtable\",\n\t\t\t\t\t\"label\": \"Output table label 1:\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"placeholder\": \"\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_jobname\",\n\t\t\t\t\t\"type\": \"textfield\",\n\t\t\t\t\t\"label\": \"Specify the deployed object name: (Case sensitive!)\",\n\t\t\t\t\t\"placeholder\": \"\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"id\": \"page3\",\n\t\t\t\"type\": \"page\",\n\t\t\t\"label\": \"Scheduling Properties\",\n\t\t\t\"children\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"concurrent_jobs\",\n\t\t\t\t\t\"type\": \"numstepper\",\n\t\t\t\t\t\"label\": \"Number of concurrent processes:\",\n\t\t\t\t\t\"required\": true,\n\t\t\t\t\t\"integer\": true,\n\t\t\t\t\t\"min\": 1,\n\t\t\t\t\t\"max\": 10,\n\t\t\t\t\t\"stepsize\": 1\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"wait_for_processes\",\n\t\t\t\t\t\"type\": \"checkbox\",\n\t\t\t\t\t\"label\": \"Wait for processes to finish\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"abort_on_exception\",\n\t\t\t\t\t\"type\": \"checkbox\",\n\t\t\t\t\t\"label\": \"Abort on exception\",\n\t\t\t\t\t\"visible\": \"$wait_for_processes\",\n\t\t\t\t\t\"enabled\": \"$wait_for_processes\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_delayed\",\n\t\t\t\t\t\"type\": \"checkbox\",\n\t\t\t\t\t\"label\": \"Delayed execution\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"_delayedseconds\",\n\t\t\t\t\t\"type\": \"numstepper\",\n\t\t\t\t\t\"label\": \"Delayed seconds:\",\n\t\t\t\t\t\"required\": false,\n\t\t\t\t\t\"integer\": true,\n\t\t\t\t\t\"min\": 1,\n\t\t\t\t\t\"max\": 5,\n\t\t\t\t\t\"stepsize\": 1,\n\t\t\t\t\t\"enabled\": \"$_delayed\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"id\": \"page2\",\n\t\t\t\"type\": \"page\",\n\t\t\t\"label\": \"About\",\n\t\t\t\"children\": [\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"text2\",\n\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\"text\": \"Loop Deployed Object custom step\\n=========================\\n\\nThis custom step executes, in parallel, one deployed flow or deployed SAS program for a given set of parameters. \\nBoth can be stored in SAS Content and/or on a file system.\\n\\nFor that to work it needs\\n* An input dataset where the column names are treated as macro variables and the rows as macro variable values. You can have as much columns as you need.\\n* The name of the deployed flow or deployed SAS program. \\n\\nMake sure that the column(s) in the input table have the same name(s) as the macro variable(s) used by the deployed flow or deployed SAS program.\",\n\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"id\": \"section1\",\n\t\t\t\t\t\"type\": \"section\",\n\t\t\t\t\t\"label\": \"Changelog\",\n\t\t\t\t\t\"open\": false,\n\t\t\t\t\t\"visible\": \"\",\n\t\t\t\t\t\"children\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"id\": \"text1\",\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": \"* Version 1.96 (28SEP2025)\\n- Removed small issue.\\n\\n* Version 1.95 (17JUN2025)\\n- Hard exit on crucial missing components.\\n\\n* Version 1.9 (03OCT2024)\\n - Removed a bug where the custom step would never finish.\\n\\n* Version 1,8 (16MAY2024)\\n - Added the 'Abort on exception' option.\\n\\n* Version 1.7 (18MAR2024)\\n - Name change from 'Loop' to 'Loop Deployed Object'\\n\\n* Version 1.0 - version 1.6 \\n - Were released internally.\",\n\t\t\t\t\t\t\t\"visible\": \"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t],\n\t\"syntaxversion\": \"1.3.0\",\n\t\"values\": {\n\t\t\"_input_parameters\": {\n\t\t\t\"library\": \"\",\n\t\t\t\"table\": \"\"\n\t\t},\n\t\t\"_output\": {\n\t\t\t\"library\": \"\",\n\t\t\t\"table\": \"\"\n\t\t},\n\t\t\"_jobname\": \"\",\n\t\t\"concurrent_jobs\": 4,\n\t\t\"wait_for_processes\": true,\n\t\t\"abort_on_exception\": false,\n\t\t\"_delayed\": false,\n\t\t\"_delayedseconds\": 1\n\t}\n}","localUi":"{\"pages\":[{\"children\":[{\"id\":\"_input_parameters\",\"label\":\"Select the source table:\",\"placeholder\":\"\",\"required\":true,\"type\":\"inputtable\",\"visible\":\"\"},{\"id\":\"_output\",\"label\":\"Output table label 1:\",\"placeholder\":\"\",\"required\":true,\"type\":\"outputtable\",\"visible\":\"\"},{\"id\":\"_jobname\",\"label\":\"Specify the deployed object name: (Case sensitive!)\",\"placeholder\":\"\",\"required\":true,\"type\":\"textfield\",\"visible\":\"\"}],\"id\":\"page1\",\"label\":\"Deployed Object Properties\",\"type\":\"page\"},{\"children\":[{\"id\":\"concurrent_jobs\",\"integer\":true,\"label\":\"Number of concurrent processes:\",\"max\":10,\"min\":1,\"required\":true,\"stepsize\":1,\"type\":\"numstepper\"},{\"id\":\"wait_for_processes\",\"label\":\"Wait for processes to finish\",\"type\":\"checkbox\",\"visible\":\"\"},{\"enabled\":\"$wait_for_processes\",\"id\":\"abort_on_exception\",\"label\":\"Abort on exception\",\"type\":\"checkbox\",\"visible\":\"$wait_for_processes\"},{\"id\":\"_delayed\",\"label\":\"Delayed execution\",\"type\":\"checkbox\",\"visible\":\"\"},{\"enabled\":\"$_delayed\",\"id\":\"_delayedseconds\",\"integer\":true,\"label\":\"Delayed seconds:\",\"max\":5,\"min\":1,\"required\":false,\"stepsize\":1,\"type\":\"numstepper\",\"visible\":\"\"}],\"id\":\"page3\",\"label\":\"Scheduling Properties\",\"type\":\"page\"},{\"children\":[{\"id\":\"text2\",\"text\":\"Loop Deployed Object custom step\\n=========================\\n\\nThis custom step executes, in parallel, one deployed flow or deployed SAS program for a given set of parameters. \\nBoth can be stored in SAS Content and/or on a file system.\\n\\nFor that to work it needs\\n* An input dataset where the column names are treated as macro variables and the rows as macro variable values. You can have as much columns as you need.\\n* The name of the deployed flow or deployed SAS program. \\n\\nMake sure that the column(s) in the input table have the same name(s) as the macro variable(s) used by the deployed flow or deployed SAS program.\",\"type\":\"text\",\"visible\":\"\"},{\"children\":[{\"id\":\"text1\",\"text\":\"* Version 1.96 (28SEP2025)\\n- Removed small issue.\\n\\n* Version 1.95 (17JUN2025)\\n- Hard exit on crucial missing components.\\n\\n* Version 1.9 (03OCT2024)\\n - Removed a bug where the custom step would never finish.\\n\\n* Version 1,8 (16MAY2024)\\n - Added the 'Abort on exception' option.\\n\\n* Version 1.7 (18MAR2024)\\n - Name change from 'Loop' to 'Loop Deployed Object'\\n\\n* Version 1.0 - version 1.6 \\n - Were released internally.\",\"type\":\"text\",\"visible\":\"\"}],\"id\":\"section1\",\"label\":\"Changelog\",\"open\":false,\"type\":\"section\",\"visible\":\"\"}],\"id\":\"page2\",\"label\":\"About\",\"type\":\"page\"}],\"showPageContentOnly\":true,\"syntaxversion\":\"1.3.0\",\"values\":{\"_delayed\":false,\"_delayedseconds\":1,\"_input_parameters\":{\"library\":\"\",\"table\":\"\"},\"_jobname\":\"\",\"_output\":{\"library\":\"\",\"table\":\"\"},\"abort_on_exception\":false,\"concurrent_jobs\":4,\"wait_for_processes\":true}}","templates":{"SAS":"/*\n\tInitialize the variables.\n*/\n%let nbr_job_rows = 0;\n%let nbr_parameter_rows = 0;\n%let nbr_rows = 0;\n%let job_uri =;\n\n/*\n\tInput for the input table validation.\n\tCount the number of rows. This number needs to be bigger then 0.\n*/\ndata _NULL_;\n\tset \n\t\t&_input_parameters end=last;\n\tif last then call symputx(\"nbr_parameter_rows\", _n_);\nrun;\n\ndata _null_; \n\tcall symputx('viyaHost', kreverse(ksubstr(ksubstr(kreverse(\"&_BASEURL.\"), 2), kfind(ksubstr(kreverse(\"&_BASEURL.\"), 2), '/') + 1)));\nrun;\n\n/*\n\tThe following macro is responsible for retrieving the URI of the deployed flow.\n\n\tNote that the loop custom step is build around the assumption that the name of the job definition is unique and exists.\n\tIn case it is not, the loop custom step will abort its operation.\n*/\n%macro get_job_uri\n(\n\tjob_name=\t\n);\n\n\t%if %unquote(%str(%')&job_name%str(%')) ne '' %then %do;\n\t\t/*\n\t\t\tSetup and execute the http request.\n\t\t*/\n\t\tfilename joburi temp;\n\t\tproc http\n\t\t\turl = \"&viyahost./jobExecution/jobRequests\"\n\t\t\tout= joburi\n\t\t\tmethod='get'\n\t\t\t\toauth_bearer = sas_services\n\t\t\t\t%if &job_name ne %then %do;\n\t\t\t\t\tquery= ('filter' = \"eq('name', '&job_name')\");\n\t\t\t\t%end;\n\t\t\t\t%else %do;\n\t\t\t\t\t;\n\t\t\t\t%end;\n\t\t\theaders\n\t\t\t\t'Accept'= 'application/vnd.sas.collection+json';\n\t\trun;\t\n\n\t\t/*\n\t\t\tProcess the response file, if it exists.\n\t\t*/\n\t\t%if %sysfunc(fexist(joburi)) %then %do;\n\n\t\t\tlibname joburi json;\n\t\t\t/*\n\t\t\t\tCheck that the items table exists.\n\t\t\t*/\n\t\t\t%if %sysfunc(exist(joburi.items)) %then %do;\n\t\t\t\t/*\n\t\t\t\t\tSelect the jobs for which the URI exists.\n\n\t\t\t\t\tNote that for this to work, the columns 'name' and 'jobDefinitionUri' need\n\t\t\t\t\tto exist in the response file!\n\t\t\t\t*/\n\t\t\t\t%let ds = %sysfunc(open(joburi.items));\n\t\t\t\t%if &ds > 0 %then %do;\n\t\t\t\t\t%let dsName = %sysfunc(varnum(&ds, name));\n\t\t\t\t\t%let dsUri = %sysfunc(varnum(&ds, jobDefinitionUri));\n\t\t\t\t\t%let rc = %sysfunc(close(&ds));\n\n\t\t\t\t\t%if &dsName and &dsUri %then %do;\n\t\t\t\t\t\tdata job_uri;\n\t\t\t\t\t\tset joburi.items\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tkeep = \n\t\t\t\t\t\t\t\tname \n\t\t\t\t\t\t\t\tjobDefinitionUri \n\t\t\t\t\t\t\twhere = \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\tjobDefinitionUri ~= ''\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\trun;\n\t\t\t\t\t\tlibname joburi;\n\t\t\t\t\t%end;\n\t\t\t\t\t%else %do;\n\t\t\t\t\t\t%put ERROR: Importants columns do not exist in the response file. Aborting process.;\n\t\t\t\t\t\t%abort exit;\n\t\t\t\t\t%end;\n\t\t\t\t%end;\n\t\t\t\t%else %do;\n\t\t\t\t\t%put ERROR: Unable to open the 'items' array. Aborting process.;\n\t\t\t\t\t%abort exit;\n\t\t\t\t%end;\t\t\t\t\t\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t%put ERROR: The items table in the response file does not exist. Aborting process.;\n\t\t\t\t%abort exit;\n\t\t\t%end;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: The response file does not exist. Aborting process.;\n\t\t\t%abort exit;\n\t\t%end;\n\n\t\t/*\n\t\t\tAssign the job uri to the 'job_uri' macro variable.\n\t\t*/\n\t\t%if %sysfunc(exist(work.job_uri)) %then %do;\n\t\t\t/*\n\t\t\t\tCount the number of jobs returned.\n\n\t\t\t\tOnly continue in case the number equals to 1.\n\t\t\t*/\n\t\t\tdata _null_;\n\t\t\t\tif 0 then set work.job_uri nobs=rows;\n\t\t\t\tcall symputx('nbr_job_rows', rows);\n\t\t\trun;\n\n\t\t\t/*\n\t\t\t\tAbort in case the number of returned values isn't exactly one.\n\t\t\t*/\n\t\t\t%if &nbr_job_rows NE 1 %then %do;\n\t\t\t\t%put ERROR: &nbr_job_rows jobs encountered with name &job_name. Aborting process.;\n\t\t\t\t%abort exit;\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\tdata _null_;\n\t\t\t\t\tset\n\t\t\t\t\t\twork.job_uri;\n\t\t\t\t\tcall symputx(\"job_uri\", kstrip(jobDefinitionUri));\n\t\t\t\trun;\t\t\n\t\t\t%end;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: job_uri table does not exist. Aborting process.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%end;\n\t%else %do;\n\t\t%put ERROR: No deployed object name provided. Aborting process.;\n\t\t%abort exit;\n\t%end;\n%mend;\n%get_job_uri(\n\tjob_name = &_jobname\n);\n\n/*\n\tOnly start the process in case the parameter table contains more than 0 rows.\n*/\n%if &nbr_parameter_rows eq 0 %then %do;\n\t%put ERROR: Not enough parameters (&nbr_parameter_rows) to run the loop step. Aborting process.;\n\t%abort exit;\n%end;\n%else %do;\n\t/*\n\t\tThe number of rows in the input table check out. Continue to run the process.\n\t*/\n\tdata _null_; \n\t\tcall symputx('viyaHost', kreverse(ksubstr(ksubstr(kreverse(\"&_BASEURL.\"), 2), kfind(ksubstr(kreverse(\"&_BASEURL.\"), 2), '/') + 1)));\n\trun;\n\n\t/*\n\t\tThe following macro is responsible for creating the JSON request for the job\n\t\tand the given set parameters/macro variables.\n\t*/\n\t%macro createJsonRequest(\n\t\trow=\t\n\t);\n\t\t/*\n\t\t\tthe value assigned to the macro variable 'process_name' is used to make the process visible in environment manager.\n\t\t*/\n\t\t%let process_name = Running '&_jobname' for input table row &row;\n\t\tdata _null_;\n\t\t\tlength \n\t\t\t\tparameter $32767\n\t\t\t\tvalue $32767;\n\n\t\t\t/*\n\t\t\t\tOpen the custom step input dataset.\n\t\t\t*/\n\t\t\tdsid = open(\"&_input_parameters\");\n\n\t\t\t/*\n\t\t\t\tNote that the request file reference is defined out-side of this macro!\n\t\t\t*/\t\n\t\t\tif (dsid > 0) then do;\n\t\t\t\tfile request;\n\t\t\t\tput '{';\n\t\t\t\tput '\"name\": ' \"\"\"&process_name\"\"\" ',';\n\t\t\t\tput '\"jobDefinitionUri\": ' \"\"\"&job_uri\"\"\" ',';\n\t\t\t\tput '\"arguments\": {';\n\t\t\t\n\t\t\t\t/*\n\t\t\t\t\tFetch the 'row'-th record.\n\t\t\t\t*/\n\t\t\t\trc = fetchobs(dsid, &row);\n\n\t\t\t\t/*\n\t\t\t\t\tRetrieve the number of columns.\n\t\t\t\t*/\n\t\t\t\tcolumns = attrn(dsid,'nvars');\n\t\t\t\t\n\t\t\t\t/*\n\t\t\t\t\tFor each column and value pair create an argument entry in the JSON file.\n\t\t\t\t*/\n\t\t\t\tdo index = 1 to columns;\n\t\t\t\t\t/*\n\t\t\t\t\t\tGet the column name and the column type.\n\t\t\t\t\t*/\n\t\t\t\t\tvname = kstrip(varname(dsid, index));\n\t\t\t\t\tvtype = vartype(dsid, index);\n\t\t\t\t\n\t\t\t\t\t/*\n\t\t\t\t\t\tDepending on data type, handle the value appropriately.\n\t\t\t\t\t*/\n\t\t\t\t\tif (vtype~='C') then do;\t\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tNumeric values.\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tvalue = put(getvarn(dsid, index), best32.);\n\t\t\t\t\t\tif index < columns then do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\",';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\n\t\t\t\t\t\telse do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\"';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\n\t\t\t\t\tend;\n\t\t\t\t\telse do;\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tCharacter values.\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tvalue = getvarc(dsid, index);\n\n\t\t\t\t\t\tif index < columns then do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\",';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\t\t\t\t\n\t\t\t\t\t\telse do;\n\t\t\t\t\t\t\tparameter = '\"' || kstrip(vname) || '\": \"' || kstrip(value) || '\"';\n\t\t\t\t\t\t\tput parameter;\n\t\t\t\t\t\tend;\n\t\t\t\t\tend;\n\t\t\t\tend;\n\t\t\t\tput '}';\n\t\t\t\tput '}';\n\t\t\tend;\n\t\t\telse do;\n\t\t\t\tput \"ERROR%QUOTE(:) Input table could not be opened.\";\n\t\t\tend;\n\t\t\tdsid = close(dsid);\n\t\trun;\n\t%mend;\n\n\t/*\n\t\tThe following macro is responsible for creating and assigning the input columns, and their properties, to the global macro variable 'column_line', to be \n\t\tused in the step that creates the output table.\n\t*/\n\t%let columns_line=;\n\t%macro addColumns(\n\t\tds=\n\t);\n\t\t/*\n\t\t\tTry to open the dataset.\n\t\t*/\n\t\t%let dsid = %sysfunc(open(&ds, i));\n\t\t%if (&dsid > 0) %then %do;\n\n\t\t\t/*\n\t\t\t\tRetrieve the number of columns.\n\t\t\t*/\n\t\t\t%let columns = %sysfunc(attrn(&dsid, nvars));\n\n\t\t\t/*\n\t\t\t\tFor each column:\n\t\t\t*/\n\t\t\t%do i = 1 %to &columns;\n\t\t\t\t/*\n\t\t\t\t\tRetrieve the name, type, length and format.\n\t\t\t\t*/\n\t\t\t\t%let vname = %sysfunc(varname(&dsid, &i));\n\t\t\t\t%let vtype = %sysfunc(vartype(&dsid, &i));\n\t\t\t\t%let vlength = %sysfunc(varlen(&dsid, &i));\n\t\t\t\t%let vformat = %sysfunc(varfmt(&dsid, &i));\n\t\n\t\t\t\t/*\n\t\t\t\t\tBased on the column type and the existance of a format, create the column definition.\n\t\t\t\t*/\n\t\t\t\t%if &vtype EQ C %then %do;\n\t\t\t\t\t%if &vformat eq %then %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=$&vlength;);\n\t\t\t\t\t%end;\n\t\t\t\t\t%else %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=$&vlength format=&vformat;);\n\t\t\t\t\t%end;\n\t\t\t\t%end;\n\t\t\t\t%else %do;\n\t\t\t\t\t%if &vformat eq %then %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=&vlength;);\n\t\t\t\t\t%end;\n\t\t\t\t\t%else %do;\n\t\t\t\t\t\t%let columns_line = %str(&columns_line attrib &vname length=&vlength format=&vformat;);\n\t\t\t\t\t%end;\n\t\t\t\t%end;\t\n\t\t\t%end;\t\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t\t%else %do;\n\t\t\t/*\n\t\t\t\tThe table could not be opened. Specify the error message.\n\t\t\t*/\n\t\t\t%put %sysfunc(sysmsg());\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t%mend;\n\t%addColumns(\n\t\tds=&_input_parameters\n\t);\n\n\t/*\n\t\tCreate the status tables that will hold all execution statuses for all executed job requests.\n\t\tBased on this table you can create a polling mechanism to validate that each process has finished successfully.\n\t*/\n\tdata &_output;\n\t\tattrib id length=$36.;\n\t\tattrib job_name length=$128.;\n\t\t/*\n\t\t\tAdd input parameters/variables to the output table.\n\t\t\t\n\t\t\tAssigning the value to the macro variable, 'column_line', is performed by the 'addColumns' macro.\n\t\t*/\n\t\t&columns_line;\n\t\tattrib state length=$32.;\n\t\tattrib start_dttm length=8 format=datetime22.3;\n\t\tattrib end_dttm length=8 format=datetime22.3;\n\t\tstop;\n\trun;\n\n\t%macro addColumnValues(\n\t\tds=,\n\t\trow=\n\t);\n\n\t\t%let values_line=;\n\t\t%let dsid = %sysfunc(open(&ds, i));\n\t\t%if (&dsid > 0) %then %do;\n\n\t\t\t%let columns = %sysfunc(attrn(&dsid, nvars));\n\t\t\t%let rc = %sysfunc(fetchobs(&dsid, &row));\n\n\t\t\t%do i = 1 %to &columns;\n\t\t\t\t%let vname = %sysfunc(varname(&dsid, &i));\n\t\t\t\t%let vtype = %sysfunc(vartype(&dsid, &i));\n\n\t\t\t\t%if &vtype EQ C %then %do;\n\t\t\t\t\t%let value = %BQUOTE(%sysfunc(getvarc(&dsid, &i)));\n\t\t\t\t\t%let values_line = %str(&values_line &vname=%str(%\")&value%str(%\"););\n\t\t\t\t%end;\n\t\t\t\t%else %do;\n\t\t\t\t\t%let value = %sysfunc(getvarn(&dsid, &i));\n\t\t\t\t\t%let values_line = %str(&values_line &vname=&value;);\n\t\t\t\t%end;\n\t\t\t%end;\n\t\t\t/*\n\t\t\t\tAssign the generated line to the macro variable so that it can be used in a data step.\n\t\t\t*/\n\t\t\tdata _null_;\n\t\t\t\tcall symputx('columnValues_line', strip(\"&Values_line\"));\n\t\t\trun;\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put %sysfunc(sysmsg());\n\t\t\t%let dsid = %sysfunc(close(&dsid));\n\t\t%end;\n\t%mend;\t\n\n\t%macro exec_job\n\t(\n\t\tjob_uri=,\n\t\trow=\n\t);\n\n\t\t%if %unquote(%str(%')&job_uri%str(%')) ne '' %then %do;\n\n\t\t\t/*\n\t\t\t\tIn case the user asked for a delayed execution...\n\t\t\t*/\t\t\n\t\t\t%if &_delayed eq 1 %then %do;\n\t\t\t\t%put NOTE: Delayed executing, waiting for &_delayedseconds seconds.;\n\t\t\t\tdata _null_;\n\t\t\t\t\tsleeping = sleep(&_delayedseconds, 1);\n\t\t\t\trun;\n\t\t\t%end;\n\n\t\t\t/*\n\t\t\t\tCreate the JSON request file.\n\t\t\t*/\n\t\t\t%let process_name = Flow instance for parameter table row &row;\n\t\t\tfilename request temp;\n\t\t\t\n\t\t\t/*\n\t\t\t\tCreate the JSON request.\n\t\t\t\t\n\t\t\t\tThe file reference 'request' is used to create the resulting JSON file.\n\t\t\t*/\n\t\t\t%createJSONrequest(\n\t\t\t\trow=&row\n\t\t\t);\n\n\t\t\t/*\n\t\t\t\tSetup and execute the HTTP request.\n\t\t\t*/\n\t\t\tfilename response temp;\n\t\t\tproc http\n\t\t\t\turl = \"&viyahost./jobExecution/jobs?submitter=workflow\"\n\t\t\t\tin = request\n\t\t\t\tout= response\n\t\t\t\tmethod='post'\n\t\t\t\t\toauth_bearer = sas_services;\n\t\t\t\theaders\n\t\t\t\t\t'Content-Type'='application/vnd.sas.job.execution.job.request+json'\n\t\t\t\t\t'Accept'='application/vnd.sas.job.execution.job+json';\n\t\t\trun;\n\n\t\t\t%if %sysfunc(fexist(response)) %then %do;\n\n\t\t\t\t%let columnValues_line=;\n\t\t\t\t%addColumnValues(\n\t\t\t\t\tds=&_input_parameters,\n\t\t\t\t\trow=&row\n\t\t\t\t);\n\n\t\t\t\t/*\n\t\t\t\t\tAdd the state, should be 'running', of the current job to the execute_status table.\n\t\t\t\t\n\t\t\t\t\tNote that the column specification can differ. This will cause warnings during the PROC APPEND step.\n\t\t\t\t\tThat is why the resulting table firstly needs to be created based on the internally defined status table.\n\t\t\t\t*/\n\t\t\t\tlibname resp json fileref=response;\n\t\t\t\tdata work.root(drop=creationTimeStamp);\n\t\t\t\t\tattrib job_name length=$128.;\n\t\t\t\t\tattrib end_dttm length=8 format=datetime22.3;\t\n\t\t\t\t\tattrib start_dttm length=8 format=datetime22.3;\n\t\t\t\t\tset \n\t\t\t\t\t\t&_output(obs=0)\n\t\t\t\t\t\tresp.root(keep=id state creationTimeStamp);\n\n\t\t\t\t\tstart_dttm = input(creationTimeStamp, E8601DZ.);\n\t\t\t\t\tjob_name = \"&process_name\";\n\t\t\t\t\t/*\n\t\t\t\t\t\tAdd the current input parameters to the output/status table.\n\t\t\t\t\t*/\n\t\t\t\t\t&columnValues_line;\n\t\t\t\trun;\n\t\t\t\tproc append data=work.root base=&_output force; run;\n\t\t\t\tlibname resp;\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t%put ERROR: The response file does not exist. Aborting process.;\n\t\t\t\t%abort exit;\n\t\t\t%end;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: No URI provided. Aborting process.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%mend;\n\n\t%macro update_status\n\t(\n\t\tId=\n\t);\n\t\t/*\n\t\t\tThis process only makes sense when the execute_status table exists.\n\t\t*/\n\t\t%if %sysfunc(exist(&_output, data)) %then %do;\n\t\t\t/*\n\t\t\t\tSetup and execute the HTTP request.\n\t\t\t*/\n\t\t\tfilename response temp;\n\t\t\tproc http\n\t\t\t\turl=\"&viyahost./jobExecution/jobs/&Id\"\n\t\t\t\tout=response\n\t\t\t\tmethod=\"get\"\n\t\t\t\t\toauth_bearer = sas_services;\n\t\t\t\theaders\n\t\t\t\t\t'Accept'='application/json';\n\t\t\trun;\n\n\t\t\t%if %sysfunc(fexist(response)) %then %do;\n\t\t\t\tlibname status json fileref=response;\n\n\t\t\t\t/*\n\t\t\t\t\tUpdate the output table with the values from the REST API.\n\t\t\t\t\tNote that the root table will always contain one row.\n\t\t\t\t*/\n\t\t\t\tproc sql noprint;\n\t\t\t\t\tupdate \n\t\t\t\t\t\t&_output\n\t\t\t\t\tset \t\n\t\t\t\t\t\tstate = \n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tselect \n\t\t\t\t\t\t\t\t\tkstrip(state) \n\t\t\t\t\t\t\t\tfrom \n\t\t\t\t\t\t\t\t\tstatus.root\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tend_dttm = \n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tselect \n\t\t\t\t\t\t\t\t\tinput(modifiedTimeStamp, E8601DZ.)\n\t\t\t\t\t\t\t\tfrom\n\t\t\t\t\t\t\t\t\tstatus.root\n\t\t\t\t\t\t\t)\n\t\t\t\t\twhere\n\t\t\t\t\t\tid = \"&id\";\n\t\t\t\tquit;\n\t\t\t\tlibname status clear;\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t/*\n\t\t\t\t\tNo abort, might be a hick-up...\n\t\t\t\t*/\n\t\t\t\t%put ERROR: Unable to update the status table. No response file encountered.;\n\t\t\t%end;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: The status table, &_output, does not exist.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%mend;\n\n\t/*\n\t\tThe following macro is responsible for:\n\t\t- Maintaining the job waiting queue.\n\t\t- Executing the jobs\n\t\t- Updating the status table.\n\t*/\n\t%macro exec_jobs;\n\t\t%put NOTE: Initial number of jobs in queue: &nbr_parameter_rows.;\n\n\t\t/*\n\t\t\tInitialize macro variables.\n\t\t*/\n\t\t%let index = 1;\n\t\t%do %while (&index le &nbr_parameter_rows);\n\t\t\t/*\n\t\t\t\tCheck for the number running jobs, to be less or equal to\n\t\t\t\tthe number of concurrent jobs.\n\n\t\t\t\tNote that in case that the _output table is empty, the macro variable 'running_jobs' is never reset. \n\t\t\t\tThat is the reason why the macro variable is initialized to 0 each time the following code is run.\n\t\t\t*/\n\t\t\t%let running_jobs = 0;\n\t\t\tdata _null_;\n\t\t\t\tset \n\t\t\t\t\t&_output(\n\t\t\t\t\t\twhere=(kupcase(state)='RUNNING')\n\t\t\t\t\t) end=last;\n\t\t\t\tif last then call symput(\"running_jobs\", _n_);\n\t\t\trun;\n\t\t\t%put NOTE: Number of running jobs: &running_jobs;\n\t\t\t\n\t\t\t/*\n\t\t\t\tIf the number of running jobs is less then the amount of jobs allowed to run concurrenly,\n\t\t\t\tstart a job and register it in the status table.\n\t\t\t*/\n\t\t\t%if (&running_jobs lt &concurrent_jobs) %then %do;\n\t\t\t\t%put NOTE: Adding new job from the queue;\n\t\t\t\t%exec_job(\n\t\t\t\t\tjob_uri = &job_uri,\n\t\t\t\t\trow = &index\n\t\t\t\t);\n\t\t\t\t/*\n\t\t\t\t\tincrement the index parameter, ready to start the next job. \n\t\t\t\t*/\n\t\t\t\t%let index = %eval(&index + 1);\t\n\t\t\t%end;\n\n\t\t\t/*\n\t\t\t\tOnly update the status of jobs with state 'running'.\n\t\t\t*/\n\t\t\tdata _null_;\n\t\t\t\tset\n\t\t\t\t\t&_output(where=(kupcase(state)='RUNNING'));\n\n\t\t\t\tcall execute(\n\t\t\t\t\tcats(\n\t\t\t\t\t\t'%update_status(Id= %STR(',\n\t\t\t\t\t\tkSTRIP(id),\n\t\t\t\t\t\t'))'\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\trun;\n\t\t\t/*\n\t\t\t\tWait 1/2 second for the next iteration.\n\n\t\t\t\tThis will keep the log file size down.\n\t\t\t*/\n\t\t\tdata _null_;\n\t\t\t\tslept = sleep(.50, 1);\n\t\t\trun;\n\t\t%end;\n\t%mend;\n\t%exec_jobs;\t\n%end;\n\n/*\n\tThe folllwing section is there to wait for the processes, just started, to be finished before continuing\n\twith the next (custom) step.\n*/\n%if &wait_for_processes %then %do;\n\n\t%macro check_for_completion;\n\t\t/*\n\t\t\tUpdate for all processes the status and determain if all processes have finished.\n\t\t*/\n\t\t%if %sysfunc(exist(&_output, data)) %then %do;\n\t\t\t%let still_running = -1;\n\t\t\t%let wait_cycles = 0;\n\n\t\t\t%do %while (&still_running ne 0);\n\t\t\t\t/*\n\t\t\t\t\tUpdate the status for all running jobs.\n\t\t\t\t*/\n\t\t\t\tdata _null_;\n\t\t\t\t\tset\n\t\t\t\t\t\t&_output\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\twhere=(kupcase(state) = 'RUNNING')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tcall execute\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tcats\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t'%update_status(Id= %STR(',\n\t\t\t\t\t\t\t\tkSTRIP(id),\n\t\t\t\t\t\t\t\t'))'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\trun;\n\t\t\n\t\t\t\t/*\n\t\t\t\t\tCount the number of jobs that are running.\n\t\t\t\t*/\n\t\t\t\tproc sql noprint;\n\t\t\t\t\tselect \n\t\t\t\t\t\tcount(*) into :still_running \n\t\t\t\t\tfrom \n\t\t\t\t\t\t&_output \n\t\t\t\t\twhere \n\t\t\t\t\t\tkupcase(state) = 'RUNNING';\n\t\t\t\tquit;\n\t\t\t\t%put NOTE: Number of jobs that are running: &still_running;\n\t\t\n\t\t\t\t/*\n\t\t\t\t\tSleep for one second before checking for completion again.\n\t\t\t\t*/\n\t\t\t\tdata _null_;\n\t\t\t\t\tslept = sleep(1, 1);\n\t\t\t\trun;\n\t\t\t\t%let wait_cycles = %eval(&wait_cycles + 1);\n\t\t\t%end;\n\t\t\t%put NOTE: Total number of wait cycles of 1 second: &wait_cycles;\n\t\t%end;\n\t\t%else %do;\n\t\t\t%put ERROR: The table status table, &_output, does not exist.;\n\t\t\t%abort exit;\n\t\t%end;\n\t%mend;\n\t%check_for_completion;\n\n\t/*\n\t\tAborting in case of one or more processes failed only makes sense \n\t\tif the custom step is set to wait for all processes to finish.\n\t*/\n\t%macro abort_on_failure;\n\t\t%let exception = 0;\n\t\t%if &abort_on_exception eq 1 %then %do;\n\t\t\tproc sql noprint;\n\t\t\t\tselect \n\t\t\t\t\tcount(*) into :exception trimmed\n\t\t\t\tfrom \n\t\t\t\t\t&_output \n\t\t\t\twhere \n\t\t\t\t\tkupcase(state) ne 'COMPLETED';\n\t\t\tquit;\n\t\t\t\t\n\t\t\t%if &exception ne 0 %then %do;\n\t\t\t\t%put ERROR: &exception exception(s) encountered. Aborting process.;\n\t\t\t\t%abort exit;\n\t\t\t%end;\n\t\t\t%else %do;\n\t\t\t\t%put NOTE: No exceptions encountered. Continuing with the rest of the flow.;\n\t\t\t%end;\n\t\t%end;\n\t%mend;\n\t%abort_on_failure;\n%end;\n\n/*\n\tRemove all macro variables from memory.\n*/\n%symdel nbr_job_rows /NOWARN;\n%symdel nbr_parameter_rows /NOWARN;\n%symdel nbr_rows /NOWARN;\n%symdel job_uri /NOWARN;\n%symdel columns_line /NOWARN;\n/*\n\tRemove all macros from memory.\n*/\n%SYSMACDELETE get_job_uri / NOWARN;\n%SYSMACDELETE createJsonRequest / NOWARN;\n%SYSMACDELETE addColumns / NOWARN;\n%SYSMACDELETE addColumnValues / NOWARN;\n%SYSMACDELETE exec_job / NOWARN;\n%SYSMACDELETE update_status / NOWARN;\n%SYSMACDELETE exec_jobs / NOWARN;\n%SYSMACDELETE check_for_completion / NOWARN;\n%SYSMACDELETE abort_on_failure / NOWARN;"},"eTag":"W/\"1759074852220647000\""} \ No newline at end of file diff --git a/Loop Deployed Object/README.md b/Loop Deployed Object/README.md index b1eb67ce..90c1e84a 100644 --- a/Loop Deployed Object/README.md +++ b/Loop Deployed Object/README.md @@ -102,6 +102,7 @@ Note that: ## Change Log +Version 1.96 (28SEP2025): Removed a small issue. Version 1.95 (17JUN2025): Hard exit in case crucial components are missing. diff --git a/Loop Deployed Object/img/UI_description.PNG b/Loop Deployed Object/img/UI_description.PNG index b53e692e055057adaab4f20dac7e5c618dd5b4f8..8eb28f04f982050da532b7736abd2c2259554409 100644 GIT binary patch literal 60313 zcmd3u1yq#(+vW$6mXhuc0V(P3mhNs)xOp6`6``?@~YZJ46GBr+mCA^-qDmX;Dz1^}Q*005{Pcv#3!R;dFp zApbx)DNBj~N`?t{Am6;S5PmNV0F*}~-5bF`zDKZ^(sBX-u&JK^LP;xA9s>Y-jM8Gl zs_y#xOF&%}jTWZ+k?)QQTk;C)guJs8PJy{9hWi<*EIBr$e8mW;_*^gA4Kma+@>Wrg z0o5)=>gBT^2hodFiZv}Cgu_K7sZ+&u4)rqa?LF75;rjcm()X8WIB^4sKI1L(XHmP91b@o?J)DsFQLP%p-8YD| zUlGLwHq(G3cdrZ$j4^AR!#cgoGuG;fEHU6Pe!rU6LIN}->_;TsPn;A`cgqEB{c*oE z6PjPl4Qi~70B^#%KCV(71@1(kFSQ;8e`tjTvzmjtSHdWkQirg@%Zg+JC{n4Dc;0W9 zOs#uelJDM8upxyUrApLsi!%+H z>+m9+HHdoRl!&B~bvgz<9X(+kk@rul`9S4l9#Yz_JOYaYfO1h9C+nNiZwhk{FW?hFmRW ztb=B;<^wv4E==Occ(-C6+ak;S4SXj@6()^v=A=-jZiIo4v82w4*H_(-B55+v;tp`> z0)JM3-=@oHW(r=2iDaQs^;{Xxla?uyK@g{FYuHdkw|i>?;?pszzMC7~p^)^lI0K&p ze$McO<@X7{p<-$PHlb!c0a>F$r}Gw@T;t|!MFlK2ppC1m=mASEmHNBCtwRCD zgBLz=BdafyVY{D8agrHxhjR~nCj*7L#w&Y=$2a%{R*}pPGj?Se{5VvJVjrrG+IGY9 zE%(_vCT|3`oHvYR6JNc_N1Wt1_PG9uWur}GJnHx5HJ-lhdQ_!e4c=Y~)V=LHT+jf`<_0tZ&LYv97EXtUTavNa>pgUbrrkrK2aHdYef80&b?$O^c^F#+M3(iL zk}|j?OmZQ>rzU7{y{5Y%9|41cI8&Ok{O7*B1{`Ev=yWM@eADlfc);lC6zCTTwZ-W_w z1#IZG4FhgaU8~r2SUlCaaHO%Ll0JB4|M|$CvY)ZuTvPGLr^5nXK14tHAz)Ag0GOZi z>u!OMBcWVwUzbo)1aXc@+}0L1>;qr4J-s8bBlN}z&N}K)yn~wOUp%Q@IEaA>6Qz17 zZgTmGBC6JHy)*i2(gPPsiFX2T&zPGL*I1zF4q4e#H;TLL6&aOriJn;LwGyk*W4C_` z6N>OY)Ac&BH%?@+-Fk8u2=~vuSmdXqA<_8d?Owx70yw@lk!dQwd+&9=z(L4m5C6`h zCo*(h&6LeNl|91`__lp|F_f|Tb>@`>#ic&*~?Oqi9x zH$T2x9F+=R?#gfASo(T)vUD$p!U{JG1A*OwO>B$d(3{XnL^vR+7Xao>Y2=1i@9!H4 zIM^oLC?xv3l>|~FoOFPG!!#zD+J6cj5}HQ9JNr@jJ3U>fS7987U> z-^kF3om7h8O8)!ZZ&*=s-vE3oTX{oP?zezO6FnD-v^k)w)>ePF<>ipO-j!(1s}`!8 z4i6iss}~$sD;!lY;wA@&{aiWVj`Q9h4)$3ugqYLjQbPQ^1Z-Q7307ppnE`EqU)YEy z2WU-wzC{k09mc%`2TkD$V#7+B}n@O0_vwOf`RWqrr!g6Z?*0%j#0$kj|r#NK-&=e;4(PRdFHuy`CjMWD;(tD z9$VgcY96}3L=NDpa3vncW)Q!Zb!}?WgIfbd%RSKz1h|K)%;s$gfnb$Fa%JHc)98=@`ZF6=QmxBXMFZ(vUw{wdgGwc#`If2%uuz23ho z1|g z3+mA@D1KbGWD5QKh;``#(_{f4u?cSJP0Bos`pPndep^r zL@J{7++@Y?Zg(33T>gUZ6g#QUuOGEo!92?qT+ymk#6I!(j3&~@`7N;@4zOKz2dPHy zB$9Z50k!7NCe@cPRbCT^zLy%L0_CuAvI<#u{^&VK)NJMpW$n=wUA9M}SJXjVvrMij zYJ?lCZ*X8+Y#W~nUqln@`G0xtmy9}HXMKgPYP>AC~*^it|4kHkj)Z!c{ZQyviV-MLHu{hc{4qX$DqOKoY z_MgVMnp{T=j<=4w3G5P|!ZTYxcOJ4KD^qK%-q3}+cXE#64w4Hfpo_rYNSv|UpnV~8 zp5|y`sfE6KwU`)E>_Py#X}p^E=Yf=HbdLcwcOSFYlaMZ^dSP^Hr{}<)35EB_bT3A4 z3JI|NW{R|PwIQ!+KOOGD2g&fL+mDb4DCy23L+BO&vy+E`=rGz@APIg%47C1)F(UVc zyK^I2Fq|{(uq{F6v1Gx8qQ*38sB(emd{4q!dPBp%Dk!hHCuD)AjLNT7r+D*FwH9kc zvOk-8BOkIk)nrCS?>HGn$U#b@Kg*=&-XRjEe&Xod+{oOw75RrM!gR%}bJ(&4}zW={~z z_tu``s{4wT7q=mubq|3L^2r<4NKRU>&tXzBA^UUE4`Eor8q%p8W^%h8Vz#fpI=eFmiPFFEdM%Pj;R*JD*PB?v2-J;Jptq0&rfxL22+}%uM?pEj@`KNNlNPJa+3H#7~%n23F?pzAeU)QX- zIUx%PkDa=IXaIyb`^Mq8|HY-uNrV-T@iyw66>d6F} zibFq)7tE2G?5p~a(>Hbmr7y6>ZE|SVqjDA((aCmmd^dakef$S9jy_xy>zIQXCS$b# z(cecOZeS4Y8h1O0?-QErFH&R4mTpZL@mnYMxV(x=j_(fZbdRbiQ%@*-V+Q8mxT$Oo zW4NMRA5X6SqUPOybZ5pct59ejU>&2DO;w?n&U0#Ro+t=j_bd?Xsax-kuN)yH3HdZz zQn#~Tt#EUypx<%HJI<@q_2UdbIV*5_H{N?p}dRanZgdZ{t0VPbYYa!DZUk zB00F^ysSM%S1a!7+Z>un#L~WT_XKu%fpAZ-JT~(Zy`C-?fiYNLX5)5gj+{eHae1)O zg7ugFI}OQ>8Xm2-pzzx>3r~#HHRWDnhlm-AQ*T+J7y*+AWbcNQ4?kq*%z9????bfC zbJTr+Eh`s1@bm^*3_@-(f zWHsX{!j>g2Gb!xc<~3$!f%m;s)5lmQ`@zXnV14sqgOi1l$Fv9QkmQF0`W{>Yb70<) zIhoy)AB(x!QInUS%{x@5lShHR>Bk=_&1WkS>`f;I4C@gTCwtc5TiGI`u2$%F7Zf}% zJM@%>ocKMJ;hNY(Xo}l!8G@dN&~Ec@zlwXMeWC4~aj}K8Qmi~#nm6_qwj8S+lDy3P z!Hsup%~eP?7EF!=y>Jvs2BtBEI3|}kL|jKTwdj(UlE(6UKpI}DsG$6@Ji8rO;&BQL z*hvHEQME{IpAt_to`JS?IbCV6~4SGt;C zb=02PowW1~m=crr9EAu{vyDO6h7l`!3V(OnO1! z!QIhuew1>DHIUvByvHI((&N>KNlb`J$wJ^(aiP6=SynY|#LP0MMLj3F2ETPDB;^io z3P3xjki)eLI)ELW)(k;X3kp^KkfFF!R+NKklM21fXY{NpHtt(0JRiqA_REi*_tAS} zJOqMGx`i`Ug<`$Yx#LI3UjWd;h8U1*pVXjHAn!{Cw>3`A59W-)l54OSe}IOoN1Zv% zgBl<5gkNkB0ZD8m+}e^%XA%WKn01<1Z`%G(P#fF5^`*M#kG=fYkAi?Ues@xR6q^-;v8Rwd+Pgi}GSUrV0eR*M;yc7@@X;{X z(?5MV7%Sbjvqa&gpZ;xIXiLwPMX5Kbkc194OFpZY9+(=^sAav|?U&RkL}yWugI!E} z&)G5gp<`;sZY|j!{F4k9sgiotP>pja5;kyX+#biF<4R!|ckJN~wd|gZe&6*v$v$wE zr5Xk-Kzu_reO8Wu9vuNfls--i-WmFEp6o_GZ5xot$@`Ogf+zA2={+rQeuQa&RL~rS zcu$6~moxg{?iz`?x+&~?dcR?bURd4`{)w%de9WuUu-MS|D-k^hMwXT&Z7YvFxAO`f zOKO}sNK2M_=r8t=Q!-GO@g9jgwT@D$ou5iM%ST5TcSi#IO;V!1fgiIMO}lnZvy;dP z+D_spV%6UbSlsoR!dF{_9Op*E)%WJ6HAYlx_)^#a+bna@SHNI0w_G%al>*U&Z~XTr ziD}%ozO^l`p0{nqxO!TACz`>fXNzL+WLgZb_7-pWXKV>~m7 zAvOT>UWyt>_i!3|AC1&1j|Bkcik!Qu5R9uU)VHy;IuN-I zz(B*#g^QZb>@DA!_nonrHA$Py6jw}-x@I})*X2LEn?C@8A6Zyl#+B+^vmG#BMR~1s z8hq)+4G;Tdy3Dj4eW^d0h8q${Q`eurbhsVeJX_lcU9J!)Rg+H{?JZgWoEufQ3)CZy zO48byts}>WhStAbIyl`VDZ2^>cJwv^Vb5G2TMYz!vAj75A1O${)ax|l25Tyv>7)23 z(0u1i>*XLgV0SE(Pte8|a9wJKU&`bB&VAe9us!{;)EJM7u8Bve!OOwW>AZFKUDEr(ws2J0%OKbS#Io`n2Cb=^8065V-P#X z%tGN`Fz;yLPHUF&1bcdkr(SS;B5EacsYWS`b5<<;fo8yshvlh){)+S-%(^c#X*ek9 z>$pzbMYvAFr1Yz|e4F3>#=++)!*XM!8uXn9t6UgBDmrl4?EW>nRGr4iyAsB=4^5{D zBYK*WLODNx=Ri-F_-LScLUeG{og52iMvNQyk+VfNN<;ootY}>tLkF(rXXH?&Eaf!u zuTCL>+R0LNrgnm6*F#4A3w+I)Foqn|fVVmVcl%OID~4Fft?im{ec5@=++`z#BVO?SgP)~koZP^qG& zLdlr{S}{6yMOyIsF@>j6K_V3D+W@0x!S|)$(Vm}eJ(B&r7GKX)@DWBN1!jDCD zNgSCV#r4ZN%@uC!fFNSlEI-s!@~e^KSrgk@MLlVZfCKc!#sdW(uP?=IyG;*puGgCsO_xylUcZGC*caWNM@sVPV$>9l z5j{Ig(Hw5AdvsAO@y1$9Y`9Sv_ZF%UjLtz_G++EK@ycMNJ`5skEWM*ydb<2- zdqSJ=nl(Kg@kF{)Br7$Al{HmZ_x6omOZ7@2AUBfAwrX2y)QQN8mUv zgm*$Zxz{C{l!3uaX5T)k(gv}NEYT{JiX0$IQX--J9P0G50+bMxQ^oQoi0FjQTX|s$ z<4qw1ad8<>b^4p!@syQ$y)*9R?J$LZzZCWZxa9Z6TwvQ6`BY+K&bzvQx&isb%cB~` zWjG!~=Z>R`zP`fJiEi`*^!#UV)`l|1sVY9L>cVJG?%L?H6!amn#gb_HNTK;=w@|o8 z#Y>OM(PopyJK6;?Y4A%-dG(7q1RgO7F|x)SXym;uNJB)*kZo*wckRJ9a={YZBL17W zv=GaEfhY>BG8K>^M_$wvB$8|*<`e_DZwe)wcwi9v*3x=B=cG_BM37>7a260V_ z8QkX8U2Q`bOl|0mzg2zY*p~Wo;s6?$v#>Ra@UG#E{c!nhZnXbJj%RkbgY>I%CnhS# z4+d{6zC}DMrEU_ws?hgKlTa-%COiOt5RaP6kI0g$Prrr+hKd;EliVb|kt+(SsEP)Z zx*!_Bi0Le*C7Nf+YHNP?Oq9W6p2zib=^*M^&Z&1t`^dWVREU9h_-{*V5m}=3)M3gu zz+gA_bq_G%O_^aD46=m+sP9o~C@j%wP1un^E>glPUiJ>d~_g@rPWcJN0NOL9X=BH*eviB>tkIObsX>2#a9cbN+=wG zdA}VNUE-WX*UW=`aZT+#=A@(u_!dSp)F6skNn#!aT;}(sPSde`3@@WzM_@*zi(O_? z?!oNyns)_}SjMd8ags5)AOgtN$YP+{0?6R;NP_Ksu%uk0k%5k$-v(MCmjljz@9*_^ z*|SYULfm(FBk6$F+bdpfhh4>{FCM}A5)gCR0CAG;fjA9g4gN?ZNET@%a^lm0Zskwo z0DSpCLv=zR)}Gf>peJ1RNE1eRS%+;%G(xXwSKfOrH)%p!NevAW>X5s1FvJgP99Ven zf!VJY3?!e3121~E(?peRSwYS>%5t&DtJecNQibKAS?-i`s9wic?rFOLzwecoQ-sec zi&FH^9dh2my5NGRlBY4@>$D_47_B9)>23F?&R|$kPV;Vw)AWPk^q6Y)qxMH&WKWjY zYvQ@LmT$Bp^iU7F=6n5;Xk08=*c^^L0BzM!Go_Mq2djs*(EM19W0yZ)XGXanCs^PC z@RZZSBxFy_2@w>;2buxY1?ZllXe1m-cQ$|@vCO@JCKpkx4FemmBe(~%9JoB+X_xSJ z>@&|`g0e@_#aq@t%}J(-rcZYGR1IJF1VWluf`9dUm1V>L)Eg*cP~4cArT;Ibrw8aV zvX`0B_jmzb#0L+}tJAU8mW7-hjHr@BMb6f`=#hRw48^+L*+MKi#J@@&2UVD!!-Y? zwPN7GXFTxJf8H2{emYV`@t@QARO&%<1Ck%rROLDB7p8c+aM;(7dSR}6d1DHug)<{M zb|3lfKQ+G)!X<8WLj`$n-~o=s7_ncukWo*uybJA`&+@=sT`!!HJ(egX@_kj_&3j_` zo|QbFCvRf8+YBtb$;f)ZaldsD#`PU^oxeo8;k;wS)$j^EN-b^~e}gLYjN#vU!Xdfm zp3n~9Zi)A5&qnhB^9keF<4Nwj46C*fW} zm*e$Y_A3fy%8Te{!K?!Sj`thH6v{VspO-L>)8}G|$FG!fea_C@l`o(K@BUuQd6;dc z?*y@&SvXb-j7|ozbwm*C>djABTzd*XY!9dJRe(^rz$yA>8CwxzAe+FEKevtU7_s(n zf1jbg*sI9P>#iEhDkG@@5nP$*(~J>a7~iKzWirz|fyTHj@q3@{s}=H97x?`pJlTrN z%FREfyOiPR#-F7Qv9Z~1NdLmYm+${M7)tox(f5BlRNv=gEwqj*(`pjw##oaKp$w|9 zPC2Z{g+FpML(rNbk77OM?UJ`YGS9xi*$d+mb#jx#1umvpR*Ob-g7hZdXckg*;!qQy zTQnK`pL4FrKuq*MXGe3q`*)oGxZ)H&RMO^f*aY%JMnB$QQr|xxO?pV(|NRxDLpu$32G{@R5yqME(Q-M|>TWCD&^+fZl(vcN^e z{{E0>_5vXg1+;-d66DI+YXUfKfZvT&cOw8Bx*|T@ezm~8ljwZRe48G&E7MI*XUzCH z_uv!vYPD_gmnAyf%4Y>v(vQ0~@=mXQg9PFmyEl(r^=FVq?k%Co5*}o+zA$$>GT_fi7=#zbkCqa6 z>wlu#B6IuOc|t91*@R++#Mu=)(KN)EK`?uA?TH*| z?_KRuwG0D2au2~lt`UzDe$Kq=D?(Oy>Ll06Y3Fr8jva@6p|}M)rv^;W5rPpbF(`W?0s+nLaSR^n%H(dF0jDkGccW%iR<;LZ?ID7szCLPUN9 z8!09`mz`Z?QK4Fhl{`MjnR8Mo3mT zX*FscLSR-W2oAf~+Si-&Jv z@J;z@5l=oMljm;N-GBC&uPuFXGEY>;{0iV&#g{9pUy1BX#DAwDJXk7}9sg}r%7N`- zR-KQ8D)C!PuHzCyWwos+UwTPRMpUcLZsWsu$hNk5)RywMv(!e$RKXm@cH=tRA=ToX ziKNvc{bZ?a^ldHD`Op@A6zm zTa6uUVrUCZ4KR1|wPC7R5g{vflAC=S4|YFTO|fs?v5QRfAT>IW zLZk;sT-rWZnoBWRzGU3CMt@drm`v=XjcjQz@S5#EkrW~X2g<>Pe|Sw$*uCbZs(D*8 zu&Y#em+%hc8jGL%7KVqf)#BaxN8}E2XW9>2t+F|^8ScZ|9Qu6E_6L$D6AI4I`Uw4N zFsnuSlrX>BoAIxUH{-u4AOL`&|GfgSdib^`i$gNti$dKw>IT=aPPkG>sVesXUg@}0 zl+KkCr$I0A#9muMz2~TkMqdz)TOAE0%N8N{j-BP%dstGJrW&F5NegN29-P(o+kZ(! zPVpl~Z^AFwky}4gWcDP=zkyAN&1&arf2AqM>o;9H#^mjmRWfd!FmKN&5ulLVBCh%Bs zHV);oIA@0-FPrYGK6Wx({iOJ^Hyd#D)_7;i3z5@vHUyb}u~h+^`ImmB3EUsyu^MV& zrlv(#vsT145@6lx!{b>J6g{KZM!dYyM=!bSo_mU+HHRh1@Qyy^H~RqISA5IPRjU+! zW&%4!*9-<+R=f)tT3rPKZu?;Gm5~9AWLr1X%9GjadCgovgt*N0;ad(#9b_g>GE%OT7GTakg5OjiT@>{cb{?Zk&b1esb2-lp- z@O18PDE~HRCh5HhK^xD|CVfjGU0{PD>p~{_U2BmO{lu}&)!ed}MRL$nLIJN4;Rvjj znl|~u)F6-$f_c33vj^U|FkG=&RDk4Lm^lejO(Z_9j9gMzKmdlfL(GA~`W>5? z?;Vr@lW3|=a?c!&nzbka&hY$a&2tE?c~Ia1ics_jf8VRzz~$3w`(e=B7X;KD$O$eo z?S1ONH4)u+pVqB0;1Xy`02^U9=TA++1>RZKR5*D}Yl%YL)!wT!nZ+N5+j_5CqlXV$ zIbQ;;E@U`dRB%ilaYVRY*`z zckE$TlK1#lQh_c!vOc}+bwxBY<@swW$&6O?^t|)Kj8Eca6bc1R`;bd12Z2t&0lPT5 z$~xdH_6jpE63p80NiP0)Ca$X*tn!dl@FsDM?D~!u*|wF*4h|>W+$MdLc2z||L~Jit zt@NgA%S!gz?fo+sy72b6ldCC8PyjPUS|{gx)iZx)Xg@Lpbir?H9kmO!K5^k3j(2l( z*_eR|FQ%sZe5~T-qo2u}18_|`iu>e7U+A<61ooKK;RDy7{3HFMuZ)&ek4(gLCGwAG zrUx8F%`1?jZi#+fVUcZEabCtp$Jhs+a!&d8u7n7mXzz4M$>nK>M2yR@RiT2$>MXeq z`=NZZt5E{N`iFVFDndHY2`NKKUlX$6fn_z;ZYp@HoTEjpb?dkg0TfaD(Ouu&AEo}v zMkJuycrw^9P{5g_1Gpc`dFnvd8s%1v&?~qjB>e*D#$*IHKhJAV46rAmet8xYCrROy z24jQsu)yg&my)!^OcJ~28(C^e3il5)0Ua&BE!+{+0k`GtDGe=Jw*^JJ8h(0}7`>CN zXUXe1W^w0%@tXJr9wbr)kI|#U-&FQSiBs@e;FIi@a0)Bxe3f$5h0dB~JcR04;B8h2 zSWC;?gy6W8d|6ZK<)2jw zyPjk?eP1MEIr!F`*B7MHUb+rM=5pBye2rq@t&xq#ia88_ z@pdXcDQAZJuJtdVB9jUT`b2?0`~sH)Wbet!N|I#ZrlSSeqOAQJge8i!FZ|8guU zjR`*J@lu1{K3Z&;KVFTn*T5e^OHP7y9)+#loNd+En2-G0Ug2Py9Z1gV!Aw5cujzSA z#BgNY#SOUri5^nwnnf9uE@r0D;kctmSWh|2A_aTXCDoN#BbMoYdE#?y2($!EXg$eB8u0t{J`wzFe~xX$t~pxSw3Eh4rb zAK)|(PZp`LBZ7`ngEP5^GcUtwrN2kL)vF6Sf9Vz9jr26!`Pdr=`Vip`I=PeHx4Ld2 z4~$q!P4PNs&&)Ik9!>ucQ$db{)Prg$WMBJ+O&*o7STuUwyUz-`>=iT_`dXPDm;}_k z9J0K(C}?x=-m-iUJ#%_3`C=}#-VqDvNO>7gfsTxA>awm$(fU+|j2vt`^f}VG>pbQB zRzpb-YqB{o6ZVI1^V!wOTXQh+#KapogTF!$HXiD@}M^(YGC848A~PP|4eTS#R> z_FR}b%qv^d-(Ohro26N7%@eiAHt9gn;GJihTDyM0?^;9x#P$u8tsM^_KH3&1{@G|a zU<1$-ttFkbD0r|=l3o{y4@623Ugsf2f9}bKN`Shirsx58KWT; zCx<#o{}%mHEg9f!BHKYnc<6==Yg4QT5486ub-7m4cc-shc`!L&pCo}4ze@tw`(G?O zm8cmOU0w|M2u^Zb>POp^uHc(7J!bRldHcGG*S(M5K5L=A5Mnb1@#;Ph`DU-I+Z4nG zdyXjz0_Gr#a#$<4`a?T2s@z#x+F7G~-$K&a@PtQq>seVV*lOfw5B#dWME?;DOV|;; zY$7^;8VEzAMcvKz6rB%hYuxnFtV;L$$S3SK9ZaDi3GHRe!BYw+Okc3@PI60qL$zf6 z#&;HxlBsakGM(fyAl@E z-a+BMJTt8uh|~HBTW5VkNRx3{irLUboar~~ngcY;KnH1uT>qfqUIAT@ATUfTMmhrj8aAF#uHyl$}atjsmBDMgDD@4b;Yp=)v#Za+WI|yT>F=mg|a? z-76Bqs*8~+XN!9Ip}V#ixG!9RF2!}d^AX2VuAn&Np?#V8T#tym3TrYC+Eu@n)}9>T z2IajV;An|QluSfQO9>xU2q|mxsGW9tI!h4zK;|xIB`p2phy}MOs;67eMUnbAE>;WM z+Jm34vfE@*(u41lCEmwr&6q6J-^LaF^|i8Dkg0+59znESPrGG{-dCkiPO37A$O z^VUZ2>Zu~#*0Gxp)q)Z$knwawqx^#|caDOZJ(DU}Puyp!G89r8kJl_2zHbVgAj`{j zo2bE7Axjz`=<_$IOOPq&`-yOqgpkaID>u9U*spJ*kV@cwIf!bu?#SV0E4^Uo3)b+= z?%jEdC)yhG>k~FT54OX@O+EFi$B9tf(6`HBqi*JoOk?2v*n9MFLvNl9om$}<#Ss#f z;I9XsC$uXoQ@fN!b~RFRePaI9h8=Av;K505l3bGmhI;2u7*k2!MnvR9f+gguHbWlk zJ58V!kJ%^pG^r?b2fXZ-^e#Rh1LW1&oNV{NvNIRvM5;{6d+7Zr3_H9atN2lz0YwL# zgrhxY-rFB$PkbBwmp^WI8e7fnBt4cOsoO^RsBd;Et@s?|b_M8KI2;h8@A9pq&M-YB z&I9XayBXkhr&|OG;iuSr06Ek)D2|0DX|#yrD9S@~#pL@L_bgoZJN7PVJL*8PZ^3kk z6N5R1^^d%&l^XQ1?JLC^KiSD$f7NChxEO|K$+0XLu2h}t@Sl(d#*||Giz2@8|CcZL z-?94GZt7By7mOMYXQDY?gL-T$+a&Zto{cv*Jf^s4NRSvkOsbd3mo_UyYLWWp4lJ)h zpJ`y>?0s13TO)MLjds|^vhW$(1OoZaFIf_)gmtKI_cYS?g(fF|{b=Q1>n?*q-usfF z=y;GloG+A{*Q|}$!OUX(Ze9#1Hu%RsIn!bO5sREgRdE4z*2+eiujCs0i<7Ucm{oC`BxToU$?GxI? zp#nyYYS&A5T+@QdvN4#{Z|d@JYdSe7QSP@Yb&5e5yms?Q+Z=YHMO?c6*^X2)#EW4Q zsk)x*j7^^(Bw-F*vJgT9hr4@n2^=!??RD<8sS@I0*CQ_>0FoP7#fA$iv@a1MYi_!hn4Jy&>7qsru&y+^8jgfc7=l@dd z_6|?8e%=sNsfsA}k-s$UT$TGU&kC)z1R=qQ_tQtjRN#YJ%JXQDJupoB?uAdiEiuF{ z6e~yo*{5@{18}TjI5ps^m7&CQObh@sk+Wa=O1CVLlsw;8tw3_E7Q5H2UwNKgCuR*s zaeX~VTKwZR@1R!`AyMlSeTJT1Krr|Rvjc?kmStHy(OKR&{)D(hv@MlG zyObNMdRSZj6A-T>0@3z0B%^Ax#Zh|U{`dnSjwYz{gfnt;{?}~k=5_eAZ?|IDa@CDy z8g4YUXxv`uvCn+uuw)1N+N?tpEK_S*lp;6{P%>qx;Yo+m^3#v64_(2p+KxZ`&9M>* z@##UiJk@+owonN8%6jXz0~49G;8XS;{>XF#^apK$x9y)(!BvZArSi00!Y2j2_HZaQ zA7e>q;eHCO`bLJMs35FdgWm@CkROuUF>x#m9xk{LT;#e*E2guj-5KwSHxK# zJ+1$)lC=lc^H;=5q*h_#@!fOYbZ<7FNpB6+Zr72z8y7f)1vTDAccY4K`i`Ln^5 z_vJK9Mt6dnjsngVzB>>{XON|9xcO^eHzX^XW3C2SGagrRIdfL7IU~5~>bl%_Lnn3y z7qdFUUpjLuwyR!T&S$E-`iv@hMzC=7UG5Q?)%EG8a3mf)eP3~|42j>#tq4ii?Q*Oo zG0qhrcAjpWcn;NexMH1Xlf1rhEmhg6;f@zf<)7)uwJA2=S%cUrXQMMOi!?rccNyfV zWkp_*{5j48@d7@&O?SF}SX}TtZlf^SJDaj>kk8MrGV!!x)?Y+-me}i9rw*Q5&0kQG3yW~J)(3Z)l zPS`tj12G%4PW62vfIgvANIe%J9xC;>&o{fT_H%SR>Y9nhdrd2ykbOEN`+wB1WZYjg zOtox}j37x1)Zll&_r}HKr=RfX@cr;9^(?9ZLSP*MtX3GOuj4WlzC#A{1ZI5JJJAHv zqIvZXZ%&Ak30Vc2SA%v!KO6<#e8h+Xj{ALi`N-(lfl^iNw%TM^yBgZhWzc{)k~o!_ z?MZ07-T|XS6v0&?_}U3{)2r>jp_zmqd5iscXs^qYmfVF^_ut^pqmWmVG^uKlY<6{@ zMd9#4U>DtJ&~TeOvWL?V-N_C|29yGSA?RJIBa+RbX5wZ7F z8>2yCU(Dy6>pT5>5mWg%r=T8Al8ZI^6~Jn>&7tUZ^i9k^hsI@5d9<(_NGVz-x^z)Mpy&FgUIR}Fea zb=NK@4DFvfJIxNu(D%+5G?nh4UeWjj?eYb2^~}l*1hundLJ))ZR_fuAD&OM^xwm%Y zU<=kHD-CkG%AQu7h$Tk#rR=6dt~AKJ#B)fpBYtjBz=S4%kBgASDXly6VTWsG9tKdS zr~`LK!^<28+@NlDMB@)xmW;Mn_>Y>iog+{|qHB(^_F6wO+qz}G#}0ZnQ7PcVouF^# zB{Z(g#bITXS|C-p``GLEqx ztx(lbZg2OS^Y~d%5EPDU?OMNRLdBwCq(?A{#+^~A={y0fT?wpRdxW2@@me^Zbr#K?GTG;3yQ4)wR;4>vD<8`W7oK$ zusUZH`{^CZ!l>bPPtmND1rG{~!tSUsS`oP}fv=gnY4X8kE7B!C62V8Ot;`L#lGF35 zT2KfXhVL2*VSYr{;Td&11r~Im*E@v2w5t}%N@koU}3L!x_&yF&eO%}jfKNF)qBZC zV;MDyQBb#Zs<}dPrz0wu(bmnDJNV*WzgOlIWMzJf>0NoF0hv1jauBmyVFLWikBcwL zw$2tNgUU*P7)T@=jN}#unjuoXgE>Ai-OZl^CSHx6MF;#O-i0>ppRKDP%2#0-(cXNQn9scx`463qW3eX-N!w?ez!4-*p$>_X>%^8k8hC@|AhxkpuV& zBD;LNzn%r@Z}#wqa`!Z=7ApResI2`70I)t3=6$#JeGUc`i+U+xw3I(SKMfAN{R5&O(91(r*Lupvl?pLS!bCEuRBtk1c&Y`Xb z`rnBY!ORpltQ)lvN4MJ4jnJh>t0H7Nmu?-?wk)lDcp`Cc`1+arqZ&Nnic)doZmad< zFLa0>4~)M$LknVB6G;cpf>Pb9sPSTDh$cTAfmoleQRlB#`_?`D8_veBnsH?x>>=^% zSje>Cv=Y3yIn~g=&hxpoy)QRs7D8s|H~)8H0RIb#f&W{F!lO0*dXb_>DD#{C_ql~6_V+>< zX{gvwh?+lZwXwvIJe!eB$t=aS|1C+{Xd~8^rewBfq`R(a-jYW2r6@sFa?SSpo6u*) zX!j=?=;F97LY_dXqs7O8>v`XTSe)x-r%(V$mcb;j|7HaOaV1X@mk<}qxa={556Y0k zpgoprmarfnsAd5+Mx-@?<&S!Qk_o5C8z!e@?bCj55tJ4`hO#0+8fO3i(g2Jp zeKpV8p85cZYtUMXDC~IAs^Xh+sRJJWt$(l0`~};#9Nr0Yb{&sRR8jZ|%Gq#mk$*d% zexoCtSNDUgb>;K?6@*BtVPYb9&A<4~GpG26+LfzuKd50F*5QOWIV;javc5zfYZ^A{ zGm!tofL0E()O}WtRysMvK;IGAQ;<#i%Hx;*ZU>&ibE_=TBm>nJ_BXh35FHhj2!~ZY_cnN`5mlL_D<%6O>^l(k~ zO`#_C*&79(Lwyhg_)g&P9|G9O-N$I)Kxt^Eh6f>Iq$Gl^Q`N08?hAiLfn0B>uN?9q zIP50`(P_Nuk;g9E)?jjcdaV2U9$BkD>M4k&CwTUxsNVVs9Fh8WT#DEs&Fx#FLg2l@MfXfr`=5b(EOkNuc5{V{=9ziYUh%#}_s z7R&9lm*9D#YPkcCw^q7)yzs_Z6Lle5+SE(~m%z&|mj2!x^{y;4BwF;(Dooup*~~)l z@OKk{@Oa-sSi*bd=&#HIpZ}R0S=x#IB_kO)^cMXC*&6)jI&5?+YCsJcsT8b^2^k0j zheE&sE9zX+sF7@WjMvGV3Kk;{9lgst;eAT&epo{`&I)?wjU);VV5Nl1mZ&-tbQ>K)IWjeFy5AV}Hke49eXL&_eEb z97+u676aGS#x%J?6yR9ng@ z?6V_=(BDD6(OGsJql*h`wlsH~NSbBwM+^|W$y&p;YXc`f!j)U*o&;yqlP$iwwM;Oi zu-(z<)!qNZ&-}3s065@_#5o$}eePK^P|W~GHI1w-WB+L)z980i*!K3ZLbt6mwN0K< zJNi%u)VossV6`$t|J`3eLe?n9EH}r7KZujB2ox83fi+h@F1xrW`POJPyV(0r)>^*8bhi8I{n-Si+a+6Q;@Kp*BuxONk6o#82*&WDkQST%ncq7D& z-BL|F?e*xu;6hfkx6;)C*L@=PyF7UIe;SkoMKV@sjTnpfl8Y5MhXP9w0-n0;lJa`? zk@nDb)~F897l`G=Z$1&I_gZEsijx(z1xMOtlh1lHy)4XfaL^$7iV(YKYMKC}qmSCV z-&=n$5b25L6fsyS!cNlr<7(B+C*^A>){&7o*m#58(<63aq`^Lx%lL&w`rQERHPCZf87(*rJ!Nc*DvBmG`yINLDJI-XLo|n|0og4tDKTCwj&>-vLs`tq zhsYiP%FxpOL!JI}=y`?#rTJIa=Cg6Nic%F1_ZCKac7_RsDvR8-bHP%v;~4)4;j6-W>q=0`7JTH2O{jwxqj> zde+|S*_#*li+e4HnPIML&hvX7pW_2NHZ*`E_2y~f94s&(NiFHR>-RjVW7a7ty9HP%R?ohqcyzaZ!(>7hH3>mEi|V1e<>dyc zp~P+gcc8W4LjY!N;knr;^5JwKI$PWL`sNu%?))dt5wdIC1ssle8VW;8_|ghOdH_&i z-t!rV9-I^57kU^gnV`C;ertN9v80{2F2Yjq=gaTeIbM_GHH{;XhoKe&gbV<^LR3rK zQotAWeeG_`g)&`L!Caf`o6*OJyHN0Pads-J5;WNxV!ue{e6phpUl1b0RWJre7@G80I()J%%ixU9k272zxz~{k#0#Zy8_SM*$I^}Ewr_r0EbPc z!{I>526SN<7NEIjdtj)e^fpL|xnoICe@o{ow*fB@dHrxV zU({K-$lar;3*M?=7Gr2KxbiDnoIa>Hqk#JfQZ~IDVs4`o(F~B?{}at#=}G~=ye37& zg228~7-#qq`}WO`FH!HDloMV=DDenHP~d@iDF1tu^d1bKTOR0c$1T}4dBe}YXtuP! zvnMP%%`dyUKXI}31$aB>nLV%hciAVspXa1~m->knqmt$$Rl_U>_m1|oC`(0=33 z^<8kCIX$iOW3l`g?}jes{4)f-LamVcTAP^u@mCodA+V}2zxOu^7W>x})DQp!X_dRT z9-rpArnzH?vt*2%dE{8zt=S*SU-3-T;zPN$q1{IpZfH@`n%sg)gzZI^zQzenjEuzT zt+zicS_re&`&AXuC^q=lQ#&UnFgd zKxan&bt#GVB#K4sBmEf?GjniZ1;9QXc)W;Lk@<)=v`^sX<&c^uw(|IZcd&lflq=u& zilgPid=cgJ6WWMZ>wX?ED5ua$JSq3xT$|}$sXoGDv6I`y;{<}%O@h&}+WKK7p*t1k z4%4?omvTT_+C-iQVig2&-HY9Xh7wvD|7Ign@8lOOO+>@koy$UT6g1m^B3wE?|CxA7 zTQ&4MLmV2uX5j~xH|wu=j6S|#uJW!U0FuftfJsz(ZgMyiSC&tzL6~~c33p@*Fa;a< z&a$_-T%K>@d?|Cg$W^Cir-jMa1>i+9SSrSAZSF+Vfen8tr|RdxVrVa0ta6FTFf37B zo!Dg#^MA1fV=DB@-jY6Yg}#m>tjfE0UZG0-6m~TfckgsP_O|NLI@|QWb!W^w%=5CC=ITPb^ za3o;qez#aFunXm?9+svNCQ+~37VXF@grEaTq+Tz#^ZsbV5knqhk=afRpt zB=qa<+@L0w+l`eiWjrmAVJ9|%j4Bn{r7UjAn#y|iYYGa4`vLF6PZLHy@Kkn&&rLEF z`lD9%K2O{*WJ?YibXEiK6b4^x`UdYE+LNp5FHP14CdPKH4l8X;AL_R2bJZ6G*K6^C zptwwt^GPgpG8_4x^==Rb%e<^ioQbz+WZb5~#N?DsaL78T$DT;*rh*}KANJ8;W7iyH zO^;Pb0^eoO!DBzI*E>Pn*20NY)79p*UV*W1Jf`&c8o^RCI?$n<%$hfjooWM|)&w5N zx0;YvS;H67RVh1xMtJfD1OTq8L(zrIpeD&_XG}L?o3GFAmH=2YCyD28IqY4u-rfOk zb;~(+*Gf&Nrn*2lA4M)V78rf#rZv*}bN7lh0s3d?^+v920uy<zzAqlT!(*o#r%8*OZN=Q4@}n;Lu8cm)Bp$%nM>WsQ?~?*BJ_LJ+@=) z!R+jdZm<4~65sg!EO50qP$8b-5Lb~MOaTgNZ_2slLL-D@Lhr2hVauMj}OLaqLXDwBO1K)lA@i{PcJKCi(HAI+ZYrJlL?E?$osTlkO?#+^6F zUY)Emi$*y8Gu#d1E}M*i#DU*_W|a|X`LpA%a*X1dO*krW{}~4Nhp`TKs(zy!M1L#a zTACzS?)1UE6Zcg)?$W?68|((pbO3$>>gj+ph{TL2OmfFh>!pIz+NrDErmG2-s!q{i z{o!z$;Am<2w=)?5#S24GXx1L)VW*JVH(P3c%nm`Onvpn$g&VwvqdLieVB8w=;E__h zq8NGLw{|()#YD!td-1o6)?iTk6_j8c28Uv%S0hP&fV&y#vKtsc(7G@~{NDB6<;kBE zke&fGtx|!gggFi24C0}g*2@b49#RPIK4-bEl?pHAg}rq4(mr?8Ow+MH40~?w;2}dD zn5?5tI%f13AIsqkf+&hXX{I?XzXTB)|V4#r)OT!_PhS_ z4R7iG`3k+S9Ys2*W*&+0FZks0Hl3k;sZl-!yNU0&YO+5$Z6VPB3CITjZKRQ`rL`D3 z=y=*$c0wYuhQ*hPcEw|pfnQf8FmBH-C>$AYuj9}T_?oH%UeM?XFZd!VFo64bl`vg` zc$zGj=dkd$mW_k(l-ai~9Yl%cRNXCPt!K;mmCIU?64ae9*DWLKD`-brns)`aSQp*h z|BE}4nYu+1<`!M=#|`L{qJT)pTi5jv8gBkwlJbdLqyot*{WDRmYWpvk zIeqa4Ay%L+Re4Db)GD}ye@T6{cD<+sL}yF4ERORVorjBZZ6R_!#p6W!cUj2s=}I!| zeJzVCmqbHkI-{ktT6n`cJ>lsm59e2wa}|1{j=~U7QRkcK!p(-iQ*xSF-E=tU+;GJSa?W_%?iQ)+$(&b?=vPq< z{Q!!HaAHz3WTvzDz_}pNS3X z%|EL|i{1P7_Iu{-0Q@C2XX-f!zxN#pcDuJK1 zyNADw^PIb|7@g%ZnS&lKxXq1jyx14ZFXB93U0~zC8W!Wf3Oae&u_E_0l6sJ%N<#&m zdWbCT3jTLpYSxh}U#H*GrXuuq>aA(myV*Szc*7<49DVu-Nr1qV#>z1aJs_a&v0FD3 z0HKz0^?uQ|H+^^Tw|mX^;o0;|H0 z_7=e8v`ASuf5{@H&|y<9kSn&)jv?Do**3>mdkl#UOyhYQIL-F;46A7%aW7rJ zfu-%PJ`lN5d$TPauI|ZbsrnsC_r=dfD022Y?M1=A$JLMxplsOi>Ic%h8Bn@z#QX|! zeM^u`WoAu2W@?D5?2`$~H3=#-kFfwrL#mGG`3v4OzotX}iHxA3@^&XdtB;q27`%)m z*z#jM>DJ}CKidu=96>dz#jHM2LGPyuk8}C9A%kU$#VfWEp)3&42M<;z?f}8ufSVtA zR>i2zRzTwYVy5l~m7y5g+vF2EJ zvp?ub%pVWj9|@U<%q9OE3e;4z%n2P)4lfEmsUT(lM7U#luSCRiL4khCc$~Yqw%@a! z?e4wW!QT7QS8`S|vi{-^op&7bY&-`F*DbS^n6UlMEOk+^v$ps@&rQzlek10VcdWEc2(cZJ@R${o=glfBwB3(8EZZ-I z@XHjfxwX`T4ZY<$@)2RCtc#~f@F++d@dOSlhl=Mf1&l2h{BG_D!zHyfZ)`_PA_#K# zFaN@RXk=Ghh4&j1D~uncJIm{jaXp9re0p@ zUto0f`-MX9$}T?ouicHyt7fjD)18W4e~-!)e3bKV8D5}Lz%Y_phGIGDt51rN!kXQg zSaj1YNB_b)w!3hn!?$M6?bX#BzVEQ)ZJ2PQ&=kad$;IUhq3Y))#mO-c^t9yYJqrf@ z>}s2uAFN&OYdeSmT4(-P54Tod1B%0}M?Gw=1qqy~LRsQvW)WRv zh-ti2vFU`>tchnGb=HQf`p(#;u*Xgr>kTJT;{NFN1s~RbpNKeIJ}_y}Foq<*2<~61 zOU(Wstcwg!{Ask{0{*hpLK^ZK->3RUB2g8?detg4F)@$pm zQv55sSdAcJw|w@7H`RT*qW$fnOPbY0nc7H6&^Fx=hyFo&J9~Y?2@{GXlgG5<8`FmH z1tO3yU9(nF|F|Cm9=I&ciAX37GV!``d(H*oCf{~v_uI|;6;ub2pyjvuF7vC(P#d6) za1bgs0+!SnBS$HfC?!S8zu95qy#p+spy^=l_slQQ<*25a@XJZ|m*kig>5JM>exYXW!Z`PI_4R7O&y;fVV|Y2dMUu^`D&!7RDv z4{)!C?Q_mTE6J^=sO7=ib4_^JuCrah{NJ4Shw|H?qLi?ZhGmEHCTrdhcB&ol=f&e_ zHTRe3u$Ni_KkwtK+NA?PI7|G)WjC430n>vzBfatuD0my>$p=~S3d8s4Lq+ffn5HDh(mJE23lb2`UU*qY{D5`R`FW_c?hKCY5FcVf-p9l zzFy#Qz)?!%Xo+(ixpuDIx}^~4)dSoYwZeh85AK`-4s(qTz&jGi*WAbl)Sas<`$!wR)d1@&b{Zt4aYf>4USPuWd2S0_NFMFtJ=b^^Yr-PqTWPhL4p;ipM&i$T zi$Vb)kse8>wPa~;e*>>$<$_)bm00A`+jua1Iq=9l7rMGX4zSOW`p==>E7xhPvYtcJ z2^UK71Jg5>O3F0SiIP<1qY}U)S&-47|Eu0|N+Ae!yc%>*n9PyYlEs=gf zx^w4$V9nsXQ+`FvB-vbd(F#P6nAzVf{a8YaS=DY&nHil^vtA5-FG@3WeMuyLe`4bj zw7M#aiyN+|j{p3fQE{N`*+slH%}og`#NH9`lRU%`K|34MO-LGEvD5`)?Kf`jALAa8 zq%D>uLM$TzA?1%Pc+ixF3%OihQ6)9+FNcoFJdVeq!x>qLLVJK_b%>zmWVeAks_hP5 zZrmUyXrBKBlfR zQ*+F0%(1`$q_OldZ{L8&z6K8I$_Qh5sq4brwCPi+&`}?I%?B|Dd!+xu{dPu(H>dbj zxYHpIqiBNMJ|tpj`*qrp0d(wBVWXOLHt@!F<6s6cWfMB9>u{mYP^cTZe9cWs?0w?+ z2VLuO4uuIU>hJP3{?KpE@pTD->^3lzn+{p>!u7U{iMa1vFcg1;Od*z`2=FAjDa*O) z5OfxFqMR?ke@M+{qfPq?f`6`18?o9KEL2y8k_d1F6yB~)czJ~x-k$*T6>I+LwO;{% zu-2~t!t^31#gnt$lmEQeG45)CoCvVvITksxv$zJOx<88sqFHm%0L(Qy?ZB+E=U0)G z9f()r5XQb8OA2^5B)8^zUnbW|blNf+pz}q}0>~8L;A{DNI+h6C>Dy@~$)~H9jj7j7 z8w=iK3>L_KQ5irW(2cuR(YMNZz{IwpGCqKVdZF5wtex*VL#e{ieNBH(o+q8W*}F0z z5l5uhEYH4K?+u7RvYWc%A?xI`>ED-sJzbxasgYmHoBG7bl2U>HuMsO_@P$<|Fdwod-D+0R7> z_xPwT3X`^XkR@#3{j4PVFxv#GG5lFZ#^3*qtD^QQ$j@luVdQa2Lv{=J5nUz*992Bx z7F%Wp0i!o`sskJ!cE$Jh4XDKN)dbzd4RryN2vefL51X*2p;Jo2sk#dSUjVVmrIH($ zyIP_bgZo8~IFk#6!g*^&Sde7!H=jc)B;_Ib_SRCx*&;kdfZvTp#ydBK#CBU>bouJ= z?LxYsXOOmY*vdU;mpP=au8g|~7IWfvG{}A-wCqfNU5>C0~Ba%6{8d>&JiR4#0#w7Ol_XYIx$ASL2PK|DD?4%{xID`#Kzz|Cng- zk-1^D-%SQTb|O^;!bmukfCrp=BCw6|a@;Qm$*#Hx8|=StF{Wz3#!i4KJZCyxewlC+ zfN34U*PV&+FVQglI+(?^N?>FWYQ&V#sj3#WGEshB-$!?_hKAJnVn{6Vhm7r7h+Md& zjKDdXjEo$jVwy_xKY=qB(+?la@n!~f{Gq|P<8{%^Zrt>=#X`dO2fzrV^uTo2)LVtWZ)l0KDUkV^KpRRO@1lO}^Mrx8Lfw zda3oBzjU0}8r8o=iHAoY z;4oRz=N4X4)3Fpe4^HilBn@=PmI~@OUsi>!Eoma|9&?D~lb3q^siybvbsTZYtU~5~ zKc6cP4YBvnKJnEsl4|k~-hG;GhGoAlaq#|}-1SywGdLT&@xknaqcfX?#-4L zmv*PIu$CZ(s0B`c0Rq*4PvvO(uTQ0*Ss=}UOC=)IDpAAliK$$%t_5&zN+jOnJjOL^ zw`7HGFfMrY$>B5YfaL=GK11SQibT2_9dNt2rU7Oo{~4I_Z2r);er_aBi!R~MOJIrK z=(m;{&W#94f4O`xZWEJr@a4yjv>Ho8C{;Wh-vXoL#?VXG^>N;q+iDzZ(zG2yY{5mH zZ8fv0pi?*8eCXr>yGg_;O@#QKZdrtZN%m;x&lL@AvFpMGR4iaV_=OvSiS6gtL+;fI zm5iPjU${fE{_LH$bM0iBAfa#>Wxv>$#8Qth9U$4f#7(+>3GVaX+@Ne3R$%yQ*&Mc0 z0xGNp>!IzV+1+cIwuNJxs^h~z_YzwdM1%DAO={;lg|Cf_r{237!+#iEr+V~i@c5++l{CSMv_=5ZKQf)&@%VBS%xeqSYiE_U3v7)egwXJrD5Jz?}61YzeeZs zZc&U!UkhpxA{+FVy)c%bM(4kwBOl=KQ!od?#8jPk_}cC*>XI`=)t}aEEmCL8|O|^R-j_a>PoU5TT+qaA9deI*StedJ&=$Y;YT@eQ_PG1 z9j+refVTWv7)!M(IM%h?gANw~_U|Ho38u*HNoUF&h8C%G2eDVI^iTAE#C#S{$F|&D zw|hN32>&&iBSai^55G|wOa-+CW|q8Mw`8sr zQ5v^r%{aJq#1Ng6f7%cICu{}Y<}SiZw6O7LG>b}5noAA~XPk}Z6^FH6=6$I}Mi;R( zUUQWFnw9L*5D~h-yflGo;(}p&<_CZU_vZujVm|qLB9!QEwfNSwVziTM2yHpDw>!i`nLU+mM0m46v_h)x(5BW=S0xE`Cs* z{513a1I+OFAfv#n#K_~YvU%L^-aU_txcH*Ps8shw%drV^L_wH{ z#hQ<+AGKX-L}fz?6M_*V-cqyj;U`UwQiU4VSz2gxoo@MqXq%LZ|l? zcV!_-H_I+A;xQ9oc49TZ-Ad(GRD%;*q%zFT!;h%J%iRnn<8ZZ^5IU)(Ox@gO`P9pR9P6Oh753etwFq#Y2^iR2RjA*}d-b7&*z%aFL({dzb)7>XDV;^EZ}-}U_#t|PR_6zXq0n@o zP}Dq~;+EVJBM1*~ipu29d?c{=+wP=5peejVnJU7+K4cG2>~o5TR(;kSKGUEW++GaK z9ew-`Yrt@=^2?AOAZ`l=_%1mswV0Y% zH77VT(Jq*?|7Ija0A28X*yeJ$O!_7)f#Wh_WjX)xC38A%I-bLt;_A3lrcojA6cnrK zOciIXOc|pJ#$U0E!&uuPHc{$H4&5pbA2~&$f`3U}t+3CS zE?oXDN?DQf|GG~coX*j{M9}Th(ny0mHErj7aJC%(5Ur%z2fYUjS`JQc7;)YheXvmV z?tQFRjb5>AFGXBcMvpX&F!^N8Mh*Vda=sA){x{_hF{8To&cT#z=gU2sL1wR0ecemE z?^J}zX`KR~@~0aI*J%U8e>dl>+kZCaG_$54$b_R_%L3rUT^6z0oxP~DBQzsfQ7dfO zQ|(;pQ2aub%z|~gRI-=CTWq{XdNPJ%KO4$dt*7AGp6+a)LZtFPn1zO9bo~zIvVU>! zYejGeA`iLuW<@VPizCd+b@|#wFdU9`$}qN2oSE}|IMy2sV0HBb?!#|5BXvvgQV{D` z$BPc>Pdy#lf|!fK+Rkg& zjam5KS6#isr+!Nc4R6*Wpbm-ae{*#bDUO7Kv8j^?Sm2&pBr`DXvYYPB;)4Mm2o}$t>^txX+dojzT<0u zM+R@ZEDw&hHy=B79B3?zq@)w?=BW&cc0NMI)16~c1QUA?7A(^K1#rVk9Fmoo8YX(D zy0T@z%y)l+n@t$+XYuaYw+DEUE*xM>UjlW*%zX*d_Og8czuYdx`rV(y2Z zEL2N#i*y{}51_BaUg0^5uJ4LwUVL%jB`+@4WG?uO@FByMli8@{Ig%Z__KAB&=V~hF zD5q?>%!7Brxl*_+NZFI6p9}jmGupFPynJ_^yv`#)AsN`3BTSP0b&Ps=69LjvTUGtb z8>Y-0dnuChcU=i4VE|3T?@sH!`_B6+2f}UCFVjS@U43qEb2uJ&)6+CI6+?RN>ouv; zPU;+20SHV1p{k$G4A=@2V(!J5PH!0Y2ZfMKE$1j*Moa2?Dj&TJ7 zhy6Cc1`qe6wdJG5Khhcxq#;;Ew^-uHZ^!xV=L0}-!(3-4@L#nL9NyQ-0y}M=NWq+E zc(5|*D!qesBKQt`3eT&KgSvogbPq5${haO{@EBC>*lAn{0Uq0k{uEYCg}Z5}|i`VQW>y55~uHBiwQDvV9avugF=D-;6Q@wxAb zOjRv!byZYiv+X^HHqj5=@Qom+ja|iE*H41GW~78YWxQN~zd(v%J$lKCI(pg0?)CXP za50oM&PNj(Huk;%F!23q6AY*bXzK;k4f}ra*=KMMFd_T0#E=KRWff2nf_^X;mo(1- zpAQc}BuSrr6jq7l990H$5y3BxvP^v0o*FyIm5r~6jU}-*jSm2KCGT3btv+(zq7_PO z4V|(j0Usm_6l`1^D4R<9?4ybe51;`;qKjY-SRv(2`vT1y^lYJT-u_#wF_GZF<0 z$e!LWWs)S2whegv4YnDyTu2#_Ntfz0HyTQ4U3^4%qVGFEDh`$0xMBGGV}VU{`V#?k zjmNyt*b!8C0NiLH%D=-bk%x!rQ3n`>gT7w=PgV+w=Rq@s+wU`eV!XZHakK}Ukfgyg(j;@1h$rlEdtC}yhs}PvPN_m|qJR`jtNa$*acL*&K+_AkC z2$$QmW8HAM$X>8=Q z9OKhMM(5X5zqf1kJ=jumEQA}i|3pSfJeB@eg(6G>pR$j@teg9L813y&nKgcz?0J&U zzgKX6L-e_{;-j?;h_rQkh7M}aULok>@cVM#HZpv9k={RD)R0DZ=jL0Mp9X0HVowxFsT}S56{@ zMK|PGDGaeL4~aQxTxLTOpg*Fzxwjt$tJx7Z0cE5A<}P9#okw_9#CK%wzbV3{q562i zuXr{EPeVrvW$abW+F5OZBS;4eu3i{l>IraQV9hOV+bSZbQ zvsabxQv6$yx^37+?RjWUC_l9Df|G0cQSG6A83Hl~=s$3jOS=rFXw{}mi0AQtwt?(( z8P^|1O*jQtLS}V=*mg6a51u+1FqhMTns$n5tzkJJ^EAcoJHkGUZz^%_cW5$X7&*&NI$y-&+E~j#Gv=TK)(`7*|=iXPHigrij+CY;~Sw z|5clTt7q_-R=4V4$ZbY{kHifT8^rcDdN6!Pdz#{a<*?@!`t$En)YDR29bbIZ=Kzw4wE8z9lIV7 zwJFx$aR&F4<`{6zq$!24cy#GV*mePOn1Gx2G-&u%YEj)4aYMJ82eJEPOeDY>$jjz% zaQ`~;xAh!^a$Yb)NVU~tV)g1d@t(No4af+a3X{*2VB$M`8~^XAnQ#X(@fG$F_sz8J zHi!A}_nI?3LW-Wuw1SCzE<6k38)W!y=XTIQ5c1&CU(7^okzaTup`frWx>VxjkJF$h z%QjO}I}vrYI*oL2Sx3E|XY8a69*g|E%s{PAVK$?tJGRD-z1R;YR})W8gF-E*(>x;D za_#g_lHzpIxyRu-<$JMab;H~O@5|8yJcM@!v6H)t=iMSo|LVX&E)JA!pV}B1hm$$U zF!$Vf-1yF67PfnZ=Y)37nqV8RvW*%^UaCcn?-G7_0BsoKh_p)8f!IEC$MN`*8n?{4 z6N=2*kgiTs9oZyR=U9;TX>&d|K}@i;Bd6-O=|Uj3)T&e;-&J_J;&(O6{M6@Sq(DfjZvUTt7#~ZHsXKEP4R`rE z+P8NQZT?Y>U_;zyXDghOqC_pBh+mTtxNeUnWJ^3^@fP}aZ0`;}3?3R!`3_DjM1u!x z$$|1^#qarZVThIXtYz7|wU5C`-~6=v=Icb?967>&X#HzZn$G3jwm#w2m3{=`@v@J^ z%)LJPX>bmAZR$*oktIB#MfEGko>hiJ%cXIT1uM8h@|Z1Z2*B!~#VE@*#J&mbHu;G^ zKT?({F4M3A7;ngA=Ms(b)3F&Kr-Wgg!+NWiU*mYr5Fq(-00u^54_@)A z{7-+Gn5G9N=3aH=CG=+?`xb^AC33zF@$lNt@Wtnm&lx@Sl^PMc9nbwkn#>^&TR34&aB1?Vv|qCaQNc^S$>VrKt+G6F zl&Xf0BG#{g6eADTnPb8{bF%g9^_;~kOX~=U5D!w?#JJPKM!1v0sHj44djgbAyj7b| z57aFJ@6CO>)B2#cLNd~hLgpgTJi|y1g|*er*?Q!OegofO->l_ z)JJwLL?3bjn|vcIW6c-MYL_XN7o3G&OmevA3~2H%UJZdcPT!EREq~*9z*4-?RDb;O zzSBn_(x=Ny^iA+mbCbf?auE=zR#G{IAk4Ho0oRmP))CU{aLFY%l`9CXS`&)hDaT-Z z+1h<*?D>Q0D+TXpz1MzfGAq=ETq@m`|2wcgL1z{nAVjv0xpom|r^&xn<*LPHKK4n+?C9~*gEtbTlC7JbQ%7Sg$s!@Au4 z1bMZm$Y8YEUN-&bZ!Zh3eTJjFG!mZZGc_Id&F6j4ZXR@HgIZ}|AkPr<*gIIJd7Gyz zUI@RK!hvW@U{3d{6SE0UB*;a@nZcX3Phiu7Zz8kL9bCHF;2Y1-B;3wgjcu=a5?5yA z$y2xEiunuM5`h1o7Qb5v#JfZ&PGiyogtuViPSVR!x<;Epyifa_t?}tydsW*xkr(VC z`}~KY$A)%gsn$WbcjUd=Th1}6t4e}*qM-InO`S{fMGpIR8*e;2$w@n*RPaY&#w?vr z^rlASK#>Np(d+lUspGq3%f075u!)59CiUUzOp}q-uy^6-Bb_^k7}1pN5<(G zSKzBba9`@4qoS`Hj|$QQDu{H-xV=EYU`kW(>7Onhkw-h60D5HRW<#r@D;ZRXe3~Dv3J^k`A(@5p z>B0JJOT;h@1NppH8A*Z6yM?iz!wN{3VK;J@RaAk)r*5^cOR7o_*bo#iKrqjyHT9r? zw$bpZm|#_A3}Bl7Nu)cy8PX1UX-uIZ26^ZW66qY=UTrghyg(!QfZk=fouZ%a?S*RF z+Mx{q4Yy-w+t_QIZ z+Oxj%s;U~5dc%RrIVP4wlqtSJ>v?#Y?oGQsE5m>#;34+CH03hm(SO?-R7v#5_Ie#g z^%^13@buF|uGU`DHPr*ue6p!P$$cRS^tp%EqHpO}&1NJM1lrk;{Cag^B$l!(66yX! z;lKF%W&AyWa`$O(Ctq`-s`9l5-kSiM^1{cMl9+a~&-06Cg|X3~C=n3yCQtto>AqKk z7+i*>S2b(5)?UfPr&qLGG+GEUrHO$h7& z_kW+9zHA8GEe<`SxxZNb=LpjQhs*`o`_{BS^#xIp)pVFzfkb^Go#f7$uA%jtXZJEf zN7m=RNAi{YLo$(M)oTdQt-^f)smM%Ws86H|vymO^Qg|Q(yLR?RPCFcF-W{##`{t2X zMZm{;f}-)q6Wu8oxWJW?2oV6Y)%RkH9Vc)WsdfX|h>~EhtfyvRHjmtPg+qvpuI>>;_sIp`{sf zP2LyB%G?)m=i@kcj(VY6@Wim7?t`f$q?nwm52g=~jImr~yZSdXeKfE#$@foPM&AE7 zMPUECN4;2wRwou~SA~i`MA#`@5@)$C@ex2&XR)XUcep?oM0*NtP|oAHo8zy*d0;@q zFFHO94yP9y?MsHnwjyWHZ1fV^eJM8dZh^GRu(MqnTscXhS@$#$GUpe-^ht!@J8bs8 zN8-L%8`@pmHkk_aA}m9Lu)wi3K!kPa|Lwp&3)Y>4>th2!wSce1eqPi=OOfN2o0S`H zfzoR>;M~yH16^~t*oL%9E*D^DSiQ-=J}`fK+#MwEO)~O;2IGP5`ct40y;$V^wY6E9 zi=NCNnq$aMpa>4Q5Ihh|W{rMKHajeMi3u)(T*4Ad>O5ODC z-onRijqvCTT(g$~+g``}Rrl64qO3cJ#0qX7QK-U&qGc>4tO*WM8s z#P=bq9o`WdK!cfDFnk@hb`GUJGLsoDT%-O_jIX4x4zFYmL9iiNz)F>Pkv2W9bfbEH z=SZ#-zpV7#B|~Mtb5Kc!%Gq4X{7xyAEh_v@&Sk+I0K~~2Z;6BTQ$F;mmo}y-JTzE& zsLof$qN}UD^flJ+mW^&9eNNEQ8V+o!ZX6NOh?okCyvalO+ou1dT2RVc^uwHx_AW{==lSFQ(fJ-a#LRA)!*i%6g8Uz^sTIV>j)JL5J3DF}fEG}m1LCKoHbI{o%I)lPkgGwLb` zBQA7n(kTkjE}5#eRlo6U(PNcj3SLGWz1tXs@P5gV!0RX|1wEF+U|QbFLvcN1Ba#ge zKiB&lPx=JSxs>pwDX`KLV@7Iq_`q+N+lahYVW9K{y^5Hk$>pB3f-@q#29Ico9R$Wm z`mcNxLTP=}e0xbw>t9{LPiIBIa3WE!MrG!Gf73ilb(p0k1Dp^CrbqP^~k$U%2pH_4NeO^QVO|zE~I1>klwRWpk+zhPe`YtI?XvCWt zfiqjj&c|&pR@g37t3*Lfvtj*c0)%`DZDVeP;dT;PHtcq@R?RULO};=)Yl;qRy=xFU zS-5v%SXZG_%V}0D{Q4~h+#Ql;fWAi)5zU3jG z+c0Vx^Ivi1Fd%hAufkW+zlqf{V(|HxrUR#dAxph#e|<0tbKW&#MH{oKYH(EQ3I}`9 zYSOi)eJm+B15eJ)fm8ZRS_@-O;r^SZ@tw`eYFnVx;cJ4IUvCLPjw=_zubIXWVgIQb z#vAxkH4O53ZDeA85&QAKrm!Q#IoY*XKy1%O8RpLvx(0dSUS%E_8Q*48fpm8A?#;`I zMjYSg)=!@@kSte7xgK^JFkMW8B9zrj4!u()wtHxS68mru8Hx$~xkY=P#qp0lOB6Qx zAOJB&v6f~uNxksVhPk#~ot8(}`1tp6E?=PC5@`97_{Q8E^t_n}{`fxG& z(l>=j6k4ZVJ?o5&{I>15I2;~0qAutswPsg;Qk0yqP8RIyO%*A@WC*zy!=f$9F5!tZ z>|@wCv3;sf@timMdui7tT!=DE17`*y#dL*9DCqe++Hm4UPFss&zh zRAPGXCbXckz5_eRm?e4pG#syZg4<%EqNVoH?ve=5QJeBtKcVoY6c|o_d8<_45a;MX z{RCu-ye+eJkYKxgl=fp~An33iay(Qy>S#haiCRW22K^~S(?=Do=8U`)T9Dqf;hW~V z#Ku-{EQ(slZZucroE4}a#<^0|AvZuV{J?dkBa>{E^V{W;DV^B9%WFl$Ih(hKLsvU_ zP1bnQVte>Gl|{zO=?IRRgrC@&o=!34pf0z~1)TalZ`fU*z@$LjgKhI7gzrQj15Q56 zX;pcD-^Zyom$}ee(#%i8R}#R8t@8=nl1}O;a&)mIO5GRi$QpJcx zHGa)|@YNgWyVE$>XpH{}Gl^c8SizIM2GPOJhI7%?iDQF>&V_&-C@rn@8Fw$s?P23k zm-rI%+DXc}3r5wK04W#k)!3T*XQB&CeFQ<@tQm3~3|;j{*tlk&D=Cq>yDuy^ zZVaQ`|IVWLVg#}lChT{KuFKroAXBZF^@L2y2!o&UklvS1jgJl{DpqH9+G&hR8yf?x z;S<&9)Jgqa8?Duc+HDzJfO9lsCN=BNznc18sT2=Vf_+{qQDau`*vAjPaUx_fm%IR1V})-{LqZ8R;@WLKzP|;oFdd z(U+~9M;aJotyxLwAOXBHkqs@^6ZSvnhc#;bzi-+OFKm6gIUvfKTpY;U7yXs$=BQlP zUxB4#@v|i)f>>AQxuj-8&M}gyL(}mt;0z98LHkk^v)`%+QD#kBFGb<<3@@FQn~mQ!ZhH zVZ5XT_1F6z)r^yhFD_9RZtg6Vr`4uC(}LS&a;Ml)I88HPzCs*Nttna%%#By%yS`5L*-M zZRALMXFIkfOtD_@Mwi1x$2K2UVw!PWaFCI+4#PMq2^&l3j-kB8;3L!Rsk;%`J$yvD z3PkS8x`Y@bzKK;?TqWnxu^E|dVLEd+H?btL)-n&se!mJt{4lfKW@1RUr}Bm+;>Lw< z+RkKRgL_#LavK&LOiL?>fZSZgd?1PL4bODr^mJX8g3A;E*~MiP%!8+No*gWWKZHnx zd;ESHhLE?ALV$`i$mBXfnv`LxdvFU^Fj0?g_ffh$+2)@YZw9>hpg}OsagP^dDK;x$ z9kJ-rOhC+9g&AIx*Mnds4o(7o2KcMgnPP8d5b6GGRxQU)Y$}etIn}8@tvFdsl*vzg zQGM1f4k~OJ@`!OU}pwtkS#trTEF>{;FOz*2g{;@Q>(6YiaY4nWMG@Y zQQn?iV@I=#+Vu4|9qxypdvwM&G&bK7Ze}P_Xw=(3M3xDfVr5%r5TS9*9fm@$c#n}n ztphuCCTect>(d*<>P+jbbSFg|*JB_j{UyE@sb!Glm~TqgGLG!v&B~6R{Rc|WTOK#p zbEV?Z&83JGdeASM!K@Z_uIj-hN7g-<*L_LS$z^DfHMnitH>}=Iz65@^z+32c{Y48d z`|y^bp&=gM!&Shw9+wFdr1POxaQ3xdPE7=YE%lR1+4TaA*E5ni7o)H6IK~^)zF|wH zH~OrVecRYP#rlE~2@Z3MF|FO?U4b}ct#plwi_X%JMnYdgx9I^5JlU&d*IycZ8x+xN z5Ts4*tz>88viUY-?f6^e(5!Jysac`Xls%3wH@TW_%MveMFvL$sZ_|f&o7S?PHGhV@ z#92vQrJXIAdETS(u8U5m*oc1+d4)02(G!Vt7DeZ3gRi9yhVpWxN_#asakQ;6Y)KdQ z$~PsHkRx{doa+l$O9YiEJcnr^`-|mj{V|o&&yyoBSNE61Z$TF82@r+Z!Si(OS0e5B zohLRZOeU-s+Jb#_ny(W)SgjKL$K#~-u2%HqI|w%~%smr%9D2=B=X3907|s!M8(Y}0 z81(Ll8O^xcM|Amccg_p({d?zzzh4niV&NhQ-ruIFnV$X+_i~E+TabRnZ|IF*OsrL; zB@p@>g8T#i|9GIr+m^2Xi@diEi>htkg+)XZL{yNFQV|g;>4rzTQ9x-%8l-cmVH5YiV{N<^8P`aH07_`_a0V(dzvcJf$2)zbTjf@2i8{CRIvGVu55K# z$*BV_jl-^@$tJKw8`!#bPX&KO!u;1~qw7j)6(%YTaVa^H6@1kxZK8GX#+hfQ-e7|l zVs7~gufLLw4hdKJ7pjHmUjk}Z^UG11WG_P>mre4Dlp7p#Uk4id@dWr-&ErqIOy{=? z{>bf{2`OgEdZVKF;Cm(k^t+ht5}V6-@#CB~y@qnp5(rbFaE7Z#Ey9Tor6>$gmt)S+hIQs=fVb9S> z`b3`z-6tv)Cg&4GZzW4F3u{A9DU4H{2Ytq6YI)*Fm-D}@v(0U{r0fa?-c0fc1eqJU ztRBwgay~BPiW?bbl$%}YW$hLA#-5u`xIbpAjmwB@iVUbsddl+M$a3mMIQ=&#?t6qyN+hDCZ(YHyx(H!wYlC!|TZ)qjKq zGuSnq28y@0-Vi!9e;}flS{EQEP!_n1TfiN!7J>;FZnbTid9=R~BG?Soa zZ)Q8!>9x|JMI9X{Ltbx_q@i%ex*WX+$=&2Ult@R;9ULv>9v3CCQ*Y&i@YU$WrB970 z`#i=5j^ZBFzB?M@u4Iav9F;1or2op_B4e2AQM&Q|dN&mJglKiIMl|eE+xcRVyVDLe zVNJ@c)BDMx57xc@XpEB>p*ZzTx~}0~b$G^gwX!ssv2>e>2@%)RSoL-kevUr zet~?6me|KiQ#ukU*)IW3B9x`;8B9IplJ*vqFHL+e2X)9doSx36YYd43XQ$hIOrRr; zm*!sQeLSt4-w6Odznm<*3ejx3>1`U8-z%c;?hSDcV||KYbh2jJ)z!IPzo4GJFkcPV zI*&5{gNfx1xkK5+M7`rn@1&ReD#@tvZuK5>#fWMaMW&3fdviCd>dJ=>7ghQORVOTe zyDY8R&$RW15q3!yc3WannSm~-vQfgaTZuffYcJ0DiF4)~mA*&aT>f(Xv%Pc@*HfRm zehgoh#GnU=4nMRqFqD-)6UT7NKI^M-_x8H+U1H^%TvNHnS@${Y$qaXoa1tIVi8Xh1 zIe!RTll_^T2uF|CS6`hGeLp)Pt#L?i5?!1zR@q`PlKi%oQdTEChBpI z+#BW3d3-QIZV3MD_UH$CRTR6MbnYZ}5wg_Z$_y@m&?g zdP4gPnqPai{%j#%{O1-@p7N4o!ZgJQ%;Fjfx7jb!JPB&vGUPwtM9y=Se-?^c0u*kOWi7N?PpG`d=_U32BM8w{#H7)QD1n0VsD}5lf|MiYC%BX zL^PVIrz7D>M&rajFeupqyStb}P=B*3lYlL^r!m*Rju#}6N$#Ot4|Xu^&}&S|OZHc; z?T`<@Slm32?q@d`d0#dNrlO6VNS7C;H=&4;S3eP7pN)08tUMkn%)_U|fsn?XaPMo8 z)Jfl51a)3JVy223s;4*4s-r_^h(vK~t-$==pAe;JpyNM4417aTivW+>(Xn@9h<21e z-%JQ>Yrf<=_TEv>#fcRE?lIGg#2*zm#IHWol3y@8uA9QA{S62%!H)IfL>C}|BhtjxLH=J#QaBnWfQtCpm%S?NpDW;; z^;U~bk`1%94Ba-KGp{9>j+D7={>esG`V$UImv3>lmB-;8nOlV25x<~}f;!(90M4fK4)B)=tfK%*;W07zw4sVhkh1yo#(IB~4-q$n zLDnTdqw`F?4(o1HLETf`;)D4%{s*NO5qB@7Z*E=}HPV_&p;!tzEqknzUN)g+q&7jm zEc&YN=ce)St**pVo$wS}i-X*wTuc7f{*Z%y$xsa(ufa7APLW5g7=R}6;CsYkgo&K9KPB<_`PbI2p^{N%p-Bqw zTaL_x!3aFGdC#LxV>|NOb_ew$>#ThD;@Hg@uM({}nAR zk#+^U8#*UBbs9DfWef^p9=&`^W^){Q3yWXceyz`1VlXIlqTW}C=IJ-9ZA49|=EI&O+XGASzjvFRPU+b1#PG{RJ>$QlDl~Bb!y(Q# zw%6P7^V!Q{@XJT>$5d>W#@cU@xu~+i4|kZc56&aF-k;0%_A&pcj!9MeA+W$e#Z$x3 zuVa}f)>J&xmig#Z*6)IkSl5H{=%1hrjIkFxiyzSbFbbz>U4GxDI3$VUG;M0jlN1Qa zoBiprqqWIi77%-Bt`NEwXb)OcrIXh_Y=84^c(O0I*9{a<8$!xRrXc8?%;Ajgx1ey` zbvr&tJNFi;T|JB&ho()Gdu-Z5{Fv>6n!Q|Dbt+uT?zC-=-JECZd^qZrd>|D4#Flu* z!TsDqtmSIBA9~ktfw+_nev?GMAXF(AEdLCW@7FF9SBhCKJxarEo?|01#Ny(lg@h4f zzD$>!l+?y{>>Yx8JNzMptGxEg^)1us?X#Orwa7mP^f88>q78gkrh?y|Kmp9U^wfQy zD^3WE^`13ap3Uj+%IVdi9B7g9XHz)Z|JU#m*7+S82(H9;y zN-AbXiPfi^kG!AFUdbf<>YQ*Y#{3Gy$2ZH7chgYnP$iE3+QPwALxyRc2LJ4&=#S?& z4zg#G6{H3Zn$`@bTl59eFOQ8j?VPU&&3`>`>5#qHoo<1`=1hKRzJ|k* zT>ZH0L;pB|CWo`eC)2jKNs>m4(*Cj3NB8^8?C9lDDuKnl(1e200Ug7hq)O3Vh~uq< z1Htduittwl=@0(6VI@SzRy!N+YS%WP^=q~&)*x5aDSAsgTD`+5yTtk+E9{vzcdGfA zG;{T`W>KA1jZr+!$cN6Op8*ODZTlM$h%`Od!7aJXMnOBO@|gVF+06ze-?;W|;@_&~ z>ir}{F_=#BnNSVaaus#dUw|0Vy8q1nka$vnM~ z*_MKcoiK{JvS3Ws^1iqp*ZFs!=1prU{>D#m+eiJeL3}L!gsK#KNv}rxH4B-Jte&yC|$LX?1Wsi6)4+0V=-Hy{XoFL{!F9Y4S^W20g5`J zYFGJf_^y83NonJ#Hn;eG)s2>C=rC~X>{~XETKKaYEyp_(3IPzMoP-fewggK%)SzKT ze!EsX@T(os(V=x?=o>A97Imd;6Y`M!!By<99?>zAO~ZH_Q#<7DIR*y=cIi!E$o>;z zDh4DwH~pl5cAC*Xl^L~6yU24E*)a-6dn?;7v!s=aRELyaHxLrmVFZYfP*745^w>Du z2zppG5nCI&a(22_$QK*R$vwMU*}W<-o1A7MTA9^xoRbyyzHAP0frq(nv{V^0GQ?JC zer0p)NilDx;Ys~A*Yi=+uC~-)tXZu^O?X0vei(Kc5HqgIk_G1qZ?O)&;Pqem-rad_ zMC*U>Tx~geOYlr>SuGZE?OyKcbUoFShZ@p=T=@0g84g)#$SXI*iOu+_>?)WY7*TEo z3UIOWb|W=;NHUxfC@e7HJ*J+rbSg*^_GMdrxivnuQYOYbt6!Jj@Dh0JF7vxlEV;hG zay;XYI4ya2uGicI{&7m2^LNqI>US z{qFPBcyA1e!%)h}{_D{NQVHRs`mXpowy&#ZQ^|@8AV(Z0cG{qMNU4>$BTFinm#Nw0>a6I zo9upaAg*Cf7*;HmMzxYlaJWmQzmw`~1EqdPFUA&DWzsNm1_>su%{caX!As%M3l{V# z89N)1v?`(7_@E%VS8p-?$>=@2e86Q``p#8>UFw()5=R4<)b*utub0z18qm32>J;&& zpK>+Y;xNVjP7dS3^T6i1myyzL;CcJ3h`>>c;ECN~0_E__qOSRqcUnrj?*x9n3~KU# znNs$@3RJE5eRD?scUYApiSvkm#W|1Kt;Y45Tc?%JIwOaj6-356xZVvqwnp#|%gHTl zAxS6q?#N`8oMlmU(Xwbq^K?2X&kvS@ondOe#B@17gi=2gH(OCIFgTttVeNaxL?@|I zlU­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 literal 72394 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

0Q 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

i2nqHKP(1SD3WcuObBeJr7 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