diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 2c4e65da292b..93c9a6884d93 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -369,6 +369,7 @@ packages: /@azure/arm-network/30.0.0-beta.3: resolution: {integrity: sha512-+wjvjsWQ4CNsA96jvQxbWkRQrkbPqf7rHUuV9O3aj5wD2ECkDVvhvy8TjRE2UWuEPJoFkJkKrpaAwx2xNIZJBg==} engines: {node: '>=12.0.0'} + deprecated: it's deprecated dependencies: '@azure/abort-controller': 1.0.4 '@azure/core-auth': 1.3.2 @@ -384,6 +385,7 @@ packages: /@azure/arm-storage/30.0.0-beta.2: resolution: {integrity: sha512-KCmM5z3HlWZI6SXxwqoCi8V9Toau99EDSv/3t4zUTGrSv1v4UmuwKemsuvukvaEeOu6Y1gR9jO71snCJolD/yg==} engines: {node: '>=12.0.0'} + deprecated: it's deprecated dependencies: '@azure/abort-controller': 1.0.4 '@azure/core-auth': 1.3.2 @@ -8838,22 +8840,28 @@ packages: dev: false file:projects/arm-policy.tgz: - resolution: {integrity: sha512-lKzDSKhoHFS6qttMoOn8BYpXGwvkgnZHQlgA52pgsAVYdAnlp/CwOxtmq/pysPuRoeg/9/2LGX0zT3XCl1JOsg==, tarball: file:projects/arm-policy.tgz} + resolution: {integrity: sha512-7O/gYIgeBj6BnFxnLUmxWCdnsljPzs6XDy4NqM0RYlBRToxlIdV+Tn6TADE+ZkHM0tMBLTLVMj0LAHAHVnQO2g==, tarball: file:projects/arm-policy.tgz} name: '@rush-temp/arm-policy' version: 0.0.0 dependencies: - '@microsoft/api-extractor': 7.18.15 + '@azure/identity': 2.0.0-beta.6 + '@microsoft/api-extractor': 7.7.11 '@rollup/plugin-commonjs': 11.0.2_rollup@1.32.1 '@rollup/plugin-json': 4.1.0_rollup@1.32.1 '@rollup/plugin-multi-entry': 3.0.1_rollup@1.32.1 '@rollup/plugin-node-resolve': 8.4.0_rollup@1.32.1 + cross-env: 7.0.3 mkdirp: 1.0.4 + mocha: 7.2.0 rollup: 1.32.1 rollup-plugin-node-resolve: 3.4.0 rollup-plugin-sourcemaps: 0.4.2_rollup@1.32.1 tslib: 2.3.1 typescript: 4.2.4 uglify-js: 3.14.2 + transitivePeerDependencies: + - debug + - supports-color dev: false file:projects/arm-purview.tgz: diff --git a/sdk/policy/arm-policy/CHANGELOG.md b/sdk/policy/arm-policy/CHANGELOG.md index 214038da1bc6..18d540f9984d 100644 --- a/sdk/policy/arm-policy/CHANGELOG.md +++ b/sdk/policy/arm-policy/CHANGELOG.md @@ -1,14 +1,39 @@ # Release History -## 5.0.0-beta.2 (Unreleased) - -### Features Added - -### Breaking Changes - -### Bugs Fixed - -### Other Changes +## 5.0.0-beta.2 (2021-10-18) + +**Features** + + - Added operation PolicyAssignments.update + - Added operation PolicyAssignments.updateById + - Added Interface PolicyAssignmentsUpdateByIdOptionalParams + - Added Interface PolicyAssignmentsUpdateOptionalParams + - Added Interface PolicyAssignmentUpdate + - Added Interface UserAssignedIdentitiesValue + - Added Type Alias PolicyAssignmentsUpdateByIdResponse + - Added Type Alias PolicyAssignmentsUpdateResponse + - Interface Identity has a new optional parameter userAssignedIdentities + - Interface PolicyAssignment has a new optional parameter systemData + - Interface PolicyDefinition has a new optional parameter systemData + - Interface PolicySetDefinition has a new optional parameter systemData + +**Breaking Changes** + + - Removed operation DataPolicyManifests.listNext + - Removed operation PolicyAssignments.listForManagementGroupNext + - Removed operation PolicyAssignments.listForResourceGroupNext + - Removed operation PolicyAssignments.listForResourceNext + - Removed operation PolicyAssignments.listNext + - Removed operation PolicyDefinitions.listBuiltInNext + - Removed operation PolicyDefinitions.listByManagementGroupNext + - Removed operation PolicyDefinitions.listNext + - Removed operation PolicyExemptions.listForManagementGroupNext + - Removed operation PolicyExemptions.listForResourceGroupNext + - Removed operation PolicyExemptions.listForResourceNext + - Removed operation PolicyExemptions.listNext + - Removed operation PolicySetDefinitions.listBuiltInNext + - Removed operation PolicySetDefinitions.listByManagementGroupNext + - Removed operation PolicySetDefinitions.listNext ## 5.0.0-beta.1 (2021-10-09) diff --git a/sdk/policy/arm-policy/README.md b/sdk/policy/arm-policy/README.md index 7673ba2077d2..e7df29074d46 100644 --- a/sdk/policy/arm-policy/README.md +++ b/sdk/policy/arm-policy/README.md @@ -4,7 +4,7 @@ This package contains an isomorphic SDK (runs both in Node.js and in browsers) f To manage and control access to your resources, you can define customized policies and assign them at a scope. -[Source code](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/policy/arm-policy) | +[Source code](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/policy/arm-policy) | [Package (NPM)](https://www.npmjs.com/package/@azure/arm-policy) | [API reference documentation](https://docs.microsoft.com/javascript/api/@azure/arm-policy) | [Samples](https://github.com/Azure-Samples/azure-samples-js-management) @@ -33,17 +33,19 @@ npm install @azure/arm-policy To create a client object to access the Azure Policy API, you will need the `endpoint` of your Azure Policy resource and a `credential`. The Azure Policy client can use Azure Active Directory credentials to authenticate. You can find the endpoint for your Azure Policy resource in the [Azure Portal][azure_portal]. -#### Using an Azure Active Directory Credential +You can authenticate with Azure Active Directory using a credential from the [@azure/identity][azure_identity] library or [an existing AAD Token](https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/identity/identity/samples/AzureIdentityExamples.md#authenticating-with-a-pre-fetched-access-token). -You can authenticate with Azure Active Directory using the [Azure Identity library][azure_identity]. To use the [DefaultAzureCredential][defaultazurecredential] provider shown below, or other credential providers provided with the Azure SDK, please install the `@azure/identity` package: +To use the [DefaultAzureCredential][defaultazurecredential] provider shown below, or other credential providers provided with the Azure SDK, please install the `@azure/identity` package: ```bash npm install @azure/identity ``` -You will also need to register a new AAD application and grant access to Azure Policy by assigning the suitable role to your service principal (note: roles such as `"Owner"` will not grant the necessary permissions). +You will also need to **register a new AAD application and grant access to Azure Policy** by assigning the suitable role to your service principal (note: roles such as `"Owner"` will not grant the necessary permissions). Set the values of the client ID, tenant ID, and client secret of the AAD application as environment variables: `AZURE_CLIENT_ID`, `AZURE_TENANT_ID`, `AZURE_CLIENT_SECRET`. +For more information about how to create an Azure AD Application check out [this guide](https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal). + ```javascript const { PolicyClient } = require("@azure/arm-policy"); const { DefaultAzureCredential } = require("@azure/identity"); @@ -64,11 +66,11 @@ const client = new PolicyClient(new DefaultAzureCredential(), subscriptionId); Enabling logging may help uncover useful information about failures. In order to see a log of HTTP requests and responses, set the `AZURE_LOG_LEVEL` environment variable to `info`. Alternatively, logging can be enabled at runtime by calling `setLogLevel` in the `@azure/logger`: ```javascript -import { setLogLevel } from "@azure/logger"; +const { setLogLevel } = require("@azure/logger"); setLogLevel("info"); ``` -For more detailed instructions on how to enable logs, you can look at the [@azure/logger package docs](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/logger). +For more detailed instructions on how to enable logs, you can look at the [@azure/logger package docs](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/logger). ## Next steps @@ -76,7 +78,7 @@ Please take a look at the [samples](https://github.com/Azure-Samples/azure-sampl ## Contributing -If you'd like to contribute to this library, please read the [contributing guide](https://github.com/Azure/azure-sdk-for-js/blob/master/CONTRIBUTING.md) to learn more about how to build and test the code. +If you'd like to contribute to this library, please read the [contributing guide](https://github.com/Azure/azure-sdk-for-js/blob/main/CONTRIBUTING.md) to learn more about how to build and test the code. ## Related projects @@ -88,5 +90,5 @@ If you'd like to contribute to this library, please read the [contributing guide [azure_sub]: https://azure.microsoft.com/free/ [azure_sub]: https://azure.microsoft.com/free/ [azure_portal]: https://portal.azure.com -[azure_identity]: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/identity/identity -[defaultazurecredential]: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/identity/identity#defaultazurecredential +[azure_identity]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity +[defaultazurecredential]: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/identity/identity#defaultazurecredential diff --git a/sdk/policy/arm-policy/_meta.json b/sdk/policy/arm-policy/_meta.json index 2a37388e4c35..6ec479b2b805 100644 --- a/sdk/policy/arm-policy/_meta.json +++ b/sdk/policy/arm-policy/_meta.json @@ -1,7 +1,7 @@ { - "commit": "406474c3807f2dec010af72286f22aa7a9a54920", + "commit": "62ec79080af0d0d609650d67155ef4a93ae11482", "readme": "specification/resources/resource-manager/readme.md", - "autorest_command": "autorest --version=3.1.3 --typescript --modelerfour.lenient-model-deduplication --head-as-boolean=true --license-header=MICROSOFT_MIT_NO_VERSION --typescript-sdks-folder=/Users/zhangqiaoqiao/work/code/azure-sdk-for-js ../azure-rest-api-specs/specification/resources/resource-manager/readme.md --use=@autorest/typescript@6.0.0-beta.7", + "autorest_command": "autorest --version=3.1.3 --typescript --modelerfour.lenient-model-deduplication --head-as-boolean=true --license-header=MICROSOFT_MIT_NO_VERSION --generate-test --typescript-sdks-folder=D:\\mydev\\azure-sdk-for-js ../azure-rest-api-specs/specification/resources/resource-manager/readme.md --use=@autorest/typescript@6.0.0-beta.13", "repository_url": "https://github.com/Azure/azure-rest-api-specs.git", - "use": "@autorest/typescript@6.0.0-beta.7" + "use": "@autorest/typescript@6.0.0-beta.13" } \ No newline at end of file diff --git a/sdk/policy/arm-policy/api-extractor.json b/sdk/policy/arm-policy/api-extractor.json index 5fb5b21b56f2..b86ea1c77d22 100644 --- a/sdk/policy/arm-policy/api-extractor.json +++ b/sdk/policy/arm-policy/api-extractor.json @@ -1,12 +1,12 @@ { "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - "mainEntryPointFilePath": "./esm/index.d.ts", + "mainEntryPointFilePath": "./dist-esm/src/index.d.ts", "docModel": { "enabled": true }, "apiReport": { "enabled": true, "reportFolder": "./review" }, "dtsRollup": { "enabled": true, "untrimmedFilePath": "", - "publicTrimmedFilePath": "./esm/index.d.ts" + "publicTrimmedFilePath": "./types/arm-policy.d.ts" }, "messages": { "tsdocMessageReporting": { "default": { "logLevel": "none" } }, diff --git a/sdk/policy/arm-policy/package.json b/sdk/policy/arm-policy/package.json index c30de1206034..276b155bcbd0 100644 --- a/sdk/policy/arm-policy/package.json +++ b/sdk/policy/arm-policy/package.json @@ -4,9 +4,7 @@ "author": "Microsoft Corporation", "description": "A generated SDK for PolicyClient.", "version": "5.0.0-beta.2", - "engines": { - "node": ">=12.0.0" - }, + "engines": { "node": ">=12.0.0" }, "dependencies": { "@azure/core-paging": "^1.1.1", "@azure/core-client": "^1.0.0", @@ -14,19 +12,13 @@ "@azure/core-rest-pipeline": "^1.1.0", "tslib": "^2.2.0" }, - "keywords": [ - "node", - "azure", - "typescript", - "browser", - "isomorphic" - ], + "keywords": ["node", "azure", "typescript", "browser", "isomorphic"], "license": "MIT", "main": "./dist/index.js", - "module": "./esm/index.js", - "types": "./esm/index.d.ts", + "module": "./dist-esm/src/index.js", + "types": "./types/arm-policy.d.ts", "devDependencies": { - "@microsoft/api-extractor": "^7.18.11", + "@microsoft/api-extractor": "7.7.11", "@rollup/plugin-commonjs": "11.0.2", "@rollup/plugin-json": "^4.0.0", "@rollup/plugin-multi-entry": "^3.0.0", @@ -34,41 +26,43 @@ "mkdirp": "^1.0.4", "rollup": "^1.16.3", "rollup-plugin-sourcemaps": "^0.4.2", - "rollup-plugin-node-resolve": "^3.4.0", "typescript": "~4.2.0", - "uglify-js": "^3.4.9" + "uglify-js": "^3.4.9", + "@azure/identity": "2.0.0-beta.6", + "@azure-tools/test-recorder": "^1.0.0", + "mocha": "^7.1.1", + "cross-env": "^7.0.2" }, "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/policy/arm-policy", "repository": { "type": "git", "url": "https://github.com/Azure/azure-sdk-for-js.git" }, - "bugs": { - "url": "https://github.com/Azure/azure-sdk-for-js/issues" - }, + "bugs": { "url": "https://github.com/Azure/azure-sdk-for-js/issues" }, "files": [ "dist/**/*.js", "dist/**/*.js.map", "dist/**/*.d.ts", "dist/**/*.d.ts.map", - "esm/**/*.js", - "esm/**/*.js.map", - "esm/**/*.d.ts", - "esm/**/*.d.ts.map", + "dist-esm/**/*.js", + "dist-esm/**/*.js.map", + "dist-esm/**/*.d.ts", + "dist-esm/**/*.d.ts.map", "src/**/*.ts", "README.md", "LICENSE", "rollup.config.js", "tsconfig.json", "review/*", - "CHANGELOG.md" + "CHANGELOG.md", + "types/*" ], "scripts": { - "build": "tsc && rollup -c rollup.config.js && npm run minify && mkdirp ./review && npm run extract-api", + "build": "tsc && rollup -c 2>&1 && npm run minify && mkdirp ./review && npm run extract-api", "minify": "uglifyjs -c -m --comments --source-map \"content='./dist/index.js.map'\" -o ./dist/index.min.js ./dist/index.js", "prepack": "npm run build", "pack": "npm pack 2>&1", - "extract-api": "mkdirp ./review && api-extractor run --local", + "extract-api": "api-extractor run --local", "lint": "echo skipped", "audit": "echo skipped", "clean": "echo skipped", @@ -79,16 +73,16 @@ "check-format": "echo skipped", "execute:samples": "echo skipped", "format": "echo skipped", - "test": "echo skipped", + "test": "npm run integration-test", "prebuild": "echo skipped", "test:node": "echo skipped", "test:browser": "echo skipped", - "unit-test": "echo skipped", - "unit-test:node": "echo skipped", + "unit-test": "npm run unit-test:node && npm run unit-test:browser", + "unit-test:node": "cross-env TEST_MODE=playback npm run integration-test:node", "unit-test:browser": "echo skipped", + "integration-test": "npm run integration-test:node && npm run integration-test:browser", + "integration-test:node": "mocha -r esm --require ts-node/register --timeout 1200000 --full-trace test/*.ts", "integration-test:browser": "echo skipped", - "integration-test:node": "echo skipped", - "integration-test": "echo skipped", "docs": "echo skipped" }, "sideEffects": false, diff --git a/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_create_test.js b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_create_test.js new file mode 100644 index 000000000000..30aff5ca067a --- /dev/null +++ b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_create_test.js @@ -0,0 +1,211 @@ +let nock = require('nock'); + +module.exports.hash = "43a1d1f75484fbd9ceb8e68334d18563"; + +module.exports.testInfo = {"uniqueName":{},"newDate":{}} + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '6e696c6f-a9ba-43a3-bb16-4b587bea0f00', + 'x-ms-ests-server', + '2.1.12158.6 - SEASLR1 ProdSlices', + 'Set-Cookie', + 'fpc=AgZoVqNBobZBs2MW43cntsg; expires=Wed, 17-Nov-2021 02:55:35 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7Wevrw-FuKGl7RA9cAGbNB4edFB3uMX9V454sHkyd7MZFmI0o9SMwWEvcFG_sDv5yKKY90J_oJt7T6tgBVgbBa9POdfMIKCqEhXR4BDmf6JL0kVvH3Ga1dF0r4iuhRf6xI8pjkntPqyvClzFzw0b9uLIHKhYDGHxF7LmZU8D9cz3AMQQgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:35 GMT', + 'Content-Length', + '980' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '6e696c6f-a9ba-43a3-bb16-4b587cea0f00', + 'x-ms-ests-server', + '2.1.12158.6 - SEASLR1 ProdSlices', + 'Set-Cookie', + 'fpc=AmAWSeU3iR9MhytFFIsfJ8s; expires=Wed, 17-Nov-2021 02:55:35 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7Wevr-0iJ4n03hlNnEz2tQuGbJdRcEXn4L4i0W9XbqUj5_SeKEzxfJ7eIuUxEU2DO6mCQCVTBh6zCkMK7a7B0ltTL9FwLrGbZesVWaoOQEIC8VTgb7txsxHeB2mmfc9R_NoHud-B_LWbg3XPwCf8OX16iv5cAcZ3prFG252xA0Jtcmn8gAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:35 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.3.2&x-client-OS=win32&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=5|771,2,,,|,&x-client-last-telemetry=5|0|||0,0&client-request-id=9783f15b-4073-4655-a36f-73ff1c221e80&client_secret=azure_client_secret&claims=%7B%22access_token%22%3A%7B%22xms_cc%22%3A%7B%22values%22%3A%5B%22CP1%22%5D%7D%7D%7D") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '6e696c6f-a9ba-43a3-bb16-4b587dea0f00', + 'x-ms-ests-server', + '2.1.12158.6 - SEASLR1 ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AosAvVdmn2tDgTJAgX5FCAUWPr5BAQAAACfZ_tgOAAAA; expires=Wed, 17-Nov-2021 02:55:35 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:35 GMT', + 'Content-Length', + '1351' +]); + +nock('https://management.azure.com:443', {"encodedQueryParams":true}) + .put('/providers/Microsoft.Management/managementGroups/20000000-0001-0000-0000-000000000123/providers/Microsoft.Authorization/policyDefinitions/policynameaxx', {"properties":{"policyType":"Custom","description":"Don't create a VM anywhere","policyRule":{"if":{"allof":[{"source":"action","equals":"Microsoft.Compute/virtualMachines/write"},{"field":"location","in":["eastus","eastus2","centralus"]}]},"then":{"effect":"deny"}}}}) + .query(true) + .reply(201, {"properties":{"policyType":"Custom","mode":"Indexed","description":"Don't create a VM anywhere","metadata":{"createdBy":"f76f8265-6a7e-4a2f-91d8-502be6f04df4","createdOn":"2021-10-12T09:15:07.5619086Z","updatedBy":"f76f8265-6a7e-4a2f-91d8-502be6f04df4","updatedOn":"2021-10-18T02:55:36.2284849Z"},"policyRule":{"if":{"allof":[{"source":"action","equals":"Microsoft.Compute/virtualMachines/write"},{"field":"location","in":["eastus","eastus2","centralus"]}]},"then":{"effect":"deny"}}},"id":"/providers/Microsoft.Management/managementGroups/20000000-0001-0000-0000-000000000123/providers/Microsoft.Authorization/policyDefinitions/policynameaxx","type":"Microsoft.Authorization/policyDefinitions","name":"policynameaxx","systemData":{"createdBy":"azure_client_id","createdByType":"Application","createdAt":"2021-10-12T09:15:07.5424058Z","lastModifiedBy":"azure_client_id","lastModifiedByType":"Application","lastModifiedAt":"2021-10-18T02:55:36.2167242Z"}}, [ + 'Cache-Control', + 'no-cache', + 'Pragma', + 'no-cache', + 'Content-Length', + '997', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'Server', + 'Kestrel', + 'x-ms-ratelimit-remaining-tenant-writes', + '1199', + 'x-ms-request-id', + '69ceb56a-5356-40b2-9dd6-d892fdd2864d', + 'x-ms-correlation-request-id', + '69ceb56a-5356-40b2-9dd6-d892fdd2864d', + 'x-ms-routing-request-id', + 'SOUTHEASTASIA:20211018T025536Z:69ceb56a-5356-40b2-9dd6-d892fdd2864d', + 'X-Content-Type-Options', + 'nosniff', + 'Date', + 'Mon, 18 Oct 2021 02:55:35 GMT' +]); + +nock('https://management.azure.com:443', {"encodedQueryParams":true}) + .get('/providers/Microsoft.Management/managementGroups/20000000-0001-0000-0000-000000000123/providers/Microsoft.Authorization/policyDefinitions/policynameaxx') + .query(true) + .reply(200, ["1f8b0800000000000400edbd07601c499625262f6dca7b7f4af54ad7e074a10880601324d8904010ecc188cde692ec1d69472329ab2a81ca6556655d661640cced9dbcf7de7befbdf7de7befbdf7ba3b9d4e27f7dfff3f5c6664016cf6ce4adac99e2180aac81f3f7e7c1f3f227ef147abba5ae5755be4cd478fe8afaa2ca6d76fae57f9478f3e3a59376db5f868f4d1a29ae1efb3e52c7f97cfe88359de4ceb62d516d5923e7f5a2d3f6ed3699d676d9e66e94f7e9166cbebab795ee7d47491b7d92c6b33409726b327d7f4d2f9834fcf0ff63ebdbffd69f620dfdecff6ceb71feece0eb6efefec4df24fcf77f667e7fbf4babef225fad9dbd9dbdddeddd9dedd7bb3f3f0d1eefd473b0fc6f73fdd7db873f0e94f51d3f58afa793fe8fa4a08fde0cdcedea3fbf71fddfb74bcb777b07fb0fff0a73efa252325cdab7549a4f8c51f15e7f8372bcb8a7ef9de2ffea8a9d6f594bef9289b3255461fe5bf689d9544d48fbe28a675d554e7edf8a45aacd66d7ef7b2a85bfaf28b6c3a2f967973f7aa2eda9cfaf8c51f9d177939a377ca6a9a299c8290fbde4779d6b4eb86fe945ff6e8b769be6cebaca44fbfff4bbe4f08b6f39c9afee28ff2f3f37cda129059bebcfee897fc12faaa00ccbb34d597c52caf9bbb0ea52fb26576912f08d4dd85fdf5f3ba5aaf9abb7b3bf26cd3ff77f10fff26fff0b3bb772f0af478ddceabbaf8010fe1ae10ee697e5e2c0b7cd0e827cb6c9167efded1485ae1b75b03a057f032bd225fe10f81d45c376dbe781ae3b76cff41b67b6f67fb3cbb3fddde9f4d76b61f4ea7f7b727d34fefefdc9f1eec3fd87f4000ec2b2a03c7ab15f5c078b86f8f415dcb2f3e37eeefedefdc3f003796344f5f54b3826694a051fb5b2210be17c5c26f12a2e2b3eeeea70ff6f6f788757f","c9ff037b0ed406e5030000"], [ + 'Cache-Control', + 'no-cache', + 'Pragma', + 'no-cache', + 'Transfer-Encoding', + 'chunked', + 'Content-Type', + 'application/json; charset=utf-8', + 'Content-Encoding', + 'gzip', + 'Expires', + '-1', + 'Vary', + 'Accept-Encoding', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'Server', + 'Kestrel', + 'x-ms-ratelimit-remaining-tenant-reads', + '11999', + 'x-ms-request-id', + 'd6ec4722-cc24-4bd5-a8cd-6f62be87957f', + 'x-ms-correlation-request-id', + 'd6ec4722-cc24-4bd5-a8cd-6f62be87957f', + 'x-ms-routing-request-id', + 'SOUTHEASTASIA:20211018T025536Z:d6ec4722-cc24-4bd5-a8cd-6f62be87957f', + 'X-Content-Type-Options', + 'nosniff', + 'Date', + 'Mon, 18 Oct 2021 02:55:35 GMT' +]); + +nock('https://management.azure.com:443', {"encodedQueryParams":true}) + .put('//providers/Microsoft.Management/managementgroups/20000000-0001-0000-0000-000000000123//providers/Microsoft.Authorization/policyAssignments/passigment', {"properties":{"policyDefinitionId":"/providers/Microsoft.Management/managementGroups/20000000-0001-0000-0000-000000000123/providers/Microsoft.Authorization/policyDefinitions/policynameaxx"}}) + .query(true) + .reply(201, {"properties":{"policyDefinitionId":"/providers/Microsoft.Management/managementGroups/20000000-0001-0000-0000-000000000123/providers/Microsoft.Authorization/policyDefinitions/policynameaxx","scope":"/providers/Microsoft.Management/managementgroups/20000000-0001-0000-0000-000000000123","metadata":{"createdBy":"f76f8265-6a7e-4a2f-91d8-502be6f04df4","createdOn":"2021-10-18T02:55:36.6170443Z","updatedBy":null,"updatedOn":null},"enforcementMode":"Default"},"id":"/providers/Microsoft.Management/managementgroups/20000000-0001-0000-0000-000000000123/providers/Microsoft.Authorization/policyAssignments/passigment","type":"Microsoft.Authorization/policyAssignments","name":"passigment","systemData":{"createdBy":"azure_client_id","createdByType":"Application","createdAt":"2021-10-18T02:55:36.591705Z","lastModifiedBy":"azure_client_id","lastModifiedByType":"Application","lastModifiedAt":"2021-10-18T02:55:36.591705Z"}}, [ + 'Cache-Control', + 'no-cache', + 'Pragma', + 'no-cache', + 'Content-Length', + '959', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'Server', + 'Kestrel', + 'x-ms-ratelimit-remaining-tenant-writes', + '1198', + 'x-ms-request-id', + 'ef4f2e49-c882-49a7-b349-4daf01d5d632', + 'x-ms-correlation-request-id', + 'ef4f2e49-c882-49a7-b349-4daf01d5d632', + 'x-ms-routing-request-id', + 'SOUTHEASTASIA:20211018T025536Z:ef4f2e49-c882-49a7-b349-4daf01d5d632', + 'X-Content-Type-Options', + 'nosniff', + 'Date', + 'Mon, 18 Oct 2021 02:55:35 GMT' +]); diff --git a/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_delete_test.js b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_delete_test.js new file mode 100644 index 000000000000..e87028b68461 --- /dev/null +++ b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_delete_test.js @@ -0,0 +1,183 @@ +let nock = require('nock'); + +module.exports.hash = "9a34c9d12b59c7726788ae44266146f5"; + +module.exports.testInfo = {"uniqueName":{},"newDate":{}} + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '67857af0-7c4f-4793-a717-964e722f1000', + 'x-ms-ests-server', + '2.1.12158.6 - KRSLR1 ProdSlices', + 'Set-Cookie', + 'fpc=AognZwdGuF9IpL6IIrR64a0; expires=Wed, 17-Nov-2021 02:55:38 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrHpy05JckPk9v1SJzMPLgpIKCPQeCaJXd1VrL2QcU22SIevUlsOYVBNETjbKhO6ACbJmv78LFdtfSLIvYBFzQ4G5C4DB9skK2tNZDSoT8XswwmGubiR-dF-5Co4pw-6tDCdpNkrjJwCb0G3iYBfiVrpRaaf1LnkuVsrtl1cjre9ogAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:37 GMT', + 'Content-Length', + '980' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'f38ab4ff-4fd2-498d-8a96-890c48041000', + 'x-ms-ests-server', + '2.1.12158.6 - KRSLR2 ProdSlices', + 'Set-Cookie', + 'fpc=AnuXb0IQGdZEgkxbRFWx4r0; expires=Wed, 17-Nov-2021 02:55:38 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrJIeFrIyrOIq55ccoSaNBzJh3fQSFNVM7aq3DLPppSEVEx8R5nlHtYEHXJIqGIN5H9MSwP_rKD6CyPFY0SdOI4s3bsptIZtDdQVvCK-DPNRHKopXb65FQjZl_vQSUpDrVqo8YS9aOZWtBju_VlAYL0CrpmjZOUBcz5LPrnDHYMDUgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:37 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.3.2&x-client-OS=win32&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=5|771,2,,,|,&x-client-last-telemetry=5|0|||0,0&client-request-id=9ae76951-152c-4493-be93-abbc0371e22b&client_secret=azure_client_secret&claims=%7B%22access_token%22%3A%7B%22xms_cc%22%3A%7B%22values%22%3A%5B%22CP1%22%5D%7D%7D%7D") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'ea3e9b90-f5ac-4be3-85d3-ff02a0541000', + 'x-ms-ests-server', + '2.1.12158.6 - KRSLR1 ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AigM9n-jmL1Gh944CmeV1CIWPr5BAQAAACnZ_tgOAAAA; expires=Wed, 17-Nov-2021 02:55:38 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:38 GMT', + 'Content-Length', + '1351' +]); + +nock('https://management.azure.com:443', {"encodedQueryParams":true}) + .delete('//providers/Microsoft.Management/managementgroups/20000000-0001-0000-0000-000000000123//providers/Microsoft.Authorization/policyAssignments/passigment') + .query(true) + .reply(200, ["1f8b0800000000000400edbd07601c499625262f6dca7b7f4af54ad7e074a10880601324d8904010ecc188cde692ec1d69472329ab2a81ca6556655d661640cced9dbcf7de7befbdf7de7befbdf7ba3b9d4e27f7dfff3f5c6664016cf6ce4adac99e2180aac81f3f7e7c1f3f227ef147abba5ae5755be4cd478fe8afaa2ca6d74ff3f36259b445b53c9b7df4e8a3bbd4e6b298e57573f78b625a574d75de8ebfc896d945bec897eddd85fdf5f3ba5aaf9abb7b3bf26cd3ff77f10fff26fff0b3bb772f0af478ddceabbaf84186beef769169f49365b6c8b377ef3e1a7dd44c09f9f7c2f0e2f61812fc45de66b3accd409a699d676d3e7b724dfd9d3ff8f4fc60efd3fbdb9f660ff2edfd6cef7cfbe1eeec60fbfecede24fff47c677f76be4fafeb2b5f2ee995bd9dbdddeddd9deddd83373b7b8feedf7f74efd3f1a7bb0f76f6f7effd14355dafa81f81be5c97a5fd00efe2835f32fa285f9e57f59447f14535c3b08934d9ba6c3fa22f8bf79ba8f7204314686ca28e9ba6b858023a4d54863ff03b8dadbde649baf5dbf40aa6985e09c034d74d9b2f9ec6a623db7f90eddedbd93ecfee4fb7f767939ded87d3e9fdedc9f4d3fb3bf7a707fb0ff61f1000fbca1b41e878b5a29e1909f7ed714bdfc426ebfe439aadfb98ab326b3003c5790160d4fc96fd87ef4591f09bdc88c92ff925","ff0fb9790b49bf030000"], [ + 'Cache-Control', + 'no-cache', + 'Pragma', + 'no-cache', + 'Transfer-Encoding', + 'chunked', + 'Content-Type', + 'application/json; charset=utf-8', + 'Content-Encoding', + 'gzip', + 'Expires', + '-1', + 'Vary', + 'Accept-Encoding', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'Server', + 'Kestrel', + 'x-ms-ratelimit-remaining-tenant-deletes', + '14999', + 'x-ms-request-id', + '425cc15f-67f3-4e24-b5dd-a2385b4c5b11', + 'x-ms-correlation-request-id', + '425cc15f-67f3-4e24-b5dd-a2385b4c5b11', + 'x-ms-routing-request-id', + 'SOUTHEASTASIA:20211018T025538Z:425cc15f-67f3-4e24-b5dd-a2385b4c5b11', + 'X-Content-Type-Options', + 'nosniff', + 'Date', + 'Mon, 18 Oct 2021 02:55:37 GMT' +]); + +nock('https://management.azure.com:443', {"encodedQueryParams":true}) + .get('/subscriptions/azure_subscription_id/providers/Microsoft.Authorization/policyAssignments') + .query(true) + .reply(200, ["1f8b0800000000000400edbd07601c499625262f6dca7b7f4af54ad7e074a10880601324d8904010ecc188cde692ec1d69472329ab2a81ca6556655d661640cced9dbcf7de7befbdf7de7befbdf7ba3b9d4e27f7dfff3f5c6664016cf6ce4adac99e2180aac81f3f7e7c1f3f227ef1479759b9ce3f7af4bd5ffcd1aaae5679dd1679f3d1a35ffcd1ac68566576fd225bd0b71f1dbf3e499fe6e7d9ba6cd3ad663d69a675b16a8b6af9287db877fef0feece07cfbdef4d307dbfbbb7bfbdb0f77a70fb60fa6e73b0fa6b3c9f9defeee9d8f461fadaab2985e13906259e0cdb319c1bd4b9d5e16b3bc6eee7e514cebaaa9cedbf1f1ba9d5775f1830ccdeeca7baff3d6bddadcdd3dbf979dcfce1f6ecf76a60fb7f7a7f766db07fb0fceb70f1eceb24f77efe50f76b203eab399d290d08d8f7273f73628d3dbabaca6d1b7849c1024bb58564d5b4c9be7d54573b67c9dd797c5347f964dea62fa4545a811d2cb8bd3f3f37cdae20d25ed47c7eb59d19e9dbfa8dad37745d3361ffd12c2ecba69f3c557ab59d6e6cdd77bf9a45a9e1717eb9ac9f4de30f2e56c5515cbf6655db5d49c40bc2f04e290b7a7cb697dcd547ddfb797797b55d56f5fe7d3755db4d79fd7d57af5de83b8ca27c7ab15f107d3e05951e7575959be2f94e61795fc31bdf0355efd1012bc6b3fcf97b9cce0d7c5fe725d02c4a428898cc74d93378b7cd9be2f94861a6717f97b0c066ffd74d1be90793c9e4ef3e6bde72f9b65d4d965ee4d2271755b57e57b832225b26c89024ff3a6b85892543d277cdeccb3e59757449e0f07f74555e70c6e9933c4af0bf074994dcafc8b67c7cfaa9a01bdcceb45d13434f4af8da40ff3bb244df9370cf3559ecdbe0190aff24575993fcd57754e739dcf8867aaf5b2fd6ed1cebf294a0c74f161e04edf910d5866a502fbe6f18d74f04d4de360071f34a7d4c12cb706959abc99174d2a963acd08e2c5124a28bdca9a345bb7d582447b4abaed3a9dd639e6259d5ca7c73f58d7796a0c407a422fe435995d32b9a417da0c2808ac7cf6e49a3ae936252cf2e579554f7374f6453503b2e425c04bc197057b18ef6ffa6fed9490b625ecd07973d72027b83d5917657bb6a4d1b4d7ec81dc1a10bdb2ccd8e78a43fc25a3cd9e5a86c94a9b660ec2cf7fffddf13e41945e8834ea400dfb5e5f644b3203c0e4eec2fe7ac1c6f9eefec1793ebb97ed6eef1cecee6fef93c3b57d7030cdb7270f3efd74f7fefdf3bd070ff7a2406343ee3874f726f94e9eed4ef2f37bb307bbd38c90b6ce5b0c64144f71226e8527c10fddbbe3b2acaef2d9f38af40630dac5872a01dffb68fd7659d5ed9cde5abf6d2a1acede47df1f90021e12c1b8cc6906682e9af46a9eb7f3bc4eb3e575fabc58aedfa53ff945935635fd78fd3a5d3779ba223e272b3adbae96242398381a0d490ce0a6c4e1e9ebd7df1e93a8e4e9bc6d57cda3bb77b3b7d978d1dcbd68efb218bd649a72d30519aa744632549460261aa19526153e16a6ddf307f7270f67b3edfdf35dfa273fd8d97e787f6f77fbdede6e7630d93dbfffe053708ebef22586b7b7b3b7b3bd737f7b77efcddebd47fb078ff61e8eefefef3e3878f053d472cdbeec7b01d7570c709ab0ddedbd83373b3b04f9d1bd4fc7fbfbf73ebdb7b7ff53c4f4b791f49f0d3e89028df1b327c2149d4cf7a60f67f9fdf34f1f2a337f7d35d00376930658d68b667b92b5d3f9769dffa235b995dbc463f5b6af08b7174443520e3bd48ff44dd464ceadfedfa01c1c32cddd07fbd3870793fb0fb34fefedefee1f04615d0c5e14c9f79871821f6a06b25b8166c06756314c09784d7f34f93a5bd1ab79d6b4eb664fffbaca9bd6b6a0bf5989f81fa001ff82f7b2a600ab64eb06df179936f43f4233fa7b4a039b79df33dc7c0da6a0bff4f36249212bfdf9d3d92a5bea8b6f493978efa93273bf61f4fab5458b7f1144f1f5799d2da7b936a2bff93db41b401fefd8cf6c63fa5006a17f00be1d00b70ad0c7d7f43ba3cfdfd21febb7faa953cef4a562c98d14031ec0a4ce7e401a111fd35f78d374200332df5c94d584c7252ff0bbdcd234e03ff0bef95d7ba13fd7994717fac3a0c5af66e79426c8221f29ace6aa687f90d765b69cd946ee236d74411e1b9911d340ffc497ae63faf22abb0629ec1f68407fc890b86bfd1a5fac9b7bf41b3e58374d7949bf37c4ee39d1c44094bff93dfaeba70bca1bd0b8f1aef7a769fe7dd2c779dc878c388e4f32d253a9faa54dba2046618b98a52fabaa4c619545ec5268fdb43a4fbf225d96369e2e4be97f34a0f4787689899ca56d3649db2a9d6a7e04c07e92c254b2ccdcce7ff7629ca66cb5730e771a6e80fea9a317af3fa7bfabb4811f96f3379ab44869a0e7e7c594ed2d3e0f46412023969a5e2d9aeaee257e2e7f9aa843bdf3fb3f9bf67af7e1f6ce3e59d5377b7b8fc864df7f387ef8e0d39dfb9fee7d6306fb607befd337bbf71fedee3fdadb1ddf3bb8fff0e03e41a779feff92c1fe74727efee0e16cef41369d3c9cb28df9fa063b024c12764f755a4b12352249715e28f541e0d9ecc1cef683bd9cb2990fcfa7dbd9ee74b2fd2959bdbd07f7f6f39d87e704257cef8d20e8a54e3a4d8e4900e3b3f4e9a7fb0f770e68966e722528bd95cd9a6df6638bf325650a3900d40f96176933afd6254573b90ad00cc29819412466c9447c288ca15f5abc439eef3225c0f4777d99d7ffdf70420ecea7f983073bb3fcfce1c37b0f1f12c23ff2416860dfac0fa29f595cf817c10e14113bad8de86f7e4d4c28f74d1fa93d347fd24f327e00457f78c6943ee7efbb261a2d07080004ec67b6317d489d1319f40f206b49c0ad0202e06bfa9d09c0dfd21fd68ba18f74a0fc95f6cb34f0ec36fd85f606acd0c47cc33f852268449f2841f09702a40f69cc44167c467f100ddc371e8df46be99ab1e03eb90bf387b6e1df1d10e78ee9d4624c0287ffc440e913eb6801ca0fcf0709f258a4e669512783ae73cd5effc4f3e3a7af4fdf4dcbf52c9fa1916a2ebf91aa3ba8d08e47c3bd342941510d9796f9655e52544f9f1314f24be843d209c61ff9e2757a52d5abb42598e43dd07048ee89a7c458a841673b714b2badaf182b4d31fba7dbbb3b6f76f61eedee3dbaf760bcff60f7c1fd1db2d2344362d0df07babe62a0438f19eb72ffd1cefef8d3079f3e78789f8c0b4dc1ff975c80e9ce64fffec1decefec3c984b43c8df4035c803eb0ffd7b8003249fb7b0f1fee130b10ff7e3d1720587642ce97965b4085b84b705dadc969b746bff9ff86d5dfdfdd99ee3dfcf4d36c37df3db8ff292bf5ff7f997df02cb4ee80d5f33f4233fa5bec9dfb9e75bdb579fa392b63fa93ad9ebec8564fbfa73fd536d06ffa19db18b4e55fa0d8c51a8a89d346f437bf26468efba68fd4ca993fe927d93780a23f3c93469ff3f764f2ccaf0c0c2d07080004ec67b6317d489d1319f40f206b49c0ad0202e06bfa9d09c0dfd21f3f32fb80f2ff66b34fad060dfb4f06ca8f4c80517ed6b6d3787ff886fdfecec307a4ae7e560cfbc3f1de3e96cb10361295ff3f64d90f7632ca4bec66fbf73f355afceb5bf6833eb0ff3759769aa5bd073bf71feed22c7d5dcb9eb5c4b2d47fe39972f280910afb98e2d08fe1b7d2bbf4194cf94dd1feff372c7d36bd773e3dc866f73eddcd1e520a8b30fe91a5a781fdc8d22b19f40f206b49c0ad0202e06bfa9d09c0dfd21f3fb2f480f2ff454b9f51929e56f1a9797afce62572f4d41fb550ed984119d00ac10fddd2ef934add79b0fbf0fec39f154bff607c70efc1c39dff2f5afa7cb23fbd7f7e90cf26441cd6e2982ac2f1d630e81561978f22c0fedf64e96996761f3ed87b8859bac9d22feb4583e57f5a7bdaaef35fb42eea7c7bd95cfc7fc3344f0ece77cfb3ec53a2e4feee399bce1f99661ad8376b9af5378c5ebfb668f12f8228be168ba48de86f7e0fed06d0c73bf633db983e9441e81f806f07c0ad02f4f135fdcee8f3b7f48735acce1ed1978a2537520c78009e7da2bff0a6e9400664beb1564b5ee077b9a569c07fe07df3bbf6427f06a696fe3068f1ab62b6231f292ccf34db46ee236da4e6de34d03ff1a5eb98be24eb0f52d83fd080fe902171d7fa35bef8e1996668aaaea92dcbf4e493e3b3f4b5b72adfa40b6298749e91f5cdb00e8f142289212fe337883f6800c13afec635775275cd0f77a97dffd1ceeef853caff3ea04438b182d8dbf701aeaf2870fade29fffd47fbf7c70f1fee3ddcdfbd47ca9fa8fdff21139d4db3fdd9eec36cb29fdfdbb9c7daf6eb9be808b0ffd7986899a507f73ebd7f1fb304134db45ab6141b03b3555d2ca7c52a2bd9dadecf7677f6f767f4f283f34f8929eecdb627949fdfbeb743ac919307b2ffe994fa14f792df78b077fef0e06072be7df0e9f9eef6fe6e76befd70379b6cefcd1e4c673bbbbbf4ca03bc21a8bf66aa080de1f1928983aa1d7017dee6d797601f4cc62c2fc910b231a6915fe6ffeff5195ee7adc3a7b9bb77efde4136c93fddbf4f9e32f91084f40fd76d20cd16b80dbbf850d5e1ff7ffc06fdcce2c2bf08762089d8566d447ff36b62f6b86ffa486d98f9937e92c10228fac33380f4397fdf35ab6839400020603fb38de943ea9cc8a07f00594b026e1510005fd3ef4c00fe96feb09e077da403e5afb45fa681676be92fb437608526e61bfe29144123fa440982bf14207d486326b2e033fa8368e0bef168a45f4bd78c05f7c95d983fb40dffee80c82bdc1063a24fd0ee7d3d03eb3b199f0040bc3fcd7bdf2775d8f103decc0b1876125e921632fb53921884f069759e92e2cd97b3940698b2c6bd4e59e24977911f90b5e95541ae01a9465a6c4c21cb64e2a1b48cd340ea2c157d46a8907cd2d48b755003ce86e19666595ff1ccf2fef6eea76f76761edd2785bf3bbe7f7f6767e7e067212ebff768ffe178e7e1ee83dd7b94df27f2fd7fc9e81fff5e3fb9fdfae9f6999ddeedcb9d9d5d1ab09aa75b43a257d4f40f822c55df521b8fa9e98bffd77806349507e39dfd070ff7f76f93a6e7e0fd2aab97944ddf5e56cbede92759b16df2ecdbf5baccff3f9264cf3f7d787f96efd0c0270fee3f9811c23f5c8b4cca20b0c8f8ecff7706597fc3e8a7f9125f5bb4f81741145fc30ef56c33da0da08f77ec67b6317d2883d03f00df0e805b05e8e36bfa9dd1e76fe90f6b4e7f14c8d397ae63fa926c3e4861ff4003fa4386c45debd7f8e27dcdb531cb78d7fbd334df18c8936cd50509bbd159faf5f73edadd8126da655dbcbb8319dcdd015abb3bb070bb3bc8a3eeee7ccaff2242d9dd39e07f1fe2df5d7e7797dfdde57777f9dd5d7e7797dfdde57777f9dd5d7e77f721e14a18851e05f9dfff3fcc2cdc7b74ff217919fb0fefed535849cc292ec3fb40d757143a7def4c13fd6f67fc2999bc7d0e5a69feff3fe4654c3ebd3f3ddf7b3899ccf627625ebebe7bd187f5ff1af781fe4773b4ff60ff3e1cc15b790f6fd793bc2696b5c9ffec076bfa973eb9aaeab7ab727d512cffbfe142ec7d3a9b1cccf61e4c3e3dcf28df01adff231f8206f6231fe2473e84fe892f5dc7f425b90d2085fd030de80f191277ad5fe38b1fa60f41df8526fbf7523da5569ae488cdf1f1ec1293324bc946436151209456fc4eda56c8149c1717a4cfb8ad0141b9015ade2736aad10690b2f4278bba5d67a50143ed2979406907c0a1571bcfea23ed80cfe8c59a3c00ce4e4886013907fe1c4dc881a0bfab94a3314180fa16e075767e5e4cd93bc0e73e62d5921c8525431ef62d2ef173f9d3443ae003303f4c278322d483fbf7f67f76962f1e8cef3fbcbffb60e7011930e28fff2ff918d3fcfef9f4fc60b2bf73ff9ed89f0f7032fac0fe5fe365c82c3dd8bb4f934bb374939bd1fca2329b35db1904bb385f566dfe0ed9bbedcc882eb143266242498bb49957eb72964e7215aa1964f0ba5ad72901a266f5254dcbff373c92fcdef4fcfcd37cefde34dfdfd93de049fc91470263eebe67b8d6a0ebe76c27e84f36e9fa229b74fd9efe543f847ed3cf2c2efc8b60078a88d5d646f437bf260695fba68fd43a9a3fe927994280a23f3cd34a9ff3f75d838d9603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe90febd3d0473a50fe4afb651a78569cfe427b03566862bee19f421134a24f9420f84b01d2873466220b3ea33f8806ee1b8f46fab574cd58709fdc85f943dbf0ef0e8873ce746a312681c37f62a0f48975bb00e587e7919c9dbfa8da53565c303d6d76218ada357bfd13cf8f9fbe3e7d47aec50ceba8d42af460184e9352bb941a92a527454632ce1ec017afd393aa5ea5b28a3b26dc4888894144d7ab3966357f4b23abaf1823bbb3bdf3e9f6eece9b9dbd47bb7b8feedd1fdfdf79b8737fefe09b37e1f71fed7c3abe776fe7d3fd7be4201011febf64c2f373329613a2fb83f349260afbeb9bf008b0ffd798709925ca9a1df02cdd64c23953309f15b4ee763177a982663d2147f4ff1bb698f2870ff7773f7d389bdc7fb8f3601f74fc912da6817db3b6587fc3e8f56b8b16ff2288e26b3141da88fee6f7d06e007dbc633fb38de9431984fe01f87600dc2a401f5fd3ef8c3e7f4b7f584bea0c107da9587223c58007e01924fa0b6f9a0e6440e61b6ba6e4057e975b9a06fc07de37bf6b2ff467605be90f8316bf2a763af291c2f26cb16de43ed2466adf4d03fd135fba8ee94b32f72085fd030de80f191277ad5fe38b1f9e2d86beead8d66f3f3d13dd949e10ad2172619ae084fea8166473251fc01218cd135026805200b164ff0545e4df40acef302547019812d8ff5706fafb8f7676c7f7eedf7b707f87a23c6244b1f9ef035d5f51e8f4bd3340fb8ff6f6c6073bf71e3cbc4f4e08cde7ff97dc84f3e964923d38c827e7f7f203b1255fdf4d8800fb7f8d9bc0b3f4e0c1de83834f1fd22cdde42670889f62f8c4a125593e95150ee1dfe6d7e92526f4ff1bfec27d62fdf39d4f27e7b3035af0d9c7c2e2cf337fc1b3b7d0ea4400b23ba46c8c86260e86fdb0e6563f672d4e7fb2c1d517d9e0eaf7f4a77a09f49b7ec6e6116df917580431bf6253b511fdcdaf89b9e3bee923b55de64ffa49860aa0e80fcff0d1e7fc7dd79ca2e5cf99c7411fe940f92bed9769e0d958fa0bed0d58a189f9867f0a45d0883e5182e02f05481fd298892cf88cfe201ab86f3c1ae9d7d23563c17d7217e60f6dc3bf3b20f20a37c498e813ebffe0851f8a6bc0ca073aaae31abc26694f9f8a3a629f20cc2c925bee5413c6fc8d5a5404de645477dfecec3cda218bba3fbef7f0de01c521dfbc45bdff68efe1787777ff3e1911d2d544a2ff0f59d4df2bbfdefe49e0b68de9da96e9dabedca5217f7dcbba01e8ff6b2c2ccfdacec383fd9dbd3d9ab59b2c2c07e293ac9dceb74d104e2e68bddd788eeaf68266fbf7df1b639c421d9a77b56bff6f33b25936dddd7bb833dbdb9f929b31238c7f646469603f32b24a06fd03c85a1270ab8000f89a7e6702f0b7f4c7ffcb8dacb58f8203a3c39d735fe60f6dccbf3b682e51a1738cc1091cfe1323a64ff0f20fc5f20e05e54f32d253e9cbaa2a351a27cb6b23ed19e26512ad4ec44d9f50ecde78ea8ce2e36f20ec165c8ea7d36a4df9f5fff784dc7010f6b6f7f6dfec3e7c746fefd17d32e19fdea7ccfc37ef1fec3fda7d38de3b3840e29f2c0d4de4ff87fc8317afbe78bdfde4cdc9b7b78fbf7afa66fb27cf5e7c67fb92c64743fefafec106a0ffaff10f64d6ee3f78f86097788264ec16fec186443d34855084e65acdf0ffcb7c82ddc9cef9c3e98c867c7eff7c671fdaf8473e010dec473e819241ff00b29604dc2a2000bea6df9900fc2dfdf1239f002fff9cfa042efdfda3443d9b925b1a767dc518f68ed7704021e4de83070714f81303880ff03ed0f515031dfad219a07b9f92dbf0e0e0de03b23f34d5ff5ff31a681e5f04067e17a2f1815e431ce8ff8bbc064cda03ca297c4a2c4152780bafe1ed7a92d7c4c5dbc669c87e4022b24d9f403c56e5faa258fe7fc383984e1e4e1fee7e7a3edb9f7c3abdb7076df7230f8206f6230f42c9a07f00594b026e1510005fd3ef4c00fe96fef8910781977f4e3d88df4bf554c771389e5d82b8b394bc0228ac627911f51bd0d68020df406d3bda0012791545ddaeb3d280a1f61979190d960af06ae3391a7028f019bd08e7e01bf0397cc4aa25b90e4b86fcff4ab7e3dea39dbd31ad36ecd27fdfbcdb41ff7b307ef8e9fdddbd7dac3c1383fc7fcdeff8bd9ebc78d377113ed0ef8803fd7f8ddf41ffa359dbbfbf7b9fbd45f81d44bb655bb484077c9062392d5659c90ec3e441b6ff70efde83edf3fb939dedfd07f7ceb7b3fdf3f3ed4f0feed182c0bdec7cf70116045a12a965cb6f3cd83b7f78703039df3ef8f47c777b7f373bdf7eb89b4db6f7660fa6b39dddddd964ff01de10d45f33558496f90c6c4273b9d9075a3617dbf5baccb7777776c9d781969319215e53f7821189724594d57eb67d9d87b30707f9a7bb0ff6f34ff34f1f4ed892a9af13851745322e0f512409fe8f7c1d414ab00345c4ae6b23fa9b5f13cbce7dd3476adacd9ff4938c3a40d11f9e1da7cff97bb2f3e65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98f1ff93a78f967c1d7818679517982f211a91be8a7826c9cfff109cd06d9c774729d1e23184b4f687ec81b203f82346a4af423019ea5a215462969b3693eaf4a12f9f4ba5aa7c400e40960d11bdfd110c87d214f423d88297917cd85bc8bcec9cba2c963217e49c479952d2f444f2a36dffb687fff1ee34f7aa5ada655e97df9d19be90a40880a64a4c576b82f5fe7f56531cdd337d9856bf493f2a56ba59e973a5e6898b15bd36b780c9583ef6714a67213ffdbb3e584d67858dfb7d985184ff7edebb7c5ea05595218cb09b1e3db060d1bcfab3b7d079f907e0906ff7d326620916945a0088df4e493e3b3f4b5f7b67aa5f3ec324f5775be3d83aea639e286e409a698fc66a34f47b3d2fcf05cb9bddd477b0f1fed7c3abeff70ff53f2b7be79576effd1fdddf1fd07fb9fee221741b2445c4ef30fc343be0411f7ffed9e1c4ddb36e57b4eb75fbf224185d30595a05ec6ad61d12bc28ce2c9c581966a46a915a93fa3a4fe5fe3dfed3fda7f38a6d40ab9779fd25c6ef6eff6b2e9bdf3fb7be7dbe7f732e29c9d6c7ffbe1646fb69d657bfbf9fef4c1643281a1f839f2efee917f07c69579220e54978a1189f24a94017fb6fdbb7bd39d07bb0f1fdc7bb897cd3eddc334fec8bda381fdc8bd5332e81f40d692805b0504c0d7f43b1380bfa53f7ee4dee1e51f927b770feae903dd3bc0659f6e02af006e1dbdba6ed359952e2b5aa59ac3634b095132ae69b16abe19a7ef5b3c26d2353d97ef5b0020dd8931715fddcee1a3e1aec8db7bb99e103a68f7b3e8efa12f34693c5f2deee97d94efdc9f4d26a4181f3c9cee6defdfcff6b6b3073999b1dd9dfb0707f73f3dcf27e099fdc9e4fede83f37bdbf71fec1e50fae20119ab7b59befdf0d36c876cddc3fdfd7308e3343b9f52d387648d0fa07577a6db93870ff7b6a79f7eba7fef60677792efef52b349b63fbdff70f7c1f6fd49768f6cf8fdc9f6c1fd0764c8cf6909672fbb3fd9ddbd4fcdf2fdc9fd6936bdbf3ddd39bfbf4d2ed50199d38707db642676f3dd83e9fd7372a8a819163ff2fdfded4f1feee7e4b4dddb212dbf976d3f9865fbf9f9a79fee657b0fa9d9a79383bdddbd87d9f6ee3d1adffefdfb64a1ef65f7b777c9dc669f7efa608f9c366a76ff7c773f9bedef6d3f38a7f1edefdd3f206864a5b30919f2c9fea764b391a8b9bf7f40e3c90823f20f081af5373938b8b73d9b7c7a7ff2e96ce7d3f36c4acd76b2f33cbb77fffef6f9743625ba653bdbd9c1de94b240fbf708215a677cb843cd760ff6a7d901f9a85946fdedd31840d9ddedfb0f77ee4ff7eecd1ede63bff3fece6c4a1dcfb677a6bb34845d22cd849c8eede9e4d387f71fcc1ece76ee43f80ff626f983fde92ecd0279befbd9849aedeee484c3ee83dd4ff72607d3038c945ecaa6f7f207dbfbe44fd110721accecc1c3edbd0939bf0f0e76cef7f63059b3bd5976f0e0d3bdedd9fd090d81ecf3f6c3fdd9cef6c174efe1c1f9f4d3fc3ef92334f5bb939df3f37b93edfb39dc99e9f9a744b7bd7bdb9fee4ff7763fbd4fa9d307c06de780e8712f27877c774643d83ff894ecf2f9ce76be7b7eeffe2c3f98663b136a36cd26d904239dd1e41123dd87f9a6660f0e1ededf3da0a6f7f6012dbb97d3d47d4ad08873a8d38c9a3d78b0b7bdf370ba7f7fffe143eaf6809aedef7c7a6fe7419e11574fa9d97de2c8c9bd7b07dbe7b3f387f70f8861767210e4dee4e1c1144edba7fbc0edfe3d9a8f7b9f6262ef51d28e98fcc13e6661e7c1a7d37372d568a4c4e9fb79be47ae1e71c8a7fb0ff28319258867330ce1de83fdbd9d5d48002d575340b17f9fe8b67fb03ddb996407b35df884c06d77ff20df03a128c020269f64f44246dcb4b34780f7887deecdc048d383e9f9ce3ecdfaa7d34fa9597e8fd0bab7b3bf9def4c1e4ccff3fbd9830cd0f6b3ec7c32a1a1eddf9f822d7789dff6cf2724ddb3599eef7fbaf330c79c3edc7b781f92b1bd7bff0111643a7bb89de5c49639453f07f9cecebe38e8d32ca301cc48cc1f7e4ab2704ef391cd08daec016175b0b3ffe9833dd08d1cb6877bf7213239d1787f9f48961decdedb9ee494a37bf8e041b69b43000f7676663b3975753f03ddee91be993c04ddee13c6b307fb3b077b98d307f7a793d9fde98c26fc1ef1db847cf2ecc1f983ede9ecc139b1cbdef4c14374ba7fbe7b7ffa69f6707be7de94b877ef218d94b8629b2660ef3ebd7ffe700ac9ca29a47bf880e674e7e1a734a7f7761e6e1f109b6ee74400e25d7a6d021d42a2984d770e26dbbb0720dec303622410effe6c87084241c5de43cce964924f76f7482f1c1c80df1ed2d4d3f2ebee767e3eb937dd7f38bd77ef53407b30dddbf9f46092313284dbfe647b322195495127cd4b36a5a16216a6f90352afbb13d26f39894c7640cbd007fb146d3ed8dda58f69fe3f8564ed3c389fdd9becccb677efdd2771fe94e8f690be85e81f7c3addff343f7880a9cf1f7c3adb3f2731a76888e8467c4043387fb84d73726f373fb8774e134bcdee3d3cb89fdfbbb7bb4d1383911241b2ecc13de2907cefde7d22fe740add4b4cf580d8fec1f6a7e798fa870492b2afd36dd2cea43477b307b31c93b57f9fb4e4830739e14c2c2c8cb43bdde7e1ee92c34623461a856c11195f638ac8529195932cc1ffe7d3090f1edd7f382613766ff7e1bd9f8d74c2feee98b41fad3bfd7f746588e6cd85fef710fa63c81ad5de1a16bd22ce4e249f60817af9047205c9c70587febf299d409921ca25ec22ef4422b1299d704ed8dc83d0911121954aa9826d42870c18a9a33dd25bf7ce99737e8ed209fb944e807d90692206d4089e1189b24a94ff7eb6d309644b77cec91f2381dddf252f9530fe513e8106f6a37c829241ff00b29604dc2a2000bea6df9900fc2dfdf1a37c025efe21e513f6a19f7e944fc097ae150d17f984d719270b7e169309af8fbf8b168de7a8fdff3097f0a35c0225097e944bf8512ee1fc47b9044a0a6c5398fba35c02f9fa3fca25fc107309078ff6ee8f77897549cabff95cc2fd477bf7c69feedfdfb9f729412732fe7f3b97b08fb01f9a4543da5bc3a257c4d789e4122c502f97e00701ffafc926d064eed164d2a7f730999bb309fbd9eeee3d52c0e40890d62763747f3b9b3e84269f9c9301993ccc6710c09fa36cc2fdff6f64131eee9eefef4d77a6e4249c9f3f98419bfe289b4003fb513641c9a07f00594b026e1510005fd3ef4c00fe96fef85136012fff90b209f7a19fbad984a75fa62fbe7c933e3d7d7efae634dd4ebf5b905351e70d19c3b458a667275f90a37099eed157916cc328fda02cc1eefe3d8c9c7ec082dfbbb7c33ee93dfe90623b50ec530aeee8c7839d1df85df4033edf83dd87f8f0e1ce3e9a3cdcfd14df3da408847eecea1b7be6e7839ddd074c13d255df7c36e26c495a8afc263419c8453ccd97428faf9f8a78fa040d1acfcd1bc8447cba7bf0e9413639d8de253f96a2889cecf0c3f3f3edf37be48453c8b6471a97884251ef3d8a5bc9314560b24f912e857c14ebccee539c414ef78309ab61f26567f7f6c9723e38e760e33ef9af130ac177eeed4f1ed06c9129c5c4ed51c2fede39c572b38c2ce53e850e64330f283edfd93b9850b032d9b98f66bb7be7fbfb0fc8efa3f0130e3d854ae4e1ceb6f72846d99deecdf24fef61c2a6f73e3d9f3d248cf2fb13b2c0b37b641d2607f7b7f7f2fbf7285cdaa16402a288bdfd7b934f1fd0203f25cb44cdce29acba7fffd36d8a93f37ce7d373444cdc2ccb77b2bdf3edbde984fcfe8cb0a438eb218555b307bb936cb633bb8f4e27fbf70ff62664ec69c434521a3f459cf7285a98cc76f73e45e4be07689fdea740e8fcc12e250b2852db0782f41a454e9fdea33cca0e45431ccbd1a2d85ef629217ebe9713413edd27681372ed29c8a760f6c1832939b1d46cf73eb1fc3d222f85e384db8c22c383734a7f64e7941ba05077b67f0f51eb837bb33d8a41f6b6f307b4e4b33f7d489d6639d1ed9c604e0ff2ddfbbbf0ad0e3e9d7d4ac1e583edfb9f52a8b4bfb38359008d77b37b19796114e640313f7c90519c4881dec18c42d7fd739a8fc97d4a58dc7b98e79f4e684e8914d46c975c248ae91fd05c3fc0f8a614191e4c28b47bb07fef01d16ab6f72946fae9f4feeea75332e5e7f7100851c2637b32a5d99dcd7611f465143f62b2281cca7767f73e25181482ed53ac453130119a522bfbd983fc7c96ed81203b131a3e66873c049a85ec21e5351ecc2848a771decb2831713e03f75282253b273cb63f259784a051b84639871985f17b7b04e0de6c8747ba333dcf29eea44801791462799a7a4a19818f09bb5976be43ae3fe1967f7affc1ce39a5b40e28da4394b04d48a2fbbdbdfbf7c9f9dbdf43644890f7890c0fb61f4c774964f6288f927d4a533ffbf460764e2c4f311f989c3ca4839dbdfd2989127939fb3451e4e01013ccc801dd39ff74e79c02676a362167f9e02185d0946fa266130af93390f1de4e461331fbf4d3192bc14fcff39de90e41cba6c491fb34e8ed03e21a9ae28c268a923694f0a2660fce334aec10fbecdda709a7689f722e0f88fd28da7f707e4098119da819f1f784507bb87dbe4f334919068aa40e889bf627f7f25d4a50d17b200809f1fe2e1cdf7cb64f9345524cdc4bb13c324b939d9d19e5ece0033ec81f4c1e64940fd89950c6607f4608521e8866619aef4f0f4833ecb2cbff907257bb3bd4df01a14cb4a718f8e0de8ce66e728f740411f4de0ef8edc1849203134a3d12031046a488681628db43b0330a0a7392108cf4def903625142fcde3e71fa3e59c5ed6c9f524cf7a6c4e5e49b52ce02237d70701ff4a121508c48b3704e43d8a334e5e49cc2f4f3832901853853eee15e3e3b8074ce8820f7a93f9a647a8b72047b339217fa839a513e6d464cfa603bcb29b140894d4407a463cfcfa793dd5d8addf7d8f21ce40f735a77a354e7794efc46113e4ddb8c7afe94f20b9f7e9a9f3f3c076e9303e44c284ff829310acd02c9e9649fdaeece76efd120f7a79feea153c2e6e13dfa64fb9cd2af24f550353b145b11d792cb95911abc0f1fe8e1f480d250c8c54e08c1fd87348e873b14f0dc3fdfa1bce86cfa29a5b6a819299ec9dea794d4a3d4083abd47b9d81dcab990b978403340c3db43b307e7a4892930229540194a6a4aa4d9a5642a1190b215f71ede9fcc3052d2bca48429c69b4da054cf697df6614eb39b3d40bc3723f2ed42160ef62887749ff87097728484dba73484f34f298d439c46c39cec3cc8d0e9fe8307d48cf27613497a529036399810e7edcdce41b587b33d7008e5d00e0e1e902dbb4f924bfaed3eb1d48c5281933da415e9c3fb0fa06af6f708853dfa92a84c232535b44df9374ae3927221ce2613728059b897e514d6512878ff80b4f3fe3e6570269499a43f271905800f0e28934dcd281539bb778f92857be76cdaee63eaf7f2ed07242f243b076443602877698ece3fa50cce8387073404d246c4c704972cd4ee0e6594c936604e299547a681b2b5f72867456c49baf7214d11a49e388d940005a5d4ecfc617eb0bbb7b74fb30382ec43ea77409f1971dd3dd23c647cd16c67f2f00175b0bd7b9f30a29c184d0059d2ed07f7ce490c32ca37ef63b266247f070fc99611df12b4dd5d4a056619e5c6ef11d533a2232145cdf6c8d022c7b8bdf7e94392d373524b2003d9d3fc80788b26611704216bf86042ea82be0423912e250b4893f230bf4fccf39078ea219add3ba04cde8387945abd47a69bb2b394c826a6df9eeeef4d1e92cda1940e540db923f748717cbafd80e698a6fe9ca0e59f928e25d39ccfee130330f766f7efed12cefbdb7b3be7a46a28d14c3c4496fce0fe41b673ef3ec9d50e668188739fcce601a947ca18532691d8fd01e663b24b99d6877ba41e30d27c7fb677f08074724658929c926a23aa6684eaf4d3dd3ca37cd204fa2d3ba79769a9609be68a464a6b16c4216421f6482d4e68c80406fc46e9c54f67482c902124dc683c200824969613a664a73e3d80e29a11db3c24454419119a75ca29930012c76cefee910ff030a7a5972908727efe90962ce8cb0707d0bde44e50be9b8cce3d7291c9a323c3b08366f70e48827649691c90206eef4f28a5898406310c65e1f33d6ab88391ee1d9035a2fc21a5292734041a34793524d8e413cff25db292c44fd48c8cfbfec1840ce8de9498719fc60b57ea607b9adda7242bb1c9bd07e894f4d2945651c81c938749cdc8453b004b4d90dc7940cec11e6b24b279245b9475ce0f4891107f91de243db04d1e599e65f73f3d276d40cd28f14eb68fc49c5426a91af29d487191f5222e242543aa8e4c0d352336be4fd9644a18c073dc279d4643201dfb2925ce0fa6a4d41e7c0a5978907f4ad2088cc81cd3d4ef909cd2f202adf19c9f679f3e981252807640cee1a7397d99510841d08820d9a7f7899977ef9defef4ca73463503514d166f7c977dddefb149deed18a0825adc9a97e40cb3da474f6eedf0334d2bd4448f2280879eaf453327264c3ee6f7f4aaaffc1fd4fefeded70a794cede2788c4fc44189ad319793524c9db149810df90c1dae3a53522f339691aca9911eb10879047420b0224a7944c23de3da77904ddc8e798ec912ec3ea17cd023973d48234eb94f2d484e3c37dd239d4ec80246cb64388ef64e4b0efc3a81ec067a5bcf501d9221a39437bf880eccc0e391e3bbbbb3459c4a2942a23a5faf01e392d07e7f729c90668c42de4a4934b9091fe20dc7648f6a60f4915d3920ef9e0e47c7d8a913e246fe99c42108201076a424ee3012d9a6c5366fe5e46a6688fd40335239592d378485a205e34f524ce33e2ded9f43ca3c5af5d72bc20ce3b5029e7a42d77c9ae92463a203bb40fef8c5cd3d9ceecd37d92506a766f774a8b88c496c4c684db9492c40f33ca67d274901490f69a4e3152f28c72420bd6801632f6f35d5a81fb140a7f87966ac864c00c52b373ca419198120c483299265213a4fbb6c9a8cd48bf9043b50bdca634a30f49d1c253a521c07c907b43e111f1d0ee2e89d03ebb52f96c77278710e70f6991659f16ad6802c816523691a4349f3e208349cd3292b2e93d7263690996a0cdc8309377840439ad44dd83a7f429246b4a92b3fb29e964b226c4487bc41cd43b4dcacebd3ccfefeddddbbf07dcb29d5d2cc28120a4d5f6cf2972c83e254ea0f4faa79fd2349c93074fcdc8a1c91e3c04f7eed2cac5fe7d5819d23d24152421bbb4bcf4e92e9acdc8413a9fd2d4ef91bf8a21ccc82520db749fd683eecdf669f92407797749013cb8bf4fb68c127c445eea9e04981648a6a4cb29f7b04bd4a766e7142d91aeb8bf3d25379dc84b9a6e42da99a0cdc8ac82c53ee52110aa59467941c485c4e43452d28be42de73b7976707e8f040a9d4e68e185d630410b62b5fd3d7235c82cdddfce333230a455f71e9ca35372b1290c241534a50517e210e2b703d2dfdb3be7f7ce3fbd0f5f7b021d329b91334a4a966c7d4ebc496f90c81cd03ae801b111d9068a79012d279bf929f949a471c9efd9dfbd4753bf4f8cb47bbe778fa2ebf35d721ea919919a540f2d5b4c73d232fbb4484c93453ed28c1880064508eec350cec898ddfff421f9c33ba03d2cd2242704490468f98d78f0fea76072528db3e93e698e87a45ba953f243295ea045afec3e29d207bbd3d9a718022d8b7d7a8f1602b777697d96049062ceec80cc12c5a1c49e9feedfff9467819c19f2cbc87c64fbfb34f5e7c4bd137213c89d9b3ea4f97e484c8dc0136b55fb53327e842a35a3a56062351a331936d2339491213f929a9176a615538a6048e24871e520cd3d5abedabf4fab69249c641f21f57083f27d72a5a639adbb91f522513ca76639ad1650644b2babf7210b645e69310c93b84fd3491c426a70f229792f9f4ea6f7f7283abacf4b9234957b39292252b6a44a093f62cb07641ceed3a49387b7f730cfd0e93e39a80f6838dbd98c52cdb48244ab6a641028103c9fddbf0f5e3a40b39df3c9f4def994343ccce03e7893221b32aa0f3fa5a89328b7c3ebc7e7145a52b6815c822966e13e3998645176b6f7c8487d3ac338cf41905dd201d34f4971d17a23353b8781217b4e3e128d913895e22628070a8b888c7b2498f7281ea2281368c191c848b55380978b26272db14be3f9946c194cdb2e74efa714f792cf794e8a8bccde3d0c614a2ed26c97b45abe432b8cc448a48569597c9bdc9b8c321b0ff6882fd1ece1c10e118ea2b603429c82144c16492cc50af732d295b4980f01241a92db4971044125bac14e93174d72b34fa660679f42b7fb10c0735aaea7040fe146c1210d6197b897a0901f826c0659506a4ccd7669213447044b2e0be910f2eeb733f263b7777789dd0ea6e4fbb2e7404cb077be47b6ec01541b796d1414d39493d2f9347f402f1c90d2a0667b942ef8943c9bedfb9fd27230c59aa443c8254654fb694604392087959a1d508041610c79e2e4726fd35888bc3be49851f2e5de1e5956382c689653744716767b461124712f99a5090581dbe49d9003484ede8329049078826c203945bb0f81db1ef953641766b48affe90e2929e4c93059a4cc28013521e627f9a0667b14a490ff41ff1cec5032e4e060769fa7fe9c968f39faa0c085dc15b29134a7b40cbf436be81392349a2d6a467a78ba3ba3908ee68cec0259570ad84916a67b243394d3f9940c1d352339dd25a9238fe21e690ef26e69b248d0b767f7292b307df0e9c3bd29463a25df67678f6692b892bcc13d12c5494ee1f894fc8983d9ecfece3d0d522812a765eced07b4c846e3a024c56446799d03e23ce2729a8b5d0c61ff53222e9c6df25a08da393107919fa2ddd91ec5e1d93e85f510995d72eacfef51828090a72190cb4702487ec8bd87d34f4967edccee3d40b30362ee870f48f94d497208da434ae990a74472b34f211525101fde03f7521842a69d64e4de3e2599c81b04875048f0801c1ca2edf4d3c92ed8728794f01e4937e5a248cdef4f28cece28d346bc99e5e713cc04db8507944da4d4090122d349ff90505150436af0c1ce83fb945ba06c2970db271f82343ed9321260e23712aa87c44424320f773e3d206dff700ffc46bee1f98c94fdf6de0c933525de9c1c9025dfd9d9a7d404e90aca485033ca77ede1150afa8978fb640ba0d329ae3f38dfc9c997da25f340cd604ff7f6484429e82304ef51e84ec12badaf4e291f438426f7006c3923df6f9fb24f44cf4f8991c80320df92b228133235947ddd25a711cd289d488c437c41390de25ef050462e10d9b7bd7d426b87a409049911272037464683d20d941da11694c7a2f9a0f03ccbc989fc14cdee7d4ab12d29ed6df29448f77e4adec02423c7956682fca50991e31c04216a9de77be478ee1e100bef838234028c991c805da2fb03ce2351ec431924ca2350a28154cd0e79e70f29ddb9bd4bd664e73e85f2c2bd6467a794f4012391f34b06ff21e146ee236557289aa664f6fd5d08e001e516a619e9fadd73a89a879473247fe1c1f6f43ee5e5ce49bb501e9c9adddfdd252f8926f180a68330229f2ca394152928f2e0c932928d8046228edf214780f2969f92e5a0c09398e0414e0a7f8702bb03621b0a69a85946b68354e1def639b991048d829f83834ff3edfb7b34d734af34b118c2fef9a7d319255b29acc0d453f84edd9377be3ba1d0f49ca4863435359b511c7d6f8ff4dea73949c0fe2ed1f8608f543f455994b8fd94bcc31d749aefd2c4913345ac9d91c2a701513281a6628fc8fdf01eac1c33f9c3dd3de25e5a99a75c0db1e5398124ba912b45a6fe3e8573943e85643d245d492915f21c3290971c7bb2ce1482521a89acca3df245ee41231ddca7fcdffe03726829d74d43202fe32145eaf8873c500ab9c905a2661979b7a419c9cacc68c6f6699d974c290d9cf0206ff3e1f9eec13da89a87e713ca18925e7840da93e8463d6707241a0fa60f49ddde2767fb017235e75352cbf768c229854c1a89de2646ba47ea6e7f679f4486fcdd3de0465e14797524c9c45e24a7fb1829e50f48a667c44534987b13f0db3df210f624b54c61e53ef9fb6480c9a9fe94dcb56cf7fe43f2332080e77be434524a9c669268c1e6837e9b51868772ee24cc941145b37d8428339aeb9cf29ddbfb9f926525a34ed42656b8bf4340489ea9196572763ebd479398cd48eb53d28f74d38c2696b2c2148e3ca4a07287a11dececed52e26a7b4ab68270fb9418744a4938b239594651fd6ece534f8b03bb337260b669ea495b4e492166e487c351a2459d7b7b7b147252331a37b106f1ecde3d0a41681248e99041a570ec5e463c40c9f1876846b6f4d309c546e482923bb6bf4349986c9774c81ea9da197994945ac52c50187e2fdfa1b4c9e43ef137e92952f894f0a77c48462698945ccea957d2cca4d58964a491897b1f12694833532c43b9628aa1c82160e78764813436a5c828d34fb8510847c688f2aff7f7c810114d4924c048fbf748bfc21ba0ec3b757a4e0c8af4dcf694fcdc7b9f7e3a25b18638cf906085abf880d28f048d588a6697e253b2ace7486dec72a7641288512936bc47469b6601414a46bc392587ec608f3ceb7c1fda92c22d72b089ec347f44908c7a7ef880bc5a1a779e4f2950db7d80397df8906481ecc7f61eebc8030aff26334a85914d9b7e3a21e7e0de1e9a910aa3e413cdce83f31d9afa7b145b1e101db7f726a4b1260feed1ea10e474f75362731adb36b95d34848724b10f0f48641e502e871402bbefd46cff01653067e493e7a432b6d90fa1c531d2e9f788df7382792e2ec13e999207a4d01e50dc4e169054cd438a3c480de607f91ea54af738dd743025af8ed2aadb33320cc46f84e5848c1fb9f9d4e7842279c2969a3df89408bf4b4ed184d27b048da2c18c8221ea94864eca8c5288d0bd24890fc8752513442e187d49b33b810dd99b9102a17402e5fba1df88f8d3d914110c1260fb7be4bf93c9a0b624160f1edc7fb8379b60a4a4f01f5060462385b49081277e3ba7e8e38052dba44766a443811bd4164d352dc49c63696997f89b5408048d6c11e517c9938172a064c201ad24502c43468aa091a34c6129d9de4f3fbd4fd974f8498046ae38bd44cc710f9a639f3c4db2f5449fbd3d5a00a030f8c1c35d28ae9c4c0ab90a94b7dca7908e2250927a3205a448c818ee904ff7807508b9ad144b51d8b44b395662243257246bc4a550e5fb44aec93ea6fec1e43ccf49b791c8c066513445b340cdf676ee51f69482dffb13b0e5ee0ec5a10f49ea894fc866919a21f9a75510f2828803c831cf3f8500ee50d6e7210d7b9b9c2810845c5e5afb2026d8a7d5e01d9ad4dd7b8817ee918622ddb743ab8ae423938341734a3a9bf2457bd92ca7bf1f665035945d25b9279570401343ca8122bc83dd07149dcda69f7e4abd90f4a2d9f96c46a90ee2c8bd8c284b524f043927578af287fbf7b319c5aa07dce90e052994a223d9230f6fff218d940c10c92929db4fc9d2927430f752221c024d0e06b9e3fbf789430e24fd478a85d40bb127cfe9fdc9833d8aca69122985b04f9115a941445c342ed076871616a9d97d5abd22fd42be133d345252461823e527cf491950f0738fb99728433424bfe780d2c0c4e4940fa1a43662e729713c12ad19a69e9cbcbd87505c64ba0837ca47907526376ffa7087b205f7a84b316d140bed7f4a01145915d26fd40769679a94c94e764e667c779f5240d4ec530acdf629b3b04deba3442d242f1f66941421ed414a6b870cf4a7987a8a79499c493950a2873884bc7f82468a844480b2dff9a7e4d8a019e1408245d0681d8070cb60281fecd13f647b76a7c45714345033caf2d02204599fe97d122f222f890131c5f67d326c94fba6d962cf81a22d9a2beaef1e39853452f2ce114b12b45d52c453ca29ec82df285dfce0d319f9bda4df69a4e4e7932453da84b09c52ec4ab130cfc2a7942da38890d6c4691586e27af2596908c4c2a43c481ac9fd7d8839a524f33e4d03190dd26534048a120f60432865423e7d4679f25db82b079f528041f966ca1e930b425c4286923c3b72dd3fa5707b4619585ebed9c3022ad2c50f7791e33a205f8f464a7a8ce2843dfae61e05c0d42c3b274381b926a3c16c492a9a5203a459c9b61f50ffe7bb6846c9907bf7295f482688622752db648ceed34ac3a794679f51e66646212235a3ccd9c3872436db94d32282502fa44f89130e68c1f59cd69526930938e4d3693e9b7c4a398e8c2c047108c56f9373ca063ca02402ad191c504c07154d7a987c504a2d1fec111948dd10a17789e73f253b719fe0e632048a68669459a7393d2747709fa8489e313128f9ecf7b2fd87c8ec6316684d9f6c01343c0590c4e46412b23deaf9de2e053ce794732779a666a48949fb92b19d521c4f3349bcf9700661bdf780c2f2fbf00231590f682580dc1c8e3489dfc8f1247e234e2062521282021cca0053b387e49fdfcf3f25324cc148e4c890c4522a34a34520428f3cf53d4446073459f773f201ee7d4aba7e7f4a84a66898a6989222e4b21039581626a4e7c97c4db729f8a291eec0aba12892b276e7f7677b7be44acc801be5f5a60882289d42a6747f87981c8b0a449ae90e059b7b349318292987e914113a692412c08cb46506013cdfdd2336cf2892d8879ce6e4c3901349cb13b42041dc4b327df02969cbe9438ad248ab3dd89d0137cae63ca4bc303c0758c0090d92028c879493d921378fe469ef1cd028d7429a17f9a58c32a61466937a9dd07cdc27679b0c774e110d989c2cceec1cd2495a97f8ed80e66342e24dc3a5e1902b32211a5133d2282479942227fb4ab340a9407257281d437679b67b3f27bc79eac9c21192649d1f923aa46624f09440d8a565af7dcaca52da9e5c486a4634247d4406941238c46f33f20bc85d2115fd80f29ed39d7b0fc8bfa466e7d99456d3489e282742c4231f9634398579e79453fb94d651ce8951a819b985bb0f0f8819c90d23dcf22989f32e8552b4c6b04b934a01dc3966614a4e077879fb414ea1300588c46a7b3470f2a90e1e4c1f9061c821323b0fc9ab27b346793212fd7dfa723ba3a423394a9481a3f5494aaa0037f28f482e2906387f0013f49032b4a4844834284b433c7a8f022710843277bb073919824fcfa11c88f01414ef91bf41d94df214f7ce29eea76688ac88c96909986c19694b84c73b94f9a7e8fc01b9010ff27b0f20803431585c268736a3a89de212c28d9cfaed738ac3b39c7251e71328555aab244a527e9192954437523324a7649d27f769bd7697e4885c7d6ab6435c7a4e2ba3e439c002c2d9a6fc29597212380a2fc866efa153b224a49e485d91d7458c744efa86849b88979fef93e7b0479202baed52a2ed21454af425a5acf61f50b0fd90d8629b420d72f9660f685d1a6c4943a39c","2365041fde87a73aa5650fb28504978ce97dca61502c8f39bd4fab37e41a92134e191c222fb57848fdd302c18442a3839c027aa8c1fc3e8565bb94ded825df866481107c483a93baff74774a4a63bac7b91ad2bc949d04797749bc68ea29d10127ee7e4e396fe2b7fc0113e4e18cd414b130591f0ab1f63fa504f1c37be40be5e487e694e927071f53bf4bee2f85700744768a60c8ca107929af427a8cb899268aa602b83db837bd4f069a720e0fc0bd0f490b939f42ff909f76ff0159764a5152334417e48a10a04fc9e525dc6802f6c892530aec53120f5ab438879521cb43e4a59ccaf9a72008399350af94ed789091845066f5fe14cde0433ea49c01750a570a298f833d3299d9f42179b70f681e0ec021a433295a24c6a5889b08724e867242f110a5bcceefcdc8ac517a8f713b9f7d3a233d067b4a4425ab47a248a6ed21c513bb0fc85325078a9a11235316764a3e27296b62f22919126234221e2d6d9e9378928f4acd485b4f2906226b40b128464ab10c65e4287c38a755b41929980338b4e7f768f2ef13d9cff7459592fdde2301a4688144f8d38cfc5840a3f4cd3e65c228914b9687a09145a2acf00e0d818c1899300a6678eaf74036b2654c54fa9c8cf81e49c56c4a2a82d2350f289d4dcd48123e255d4f8e2e162ac8ca90eedd219bf5905c4ed268946ee339dd254b7b9f924524ce648248f7929cdea3819383444ae9fea7fbf7d85dc9cf29334ff103214e3604512b669dd4121981292d2f92ade14e69e9eede3dca8e52304b0248dc032c41909c1cae87b4acc1ba774233fc608702768a9068ea0f486e1e22c592e77b145acd48d266e894649d66813cae7b14a429bf21f54a84b8774e7ee1a7146d52b3fb14ac93359a6def927d25ba51a49aed9368ec67b4744be68f660b23a5e0875280843825aaa9d37b94429aec5304b44bb12c7982a472396d42f95c3237a46cf728e541e24c9c4796e3fef68cd6271e509e95e2090c818c06bd4dd2f2298557d42969a4ec3e3971b37bfbbb14e9dd9be6fbe0de9c5207536216b232f09128b34cb851c445b95692f79c9c8f8780464101a962927a5a882335481122c580c426932919fb7b14bfed64c08d162f1eee4389670f91d2a12c26a673b2bd3b23ce25854f430734329a640029a2a0d74800295c2559a029a6a5e529d919f2280f801b79f7c41194a8263784b8977c498ada480dcec8d4d302c23d58426a46412cad7093f7798018607f42e111297ad2b1194d2ad119a9466a9693bb4b5e011923d251db14be9046a2e88f5c821d4aa8df27f69a40231187517e0f9d3e203f9b329fd4e93d326114105108464ee4fe39fcb72916b9c8e722730cf371402661f290a4624a94227bb14b590fcc297902d3fb24b8dbf727640df61f520285a27fe2104a59eeef91a7b4cb7e6fbe3fb93fcd288e24a120be2035bc4de24f7101290d5a9f20733a43a71411ccc855263b4b91201923a2310502a404661959d24f3fddcb98df2889b5479c976d532a94c87b9f3c601ac27d5250d3594642b2f7601f93759fa6989c36cacb51c044524fc9cb09c5ac9403d82335408e13394768464c41f11d61f4291212f7a93ff2df28d348decb040b07e43350339ac93c23ef8b5434312eb952248ac431dbe764430821cac53123d112124d3145e819f925dbfb340650968294873bf7899529c5c9f990fb14f150c7c48753f2daf67789349373321f5372c2493f93d1bc0fbb70b037c91fec5398f6e97dc49119c51614fe93873025d7edd33df2880e30527a299b92c9213120e78e2c020d8672ae94ab3927613ea07cd01e268b5430596bf24f281ca521ec3e2497975896ac25858694becbc9eba266b440bb438b1f08eec81aec538a98e84652f829c9e22ef12405d2c06d879c907b945adbded9a5009a92a5a4df48d56de7c4d1f7b13e46e6979a4db309a9011ae98c268f18897243dc8cacc67d3218f748f9035a762fa7a92317849025e540e244510d19d51d92c2fb2468d42d7b351412ee206571ce0b2ef7892329a74a7693560ac827b8b743ebd2d48c16a90ea6f0063fdd076ef7499c499c30b1f7ee9325a634d33e666187d648cf11f9519a8770cb49df501efd9cde22a332a3c4cf8c6d16450fe455430276a83f523a64c469bcdbb31d0ab067bbb46622898efd03e468295e38a079a2e09b5e20cbbdbd433a90f2e294e39d819148059301a359ff740af738a7c5205a5fa005655a0c9c5228913dc8006d3f23134eae19614f696ff2df88dff6c99e3e208543becaa73b94a2a266b4ea45be28cde9ee7d32f3fb537268298b3d256f904840fefb3ead1750b329450794be223147544aaa86accc8ca0911345d1f2cefea70ff640b707f748c6ef436472a2f1fe3e912c3ba02405053cf4bf070fb2dd1c024859891979c10fb7ef67a0db3dd237b42a4823a2b084523be44aec614e1fdc278ff53e9915920ee2b7c91eb9eec8fc4fc9bd2376d99bd2b20035db3f2717ea53f20676c81a939c3ea49112579027bf4b0b94f76986a690ac7c97567b1ed09cee3cfcf47c9be2685a862036ddce8900c4bbf4da043a8444319b524e83143e88f7100618c4a3309b08428b36b44c8866b486b84b6e15e1067e23578c864082460b6df7a69402a0342da03d98ee910da77808c8106e94a4984c4865d21a22cd4b4696f700b3405e03a95732ee14fd91c8906226ba51aaf01ef902f431cdffa7902cca33cec87f224349e69ad420d1ed217d0bd1a7e8639fbc9507987a2426686532df268f9fe8467c4043a0a5259a130a270fee9dd3c45233ca5453e440f1104d0c464a04a1b09616406930f7ee13f1a753e85e62aa07c4f6147a9f63ea1f12485a799d6e937626a549ebe4947fa566fb9482cd292c209c8985859176610169b89491cf69c460a44fcfef93ad23a927254723258f9a224a5a1da55ef6288b0f5ffade47dfff25bf84b44dde4ceb62d516d5f2a3471f1d97657af2c9f159fa7a3db19f37e962ddb4e93cbbccd3559d6fcff2f36299cfa4e18bd79fa7f5bacc9b719abecef374deb6abe6d1ddbbd9db6cbc68ee2ef3b668aabbcbe6a249cfab3a5d54759ecef2362bca86f05cd06fb3accd3e7af48b3f9ad679d6e6b327d7840731114906c2091ad5f63edcbb87e4536fdfdb231330a198fec1a7d00cfaca97407d6f87742f69f4bdfd377bbb8ff60e1eed3f18ef22cebbf753d472bda26ede0fb8be6280d35a2b656a3f7db37bff11fd6feffef8e0012d7aec7efa531f1115f3250d6e9a2ff265fb454546f2d1474ff3f36c5db6f8b298d1df7757757559ccf2bab9fb4531adaba63a6fc75f64cbec82dfbabbb0bf7e5e57eb5573973297943c249b44bc0bd34e89e58303f21b28794bf1c97d4ae63cdc8b023d5eb7f3aa2e7e9061eeeeaeaab2985e1f374d71b104f4e6ee8b575fbcdea669db7e7af6e274fbf52b723cb62f45ffb4d72be07e6b58f4ca325be0950d40cb6acaaf53ab8cf8a8ceca226b2a029c674d4bdf37d74d9b2f9e2a1794f42191b0382f74b63021642fc914ed913745c949725b48e2488b3da445de7ba42a1e220a0ddf7b2303395ead0863e93d6c72dcd2d7fd59dd1fdfbf47e991fb0734abbf64f48b69eaf2655bb484c72ffe685517cb69b1caca33cc27f98d0f29b34fbe00ad101027910741b907e402c9cdd8fd9462fd1c836ff365b66cf98d077bb44c4e9918924418ec5df239c9a84db629573b9ded50b0410b5e7843507fcd54115ae733b011cdf52aafdb226f80cdac68566576fd42c8bfac17cd3609d93644911cfc4f7fffdd31ba9719235e2c9605a8c08844b926ca8a173f0bace89069ee52b288c25e4a6e9065dd99ec40ab36531ae57b21f91ef242f057594d246b092ea89895657595cf9e2b8bf2679759b9260cbe47e662096e5d37f93a5bd1abe0d775b3a77f5de54d6b5bd0dfcbaa6ee7fe0768c0bfe0bdac299052b102a00dfd8fd08cfe9ed2c028496ebf67b8f91a934f7fe9e7c572c6f07e3a5b654b7df12da956efbdf55b1632fa4d3fb3b8f02f821d28725e674bcaa54b23fa9b5fcbce6b121cee9b3ebac86ba2f7b5f9937e5e65d700457f345745fb83bc2eb3e58c3ee7efd7596e7e65606839400020603fb38de943ea9cc8a07f00594b026e1510005fd3ef4c00fe96fe58bfd54fe9231d287fa5fd320d2675f603b243f898fe427b03566862bee19f421134a24f9420f84b01d2873466220b3ea33f8806ee1b8f46faf545594df82bc181d1e1ceb92ff38736e6df1db4f55bea891be91c63700287ffc488e913bcbc6ea005f0c1ba69ca4bfabd2176cf696c0698fccdefd15f3f5d54dc19def5fe34cdbf4f6a081ae645e5090a2d1d7e0afd54900df43f7efa65fae2cb37e9d3d3e7a76f4ed3edf4bb05391775de90554c8b657a76f205390c97e91e7d75fc8335b90527347ff4d1745d93c61da50d7913ea454cb382949be80f74454e0b4d158bec4b22c5ab6c79215a51fbfe1ea5c3087d0a391e32cea44bda6a5a955e938fde4c5700452327c32df6c27df93aaf2f8b699ebec92e5ca39f942f5dabb325e911f270d0249b029b5e93a7f952302eea9c5bf85f9e2d27d57ac9cabdcd2ec492ba6f5fbf2d5630abaf9ebe7cfdfadb68d4784ed9e9bb29710dfd128e9b62f64f0f324ac6510e91b420e5c42909724ee9857be459531c466bd63032fbbb535af5273f9e7265e46d52f84a711c05309475cc76c9937e306165490e2a1235e7db0f28bfbcbd7f8f72a80f271457d3d2d6e4c1bd1d4ac54fe02951ea6a728f56b1b667bcfa46f10059365a0638dfa1ac2d4520939dfb68b64beb46fb5869a598125e3ac53fe4b6ce28b57b8054ee8c167110b64cef7d7a3ea384328223b293b4ee45cd2879b897dfa794c6fe0e6508101aeceddf9b7cfa8006f9e9ce9482a0192d5866b4ea4299de4ff39cd2010883b819b9c1192df4ed4d2925ba9f1196143cd1022b6544290345e9c7fbe89496930e68b594962329dd4a79031aee648712e9bb93d9ee1ea5073f95d8fc535a7a7848692fca0050f8b50f04e935b2ff9fdea3e4c80e85381ca0519a7d2fc3eadbf91e32999434a52190bf4e913b45a80f1e4cc9e7a466bbe46cecd00a15b99f14fad06218c560e794d3c8287d45c9dffbb3fd7b08451fd0ca0e0516b476f08056fbf669cd93f289945eda3b2798d3837cf7fe2e3c205a32fa9422464af27c4af10ff295340ba0f16e762f235f896217a8cf875820a02cc8f6c18ce2d17d5a2aa2e501ca42dc7b4839405acba591211e21f786526ab4968745191a02a5b3c939a678ed01adde13ad667b9f62a49f4eefef7e3a25834b8b1514dd501603c938ca5dcc7611c965141462b228c6c9776794a4a778845c6e0aa028b0254253be641fe9af19ad2650b39d090d1fb343769c66815642892d671479d338ef65946da025096a4659938c968028d741c908824631182512282fbab3b7470028ffc623dd99522e95c843f92b4a8e10cbd3d4531e087c4cd8cdb2735acaa166d39c164d7668818cf21c44b7fb44634212ddefeddda7ac19b972704c08f23e91819650a7bb24327b941ca1e521ca27d3b23aade7dda7400e4c7e4e61dc0ead139228912f424b30885d8909669fee9eef50aa99d28798ac09b9b4070f292ea62412359b501c9f818cf776329a88d9a79fd27a1e35fb945698a73b042d9b1247521a965691896b688a339a28cac450168b9a3d38cf285b43ec83242341a375260a31696162f680d6be0933a2133523fe9e106a0fb7cf296748734ac9b18707c44db47c92ef52d689de0341488869598a64219fd1e20f85b814744f284047ba68b2b3436bd63b0893692d76f220fbf47c7b674269807dac2751728766619ad3322969865d76cc69c98092c1d4df01a14cb4a7c09632a43477135a2e9b1241efed80df1e4c28e29f503e91188030224544b340291c829ded3c24d9dfddc14829c94b2c4a88dfa365048add487b65fb9437ba37252e7f309b512202237d70701ff4a121504847b3704e43d8a3dc23ad8312131d4c0928c499120af7f219ad44503e9f08729ffaa349a6b728f0df9b91bcd01fd48c92643362524a14e7942da06c257c78d2b1e7e753ca9c5240be27b96e5a2aa2cc29e52fcf69e1659fc2769a365ae69a7c4a49834f3fa5a4f43970a3757f4a8450f28f569849003f25399dd06afbf62ead09d020f7a79feea153c2e6e13dfa64fb9c72aa24f550353b140111d7926394911abc0f4fe521add23ca414204d2221b8ff90c6f17027a35cd9f90e253b67d34f295f45cd48f14c68499132e7a49ea9535a62cc76289142e6e201cd000d6f0fcd28e34cb115916c729fd28ed49448432bf2a4962836a6b4d37d5aafa166a4794909532446a96c525ce7940da7b516e2d20788ca682decfe2e64e1608f1243f7890f7729f147b8210b71fe29e56688d36898939d07193aa5ec3635a364dc443299f7e8b7035a60d9dfc3d2d0f9c387b33d700825c66871896cd97d925cd26f4862cf28bf37d943ae903ea4b5356ab6bf4728ecd19744651a29a9a16d4aaa516e96940b7136999003cc0225d329f87a48e9d303d2cefbfb94969950ba91fea45517ea87d68a7808a494efdda30ce0de399bb6fb98fa3dcade93bc90ecd062d7048692561c286f436999070f0f6808a48d888f092e59a8dd1d4a13936dc09c527e8e4c03a560ef51228ad89274ef439a22483d711a2981f309e69416a10f76f7f6f6697640907d483d2d92d2020b71dd3dd23c647cd16c67f2f00175b0bd7b9f30a244174d0059d2ed07f7ce490c324a22ef63b266247f070fc99611df12b4dd5dcaef65b40c401f110b111d09296ab647861689c3edbd4f1f929c9e935a0219c89ee607c45b3409bb200859c307135217f4251889742959409a9487f97d629e87c4530fd1ec1e2dfc3c7cf090f2a5f7c87453ca95b2d3c4f4dbd3fdbdc943b239948181aa2177e41e298e4fb71fd01cd3d4d3b20335251d4ba6399fdd270660eecdeedfdb259c69b1698756fbf7297b4c3c4496fce0fe41b6738fd6e03eddc12c1071ee93d93c20f54869604a0f12bb3fc07c4c76297dfa708fd403469aefcff60e1e904ece084b9253526d44d58c509d7eba9b6794fee115fcec9c5ea6fcff36cd158d9416228843c842ec915a9cd090090cf88d72869fceee1319c810126e341e1004124b6b04b43ef3e0d30328ae19b1cd43524494b7a059a74431092071ccf6ee1ef9000f735a4f998220e7e70f691d82be7c7000dd4bee0425b1c9e8dcdbbfb74f1e1d19861d34bb774012b44b4ae38004719b966dc8ec12ef10c3506a3ddfa3863b18e9de0159234a0a52ee714243a04193574382bd478b7cf92e5949e2276a46c67dff60420694162d09711a2f5c295a82cfee53e694d8e4de03744a7a694a4b23648ec9c3a466e4a21d80a52648c1d012e4648f3512d93c922d4a25e707a44888bf486f921ed8268f2ccf68a9f49cb40135a36c3ad93e12735299a46ac87722c545d68bb890940ca93a3235d48cd8f83ea58829ac87e7b84f3a8d86403af653ca86d32ae964efc1a7908507f9a7248dc088cc314dfd0ec929ad19d0c2cdf939afbd12a35033cacce49fe6f465f6000e0608927d8ac5eddd7be7fb3bd329cd18540dc59dd97df25db7f7681d9bf4102d7350269a9cea07b486434a67effe3d4023dd4b84248f8290a74e3f25234736ecfef6a7a4fa1fdcfff4dede0e774a39ea7d8248cc4f84a139a5657cf2bd688d606797f8860cd61eaf971199cf49d350668b588738843c12caf2939c52ca8b78f79ce61174239f63b247ba0c4b5a340be4cc510bd2ac534a3e138e0ff749e750b30392b0d90e21be9391c3be0fa37a009f9592d107648b68e40cede103b2333be478ec207945597d5aa4fb9494eac37be4b41c9cdfdfbbb70768c42de4a4934b9091fe20dc7648f6a60f4915d33a0df9e0e47c7d8a913e246fe99c42108201076a424ee301ad846c53bafd5e46a6688fd40335239592d378485a205e34f524ce33e2ded9f49c968427bbe478419c77a052ce495bee925d258d744076681fde19b9a6b39d19ad059f837befd172f9ce2eb125b131e136a59c2e65e6282e20a3bef390b4d7748a91926794135ab006b43a41abcab4acf62914fe0eadbf90c98019a466e79429223125189064324da42648f76d93519b917e21876a17b84d69461f92a285a74a4380f920f786c223e2a1dd5d1221caff51b37cb6bb934388f387b47242392ea2db7db28594f32329cda70fc86052334a2492834b6e2cadab12b4191966f28e90cea6e5255ab7bcb7fb29246b4a92b3fb29e964b226c4487bc41cd43b4dcacebd3ccfefeddddbbf07dcb29d5dacac8120a4d5f6cf2972c83e254ea0e59e4f3fa56938270f9e9a9143933d7808eedda5e588fdfbb032a47b482a48427669cd88529cd46c460ed2f994a67e8ffc550c61462e01d9a6fbb4c8736fb64f6b2239c8bb4b0ae0c1fd7db265948623f252f724c0b4ea31255d4ed9e05da23e353ba7688974052d31939b4ee4254d3721ed4cd0666456c1629ff21008d52ca3ec1de24262721a29e945f296f39d3c3b38bf4702854e27b49a420b93a005b1dafe1eb91a6496ee6fe7191918d2aa7b0fced129b9d81406920a9ad22a0a7108f1db01e9efed9df37be79fde87af3d810e99cdc81925254bb63e27dea437486428c34bcae821e9b34f29e605b49c6ce6a7e42791c625bf677ff71e4dfd3e31d2eef9de3d8aaecf77c979a466446a523db4ca30cd49cbecd3ca2f4d16f9483362001a1421b80f4339236376ffd387e40fef80f6b048939c102411a03535e2c1fb9f82c94935cea6fba4391e926ea54ec90fa5788156b2b2fba4481fec4e679f6208b4d6f5e93d5adddbdea5455712408a39b303324b1487127b7eba7fff539e057266c82f23f34188d3d49f13f74ec84d20776efa90e6fb213135024f2c40ed4fc9f811aad48cd67789d568cc64d848cfecd0b225774ada9996412982218923c5958334f7684d6aff3e2d919170927d84d4c30dcaf7c9959ae6b49846d68b44f19c9ae594d3a7c896964bef4316c8bcd20a1726719fa6933884d4e0e453f25e3e9d4c69d59f7c505e67a4a9dccb491191b225554af8115b3e20e3709f269d3cbcbd8779864ef7c9417d40c3d9ce669410a6051f5a2a23834081e0f9ecfe7df0d2019aed9c4fa6f7cea7a4e16106f7c19b14d990517df829459d44b91d5e143ea7d092b20de4124c310bf7c9c1248bb2b3bd4746ead319c6790e82ec920e987e4a8a8b1611a9d9390c0cd973f291688cc4a91437413950584464dc23c1bc47f1104599400b8e4446aa9d02bc5c343969895d1acfa764cb60da76a17b3fa5b8977cce73525c64f6ee610853729166bba4d5f21d5a362446222d4c6bdddbe4de6494d978b0477c89660f0f76887014b51d10e214a460b248622956b89791aea4157a0820d190dc4e8a23082ad10d769abc68929b7d32053bfb14badd87009ed31a3c257808370a0e6908bbc4bd0485fc106433c88252636ab64beb8e392258725948879077bf9d911fbbbdbb4bec763025df973d0762823d5a9f240f16aa8dbc360a8a69ca49e97c9a3fa0170e486950b33d4a177c4a9ecdf6fd4f698d97624dd221e41223aafd3423821c90c34acd0e28c0a030863c7172b9b7692c44de1d72cc28f9726f8f2c2b1c1634cb29ba230bbb3da30892b897ccd28482c06df24ec8012427efc11402483c4136909ca2dd87c06d8ffc29b20b335a9aff74879414f264982c526694809a10f3937c50b33d0a52c8ffa07f0e762819727030bbcf537f4e6bc21c7d50e042ee0ad9489a535a5bdfa185f109491acd1635233d3cdd9d51484773467681ac2b05ec240bd33d9219cae97c4a868e9a919cee92d49147718f340779b7345924e8dbb3fb9415983ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7707c4afec4c16c767fe79e06291489d3daf4f6837d383ffb94a498cc28af73409c475c4e73b18b21ec7f4ac485b34d5e0b413b27e620f253b43bdba3383ca3259dfbd38f68eac9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700927540ccfdf00129bf29490e417b48291df294486ef629a4a204e2c37be05e0a43c8b4938cdcdba724137983e0100a091e908343b49d7e3ad9055bee9012de23e9a65c14a9f9fd09c5d91965da8837b3fc7c829960bbf080b289943a2140643ae91f122a0a6a480d3ed879709f720b942d056efbe44390c6275b46024cfc4642f590988844e6e1cea707a4ed1fee81dfc8373c9f91b2dfde9b61b2a6c49b9303b2e43b3bfb949a205d4119096a46f9ae3dbc42413f116f9f6c01743ac5f507e73b39f952bb641ea819ece9de1e8928057d84202df76f53f04aaba053cac710a1c93d005bcec8f7dba7ec13d1f3536224f200c8b7a42cca844c0d655f77c96944334a2712e3105f504e83b8173c94910b44f66d6f9fd0da2169024166c409c88d91d1a074036547a805e5b1683e283ccf7272223f45b37b9f526c4b4a7b9b3c25d2bd9f923730c9c871a599207f6942e4380741885ae7f91e399ebb07c4c2fba0208d006326076097e8fe80f34814fb500689f20894682055b343def9434a776eef9235d9b94fa1bc702fd9d929257dc048e4fc92c17f48b891fb48d9158aa629997d7f17027840b9856946ba7ef71caae621e51cc95f78b03dbd4f79b973d22e9407a766f77777c94ba2493ca0e9208cc827cb2865450a8a3c78b28c6423a09188e377c811a0bce5a7643928f02426789093c2dfa1c0ee80d886421a6a9691ed2055b8b77d4e6e2441a3e0e7e0e0d37cfbfe1ecd35cd2b4d2c86b07ffee97446c9560a2b30f514be53f7e49def4e28343d27a9214d4dcd661447dfdb23bdf7694e12b0bf4b343ed823d54f5116256e3f25ef70079de6bb3471e44c116b67a4f06940944ca0a9d823723fbc072bc74cfe70778fb897d6cf2957436c794e20896ee44a91a9bf4fe11ca54f21590f4957524a853c870ce425c79eac3385a0944622ab728f7c917bd04807f729ffb7ff801c5aca75d310c8cb7848913afe210f94426e7281a85946de2d6946b232339ab17d5a8d25534a03273cc8db7c78be7b700faae6e1f9843286a417681d1f74a39eb303128d07d387a46eef93b3fd00b99af329a9e57b34e19442268d446f1323dd2375b7bfb34f2243feee1e70232f8abc3a9264622f92d37d8c94f20724d333e2221accbd09f8ed1e79087b925aa6b0729ffc7d32c0e4547f4aee5ab67bff21f91910c0f33d721a29254e3349b460f341bfcd28c34339771266ca88a2d93e429419cd754ef9ceedfd4fc9b29251276a132bdcdf212024cfd48c32393b9fdea349cc66a4f529e947ba6946134b59610a471e5250b9c3d00e76f6762971b53d255b41b87d4a0c3aa5241cd99c2ca3a87e37e7a9a7c581dd193930db34f5a42da7a41033f2c3e128d1a2cebdbd3d0a39a9198d9b58837876ef1e85203409a474c8a05238762f231ea0e4f84334235bfae98462237241c91ddbdfa1244cb64b3a648f54ed8c3c4a4aad6216280cbf97ef50da64729ff89bf414297c4af8533e2423134c4a2ee7d42b6966d2ea4432d2c8c4bd0f8934a4992996a15c31c550e410b0f343b2401a9b526494e927dc2884236344f9d7fb7b648888a6241260a4fd7ba45fe10d50f69d3a3d2706457a6e7b4a7eeebd4f3f9d9258439c6748b0c2557c40e94782462c45b34bf12959d673a43676b9533209c4a8141bde23a34db380202523de9c924376b0479e75be0f6d49e11639d844769a3f2248463d3f7c405e2d8d3bcfa714a8ed3ec09c3e7c48b240f6637b8f75e401857f9319a5c2c8a64d3f9d9073706f0fcd488551f28966e7c1f90e4dfd3d8a2d0f888edb7b13d2589307f768750872bafb29b1398d6d9bdc2e1ac24392d8870724320f2897430a81dd776ab6ff80329833f2c9735219dbec87d0e218e9f47bc4ef39c13c1797609f4cc90352680f286e270b48aae621451ea406f3837c8f52a57b9c6e3a9892574769d5ed191906e237c27242c68fdc7cea7342913c614bcd1e7c4a84df25a76842e93d8246d16046c110754a432765462944e85e92c407e4ba920922178cbea4d99dc086eccd4881503a81f2fdd06f44fce96c8a080609b0fd3df2dfc964505b128b070fee3fdc9b4d305252f80f2830a391425ac8c013bf9d53f47140a96dd22333d2a1c00d6a8ba69a1662ceb1b4b44bfc4d2a048246b688f28be4c940395032e18056122896212345d0c851a6b0946cefa79fdea76c3afc244023579c5e22e6b807cdb14f9e26d97aa2cfde1e2d005018fce0e12e14574e26855c05ca5bee5348471128493d99025224640c77c8a77bc03a84dc568aa5286cdaa51c2b3112992b9235e252a8f27d22d7641f53ff60729ee7a4db486460b3289aa259a0667b3bb4827d9f82dffb13b0e5ee0ec5a10f49ea894fc866919a21f9a75510f2828803c831cf3f8500ee50d6e7210d7b9b9c2810845c5e5afb2026d8a7d5e01d9ad4dd7b8817ee918622ddb743ab8ae423938341734a3a9bf2457bd92ca7bf1f665035945d25b9279570401343ca8122bc83dd07149dcda69f7e4abd90f4a2d9f96c46a90ee2c8bd8c284b524f043927578af287fbf7b319c5aa07dce90e052994a223d9230f6fff218d940c10c92929db4fc9d2927430f752221c024d0e06b9e3fbf789430e24fd478a85d40bb127cfe9fdc9833d8aca69122985b04f9115a941445c342ed076871616a9d97d5abd22fd42be133d345252461823e527cf491950f0738fb99728433424bfe780d2c0c4e4940fa1a43662e729713c12ad19a69e9cbcbd87505c64ba0837ca47907526376ffa7087b205f7a84b316d140bed7f4a01145915d26fd40769679a94c94e764e667c779f5240d4ec530acdf629b3b04deba3442d242f1f66941421ed414a6b870cf4a7987a8a79499c493950a2873884bc7f82468a844480b2dff9a7e4d8a019e1408245d0681d8070cb60281fecd13f647b76a7c45714345033caf2d02204599fe97d122f222f890131c5f67d326c94fba6d962cf81a22d9a2beaef1e39853452f2ce114b12b45d52c453ca29ec82df285dfce0d319f9bda4df69a4e4e7932453da84b09c52ec4ab130cfc2a7942da38890d6c4691586e27af2596908c4c2a43c481ac9fd7d8839a524f33e4d03190dd26534048a120f60432865423e7d4679f25db82b079f528041f966ca1e930b425c4286923c3b72dd3fa5707b4619585ebed9c3022ad2c50f7791e33a205f8f464a7a8ce2843dfae61e05c0d42c3b274381b926a3c16c492a9a5203a459c9b61f50ffe7bb6846c9907bf7295f482688622752db648ceed34ac3a794679f51e66646212235a3ccd9c3872436db94d32282502fa44f89130e68c1f59cd69526930938e4d3693e9b7c4a398e8c2c047108c56f9373ca063ca02402ad191c504c07154d7a987c504a2d1fec111948dd10a17789e73f253b719fe0e632048a68669459a7393d2747709fa8489e313128f9ecf7b2fd87c8ec6316684d9f6c01343c0590c4e46412b23deaf9de2e053ce794732779a666a48949fb92b19d521c4f3349bcf9700661bdf780c2f2fbf00231590f682580dc1c8e3489dfc8f1247e234e2062521282021cca0053b387e49fdfcf3f25324cc148e4c890c4522a34a34520428f3cf53d4446073459f773f201ee7d4aba7e7f4a84a66898a6989222e4b21039581626a4e7c97c4db729f8a291eec0aba12892b276e7f7677b7be44acc801be5f5a60882289d42a6747f87981c8b0a449ae90e059b7b349318292987e914113a692412c08cb46506013cdfdd2336cf2892d8879ce6e4c3901349cb13b42041dc4b327df02969cbe9438ad248ab3dd89d0137cae63ca4bc303c0758c0090d92028c879493d921378fe469ef1cd028d7429a17f9a58c32a61466937a9dd07cdc27679b0c774e110d989c2cceec1cd2495a97f8ed80e66342e24dc3a5e1902b32211a5133d2282479942227fb4ab340a9407257281d437679b67b3f27bc79eac9c21192649d1f923aa46624f09440d8a565af7dcaca52da9e5c486a4634247d4406941238c46f33f20bc85d2115fd80f29ed39d7b0fc8bfa466e7d99456d3489e282742c4231f9634398579e79453fb94d651ce8951a819b985bb0f0f8819c90d23dcf22989f32e8552b4c6b04b934a01dc3966614a4e077879fb414ea1300588c46a7b3470f2a90e1e4c1f9061c821323b0fc9ab27b346793212fd7dfa723ba3a423394a9481a3f5494aaa0037f28f482e2906387f0013f49032b4a4844834284b433c7a8f022710843277bb073919824fcfa11c88f01414ef91bf41d94df214f7ce29eea76688ac88c96909986c19694b84c73b94f9a7e8fc01b9010ff27b0f20803431585c268736a3a89de212c28d9cfaed738ac3b39c7251e71328555aab244a527e9192954437523324a7649d27f769bd7697e4885c7d6ab6435c7a4e2ba3e439c002c2d9a6fc29597212380a2fc866efa153b224a49e485d91d7458c744efa86849b88979fef93e7b0479202baed52a2ed21454af425a5acf61f50b0fd90d8629b420d72f9660f685d1a6c4943a39c2365041fde87a73aa5650fb28504978ce97dca61502c8f39bd4fab37e41a92134e191c222fb57848fdd302c18442a3839c027aa8c1fc3e8565bb94ded825df866481107c483a93baff74774a4a63bac7b91ad2bc949d04797749bc68ea29d10127ee7e4e396fe2b7fc0113e4e18cd414b130591f0ab1f63fa504f1c37be40be5e487e694e927071f53bf4bee2f85700744768a60c8ca107929af427a8cb899268aa602b83db837bd4f069a720e0fc0bd0f490b939f42ff909f76ff0159764a5152334417e48a10a04fc9e525dc6802f6c892530aec53120f5ab438879521cb43e4a59ccaf9a72008399350af94ed789091845066f5fe14cde0433ea49c01750a570a298f833d3299d9f42179b70f681e0ec021a433295a24c6a5889b08724e867242f110a5bcceefcdc8ac517a8f713b9f7d3a233d067b4a4425ab47a248a6ed21c513bb0fc85325078a9a11235316764a3e27296b62f22919126234221e2d6d9e9378928f4acd485b4f2906226b40b128464ab10c65e4287c38a755b41929980338b4e7f768f2ef13d9cff7459592fdde2301a4688144f8d38cfc5840a3f4cd3e65c228914b9687a09145a2acf00e0d818c1899300a6678eaf74036b2654c54fa9c8cf81e49c56c4a2a82d2350f289d4dcd48123e255d4f8e2e162ac8ca90eedd219bf5905c4ed268946ee339dd254b7b9f924524ce648248f7929cdea3819383444ae9fea7fbf7d85dc9cf29334ff103214e3604512b669dd4121981292d2f92ade14e69e9eede3dca8e52304b0248dc032c41909c1cae87b4acc1ba774233fc608702768a9068ea0f486e1e22c592e77b145acd48d266e894649d66813cae7b14a429bf21f54a84b8774e7ee1a7146d52b3fb14ac93359a6def927d25ba51a49aed9368ec67b4744be68f660b23a5e0875280843825aaa9d37b94429aec5304b44bb12c7982a472396d42f95c3237a46cf728e541e24c9c4796e3fef68cd6271e509e95e2090c818c06bd4dd2f2298557d42969a4ec3e3971b37bfbbb14e9dd9be6fbe0de9c5207536216b232f09128b34cb851c445b95692f79c9c8f8780464101a962927a5a882335481122c580c426932919fb7b14bfed64c08d162f1eee4389670f91d2a12c26a673b2bd3b23ce25854f430734329a640029a2a0d74800295c2559a029a6a5e529d919f2280f801b79f7c41194a8263784b8977c498ada480dcec8d4d302c23d58426a46412cad7093f7798018607f42e111297ad2b1194d2ad119a9466a9693bb4b5e011923d251db14be9046a2e88f5c821d4aa8df27f69a40231187517e0f9d3e203f9b329fd4e93d326114105108464ee4fe39fcb72916b9c8e722730cf371402661f290a4624a94227bb14b590fcc297902d3fb24b8dbf727640df61f520285a27fe2104a59eeef91a7b4cb7e6fbe3fb93fcd288e24a120be2035bc4de24f7101290d5a9f20733a43a71411ccc855263b4b91201923a2310502a404661959d24f3fddcb98df2889b5479c976d532a94c87b9f3c601ac27d5250d3594642b2f7601f93759fa6989c36cacb51c044524fc9cb09c5ac9403d82335408e13394768464c41f11d61f4291212f7a93ff2df28d348decb040b07e43350339ac93c23ef8b5434312eb952248ac431dbe764430821cac53123d112124d3145e819f925dbfb340650968294873bf7899529c5c9f990fb14f150c7c48753f2daf67789349373321f5372c2493f93d1bc0fbb70b037c91fec5398f6e97dc49119c51614fe93873025d7edd33df2880e30527a299b92c9213120e78e2c020d8672ae94ab3927613ea07cd01e268b5430596bf24f281ca521ec3e2497975896ac25858694becbc9eba266b440bb438b1f08eec81aec538a98e84652f829c9e22ef12405d2c06d879c907b945adbded9a5009a92a5a4df48d56de7c4d1f7b13e46e6979a4db309a9011ae98c268f18897243dc8cacc67d3218f748f9035a762fa7a92317849025e540e244510d19d51d92c2fb2468d42d7b351412ee206571ce0b2ef7892329a74a7693560ac827b8b743ebd2d48c16a90ea6f0063fdd076ef7499c499c30b1f7ee9325a634d33e666187d648cf11f9519a8770cb49df501efd9cde22a332a3c4cf8c6d16450fe455430276a83f523a64c469bcdbb31d0ab067bbb46622898efd03e468295e38a079a2e09b5e20cbbdbd433a90f2e294e39d819148059301a359ff740af738a7c5205a5fa005655a0c9c5228913dc8006d3f23134eae19614f696ff2df88dff6c99e3e208543becaa73b94a2a266b4ea45be28cde9ee7d32f3fb537268298b3d256f904840fefb3ead1750b329450794be223147544aaa86accc8ca0911345d1f2cefea70ff640b707f748c6ef436472a2f1fe3e912c3ba02405053cf4bf070fb2dd1c024859891979c10fb7ef67a0db3dd237b42a4823a2b084523be44aec614e1fdc278ff53e9915920ee2b7c91eb9eec8fc4fc9bd2376d99bd2b20035db3f2717ea53f20676c81a939c3ea49112579027bf4b0b94f76986a690ac7c97567b1ed09cee3ca4340dc5d1b40c416cba9d13018877e9b5097408896236a59c06297c10ef210c30884761361184166d689910cd680d7197dc2ac20dfc46ae180d81048d16daee4d290540695a407b30dd231b4ef1109021dc2849319990caa435449a978c2cef016681bc0652af64dc29fa239121c54c74a354e13df205e8639aff4f215994679c91ff448692cc35a941a2db43fa16a24fd1c73e792b0f30f5484cd0ca64be4d1e3fd18df88086404b4b3427144e1edc3ba789a56694a9a6c881e2219a188c940842612d2d80d260eedd27e24fa7d0bdc4540f88ed29f43ec7d43f2490b4f23add26ed4c4a93d6c929ff4acdf629059b53584038130b0b23edc202d27029239fd388ef7df4fd5ff24b488de4cdb42e566d512d3f7af4d17159a6279f1c9fa5afd713fb79932ed64d9bceb3cb3c5dd5f9f62c3f2f96f94c1abe78fd795aafcbbc19a7e9eb3c4fe76dbb6a1eddbd9bbdcdc68be6ee326f8ba6babb6c2e9af4bcaad34555e7e92c6fb3a26c08cf05fd36cbdaeca347bff8a3699d676d3e7b724d78107710cb234e2074b7f7e1b73d246779fbde1ee9f60905eb0f3e85c8eb2b5f02f5bd1d52aaa4aaf7f6dfeced3eda3b7874ffdef8fe7d9ad2077b3f454dd72beae7fda0eb2b063aada2520ef6d337bbf71fedee3fdadd1953be82ecd3fe4f7d4464cc9734ba69bec897ed171599bf471f3dcdcfb375d9e2cb62467fdf5dd5d56531cbebe6ee17c5b4ae9aeabc1d7f912db30b7eebeec2fefa795dad57cd5dca49525a90ac0d71258c36a58c0f0ec823a0b42c451ef7294df3702f0af478ddceabbaf84186c9bbbbaaca627a7ddc34c5c512d09bbb2f5e7df17a9be66dfbe9d98bd3edd7af7629a6bb14cdd25eaf80fbad61d12bcb6c815736002dab29bf4ead7e3a5b65cbabbc69e9e3e6ba69f3c5539dfd326b40b9e2bcd049c23c900124dbb247ee11651bc90f211122b5f490566def91ec3f445819bef746f03f5ead0851e9741434396ee9ebde64ee7c3a3ea0ac02b93e3499bf64f48b69c6f2655bb484c72ffe685517cb69b1caca334c23e9108a4528dd749f16e6b7697d81b22b53cabf93d37e6fe73ead0f673308609b2fb3652b6fecd1ba37a5562859030bbc4b4e2459a9c936255fa7b31d8a1e68050b6f08eaaf992a42e27c06eea1295ee5755be40db09915cdaaccae5f08d597f5a2d926e1da860892c7fee0f7df1d83e43251c482c5b200e9199128b34439f0e26781031d32cd5d8a53c8a7b83fa57c00e9cd7328dd664aa37c2f24df434c08fe2aab89642dc10515b3b2acaef2d973e54cfeec322bd784c1f748ff2fdb9afe68f275b6a25773e29f75b3a77f817b6d0bfa7b59d5eddcff000df817bc9735057224192950fabec8b4a1ff119ad1df531a1865bdedf70c375f63f2e92ffdbc58ce181ecb91bef89654aaf7defa6d5311f9e937fdcce2c2bf0876a0c8799d2d29392e8de86f7e2d3baf4970b86ffae822af89ded7e64ffa79955d0314fdd15c15ed0ff2bacc9633fa9cbf5f67b9f99581a1e500018080fdcc36a60fa9732283fe01642d09b85540007c4dbf3301f85bfa63fd563fa58f74a0fc95f6cb3498d4d90fc8fee063fa0bed0d58a189f9867f0a45d0883e5182e02f05481fd298892cf88cfe201ab86f3c1ae9d7176535e1af040746873be7becc1fda987f77d0d66fa9276ea4738cc1091cfe1323a64ff0f2ba8116c007eba6292fe9f786d83da7b11960f237bf477ffd7451716778d7fbd334ff3ea921689817952728b416f800faa920d3e77ffcf4cbf4c5976fd2a7a7cf4fdf9ca6dbe9770b722aeabc21639816cbf4ece40b72142ed33dfaeaf8076b72074e68fee8a3e9ba268d3b4a1bf222d47b9866052937d11fe88a9c159a2a16d997448a57d9f242b4a2f6fdbd8ff6306e72c8e85ff2e9e85f5a03d11f9ff23048bdb4d5b42abdb73e7a335d013a11834cb89810f7e5ebbcbe2ca679fa26bb708d7e52be74adce96a45ac8d941936c0a047b4d9ee64b194451e7dcc2fff26c39a9d64bd6f76d762136d57dfbfa6db18281fde262c13d349e7776fa6e4a6c44bf8484a0a8fcd3838cd26d942524b548596f4a739c5302e11ef9ce1469d1aa34ac0e05abb4ae4f9e3a65c3c89fa4009522350a5128af98ed92affc60c2da935c50a462ceb71f500699ac1e65491f4e2872a6c5abc9837b3b946c9fc063a2e4d4e41ead536dcf323270fbe4f193a9233379be4379598a31263bf7d16c975686f6b1964a5123fc708a70c8319d51f2f600c9da192dd3203099defbf47c462602e10f194e5ad9a266941edccbef53d2627f87720070fef7f6ef4d3e7d4083fc74674a61ce8c9624335a57a15ceea7794e013f021d6e460bad192de5ed4d29e9b99f1196141ed1122ae53c29c7c4469d9ad182d101ad87d282232554293340c39dec50aa7c7732dbdda304e0a7127d7f4a8b0b0f29b145313e0558fb40905ea380e7d37b94fed8a1208643304aa4ef65585f3bdf43ae92d2a23404f2c82936a718f4c18329f99ed46cf73e390fb406456e280537b4dc4551d639652d324a50517af7fe6cff1e82cd07b47643a103ad0e3ca0f5bc7d5ad5a48c212590f6ce09e6f420dfbdbf0b978816853ea59890d2389f5284838c24cd0268bc9bddcbc879a2e804faf421960028cfb17d30a388739f1683680180f20cf71e52968f566b6964901c4a1453d28c56ebc841c2f828614d4e3245640f687d9e6835dbfb1423fd747a7ff7d32959605a8ea0f885f21448b7517662b68b582da3b00f9345514cbe3ba3343ca555c8f5a61089425722346544f691e09ad17a0135db99d0f0313b64d8691668ad93d87246b1358df35e46f9045a74a0669417c9689187b219946e2068146551aa80329f3b7b7b0480326c3cd29d29654b893c94a1a2f407b13c4d3d657ac0c784dd2c3ba7c51a6a36cd6959648796c028934174bb4f342624d1fddede7dca8bd1c20c023a82bc4f64a045d2e92e89cc1ea53f68018832c6b4704e2b76f7295403939f53a0b6432b81244ae49cd0220ba2536282d9a7bbe73b944ca60421266b423eeec1438a7c294d44cd2614a96720e3bd9d8c2662f6e9a7b46247cd3ea535e4e90e41cba6c4919468a57562e21a9ae28c268a722d94a7a2660fce33cac710fb208d48d068258982485a7a983da0d56dc28ce844cd88bf2784dac3ed73ca0ad29c52faebe10171132d90e4bb9457a2f7401012625a782259c867b4bc43412c85d5130ac191109aececd0aaf40e02615a6d9d3cc8288cdf9950a0bf8f15234adfd02c4c735a0825cdb0cb9e3a2d0a50ba97fa3b209489f614ba520e94e66e420b62e442931e01bf3d98504c3fa18c21310061448a8866819234043ba38c4d4e128291521a97589410bf470b0514c391f6caf62933746f4a5cfe6036a3540346fae0e03ee84343a0d08e66e19c86b047d9455ae924263a9812508833a50ceee5335a6ba08c3d11e43ef547934c6f5168bf372379a13fa819a5c166c4a4940ace291f40f94838f5a463cfcfa7941ba5907b4fb2d9b41844b951ca509ed3d2ca3e05e6346db49035f994d2029f7e4a69e773e0462bfb94eaa0f41ead2193007e4a723aa1f5f4ed5dcafad320f7a79feea153c2e6e13dfa64fb9cb2a624f550353b141211d792a794911abc0fd7e521adc33ca4241f4d2221b8ff90c6f1102bfef7cf77289d399b7e4a19296a468a67428b86941b27f54c9dd22262b643a91232170f680668787b684639650ab6886493fb9458a4a6441a5a7327b54431322596eed38a0c3523cd4b4a9842334a5693e23aa77c37ada610973e409846ab5df777210b077b94fab94f7cb84ba93dc2ed531ac2f9a7947d214ea3614e761e64e894f2d7d48cd26d13c955dea3df0e6809657f0f8b3fe70f1fcef6c02194faa2e523b265f7497249bf214d3da30cde640fd940fa9056cfa8d9fe1ea1b0475f129569a4a486b6296d46d957522ec4d964420e300b942ea768ec2125480f483befef53e265420945fa93d655a81f5a0de2219052be778f727c7be76cdaee63eaf7283f4ff242b243cb5913184a5a53f8f4fc534abc3c78784043206d447c4c70c942edee5022986c03e6943270641a28c97a8f524dc496a47b1fd21441ea89d348099c4f30a7b4cc7cb0bbb7b74fb30382ec43ea691994965088ebee91e621e38b663b93870fa883edddfb8411a5b26802c8926e3fb8774e6290519a781f933523f93b7848b68cf896a0edee52062fa3443f7d442c447424a4a8d91e195aa406b7f73e7d48727a4e6a0964207b9a1f106fd124ec8220640d1f4c485dd0976024d2a5640169521ee6f789791e124f3d44b37bb4b4f3f0c143ca88de23d34d4955ca3f13d36f4ff7f7260fc9e6502606aa86dc917ba4383edd7e40734c534f0b0bd494742c99e67c769f1880b937bb7f6f9770a6e5a41d5acfdfa7fc30f11059f283fb07d9ce3d5a65fb7407b340c4b94f66f380d423257a290148ecfe00f331d9a504e9c33d520f1869be3fdb3b78403a39232c494e49b51155334275fae96e9e511a88d7e8b3737a9932fcdb345734525a6a200e210bb1476a7142432630e037ca0a7e3abb4f64204348b8d1784010482cad02d00acc834f0fa0b866c4360f4911512283669d52c12480c431dbbb7be4033ccc69c5640a829c9f3fa49506faf2c101742fb91394a626a3738f520ee4d19161d841b37b072441bba4340e4810b7696186cc2ef10e310c25cff33d6ab88391ee1d9035a2b41f65172734041a34793524d87bb48c97ef9295247ea26664dcf70f26644069599210a7f1c295a245f60c893462937b0fd029e9a5292d7e9039260f939a918b7600969a2027438b8c933dd64864f348b628599c1f902221fe22bd497a609b3cb23ca3c5d073d206d48cf2e564fb48cc496592aa21df891417592fe2425232a4eac8d4503362e3fb9404a6381f9ee33ee9341a02e9d84f29df4deba093bd079f42161ee49f9234022332c734f53b24a7b42a404b33e7e7bcba4a8c42cd0ec839fc34a72fb30770304090ec532c5fefde3bdfdf994e69c6a06a2810cd28d143734d2bd5a48768218372cde4543fa0551a523a7bf7ef011ae95e22247914843c75fa291939b261f7b73f25d5ffe0fea7f7f676b853ca42ef1344627e220ccd292dd493ef45ab003bbbc43764b0f678458cc87c4e9a86525dc43ac421e491501e9fe4947260c4bbe7348fa01bf91c933dd26558b4a25920678e5a90669d527a99707cb84f3a879a1d9084cd7608f19d8c1c765ae4a741c267a574f301d9221a39437bf880eccc0e391e3bbbb49e47797b5a86fb9494eac37be4b41c9cdfdfbbb70768c42de4a4934b9091fe20dc7648f6a60f4915d34a0cf9e0e47c7d8a913e246fe99c42108201076a424ee301ad756c5342fd5e46a6688fd40335239592d378485a205e34f524ce33e2ded9f49c167d27bbe478419c77a052ce495bee925d258d744076681fde19b9a6b39d19adf69e837befd182f8ce2eb125b131e136a5dceec38cd662683a480a487b4d75c57f9a135ab006b4fe40ebc6b470f62914fe0eadb090c98019a466e7943a223125189064324da42648f76d93519b917e21876a17b84d69461f92a285a74a4380f920f786c223e2a1dd5d12215a34a766f96c77278710e70f696d649fd69a6802c816521290a4349f3e208349cd3292b2e93d726369e594a0cdc830937784bc362d20d1cae4bddd4f215953929cdd4f492793352146da23e6a0de695276eee5797e6fefdefe3de096edec62ed0c0421adb67f4e9143f62971022de87cfa294dc33979f0d48c1c9aecc14370ef2e2d38ecdf879521dd43524112b24bab42b4f84dcd66e4209d4f69eaf7c85fc51066e41290","6dba4fcb38f766fbb4ea9183bcbba4001edcdf275b467939222f754f024ceb1a53d2e5b47abd4bd4a766e7142d91aea0456472d389bca4e926a49d09da8ccc2a58ec531e02a19a6594ce435c484c4e2325bd48de72be936707e7f748a0d0e984d64bee11a58916c46afb7be46a9059babf9d67646048abee3d3847a7e4625318482a684aeb24c421c46f07a4bfb777ceef9d7f7a1fbef6043a6436236794942cd9fa9c7893de209139a0e5cb036223b20d14f3025a4e36f353f29348e392dfb3bf7b8fa67e9f1869f77cef1e45d7e7bbe43c52332235a91e5a6d98e6a465f6696d97268b7ca41931000d8a10dc87a19c9131bbffe943f28777407b58a4494e089208d0aa19f1e0fd4fc1e4a41a67d37dd21c0f49b752a7e48752bc406b55d97d52a40f76a7b34f31045acdfaf41eaddf6defd2b22a0920c59cd90199258a43893d3fddbfff29cf023933e49791f920c469eacf897b27e426903b377d48f3fd90981a81279698f6a764fc08556a462bb8c46a3466326ca467766861923b25ed4c0b9d14c190c491e2ca419a7bb4eab47f9f16c14838c93e42eae106e5fbe44a4d735a2e23eb45a2784ecd724af253644b0ba2f7210b645e690d0b93b84fd3491c426a70f229792f9f4ea6b4ae4f3e28af24d254eee5a48848d9922a25fc882d1f9071b84f934e1ededec33c43a7fbe4a03ea0e16c6733ca10d3c20f2d869141a040f07c76ff3e78e900cd76ce27d37be753d2f03083fbe04d8a6cc8a83efc94a24ea2dc0e2ffb9e536849d9067209a69885fbe4609245d9d9de2323f5e90ce33c07417649074c3f25c545cb84d4ec1c0686ec39f9483446e2548a9ba01c282c2232ee9160dea37888a24ca005472223d54e015e2e9a9cb4c42e8de753b265306dbbd0bd9f52dc4b3ee739292e327bf7308429b948b35dd26af90e2d0c12239116a6d5ec6d726f32ca6c3cd823be44b387073b44388ada0e08710a52305924b1142bdccb4857d21a3c049068486e27c5110495e8063b4d5e34c9cd3e99829d7d0addee4300cf69959d123c841b058734845de25e82427e08b2196441a93135dba5f5cb1c112cb92ca443c8bbdfcec88fdddedd25763b9892efcb9e0331c1def91ed9b207506de4b551504c534e4ae7d3fc01bd70404a839aed51bae053f26cb6ef7f4aabb8146b920e21971851eda71911e4801c566a764001068531e48993cbbd4d6321f2ee906346c9977b7b6459e1b0a0594ed11d59d8ed194590c4bd64962614046e9377420e2039790fa61040e209b281e414ed3e046e7be44f915d98d1e2fba73ba4a49027c3649132a304d484989fe4839aed519042fe07fd73b043c9908383d97d9efa735af5e5e88302177257c846d29cd2eaf90e2d7d4f48d268b6a819e9e1e9ee8c423a9a33b20b645d2960275998ee91cc504ee7533274d48ce47497a48e3c8a7ba439c8bba5c92241df9edda7acc0f4c1a70ff7a618e9947c9f9d3d9a49e24af206f74814273985e353f2270e66b3fb3bf73448a1489c569fb71fecc3f9d9a724c56446799d03e23ce2729a8b5d0c61ff53222e9c6df25a08da393107919fa2ddd91ec5e119adeddf87c8ec92537f7e8f1204843c0d815c3e1240f24368c9ec53d2593bb37b0fd0ec8098fbe103527e53921c82f690523ae42991dcec53484509c487f7c0bd148690692719b9b74f4926f206c12114123c200787683bfd74b20bb6dc2125bc47d24db92852f3fb138ab333cab4116f66f9f90433c176e101651329754280c874d23f245414d4901a7cb0f3e03ee516285b0adcf6c987208d4fb68c0498f88d84ea21311189ccc39d4f0f48db3fdc03bf916f783e2365bfbd37c3644d8937270764c97776f6293541ba823212d48cf25d7b7885827e22de3ed902e8748aeb0fce7772f2a576c93c5033d8d3bd3d12510afa08415ad0dfa6e0959645a7948f2142937b00b69c91efb74fd927a2e7a7c448e401906f49599409991acabeee92d38866944e24c621bea09c06712f7828231788ecdbde3ea1b543d20482cc8813901b23a341e906ca8e500bca63d17c50789ee5e4447e8a66f73ea5d89694f636794aa47b3f256f609291e34a3341fed284c8710e8210b5cef33d723c770f8885f741411a01c64c0ec02ed1fd01e79128f6a10c12e51128d140aa6687bcf38794eedcde256bb2739f4279e15eb2b3534afa8091c8f92583ff907023f791b22b144d5332fbfe2e04f080720bd38c74fdee3954cd43ca3992bff0607b7a9ff272e7a45d280f4ecdeeefee929744937840d34118914f9651ca8a141479f06419c946402311c7ef90234079cb4fc97250e0494cf0202785bf4381dd01b10d8534d42c23db41aa706ffb9cdc488246c1cfc1c1a7f9f6fd3d9a6b9a579a580c61fffcd3e98c92ad145660ea297ca7eec93bdf9d50687a4e52439a9a9acd288ebeb7477aefd39c24607f97687cb047aa9fa22c4adc7e4adee10e3acd7769e2c89922d6ce48e1d38028994053b147e47e780f568e99fce1ee1e712f2da853ae86d8f29c4012ddc89522537f9fc2394a9f42b21e92aea4940a790e19c84b8e3d59670a41298d4456e51ef922f7a0910eee53fe6fff0139b494eba6219097f1902275fc431e2885dce40251b38cbc5bd28c6465663463fbb43c4ba694064e7890b7f9f07cf7e01e54cdc3f309650c492fd0c23ee8463d6707241a0fa60f49ddde2767fb017235e75352cbf768c229854c1a89de2646ba47ea6e7f679f4486fcdd3de0465e14797524c9c45ef9f6fe3e464af90392e91971110de6de04fc768f3c843d492d5358b94ffe3e196072aa3f25772ddbbdff90fc0c08e0f91e398d9412a799245ab0f9a0df6694e1a19c3b09336544d16c1f21ca8ce63aa77ce7f6fea76459c9a813b58915eeef101092676a46999c9d4fefd1246633d2fa94f423dd34a389a5ac3085230f29a8dc6168073b7bbb94b8da9e92ad20dc3e25069d52128e6c4e965154bf9bf3d4d3e2c0ee8c1c986d9a7ad29653528819f9e170946851e7dede1e859cd48cc64dac413cbb778f42109a04523a6450291cbb97110f5072fc219a912dfd7442b111b9a0e48eedef501226db251db247aa76461e25a556310b1486dfcb77286d32b94ffc4d7a8a143e25fc291f92910926259773ea953433697522196964e2de87441ad2cc14cb50ae9862287208d8f92159208d4d2932caf4136e14c29131a2fcebfd3d32444453120930d2fe3dd2aff00628fb4e9d9e1383223db73d253ff7dea79f4e49ac21ce332458e12a3ea0f423412396a2d9a5f8942ceb39521bbbdc29990462548a0def91d1a659409092116f4ec9213bd823cf3adf87b6a4708b1c6c223bcd1f1124a39e1f3e20af96c69de7530ad4761f604e1f3e245920fbb1bdc73af280c2bfc98c526164d3a69f4ec839b8b78766a4c228f944b3f3e07c87a6fe1ec5960744c7edbd0969acc9837bb43a0439ddfd94d89cc6b64d6e170de121492cad61522a8c7239a410d87da766fb0f288339239f3c2795b1cd7e082d8e914ebf47fc9e13cc737109f6c9943c2085f680e276b280a46a1e52e4416a303fc8f72855bac7e9a6832979759456dd9e9161207e232c2764fcc8cda73e2714c913b6d4ecc1a744f85d728a2694de2368140d66140c51a734745266944284ee25497c40ae2b992072c1e84b9add096cc8de8c1408a51328df0ffd46c49fcea688609000dbdf23ff9d4c06b525b178f0e0fec3bdd904232585ff8002331a29a4850c3cf1db39451f0794da263d32231d0adca0b668aa6921e61c4b4bbbc4dfa4422068648b28bf489e0c940325130e68258162193252048d1c650a4bc9f67efae97dcaa6c34f023472c5e925628e7bd01cfbe46992ad27faecedd1020085c10f1eee4271e56452c855a0bce53e8574148192d49329204542c670877cba07ac43c86da5588ac2a65dcab1122391b92259232e852adf27724df631f50f26e7794eba8d4406368ba2299a056ab6b7738fb2a714fcde9f802d7777280e7d48524f7c42368bd40cc93fad829017441c408e79fe29047087b23e0f69d8dbe4448120e4f2d2da0731c13ead06efd0a4eede43bc708f3414e9be1d5a55241f991c0c9a53d2d9942fdacb6639fdfd3083aaa1ec2ac93da984039a18520e14e11dec3ea0e86c36fdf453ea85a417cdce67334a751047ee654459927a22c839b952943fdcbf9fcd28563de04e772848a1141dc91e7978fb0f69a46480484e49d97e4a9696a483b99712e110687230c81ddfbf4f1c7220e93f522ca45e883d794eef4f1eec51544e934829847d8aac480d22e2a27181b63bb4b048cdeed3ea15e917f29de8a1919232c218293f794eca80829f7bccbd4419a221f93d0794062626a77c0825b5113b4f89e39168cd30f5e4e4ed3d84e222d345b8513e82ac33b979d3873b942db8475d8a69a35868ff530aa0c8aa907ea33e483bd3a44c76b27332e3bbfb9402a2669f5268b64f99856d5a1f256a2179f930a3a408690f525a3b64a03fc5d453cc4be24cca81123dc421e4fd13345224240294fdce3f25c706cd0807122c8246eb00845b0643f9608ffe21dbb33b25bea2a0819a5196871621c8fa4cef93781179490c8829b6ef9361a3dc37cd167b0e146dd15c517ff7c829a49192778e5892a0ed92229e524e6117fc46e9e2079fcec8ef25fd4e23253f9f2499d22684e59462578a8579163ea56c194584b4264eab3014d793cf4a43201626e541d248eeef43cc292599f7691ac868902ea321509478001b422913f2e933ca93efc25d39f894020cca3753f6985c10e2123294e4d991ebfe2985db33cac0f2f2cd1e1650912e7eb88b1cd701f97a3452d2631427ecd137f72800a666d939190acc35190d664b52d1941a20cd4ab6fd80fa3fdf45334a86dcbb4ff9423241143b91da2663749f561a3ea53cfb8c3237330a11a91965ce1e3e24b1d9a69c1611847a217d4a9c70400baee7b4ae34994cc0219f4ef3d9e453ca716464218843287e9b9c5336e001251168cde080623aa868d2c3e483526af9608fc840ea8608bd4b3cff29d989fb04379721504433a3cc3acde9393982fb4445f28c8941c967bf97ed3f44661fb3406bfa640ba0e129802426279390ed51cff77629e039a79c3bc93335234d4cda978ced94e2789a49e2cd873308ebbd071496df871788c97a402b01e4e670a449fc468e27f11b71021193921014e05006989a3d24fffc7efe2991610a46224786249652a1192d02117ae4a9ef21323aa0c9ba9f930f70ef53d2f5fb53223445c334c59414219785c8c1b230213d4fe66bba4dc1178d74075e0d459194b53bbf3fdbdb23576206dc28af37451044e91432a5fb3bc4e4585420d24c7728d8dca399c44849394ca788d04923910066a42d3308e0f9ee1eb1794691c43ee434271f869c485a9ea00509e25e92e9834f495b4e1f5294465aedc1ee0cb85136e721e585e139c0024e689014603ca49ccc0eb979244f7be78046b916d2bcc82f659431a5309bd4eb84e6e33e39db64b8738a68c0e4647166e7904ed2bac46f07341f13126f1a2e0d875c9109d1889a914621c9a31439d9579a054a0592bb42e918b2cbb3ddfb39e1cd534f168e9024ebfc90d421352381a704c22e2d7bed535696d2f6e4425233a221e92332a094c0217e9b915f40ee0aa9e80794f79ceedc7b40fe25353bcfa6b49a46f2443911221ef9b0a4c929cc3ba79cdaa7b48e724e8c42cdc82ddc7d7840cc486e18e1964f499c772994a235865d9a540ae0ce310b53723ac0cbdb0f720a8529402456dba381934f75f060fa800c430e91d979485e3d9935ca9391e8efd397db19251dc951a20c1cad4f525205b8917f44724931c0f90398a08794a1252544a241591ae2d17b1438812094b9db3dc8c9107c7a0ee54084a7a0788ffc0dca6e92a7b8774e713f354364454c4e4bc064cb485b223cdea1cc3f45e70fc80d7890df7b0001a489c1e23239b41945ed1497106ee4d46f9f531c9ee5948b3a9f40a9d25a255192f28b94ac24ba919a213925eb3cb94febb5bb2447e4ea53b31de2d2735a1925cf011610ce36e54fc99293c0517841367b0f9d922521f544ea8abc2e62a473d23724dc44bcfc7c9f3c873d9214d06d97126d0f2952a22f2965b5ff8082ed87c416db146a90cb377b40ebd2604b1a1ae51c2923f8f03e3cd5292d7b902d24b8644cef530e836279cce97d5abd21d7909c70cae01079a9c543ea9f160826141a1de414d0430de6f7292cdba5f4c62ef936240b84e043d299d4fda7bb53521ad33dced590e6a5ec24c8bb4be245534f890e3871f773ca7913bfe50f98200f67a4a68885c9fa5088b5ff2925881fde235f28273f34a74c3f39f898fa5d727f29843b20b25304435686c84b7915d263c4cd34513415c0edc1bde97d32d094737800ee7d485a98fc14fa87fcb4fb0fc8b2538a929a21ba205784007d4a2e2fe14613b047969c52609f9278d0a2c539ac0c591e222fe554ce3f0541c899847aa56cc7838c248432abf7a768061ff221e50ca853b85248791cec91c9cca60fc9bb7d40f370000e219d49d122312e45dc4490733294138a8728e5757e6f46668dd27b8cdbf9ecd319e931d853222a593d1245326d0f299ed87d409e2a3950d48c1899b2b053f239495913934fc99010a311f16869f39cc4937c546a46da7a4a311059038a4531528a65282347e1c339ada2cd48c11cc0a13dbf47937f9fc87ebe2faa94ecf71e0920450b24c29f66e4c7021aa56ff6291346895cb23c048d2c12658577680864c4c8845130c353bf07b2912d63a2d2e764c4f7482a6653521194ae7940e96c6a4692f029e97a7274b15041568674ef0ed9ac87e4729246a3741bcfe92e59dafb942c2271261344ba97e4f41e0d9c1c24524af73fddbfc7ee4a7e4e99798a1f0871b221885a31eba496c8084c6979916c0d774a4b77f7ee51769482591240e21e600982e4e4703da4650dd6bd139ae1073b14b0538444537f4072f31029963cdfa3d06a46923643a724eb340be471dda3204df90da95722c4bd73f20b3fa568939adda7609dacd16c7b97ec2bd18d22d56c9f44633fa3a55b327f345b1829053f940224c429514d9ddea314d2649f22a05d8a65c9132495cb6913cae792b92165bb47290f1267e23cb21cf7b767b43ef180f2ac144f60086434e86d92964f29bca24e492365f7c9899bdddbdfa548efde34df07f7e6943a9812b39095818f449965c28d222ecab592bce7e47c3c04340a0a481593d4d3421ca9418a1029062436994cc9d8dfa3f86d27036eb478f1701f4a3c7b88940e6531319d93eddd19712e297c1a3aa091d12403481105bd460248e12ac9024d312d2d4fc9ce90477900dcc8bb278ea04435b921c4bde44b52d4466a7046a69e1610eec11252330a6269859bbccf03c400fb130a8f48d1938ecd685289ce483552b39cdc5df20ac818918edaa6f0853412457fe412ec5042fd3eb1d7041a89388cf27be8f401f9d994f9a44eef9109a3808842307222f7cfe1bf4db1c8453e179963988f0332099387241553a214d98b5dca7a604ec91398de27c1ddbe3f216bb0ff90122814fd138750ca727f8f3ca55df67bf3fdc9fd694671240905f105a9e16d127f8a0b4869d0fa0499d3193aa5886046ae32d9598a04c918118d2910202530cbc8927efae95ec6fc4649ac3de2bc6c9b52a144defbe401d310ee93829ace321292bd07fb98acfb34c5e4b4515e8e0226927a4a5e4e2866a51cc01ea901729cc8394233620a8aef08a34f9190b84ffd91ff469946f25e265838209f819ad14ce619795fa4a28971c9952251248ed93e271b4208512e8e19899690688a2942cfc82fd9dea73180b214a43cdcb94fac4c294ece87dca788873a263e9c92d7b6bf4ba4999c93f99892134efa998ce67dd88583bd49fe609fc2b44fef238ecc28b6a0f09f3c8429b96e9fee9147748091d24bd9944c0e89013977641168309473a55ccd3909f301e583f63059a482c95a937f42e1280d61f721b9bcc4b2642d2934a4f45d4e5e1735a305da1d5afc407047d6609f52c4443792c24f49167789272990066e3be484dca3d4daf6ce2e05d0942c25fd46aa6e3b278ebe8ff53132bfd46c9a4d480dd048673479c448941be2666435ee93c1b847ca1fd0b27b394d1db920842c290712278a6ac8a8ee9014de2741a36ed9aba1907007298b735e70b94f1c493955b29bb452403ec1bd1d5a97a666b44875308537f8e93e70bb4fe24ce28489bd779f2c31a599f6310b3bb4467a8ec88fd23c845b4efa86f2e8e7f416199519257e666cb3287a20af1a12b043fd91d221234ee3dd9eed50803ddba535134974ec1f20474bf1c201cd1305dff40259eeed1dd2819417a71cef0c8c442a980c18cdfaa753b8c7392d06d1fa022d28d362e0944289ec410668fb19997072cd087b4a7b93ff46fcb64ff6f401291cf2553edda1141535a3552ff245694e77ef9399df9f92434b59ec2979834402f2dff769bd809a4d293aa0f4158939a2525235646566048d9c288a9677f63f7db007ba3db847327e1f2293138df7f78964d901252928e0a1ff3d7890ede61040ca4accc80b7eb87d3f03ddee91bea155411a11852594da2157620f73fae03e79acf7c9ac907410bf4df6c87547e67f4aee1db1cbde949605a8d9fe39b9509f9237b043d698e4f4218d94b8823cf95d5aa0bc4f33348564e5bbb4daf380e674e721a569288ea6650862d3ed9c0840bc4baf4da0434814b329e53448e183780f6180413c0ab38920b46843cb8468466b88bbe456116ee03772c568082468b4d0766f4a29004ad302da83e91ed9708a87800ce146498ac9845426ad21d2bc6464790f300be435907a25e34ed11f890c2966a21ba50aef912f401fd3fc7f0ac9a23ce38cfc27329464ae490d12dd1ed2b7107d8a3ef6c95b7980a94762825626f36df2f8896ec40734045a5aa239a170f2e0de394d2c35a34c35450e140fd1c460a444100a6b6901940673ef3e117f3a85ee25a67a406c4fa1f739a6fe2181a495d7e9366967529ab44e4ef9576ab64f29d89cc202c29958581869171690864b19f99c467cefa3efff925f426a246fa675b16a8b6af9d1a38f8ecb323df9e4f82c7dbd9ed8cf9b74b16eda749e5de6e9aaceb767f979b1cc67d2f0c5ebcfd37a5de6cd384d5fe7793a6fdb55f3e8eeddec6d365e347797795b34d5dd6573d1a4e7559d2eaa3a4f67799b156543782ee8b759d6661f3dfac51f4deb3c6bf3d9936bc283b883581e7102a1bbbd0fbfed2139cbdbf7f648b74f28587ff029445e5ff912a8efed90522555bdb7ff666ff7d1dec347bbbb63f2761feeecdeff296aba5e513fef075d5f31d069159572b09fbed9bdff88ff37dedbddfb74f7e1ee4f7d4464cc9734ba69bec897ed171599bf471f3dcdcfb375d9e2cb62467fdf5dd5d56531cbebe6ee17c5b4ae9aeabc1d7f912db30b7eebeec2fefa795dad57cd5dca49525a90ac0d71258c36a58c0f0ec823a0b42c451ef7294df3702f0af478ddceabbaf84186c9bbbbaaca627a7ddc34c5c512d09bbb2f5e7df17a9be66dfbe9d98bd3edd7af683564fb52344b7bbd02eeb78645af2cb3055ed900b4aca6fc3ab55abf6d2a82481f36d74d9b2f9eeadc975903ba15e7854e116681cc1f59963d728e28d7485e08091029a587b4667b8f24ff2182caf0bd3782fdf16a45684a976193e396beee4fe5fe98966249e2f6682a7fc9e817d37ce5cbb668098f5ffcd1aa2e96d36295956798c407b307b4d2484b01b42c4fe2b747ae76f629f966079415a468764a361cfaa8cd97d9b29537f668d59b122b94aa81fddd2517926cd4649b52afd3d90ec50eb47e853704f5d74c1521703e03efd004aff2ba2df206d8cc8a665566d72f84e6cb7ad16c93686d4300c95f3ff8fd77c720b84c133160b12c40054624ca2a51febbf859e03f874c73970c382da49cdfbb8ff5eb87ecdd35531ae57b21f91e4242f057594d246b092ea89895657595cf9e2b5ff2679759b9260cbe47da7fd9d6f44793afb315bd9a13ffac9b3dfdeb2a6f5adb82fe5e56753bf73f4003fe05ef654d810c4946ea93be2f326de87f8466f4f7940646fc63bf67b8f91a934f7fe9e7c572c6f07e3a5b654b7df12d2954ef3d2760fa99c5857f11ec4091f33a5b526a5c1ad1dffc5a765e93e070dff4d1455e13bdafcd9ff4f32abb0628faa3b92ada1fe475992d67f4397fbfce72f32b0343cb01020001fb996d4c1f52e74406fd03c85a1270ab8000f89a7e6702f0b7f4c7faad7e4a1fe940f92bed976930a9b31f90f5c1c7f417da1bb04213f30dff148aa0117da204c15f0a903ea4311359f019fd413470df34579646faf545594df82bc181d1e1ceb92ff38736e6df1db4f55bea891be91c63700287ffc488e913bcbc6ea005f0c1ba69ca4bfabd2176cf696c0698fccdefd15f3f5d54dc19def5fe34cdbf4f6a081ae645e5090aad041e403f1564f8fc8f9f7e99bef8f24dfaf4f4f9e99bd3743bfd6e412e459d37640ad362999e9d7c416ec265ba475f1dff604dcec009cd1f7d345dd7a471476993e7a9fa0ed3ac20e526fa035d91ab4253c522fb9248f12a5b5e8856d4bebf47cbb584fe2ef4e92e3cdbfbf8f353fcb6bb0bc76e770f1f504a90ff8589bfff109f1c3cc0bf6401e088d14a27ffb5bb47ef60e8a492da6a5a955e4f1f7d0bf810f9c8e48bd1715fbdceebcb629aa76fb20bd7e827e54bd7ea6c49ca889c2334c9a61852afc9d37c29c32eea9c5bf85f9e2d27d57ac916a2cd2ec406bb6f5fbf2d5630c8df2e2ee668d278dedce9bb29311efd12928ea2f84f0f324acf515691142965c9292d724e09877be46b536446abd8a02b05b7f7283c25ff13f107a52f48df3ea09086f290d92ef9d60f26ac6fc96545eae67cfb01659cb7f7ef5156f5e184226d5aec9a3cb8b743c9f909c84f7660728fd6b5b667bc1e47110219475a1838dfa13c2ec524939dfb68b64b2b49fb587ba528137e3b4544e4c8ce28d97b80e4ee8c967530c9d37b9f9ecf28c58c70894c2dad8451334a27eee5f729c9b1bf43390318e7bdfd7b934f1fd0203fdd99525834a325cc8cd66128f7fb699e538200811137a385d98c96fef6a69424ddcf084b0aa768c99572a49493a284e47d744a0b4c07b47e4a0b949480a54c020d77b243a9f5ddc98cdc4304e87b80f6292d463ca44418e5042820db0782f41a05489fdea374c90e053d1cb251e27d2fc37adcf91e729b9446a52190074fb13cc5ac0f1e4cc957a566bbf7efdddba1352b725b2918a2e5318acace29cb9151428bd2c1f767fbf7109c3ea0b51e0a356835e101adffedd32a28651829e1b4774e30a707f9eefd5d3851b488f429c59094f6f99422226430691640e3ddec5e46ee164533d0c00fb16440fef4f6c18c22d47d5a3ca20503ca4bdc7b4859415adda5912142a1c43225d9c8fbc3320d0d8112dce4545304f780d6f38956b3bd4f31d24fa7f7773f9d92cda6e50b8a7728af81f41c653366bb88ed320a13315914f5e4bb334adb531a865c750aa928d425425306651f09b119ad2f50b39d090d1fb343ae00cd02ad8d125bce2816a771decb28ff408b14d48cf228e473d032c1a7949e20681495516a8132a53b7b7b048032723cd29d296557893c94d1a27409b13c4d3d6586c0c784dd2c3ba7c51d6a36cd6919658796cc28f34174bb4f342624d1fddede7dcaa3d1420e024082bc4f64a045d5e92e89cc1ea54b68c18832ccb4d04e2b7cf729b403939f9333b4432b87244ae4ced0a20ca2596282d9a7bbe73b947ca68422266b425ef1c1438a9429ad44cd2614d96720e3bd9d8c2662f6e9a7b4c247cd3ea535e7e90e41cba6c4919498a57565e21a9ae28c268a723394d7a2660fce33cadf10fbec51da91a0d1ca13059db454317b40abe18419d1899a117f4f08b587dbe79445a439a574d9c303e2265a50c977290f45ef812024c4b45045b290cf683988825e0ac32714b2238134d9d9a155ec1d04ceb43a3b799051d8bf33a1c4c03e569828dd43b330cd69e19434c32efbf6b48840e961eaef805026da53a84b39539abb092da04d89a0f776c06f0f26940398508691188030224544b340491d829ded3c24d987a1a2f8fa9cd606288b45f97fe2f47d327fdbd93e6592ee4d89cb1fcc66949ac0481f1cdc077d6808140ad22c9cd310f6281b492ba3c4440753020a71a614c3bd7c466b1394e12782dca7fe6892e92d4a05eccd485ee80f6a4669b3193129a58e73ca1f50fe126100e9d8f3f329e5522944df63934399df9c72a994d13ca7a5987d0ae469da68e16bf229a5113efd94d2d4e7c06d7280d408a50369cd9904f05392d309adbf6fefd22a010d727ffae91e3a256c1edea34fb6cf29cb4a520f55b3434114712df95619a9c1fb70761ed2bacd434a0ad224128214bdd0aac14e46d9b3f31d4a7fcea69f52068b9a91e299d022238538a49ea9535a74cc7628b542e6e201cd000d6f0fcd28074de119916c729f1291d49448436bf4a49628a6a644d47d5ac1a166a4794909533047c96d525ce7941fa7d517e2d20708ec68754cccf2c11ea58aee131fee522a9070fb948670fe29656b88d36898939d07193aa57c3735a3f4dc44729bf7e8b7035a72d9dfc362d1f9c387b33d7008a5ca68b9896c19051cd4e90ed2da33caf84df6903da40fef3f80aad9df2314f6e84ba2328d94d4d036a5d9285b4bca85389b4cc8016681d2eb14bf3da484ea0169e7fd7d4ad44c2801497fd23a0cf543ab473c0452caf7ee514e70ef9c4ddb7d4cfd1ee5f3495e48760ec886c050d21a0465722851f3e0e1010d81b411f131c1250bb5bb438963b20d9853cad89169a0a4ec3d4a4d115b92ee7d485304a9274e2325703ec19cd2b2f4c1eedede3ecd0e08b20fa9a765535a7221aebb479a878c2f9aed4c1e3ea00eb677ef134694faa209204bbafde0de3989414669e57d4cd68ce4efe021d932e25b82463e14a5a46861803e2216223a1252d46c8f0c2d5289db7b9f3e24393d27b50432903dcd0f88b76812764110b2860f26a42ee84b3012e952b28034290ff3fbc43c0f89a71ea2d93d5a0a7af8e0216550ef91e9a6242ce5ab89e9b7a7fb7b938764732873035543eec83d521c9f6e3fa039a6a9a785086a4a3a964c733ebb4f0cc0dc9bddbfb74b38d3f2d3ce39a91aca27130f91253fb87f90eddca355b94f77300b449cfb64360f483d5262981286c4ee0f301f935d4aa83edc23f58091e6fbb3bd8307a49333c292e494541b51352354a79feee619a58d784d3f3ba7976945609be68a464a4b13c4216421f6482d4e68c80406fc4659c44f67e46d6e932124dc683c20082496560d68c5e6c1a707505c33629b87a48828f541b34ea9631240e2986d7266296b9ad30acb1404393f7f482b13f4e58303e85e722728ad4d46e7defebd7df2e8c830eca0d9bd0392a05d521a072488dbb4904366977887188692edf91e35dcc148f70ec81a519a90b291131a020d9abc1a12ec3d5af6cb77c94a123f513332eefb071332a0b48c4988d378e14ad1a27c769f72a9c426f71ea053d24b535a2c21734c1e26352317ed002c354116871625277bac91c8e6916c5172393f204542fc457a93f4c036796479468ba7e7a40da819e5d7c9f6919893ca245543be13292eb25ec485a46448d591a9a166c4c6f729694c9901788efba4d36808a4633fa5fc38ad9b4ef61e7c0a5978907f4ad2088cc81cd3d4ef909cd22a022de59c9ff36a2c310a353b20e7f0d39cbecc1ec0c10041b24fb1dcbd7bef7c7f673aa51983aaa1d035bb4fbeebf61ead6c931ea2850fca4d9353fd80567548e9ecddbf0768a47b8990e45110f2d4e9a764e4c886dddffe9454ff83fb9fdedbdbe14e296bbd4f1089f9893034a7b4b04fbe17ad1a504e9316af484df10a1a91f99c340d25c788758843c823a1bc3fc92965cd8877cf691e4137f239267ba4cbb0c845b340ce1cb520cd3aa57434e1f8709f740e353b2009a30c17f96f1939ecfb30aa07f059293d7d40b68846ced01e3e203bb3438ec7ce2eadff519e9f96ed3e25a5faf01e392d07e7f7f7eeed011a710b39e9e41264a43f08374a9d1d4c1f922aa6951bf2c1c9f9fa14237d48ded239852004030ed4849cc6035a1bd9a604fcbd8c4cd11ea9076a462a25a7f190b440bc68ea499c67c4bdb3e9392d124f76c9f18238ef40a59c93b6dc25bb4a1ae980ecd03ebc33724d673b335a1d3e07f7dea305f49d5d624b6263c26d4ab9e08719adddd074901490f69a4e3152f28c72420bd680d62b689d9916da3e85c2dfa1151932193083d4ec9c924d24a60403924ca689d404e9be6d326a33d22fe45071dc39a5197d488a169e2a0d01e683dc1b0a8f88877677498468919d9ae5b3dd9d1c429c3fa4b5947d5a9ba209205b48694392d27cfa800c2635cb48caa6f7c88da59556823623c34cde11f2e0b4e0442b99f7763f85644d4972763f259d4cd68418698f98837aa749d9b997e739a5e3f6ef01b76c67176b6d200869b5fd738a1c28bb49a2b1473e3b4dc33979f0d48c1c9aecc14370ef2e2d50ecdf879521dd43524112b24bab48b4584ecd66e4209d4f69eaf7c85fc51066e412906dba4fcb3ef766fbb44a9283bcbba4001edcdf275b46993c222f754f024ceb2053d2e5b4dabd4bd4a766e7142d91aea0456772d389bca4e926a49d09da8ccc2a58ec531e02a19a659400445c484c4e2325bd48de72be936707e7f748a0d0e984b2bdb454095a10abedef91ab4166e9fe769e918121adbaf7e01c9d928b4d6120a9a029adab108710bf1d90fedede39bf77fee97df8da13e890d98c9c5152b264eb73e24d7a8344e680963b0f888dc83650cc0b6839d9cc4fc94f228d4b7ecffeee3d9afa7d62a4ddf3bd7b145d9fef92f348cd88d4a47a6875629a9396d9a7b5609a2cf29166c400342842701f867246c6ecfea70fc91fde01ed6191263921482240ab6cc483f73f0593936a9c4df749733c24dd4a9d921f4af102ad6d65f749913ed89dce3ec51068f5ebd37bb4deb7bd4bcbb02480147366076496280e25f6fc74fffea73c0be4cc905f46e68310a7a93f27ee9d909b40eedcf421cdf743626a049e5892da9f92f12354a919adf812abd198c9b0919ed9a1854cee94b4332d8c52044312478a2b0769eed12ad5fe7d5a3423e124fb08a9871b94ef932b35cd69798dac1789e23935cb695980225b5a40bd0f5920f34a6b5e98c47d9a4ee2105283934fc97bf97432bdbf47d1d17d5e79a4a9dccb491191b225554af8115b3e20e3709f269d3cbcbd8779864ef7c9417d40c3d9ce669453a685225a3c23834081e0f9ecfe7df0d2019aed9c4fa6f7cea7a4e16106f7c19b14d990517df829459d44b91d5e263ea7d092b20de4124c310bf7c9c1248bb2b3bd4746ead319c6790e82ec920e987e4a8a8b9615a9d9390c0cd973f291688cc4a91437413950584464dc23c1bc47f1104599400b8e4446aa9d02bc5c343969895d1acfa764cb60da76a17b3fa5b8977cce73525c64f6ee610853729166bba4d5f21d5a482446222d4cabdfdbe4de6494d978b0477c89660f0f76887014b51d10e214a460b248622956b89791aea4357b0820d190dc4e8a23082ad10d769abc68929b7d32053bfb14badd87009ed3aa3c257808370a0e6908bbc4bd0485fc106433c88252636ab64beb9d392258725948879077bf9d911fbb4dcb3514534ec9f765cf819860ef9c16e368b588049ebc360a8a69ca49e97c9a3fa0170e486950b33d4a177c4a9ecdf6fd4f69d597624dd221e41223aafd3423821c90c34acd0e28c0a030863c7172b9b7692c44de1d72cc28f9726f8f2c2b1c1634cb29ba230bbb3da30892b897ccd28482c06df24ec8012427efc11402483c4136909ca2dd87c06d8ffc29b20b335aacff74879414f264982c526694809a10f3937c50b33d0a52c8ffa07f0e762819727030bbcf537f4eabc41c7d50e042ee0ad9489a535a6ddfa1a5f209491acd1635233d3cdd9d51484773467681ac2b05ec240bd33d9219cae97c4a868e9a919cee92d49147718f340779b7345924e8dbb3fb9415983ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7707c4afec4c16c767fe79e06291489d36af5f6035a18a37150926232a3bcce01711e7139cdc52e86b0ff291117ce36792d04ed9c9883c84fd1ee6c8fe2f06c9fc27a88cc2e39f5e7f7284140c8d310c8e52301243fe4dec3e9a7a4b37666f71ea0d90131f7c307a4fca6243904ed21a574c85322b9d9a7908a12880fef817b290c21d34e32726f9f924ce40d8243282478400e0ed176fae964176cb9434a788fa49b7251a4e6f727146767946923deccf2f3096682edc203ca2652ea840091e9a47f48a828a82135f860e7c17dca2d50b614b8ed930f411a9f6c190930f11b09d54362221299873b9f1e90b67fb8077e23dff07c46ca7e7b6f86c99a126fd23a22b9a03bfb949a205d4119096a46f9ae3dbc42413f116f9f6c01743ac5f507e73b39f952bb641ea819ece9de1e8928057d84e03d0add2978a585d429e56388d0e41e802d67e4fbed53f689e8f92931127900e45b52166542a686b2afbbe434a219a5138971882f28a741dc0b1ecac80522fbb6b74f68ed9034812033e204e4c6c86850ba81b223d482f258341f149e673939919c86bff729c5b6a4b4b7c95322ddfb297903938c1c579a09f29726448e731084a8759eef91e3b97b402cbc0f0ad208306672007689ee0f388f44b10f6590288f40890652353be49d3fa474e7f62e59939dfb14ca0bf7929d9d52d2078c44ce2f19fc87841bb98f945da1689a92d9f777218007945b9866a4eb77cfa16a1e52ce91fc8507dbd3fb94973b27ed4279706a462bc5e425d1241ed0741046e4936594b22205451e3c5946b211d048c4f13be40850def253b21c147812133cc849e1ef506077406c43210d35cbc876902adcdb3e273792a051f07370f069be7d7f8fe69ae695261643d83fff743aa3642b8515987a0adfa97bf2ce7727149a9e93d490a6a666338aa3efed91defb342709d8df251a1fec91eaa7288b12b79f9277b8834ef35d9a3872a688b53352f834204a26d054ec11b91fde839563267fb8bb47dc4b4bf094ab21b63c2790443772a5c8d4dfa7708ed2a790ac87a42b29a5429e4306f292634fd69942504a239155b947bec83d68a483fb94ffdb7f400e2de5ba6908e4653ca4481dff90074a2137b940d42c23ef963423599919cdd83e2de89229a581131ee46d3e3cdf3db80755f3f07c421943d20b0f487b12dda8e7ec8044e3c1f421a9dbfbe46c3f40aee67c4a6af91e4d38a5904923d1dbc448f748ddedefec93c890bfbb07dcc88b22af8e2499d88be4741f23a5fc01c9f48cb88806736f027ebb471ec29ea49629acdc277f9f0c3039d59f92bb96edde7f487e0604f07c8f9c464a89d34c122dd87cd06f33caf050ce9d849932a268b68f106546739d53be737bff53b2ac64d489dac40af7770808c93335a34ccecea7f76812b319697d4afa916e9ad1c4525698c291871454ee30b4839dbd5d4a5c6d4fc956106e9f12834e2909473627cb28aadfcd79ea69716077460ecc364d3d69cb2929c48cfc70384ab4a8736f6f8f424e6a46e326d6209eddbb4721084d02291d32a8148eddcb88072839fe10cdc8967e3aa1d8885c5072c7f677280993ed920ed923553b238f9252ab98050ac3efe53b943699dc27fe263d450a9f12fe940fc9c8049392cb39f54a9a99b43a918c343271ef43220d69668a6528574c31143904ecfc902c90c6a6141965fa09370ae1c81851fef5fe1e1922a22989041869ff1ee9577803947da74ecf8941919edb9e929f7befd34fa724d610e71912ac70151f50fa91a0114bd1ec527c4a96f51ca98d5dee944c02312ac586f7c868d32c2048c98837a7e4901dec91679def435b52b8450e36919de68f089251cf0f1f90574be3cef329056abb0f30a70f1f922c90fdd8de631d7940e1df6446a930b269d34f27e41cdcdb43335261947ca2d97970be43537f8f62cb03a2e3f6de8434d6e4c13d5a1d829cee7e4a6c4e63db26b78b86f09024f6e10189cc03cae5904260f79d9aed3fa00ce68c7cf29c54c636fb21b438463afd1ef17b4e30cfc525d82753f28014da038adbc90292aa79489107a9c1fc20dfa354e91ea79b0ea6e4d5515a757b468681f88db09c90f123379ffa9c50244fd852b3079f12e177c9299a507a8fa05134985130449dd2d04999510a11ba9724f101b9ae6482c805a32f697627b0217b335220944ea07c3ff41b117f3a9b228241026c7f8ffc773219d496c4e2c183fb0ff766138c9414fe030acc68a4901632f0c46fe7147d1c506a9bf4c88c74287083daa2a9a68598732c2ded127f930a81a0912da2fc227932500e944c38a095048a65c84811347294292c25dbfbe9a7f7299b0e3f09d0c815a7978839ee4173ec93a7b9fd704af4d9dba305000a831f3cdc85e2cac9a490ab4079cb7d0ae9280225a92753408a848ce10ef9740f588790db4ab114854dbb94632546227345b2465c0a55be4fe49aec63ea1f4ccef39c741b890c6c164553340bd46c6fe71e654f29f8bd3f015beeee501cfa90a49ef8846c16a919927f5a05212f8838801cf3fc5308e00e657d1ed2b0b7c9890241c8e5a5b50f62827d5a0ddea149ddbd8778e11e6928d27d3bb4aa483e32391834a7a4b3295fb497cd72fafb61065543d955927b5209073431a41c28c23bd87d40d1d96cfae9a7d40b492f9a9dcf6694ea208edccb88b224f544907372a5287fb87f3f9b51ac7ac09dee509042293a923df2f0f61fd248c900919c92b2fd942c2d4907732f25c221d0e460903bbe7f9f38e440d27fa45848bd107bf29cde9f3cd8a3a89c26915208fb1459911a44c445e3026d776861919adda7d52bd22fe43bd1432325658431527ef29c9401053ff7987b89324443f27b0e280d4c4c4ef9104a6a23769e12c723d19a61eac9c9db7b08c545a68b70a37c04596772f3a60f77285b708fba14d346b1d0fea71440915521fd467d9076a64999ec64e764c677f7290544cd3ea5d06c9f320bdbb43e4ad442f2f261464911d21ea4b476c8407f8aa9a79897c4999403257a8843c8fb2768a448480428fb9d7f4a8e0d9a110e2458048dd60108b70c86f2c11efd43b667774a7c45410335a32c0f2d4290f599de27f122f2921810536cdf27c346b96f9a2df61c28daa2b9a2feee9153482325ef1cb12441db25453ca59cc22ef88dd2c50f3e9d91df4bfa9d464a7e3e4932a54d08cb29c5ae140bf32c7c4ad9328a08694d9c566128ae279f9586402c4cca83a491dcdf8798534a32efd33490d1205d4643a028f10036845226e4d3679427df85bb72f0290518946fa6ec31b920c4256428c9b323d7fd530ab7679481e5e59b3d2ca0225dfc701739ae03f2f568a4a4c7284ed8a36fee51004ccdb2733214986b321acc96a4a22935409a956cfb01f57fbe8b66940cb9779ff2856482287622b54dc6e83ead347c4a79f619656e6614225233ca9c3d7c4862b34d392d2208f542fa9438e180165ccf695d69329980433e9de6b3c9a794e3c8c842108750fc3639a76cc0034a22d09ac101c57450d1a487c907a5d4f2c11e9181d40d117a9778fe53b213f7096e2e43a088664699759ad3737204f7898ae419138392cf7e2fdb7f88cc3e6681d6f4c91640c35300494c4e2621dba39eefed52c0734e397792676a469a98b42f19db29c5f13493c49b0f6710d67b0f282cbf0f2f1093f5805602c8cde14893f88d1c4fe237e2042226252128c0a10c30357b48fef9fdfc5322c3148c448e0c492ca542335a0422f4c853df4364744093753f271fe0dea7a4ebf7a744688a86698a2929422e0b91836561427a9eccd7749b822f1ae90ebc1a8a22296b777e7fb6b747aec40cb8515e6f8a2088d229644af77788c9b1a840a499ee50b0b9473389919272984e11a193462201cc485b6610c0f3dd3d62f38c22897dc8694e3e0c3991b43c410b12c4bd24d3079f92b69c3ea4288db4da83dd1970a36cce43ca0bc37380059cd02029c0784839991d72f3489ef6ce018d722da479915fca28634a6136a9d709cdc77d72b6c970e714d180c9c9e2ccce219da47589df0e683e2624de345c1a0eb92213a21135238d4292472972b2af340b940a247785d231649767bbf773c29ba79e2c1c2149d6f921a9436a46024f09845d5af6daa7ac2ca5edc985a4664443d2476440298143fc3623bf80dc1552d10f28ef39ddb9f780fc4b6a769e4d69358de4897222443cf26149935398774e39b54f691de59c18859a915bb8fbf0809891dc30c22d9f9238ef5228456b0cbb34a914c09d6316a6e4748097b71fe4140a538048acb64703279feae0c1f40119861c22b3f390bc7a326b942723d1dfa72fb7334a3a92a34419385a9fa4a40a7023ff88e4926280f30730410f29434b4a884483b234c4a3f7287002412873b77b909321f8f41cca81084f41f11ef91b94dd244f71ef9ce27e6a86c88a989c9680c99691b64478bc43997f8ace1f901bf020bff70002481383c5657268338ada292e21dcc8a9df3ea7383ccb2917753e8152a5b54aa224e51729594974233543724ad679729fd66b77498ec8d5a7663bc4a5e7b4324a9e032c209c6dca9f92252781a3f0826cf61e3a254b42ea89d415795dc448e7a46f48b88978f9f93e790e7b2429a0db2e25da1e52a4445f52ca6aff0105db0f892db629d420976ff680d6a5c1963434ca395246f0e17d78aa535af6205b4870c998dea71c06c5f298d3fbb47a43ae2139e194c121f2528b87d43f2d104c28343ac829a0871accef5358b64be98d5df26d481608c187a433a9fb4f77a7a434a67b9cab21cd4bd949907797c48ba69e121d70e2eee794f3267ecb1f30411ece484d110b93f5a1106bff534a103fbc47be504e7e684e997e72f031f5bbe4fe5208774064a70886ac0c9197f22aa4c7889b69a2682a80db837bd3fb64a029e7f000dcfb90b430f929f40ff969f71f9065a7142535437441ae0801fa945c5ec28d26608f2c39a5c03e25f1a0458b735819b23c445ecaa99c7f0a82903309f54ad98e071949086556ef4fd10c3ee443ca1950a770a590f238d82393994d1f9277fb80e6e1001c423a93a245625c8ab88920e7642827140f51caebfcde8ccc1aa5f718b7f3d9a733d263b0a74454b27a248a64da1e523cb1fb803c5572a0a81931326561a7e47392b226269f9221214623e2d1d2e6398927f9a8d48cb4f5946220b206148b62a414cb50468ec287735a459b91823980437b7e8f26ff3e91fd7c5f5429d9ef3d12408a1648843fcdc88f05344adfec53268c12b96479081a5924ca0aefd010c8889109a36086a77e0f64235bc644a5cfc988ef9154cca6a422285df380d2d9d48c24e153d2f5e4e862a182ac0ce9de1db2590fc9e5248d46e9369ed35db2b4f7295944e24c2688742fc9e93d1a383948a494ee7fba7f8fdd95fc9c32f3143f10e2644310b562d6492d911198d2f222d91aee9496eeeedda3ec2805b32480c43dc01204c9c9e17a48cb1aac7b2734c30f762860a70889a6fe80e4e621522c79be47a1d58c246d864e49d66916c8e3ba47419af21b52af44887be7e4177e4ad12635bb4fc13a59a3d9f62ed957a21b45aad93e89c67e464bb764fe68b630520a7e2805488853a29a3abd4729a4c93e4540bb14cb9227482a97d32694cf257343ca768f521e24cec4796439ee6fcf687de201e559299ec010c868d0db242d9f5278459d9246caee931337bbb7bf4b91debd69be0feecd2975302566212b031f8932cb841b455c946b2579cfc9f97808681414902a26a9a7853852831421520c486c329992b1bf47f1db4e06dc68f1e2e13e9478f610291dca62623a27dbbb33e25c52f834744023a3490690220a7a8d0490c25592059a625a5a9e929d218ff200b891774f1c41896a7243887bc997a40c2da9c119997a5a40b8074b48cd2888a5156ef23e0f1003ec4f283c22454f3a36a349253a23d548cd727277c92b2063443a6a9bc217d24814fd914bb04309f5fbc45e136824e230caefa1d307e46753e6933abd47268c02220ac1c889dc3f87ff36c52217f95c648e613e0ec8244c1e92544c8952642f7629eb8139254f607a9f0477fbfe84acc1fe434aa050f44f1c4229cbfd3df29476d9efcdf727f7a719c5912414c417a486b749fc292e20a541eb13644e67e894228219b9ca6467291224634434a6408094c02c234bfae9a77b19f31b25b1f688f3b26d4a851279ef93074c43b84f0a6a3acb4848f61eec63b2eed31493d34679390a9848ea297939a1989572007ba406c87122e708cd882928be238c3e4542e23ef547fe1b651ac97b9960e1807c066a46339967e47d918a26c625578a44913866fb9c6c082144b93866245a42a229a6083d23bf647b9fc600ca5290f270e73eb132a538391f729f221eea98f8704a5edbfe2e9166724ee6634a4e38e967329af761170ef626f9837d0ad33ebd8f3832a3d882c27ff210a6e4ba7dba471ed101464a2f655332392406e4dc9145a0c150ce957235e724cc07940fdac364910a266b4dfe0985a33484dd87e4f212cb92b5a4d090d27739795dd48c16687768f103c11d59837d4a1113dd480a3f2559dc259ea4401ab8ed9013728f526bdb3bbb144053b294f41ba9baed9c38fa3ed6c7c8fc52b36936213540239dd1e41123516e889b91d5b84f06e31e297f40cbeee53475e48210b2a41c489c28aa21a3ba4352789f048dba65af8642c21da42cce79c1e53e7124e554c96ed24a01f904f776685d9a9ad122d5c114dee0a7fbc0ed3e8933891326f6de7db2c49466dac72cecd01ae939223f4af3106e39e91bcaa39fd35b64546694f899b1cda2e881bc6a48c00ef5474a878c388d777bb64301f66c97d64c24d1b17f801c2dc50b07344f147cd30b64b9b7774807525e9c72bc333012a960326034eb9f4ee11ee7b41844eb0bb4a04c8b81","530a25b20719a0ed6764c2c93523ec29ed4dfe1bf1db3ed9d307a470c857f974875254d48c56bdc817a539ddbd4f667e7f4a0e2d65b1a7e40d1209c87fdfa7f5026a36a5e880d25724e6884a49d5909599113472a2285aded9fff4c11ee8f6e01ec9f87d884c4e34dedf2792650794a4a08087fef7e041b69b4300292b31232ff8e1f6fd0c74bb47fa86560569441496506a875c893dcce983fbe4b1de27b342d241fc36d923d71d99ff29b977c42e7b535a16a066fbe7e4427d4adec00e596392d3873452e20af2e4776981f23ecdd0149295efd26acf039ad39d8794a6a1389a9621884db7732200f12ebd36810e2151cca694d320850fe23d840106f128cc2682d0a20d2d13a219ad21ee925b45b881dfc815a32190a0d142dbbd29a500284d0b680fa67b64c3291e0232841b252926135299b48648f39291e53dc02c90d740ea958c3b457f2432a498896e942abc47be007d4cf3ff29248bf28c33f29fc85092b9263548747b48df42f429fad8276fe501a61e89095a99ccb7c9e327ba111fd010686989e684c2c9837be734b1d48c32d51439503c44138391124128aca505501accbdfb44fce914ba9798ea01b13d85dee798fa870492565ea7dba49d4969d23a39e55fa9d93ea560730a0b0867626161a45d58401a2e65e4731af1bd8fbeff4b7e09a991bc99d6c5aa2daae5478f3e3a2ecbf4e493e3b3f4f57a623f6fd2c5ba69d3797699a7ab3adf9ee5e7c5329f49c317af3f4feb759937e3347d9de7e9bc6d57cda3bb77b3b7d978d1dc5de66dd1547797cd45939e5775baa8ea3c9de56d56940de1b9a0df66599b7df4e8177f34adf3accd674fae090fe20e6279c40984eef63efcb687e42c6fdfdb23dd3ea160fdc1a710797de54ba0beb7434a9554f5defe9bbddd477b0f1fedec8df7292b72f0e9839fa2a6eb15f5f37ed0f515039d56512907fbe99bddfb8f76f71fdddb19dfa335817b070f7fea232263bea4d14df345be6cbfa8c8fc3dfae8697e9eadcb165f1633fafbeeaaae2e8b595e3777bf28a675d554e7edf88b6c995df05b7717f6d7cfeb6abd6aee524e92d282646d882b61b429657c70401e01a56529f2b84f699a877b51a0c7eb765ed5c50f324cdedd555516d3ebe3a6292e9680dedc7df1ea8bd7db346fdb4fcf5e9c6ebf7e45abb8db97a259daeb1570bf352c7a65992df0ca06a06535e5d7a9d5455ed338afaff2a69dd2fb7556d2f7cd75d3e68ba7ca0665d68084c579a1b38509214b4846668ffc244a3b924342b244fae9212ddfde2325f010f165f8de1b19c8f16a45184bef6193e396beeecdeadec3f12ea529c9aed1acfe92d12fa6a9cb976dd1121ebff8a3555d2ca7c52a2bcf309ff7c99ba0551db2f26470c956939c3dc43fa41428b1448103adf8539f6dbecc962dbff1608f16c029c742591b98e25df226c95c4db6290b3b9ded5018414b597843507fcd54115ae733b011cdf52aafdb226f80cdac68566576fd42c8bfac17cd3649d93664915cf787bfffee18b49719235e2c9605a8c08844b926ca8a173f0bace89069ee929924f54e0efe84564aee9d631e9b298df2bd907c0f7921f8abac2692b5041754cccab2baca67cf9545f9b3cbac5c1306df2343c02cba6ef275b6a25773e29f75b3a77f794cbc6641a8ea76ee7f8006fc0bdecb9a02c9928c34297d5f64dad0ff08cde8ef290d8cd2dff67b869baf31f9f4977e5e2c670cefa7b355b6d417df926ef5de5bbf6d2a223ffda69f595cf817c10e1439afb32565c9a511fdcdaf65e735090ef74d1fa9dc9a3fe9e755760d50f4477355b43fc8eb325bcee873fe7e9de5e65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98ff55bfd943ed281f257da2fd36052673f2043848fe92fb437608526e61bfe29144123fa440982bf14207d486326b2e033fa8368e0bef168a45f5f94d584bf121c181dee9cfb327f6863fedd415bbfa59eb891ce31062770f84f8c983ec1cbeb065a001fac9ba6bca4df1b62f79cc66680c9dffc1efdf5d345c59de15def4fd3fcfba486a0615e549ea0d0a2e043e8a7826ca0fff1d32fd3175fbe499f9e3e3f7d739a6ea7df2dc8bba8f386ac625a2cd3b3932fc863b84cf7e8abe31facc92f38a1f9a38fa6eb9a34ee286dc89d5037629a15a4dc447fa02bf25a68aa58645f12295e65cb0bd18adaf7f73ea26c23e1bf7b0f1a95569af85ffee453b878146ed1bf64bce9df4fefc16fdda340023f288fce3fd813bcb7c7d9fefbe422e3c743fa010a90666aab69557a1d7ef42da045542427406c8ffbea755e5f16d33c7d935db8463f295fba56674bd249e42ea14936c5c87a4d9ee64b197d51e7dcc2fff26c39a9d64b36146d762156d97dfbfa6db18289fe229f15eb051a359e8777fa6e4a1c48bf8434a4c8fed3838c52769469248d4a99734a959c5312e21ef9df14add1ca36c84b01ef3d0a59c927454c42290d52bc0f28cca1dc64b64bfef683092b5e726391ce39df7e4059e8edfd7b94697d38a1e89b16c0260feeed50c27e02af8b125c937bb4d6b53de3353a8a1ac84ad262c1f90ee576294e99ecdc47b35d5a5ddac77a2c459ef0e5294a22e7764609e003247c67b4d483f99cdefbf47c4669678450647369758c9a518a712fbf4f898ffd1dca232080d8dbbf37f9f4010df2d39d29854a335ad6cc686d86f2c19fe639250d102c71335aaccd6839706f4a89d3fd8cb0a4108b9661296f4a792a4a52de47a7b4e874406baab468494959ca2ed070273b946edf9dcc7689a32868df03b44f6981e22125c7284f4041da3e10a4d72868faf41ea550762810e2308e92f17bd9a784f8f91ef29d945aa52190a341f13dc5b10f1e4cc97fa566bbe48ceed03a16b9b21420d19219456ae794f9c828c94529e2fbb3fd7b08581fd0fa0f851fb4c2f080d604f7696594b28e9484da3b2798d3837cf7fe2eac302d2c7d4a7125a5823ea52809594d9a05d07837bb9791df45110e54f1432c2350ae64fb604651eb3e2d28d12202e52aee3da44c21adf8d2c810b550b299126fb4e287a51b1a0225bdc9d1a6a8ee01adf113ad667b9f62a49f4eefef7e3a25e34d4b1a140351ae03293bca70cc7611ef65143a62b22812ca776794caa7d40cb9ef146651f84b84a6acca3e9264335a73a0663b131a3e66877c029a055a2f25b69c517c4ee3bc97514e82162ea819e556325a28a28c08a52c081a456a946ea0ece9cede1e01a02c1d8f74674a1957220f65b92885422c4f534fd922f0316137cbce69c1879a4d735a5ad9a16534ca8610ddee138d094974bfb7779f726bb4b8038d4290f7890cb4d03add2591d9a3140a2d2251d69916df69d5ef3e857b60f2730af6766835914489fc1a5aa841844b4c30fb74f77c8712d29464c4644dc83d3e7848d133a59aa8d984a2fd0c64bcb793d144cc3efd9456fda8d9a7b40e3ddd2168d994389292b5b4d64c5c43539cd14451be86725dd4ecc17946391d621fa422091aad4651204acb17e4a29d1f106644276a46fc3d21d41e6e9f536691e69452680f0f889b689125dfa5dc14bd07829010d3e215c9423ea325220a8429349f50188fa4d264678756b677104cd38aede44146a9809d09250bf6b1ea4429209a85694e8ba9a41976d9c9a785054a19537f078432d19ec25fcaa3d2dc4dc8699f1241efed80df1e4c282f30a1ac23310061448a886681123d043ba3ac4f4e128291522a98589410bf478b0d140792f6caf629bb746f4a5cfe6036a3740546fae0e03ee84343a0f09066e19c86b047194a5a2d25263a9812508833a51deee5335aafa0ac3f11e43ef547934c6f517a606f46f2427f50334aa5cd8849299d9c534e81729a880748c79e9f4f29bf4a61fb1e59196a460b4a945fa52ce7392dcfec53704fd3468b61934f29b5f0e9a794ba3e076e9303a44b284548ebd024809f929c4e684d7e7b97560e6890fbd34ff7d02961f3f01e7db27d4e9957927aa89a1d8aa6886bc9c9ca480dde87d7f390d6721e52a290269110dc7f48e378b8935146ed7c8752a2b3e9a794d5a266a47826b4f048f97552cfd4292d44663b946e2173415e3cadf751e68c9a515e9ae23422d9e43e2527a9299186d6ed492d519c4dc9a9fbb4aa43cd48f39212a6a88e12dea4b8ce29674e2b32c4a50f10e1d18ad9fd5dc8c2c11ea58fee131fee527a9070fb948670fe29657088d36898939d07193aa51c3835a394dd44f29df7e8b7035a86d9a72c3ea846311a3884d267b40445b6ec3e492ee937a4ba6794059cec21a3481fd20a1c35dbdf2314f6e84ba2328d94d4d036a5de28834bca85389b4cc801668152ee14c83da424eb0169e7fd7d4ade4c2829497fd2da0cf5432b4a3c0452caf7ee519e70ef9c4ddb7d4cfd1ee5f8495e487668496c024349eb1294dda1e4cd8387073404d246c4c704972c14795a335a93ddc19c52168f4c03256aef51ba8ad89274ef439a22483d711a2981f309e69496aa0f76f7f6f6697640907d483d2da5d2320c71dd3dd23c647cd16c67f2f00175b0bd7b9f30a274184d0059d2ed07f7ce490c324a35ef63b266247f070fc99611df12b4dd5dca0266b458401f110b111d09296ab6478616e9c5edbd4f1f929c9e935a0219c89ee607c45b3409bb200859c307135217f4251889742959409a9487f97d629e87c4530fd1ec1e2d0f3d7cf090b2aaf7c87453629672d8c4f4dbd3fdbdc943b23994cd81aa2177e41e298e4fb71fd01cd3d4d3e20435251d4ba6399fdd270660eecdeedfdb259c69496ae79c540de5988987c8921fdc3fc876eed14adda71cb81371ee93d93c20f548c9624a2212bb3fc07c4c7629c9fa708fd403469a53e47ff08074724658929c926a23aa6684eaf4d3dd3ca35412aff367e7f432ad126cd35cd14869b98238842cc41ea9c5090d99c080df28b3f8e9ec3e91810c21e146e3014120b1b49240ab380f3e3d80e29a11db3c24454439109a754a27930012c76cefee910ff030a755972908727efe90562be8cb0707d0bde44e50aa9b8ccebdfd7bfbe4d19161d841b37b072441bba4340e4810b7697187cc2ef10e310c25e0f33d6a48fe3de17640d688528794a19cd01068d0e4d59060efd15260be4b5692f8899a9171dfa7bc08998f2931e33e8d17ae142dd467f729bf4a6c72ef013a25bd34a5051432c7e461523372d10ec05213a47368a172b2c71a896c1ec916259cf3035224c45fa437490f6c93479667b4a07a4eda809a51ce9d6c1f8939a94c5235e43b91e222eb455c484a86541d991a6a466c7c9f12c9942280e7b84f3a8d86403af653ca99d35aea64efc1a7908507f9a7248dc088cc314dfd0ec929ad2cd0f2cef939afd012a350b303720e3fcde9cbec011c0c1024fb144be0bbf7cef777a6539a31a81a8a61b3fbe4bb6eefd16a37e9215a0ca17c3539d50f68a587940e6511018d742f11923c0a429e3afd948c1cd9b0fbdb9f92ea7f70ffd37b7b3bdc2965b2f70922313f1186e69416fbc9f7a295849d5de21b32587bbcaa46643e274d435932621de210f248682d80e494d267c4bbe7348fa01bf91c933dd26558f8a25920678e5a90669d528a9a707cb84f3a879a1d9084cd7608f19d8c1cf67d18d503f8ac94b23e205b442367680f1f909dd921c7636797d60429f74f4b799f92527d788f9c9683f3fb7bf7f6008db8859c74720932d21f84db0ec9def421a9625acd211f9c9caf4f31d287e42d9d53084230e04051a28804f021ad18103f64648af6483d50335229398d87a405e245534fe23c23ee9d4dcf9157da25c70be2bc0395724eda7297ec2a69a403b243fbf0cec8359dedcc68c5f81cdc7b8f16d57776892d898d09b729e5871f66b49e43d3415240da6b3ac548c933ca092d58035ac3a0b5675a7cfb140a7f875669c864c00c52b373ca3a9198120c483299265213a4fbb6c9a8cd48bf9043b50bdca634a30f49d1c253a521c07c907b43e111f1d0ee2e89102dbc53b37cb6bb934388f387b4beb24feb553401640b297f48529a4f1f90c1a4661949d9f41eb9b1b4fa4ad0666498c93b426e9c16a16875f3deeea790ac2949ceeea7a493c99a1023ed117350ef34293bf7f23cbfb7776fff1e70cb7676b1fe06829056db3fa7c821fb94388116853efd94a6e19c3c786a460e4df6e021b87797162df6efc3ca90ee21a92009d9a595255a40a766337290cea734f57be4af6208337209c836dda7a5a07bb37d5a39c941de5d52000feeef932da3941e9197ba2701a6b59129e9725a01df25ea53b3738a964857d04234b9e9445ed27413d2ce046d4666152cf6290f8150cd32ca04222e2426a791925e246f39dfc9b383f37b2450e874426b2eb47c095a10abedef91ab4166e9fe769e918121adbaf7e01c9d928b4d6120a9a029adb5108710bf1d90fedede39bf77fee97df8da13e890d98c9c5152b264eb73e24d7a8344e68096400f888dc83650cc0b6839d9cc4fc94f228d4b7ecf3ee528482a889176cf29054133bf4bce2335235293eaa1158b694e5a669fd68769b2c8479a1103d0a008c17d18ca1919b3fb9f3e247f7807b487459ae484208900adbc110fdee77c06a9c6d9749f34c743d2add429f9a1142fd07a57769f14e983dde9ec530c8156c43ebd476b80dbbbb4344b0248316776406689e25062cf4ff7ef7fcab340ce0cf965643e08719afa73e2de09b909e4ce4d1fd27c3f24a646e08965aafd29193f42959ad12a30b11a8d990c1be9991d5adce44e493bd3622945302471a4b87290e61ead5ceddfa78534124eb28f907ab841f93eb952d39c96dcc87a91289e53b39cd60728b2a545d5fb900532afb40e8649dca7e9240e213538f994bc974f27d3fb7b141ddde7d5489acabd9c1411295b52a5841fb1e503320ef769d2c9c3db7b9867e8749f1cd407349ced6c46c9655a3ca20535320814089ecfeedf072f1da0d9cef9647aef7c4a1a1e66701fbc49910d19d5879f52d44994dbe1a5e3730a2d29db402ec114b3709f1c4cb2283bdb7b64a43e9d619ce720c82ee980e9a7a4b868a9919a9dc3c0903d271f89c6489c4a71139403854544c63d12cc7b140f519409b4e04864a4da29c0cb45939396d8a5f17c4ab60ca66d17baf7538a7bc9e73c27c54566ef1e8630251769b64b5a2ddfa1c5456224d2c2b422be4dee4d46998d077bc49768f6f06087084751db01214e410a268b249662857b19e94a5ac78700120dc9eda43882a012dd60a7c98b26b9d92753b0b34fa1db7d08e039add453828770a3e09086b04bdc4b50c80f4136832c2835a666bbb4069a2382259785740879f7db19f9b1db94f1a398724abe2f7b0ec4047be77b64cb1e40b591d74641314d39299d4ff307f4c201290d6ab647e9824fc9b3d9beff29ad0453ac493a845c6244b59f664490037258a9d901051814c690274e2ef7368d85c8bb438e19255feeed916585c382663945776461b767144112f792599a5010b84dde093980e4e43d9842008927c8069253b4fb10b8ed913f457661460bf89fee9092429e0c9345ca8c125013627e920f6ab647410af91ff4cfc10e25430e0e66f779eacf69e598a30f0a5cc85d211b49734a2bf03bb47c3e2149a3d9a266a487a7bb330ae968cec82e9075a5809d6461ba473243399d4fc9d0513392d35d923af228ee91e620ef96268b047d7b769fb202d3079f3edc9b62a453f27d76f66826892bc91bdc23519ce4148e4fc99f3898cdeeefdcd3208522715ac1de7eb00fe7679f92149319e5750e88f388cb692e763184fd4f89b870b6c96b2168e7c41c447e8a76677b148767fb14d6436476c9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf4fcb7ac46fe4394c484d9dd3421fa544a1061f503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83cdcf9f480b4fdc33df01bf986e73352f6db7b334cd69478737240967c67679f5213a42b282341cd28dfb5875728e827e2ed932d804ea7b8fee07c27275f6a97cc0335833ddddb2311a5a08f10bc47a13b05afb4a23aa57c0c119adc03b0e58c7cbf7dca3e113d3f2546220f807c4bcaa24cc8d450f675979c4634a37422310ef105e534887bc14319b94064dff6f609ad1d92261064469c80dc18190d4a375076845a501e8be683c2f32c2727f25334bbf729c5b6a4b4b7c95322ddfb297903938c1c579a09f29726448e731084a8759eef91e3b97b402cbc0f0ad208306672007689ee0f388f44b10f6590288f40890652353be49d3fa474e7f62e59939dfb14ca0bf7929d9d52d2078c44ce2f19fc87841bb98f945da1689a92d9f777218007945b9866a4eb77cfa16a1e52ce91fc8507dbd3fb94973b27ed4279706a767f7797bc249ac4039a0ec2887cb28c5256a4a0c88327cb4836021a89387e871c01ca5b7e4a9683024f6282073929fc1d0aec0e886d28a4a16619d90e52857bdbe7e44612340a7e0e0e3ecdb7efefd15cd3bcd2c46208fbe79f4e67946ca5b002534fe13b754fdef9ee8442d373921ad2d4d46c4671f4bd3dd27b9fe62401fbbb44e3833d52fd146551e2f653f20e77d069be4b1347ce14b176460a9f0644c9049a8a3d22f7c37bb072cce40f77f7887b692d9e7235c496e70492e846ae1499fafb14ce51fa1492f5907425a554c873c8405e72ecc93a53084a6924b22af7c817b9078d74709ff27ffb0fc8a1a55c370d81bc8c8714a9e31ff24029e42617889a65e4dd9266242b33a319dba7955d32a53470c283bccd87e7bb07f7a06a1e9e4f2863487ae101694fa21bf59c1d90683c983e24757b9f9ced07c8d59c4f492ddfa309a7143269247a9b18e91ea9bbfd9d7d1219f277f7801b7951e4d59124137b919cee63a4943f20999e1117d16068c99a9add230f614f52cb1456ee93bf4f06989cea4fc95dcb76ef3f243f030278be474e23a5c4692689166c3ee8b719657828e74ec24c195134db478832a3b9ce29dfb9bdff29595632ea446d6285fb3b0484e4999a512667e7d37b3489d98cb43e25fd4837cd6862292b4ce1c8430a2a7718dac1cede2e25aeb6a7642b08b74f8941a79484239b936514d5efe63cf5b438b03b2307669ba69eb4e5941462467e381c255ad4b9b7b747212735a371136b10cfeedda310842681940e19540ac7ee65c403941c7f8866644b3f9d506c442e28b963fb3b9484c9764987ec91aa9d914749a955cc0285e1f7f21d4a9b4cee137f939e22854f097fca8764648249c9e59c7a25cd4c5a9d48461a99b8f72191863433c532942ba6188a1c02767e48164863538a8c32fd841b8570648c28ff7a7f8f0c11d19444028cb47f8ff42bbc01cabe53a7e7c4a048cf6d4fc9cfbdf7e9a753126b88f30c0956b88a0f28fd48d088a56876293e25cb7a8ed4c62e774a2681189562c37b64b4691610a464c49b5372c80ef6c8b3cef7a12d29dc22079bc84ef34704c9a8e7870fc8aba571e7f99402b5dd0798d3870f4916c87e6cefb18e3ca0f06f32a35418d9b4e9a713720eeeeda119a9304a3ed1ec3c38dfa1a9bf47b1e501d1717b6f421a6bf2e01ead0e414e773f2536a7b16d93db4543784812fbf08044e601e5724821b0fb4ecdf61f500673463e794e2a639bfd105a1c239d7e8ff83d2798e7e212ec932979400aed01c5ed640149d53ca4c883d4607e90ef51aa748fd34d0753f2ea28adba3d23c340fc46584ec8f8919b4f7d4e2892276ca9d9834f89f0bbe4144d28bd47d0281acc2818a24e69e8a4cc288508dd4b92f8805c573241e482d19734bb13d890bd1929104a2750be1ffa8d883f9d4d11c12001b6bf47fe3b990c6a4b62f1e0c1fd877bb309464a0aff0105663452480b1978e2b7738a3e0e28b54d7a64463a14b8416dd154d342cc3996967689bf498540d0c816517e913c1928074a261cd04a02c53264a4081a39ca149692edfdf4d3fb944d879f0468e48ad34bc41cf7a039f6c9d3245b4ff4d9dba305000a831f3cdc85e2cac9a490ab4079cb7d0ae9280225a92753408a848ce10ef9740f588790db4ab114854dbb94632546227345b2465c0a55be4fe49aec63ea1f4ccef39c741b890c6c164553340bd46c6fe71e654f29f8bd3f015beeee501cfa90a49ef8846c16a919927f5a05212f8838801cf3fc5308e00e657d1ed2b0b7c9890241c8e5a5b50f62827d5a0ddea149ddbd8778e11e6928d27d3bb4aa483e32391834a7a4b3295fb497cd72fafb61065543d955927b5209073431a41c28c23bd87d40d1d96cfae9a7d40b492f9a9dcf6694ea208edccb88b224f544907372a5287fb87f3f9b51ac7ac09dee509042293a923df2f0f61fd248c900919c92b2fd942c2d4907732f25c221d0e460903bbe7f9f38e440d27fa45848bd107bf29cde9f3cd8a3a89c26915208fb1459911a44c445e3026d776861919adda7d52bd22fe43bd1432325658431527ef29c9401053ff7987b89324443f27b0e280d4c4c4ef9104a6a23769e12c723d19a61eac9c9db7b08c545a68b70a37c04596772f3a60f77285b708fba14d346b1d0fea71440915521fd467d9076a64999ec64e764c677f7290544cd3ea5d06c9f320bdbb43e4ad442f2f261464911d21ea4b476c8407f8aa9a79897c4999403257a8843c8fb2768a448480428fb9d7f4a8e0d9a110e2458048dd60108b70c86f2c11efd43b667774a7c45410335a32c0f2d4290f599de27f122f2921810536cdf27c346b96f9a2df61c28daa2b9a2feee9153482325ef1cb12441db25453ca59cc22ef88dd2c50f3e9d91df4bfa9d464a7e3e4932a54d08cb29c5ae140bf32c7c4ad9328a08694d9c566128ae279f9586402c4cca83a491dcdf8798534a32efd33490d1205d4643a028f10036845226e4d3679427df85bb72f0290518946fa6ec31b920c4256428c9b323d7fd530ab7679481e5e59b3d2ca0225dfc701739ae03f2f568a4a4c7284ed8a36fee51004ccdb2733214986b321acc96a4a22935409a956cfb01f57fbe8b66940cb9779ff2856482287622b54dc6e83ead347c4a79f619656e6614225233ca9c3d7c78ffe1c136e5b48820d40be953e284035a703da775a5c964020ef9749acf269f528e23230b411c42f1dbe49cb2010f2889406b060714d34145931e261f9452cb077b4406523744e85de2f94fc94edc27b8b90c81229a1965d6694ecfc911dc272a92674c0c4a3efbbd6cff2132fb98055ad3275b000d4f0124313999846c8f7abeb74b01cf39e5dc499ea9196962d2be646ca714c7d34c126f3e9c4158ef3da0b0fc3ebc404cd6035a09203787234de237723c89df881388989484a0008732c0d4ec21f9e7f7f34f890c533012393224b1940acd681188d0234f7d0f91d1014dd6fd9c7c807b9f92aedf9f12a1291aa629a6a408b92c440e968509e979325fd36d0abe68a43bf06a288aa4acddf9fdd9de1eb91233e04679bd2982204aa79029dddf2126c7a2029166ba43c1e61ecd24464aca613a45844e1a890430236d994100cf77f788cd338a24f621a739f930e444d2f2042d4810f7924c1f7c4ada72fa90a234d26a0f7667c08db2390f292f0ccf0116704283a400e321e56476c8cd2379da3b0734cab590e6457e29a38c2985d9a45e27341ff7c9d926c39d53440326278b333b877492d6257e3ba0f9989078d3706938e48a4c8846d48c340a491ea5c8c9bed22c502a90dc154ac7905d9eeddecf096f9e7ab270842459e787a40ea919093c25107669d96b9fb2b294b62717929a110d491f9101a5040ef1db8cfc02725748453fa0bce774e7de03f22fa9d97936a5d5349227ca8910f1c887254d4e61de39e5d43ea575947362146a466ee1eec303624672c308b77c4ae2bc4ba114ad31ecd2a45200778e599892d3015ede7e9053284c0122b1da1e0d9c7caa8307d30764187288ccce43f2eac9ac519e8c447f9fbedcce28e9488e1265e0687d92922ac08dfc23924b8a01ce1fc0043da40c2d2921120dcad2108fdea3c00904a1ccddee414e86e0d3732807223c05c57be46f5076933cc5bd738afba919222b62725a02265b46da12e1f10e65fe293a7f406ec083fcde0308204d0c1697c9a1cd286aa7b8847023a77efb9ce2f02ca75cd4f9044a95d62a8992945fa46425d18dd40cc92959e7c97d5aafdd253922579f9aed10979ed3ca28790eb08070b6297f4a969c048ec20bb2d97be8942c09a9275257e47511239d93be21e126e2e5e7fbe439ec91a4806ebb94687b4891127d4929abfd07146c3f24b6d8a650835cbed9035a97065bd2d028e74819c187f7e1a94e69d9836c21c125637a9f721814cb634eefd3ea0db986e484530687c84b2d1e52ffb44030a1d0e820a7801e6a30bf4f61d92ea53776c9b7215920041f92cea4ee3fdd9d92d298ee71ae86342f652741de5d122f9a7a4a74c089bb9f53ce9bf82d7fc00479382335452c4cd68742acfd4f2941fcf01ef94239f9a13965fac9c1c7d4ef92fb4b21dc01919d2218b232445ecaab901e236ea689a2a9006e0fee4def9381a69cc30370ef43d2c2e4a7d03fe4a7dd7f40969d5294d40cd105b92204e853727909379a803db2e49402fb94c483162dce6165c8f2107929a772fe290842ce24d42b653b1e6424219459bd3f4533f8900f2967409dc29542cae3608f4c66367d48deed039a87037008e94c8a16897129e226829c93a19c503c4429aff37b33326b94de63dcce679fce488fc19e1251c9ea912892697b48f1c4ee03f254c981a266c4c894859d92cf49ca9a987c4a8684188d88474b9be7249ee4a35233d2d6538a81c81a502c8a91522c4319390a1fce69156d460ae6000eedf93d9afcfb44f6f37d51a564bff74800295a2011fe34233f16d0287db34f99304ae492e521686491282bbc4343202346268c82199efa3d908d6c1913953e2723be4752319b928aa074cd034a67533392844f49d793a38b850ab232a47b77c8663d249793341aa5db784e77c9d2dea7641189339920d2bd24a7f768e0e4209152baffe9fe3d7657f273cacc53fc4088930d41d48a5927b54446604acb8b646bb8535ababb778fb2a314cc920012f7004b10242787eb212d6bb0ee9dd00c3fd8a1809d22249afa03929b8748b1e4f91e85563392b4193a2559a759208feb1e0569ca6f48bd1221ee9d935ff829459bd4ec3e05eb648d66dbbb645f896e14a966fb241afb192ddd92f9a3d9c24829f8a11420214e896aeaf41ea59026fb1401ed522c4b9e20a95c4e9b503e97cc0d29db3d4a79903813e791e5b8bf3da3f589079467a578024320a3416f93b47c4ae115754a1a29bb4f4edcecdefe2e457af7a6f93eb837a7d4c1949885ac0c7c24ca2c136e147151ae95e43d27e7e321a0515040aa98a49e16e2480d5284483120b1c9644ac6fe1ec56f3b1970a3c58b87fb50e2d943a474288b89e99c6cefce887349e1d3d0018d8c2619408a28e83512400a574916688a6969794a76863cca03e046de3d710425aac90d21ee255f92a23652833332f5b480700f96909a51104b2bdce47d1e2006d89f5078448a9e746c46934a7446aa919ae5e4ee925740c68874d436852fa49128fa2397608712eaf789bd26d048c46194df43a70fc8cfa6cc27757a8f4c18054414829113b97f0eff6d8a452ef2b9c81cc37c1c9049983c24a99812a5c85eec52d603734a9ec0f43e09eef6fd095983fd879440a1e89f38845296fb7be429edb2df9bef4fee4f338a234928882f480d6f93f8535c404a83d627c89cced0294504337295c9ce522448c688684c81002981594696f4d34ff732e6374a62ed11e765db940a25f2de270f9886709f14d474969190ec3dd8c764dda72926a78df272143091d453f27242312be500f6480d90e344ce119a1153507c47187d8a84c47dea8ffc37ca3492f732c1c201f90cd48c6632cfc8fb22154d8c4bae14892271ccf639d91042887271cc48b48444534c117a467ec9f63e8d0194a520e5e1ce7d62654a71723ee43e453cd431f1e194bcb6fd5d22cde49cccc7949c70d2cf6434efc32e1cec4df207fb14a67d7a1f716446b10585ffe4214cc975fb748f3ca2038c945ecaa66472480cc8b9238b4083a19c2be56ace49980f281fb487c922154cd69afc130a476908bb0fc9e52596256b49a121a5ef72f2baa8192dd0eed0e207823bb206fb942226ba91147e4ab2b84b3c49813470db2127e41ea5d6b677762980a66429e9375275db3971f47dac8f91f9a566d36c426a80463aa3c92346a2dc103723ab719f0cc63d52fe8096ddcb69eac805216449399038515443467587a4f03e091a75cb5e0d85843b48599cf382cb7de248caa992dda49502f209eeedd0ba3435a345aa8329bcc14ff781db7d126712274cecbdfb648929cdb48f59d8a135d273447e94e621dc72d23794473fa7b7c8a8cc28f133639b45d10379d590801dea8f940e19711aeff66c8702ecd92ead9948a263ff00395a8a170e689e28f8a617c8726fef900ea4bc38e57867602452c164c068d63f9dc23dce693188d6176841991603a7144a640f3240dbcfc884936b46d853da9bfc37e2b77db2a70f48e190aff2e90ea5a8a819ad7a912f4a73ba7b9fccfcfe941c5aca624fc91b241290ffbe4feb05d46c4ad101a5af48cc119592aa212b332368e44451b4bcb3ffe9833dd0edc13d92f1fb10999c68bcbf4f24cb0e284941010ffdefc1836c378700525662465ef0c3edfb19e8768ff40dad0ad288282ca1d40eb9127b98d307f7c963bd4f6685a483f86db247ae3b32ff5372ef885df6a6b42c40cdf6cfc985fa94bc811db2c624a70f69a4c415e4c9efd202e57d9aa129242bdfa5d59e0734a73b0f294d4371342d43109b6ee74400e25d7a6d021d42a2984d29a7410a1fc47b08030ce251984d04a1451b5a2644335a43dc25b78a7003bf912b46432041a385b67b534a01509a16d01e4cf7c886533c046408374a524c26a432690d91e62523cb7b805920af81d42b19778afe4864483113dd2855788f7c01fa98e6ff534816e51967e43f91a124734d6a90e8f690be85e853f4b14fdeca034c3d1213b432996f93c74f74233ea021d0d212cd09859307f7ce6962a91965aa2972a07888260623258250584b0ba034987bf789f8d329742f31d503627b0abdcf31f50f0924adbc4eb7493b93d2a47572cabf52b37d4ac1e6141610cec4c2c248bbb080345ccac8e734e27b1f7dff97fc1252237933ad8b555b54cb8f1e7d745c96e9c927c767e9ebf5c47edea48b75d3a6f3ec324f5775be3dcbcf8b653e93862f5e7f9ed6eb326fc669fa3acfd379dbae9a4777ef666fb3f1a2b9bbccdba2a9ee2e9b8b263dafea7451d5793acbdbac281bc27341bfcdb236fbe8d12ffe685ae7599bcf9e5c131ec41dc4f2881308dded7df86d0fc959debeb747ba7d42c1fa834f21f2faca97407d6f87942aa9eabdfd377bbb8ff60e1edd7f30260e7b4089fb9fa2a6eb15f5f37ed0f515039d56512907fbe99bddfb8fe87f7bbbe33de2877b7bfb3ff51191315fd2e8a6f9225fb65f5464fe1e7df4343fcfd6658b2f8b19fd7d77555797c52caf9bbb5f14d3ba6aaaf376fc45b6cc2ef8adbb0bfbebe775b55e35772927496941b236c49530da94323e38208f80d2b21479dca734cdc3bd28d0e3753bafeae2071926efeeaa2a8be9f571d314174b406feebe78f5c5eb6d9ab7eda7672f4eb75fbfda255ebb14cdd25eaf80fbad61d12bcb6c815736002dab29bf4ead9a8ae0e559d3664d81d8b1b96eda7cf15439a0a42f887ac579a11385b9202348f6658f5c24ca38922f426244aae921addcde23f97f88d0327cef8d8ce178b52264a5e3b0c9714b5ff72674f7e1f80119d1bd838734a1bf64f48b3f22d2aef2ba2df206b8cd8a665566d72f64b4cb7ad16c5f65f5b2585e6c2fabe5f6f493acd86ef2e9ba2edaeb6d1688df7f778cd10bcd881b8a650164cede8f192e7e1698c121d3dca540e4fcc13d8a61e0c19cdf83f268a634f0f742f23d3896e0afb29aa8d8125c10362bcbea2a9f3d5726e1cf2eb3724d187c8f54f1b2ade98f265f672b7a15acb36ef6f4afabbc696d0bfa7b59d5eddcff000df817bca72c97912ea3ef8b4c1bfa1fa119fd3da5815102da7ecf70f335f881fed2cf8be58ce1fd74b6ca96fae25bd26ede7bebb7cceff49b7e6671e15f043b50e4bcce9694a79646f437bf969dd7c4bfdc377d7491d744ef6bf327fdbccaae018afe68ae8af607795d66cb197dcedfafb3dcfccac0d072800040c07e661bd387d4399141ff00b29604dc2a2000bea6df9900fc2dfdb17eab9fd2473a50fe4afb651a4ceaec07640af031fd85f606acd0c47cc33f852268449f2841f09702a40f69cc44167c467f100ddc371e8df4eb8bb29af0578203a3c39d735fe60f6dccbf3b68ebb7d41337d239c6e0040eff8911d3277879dd400be08375d39497f47b43ec9ed3d80c30f99bdfa3bf7ebaa8b833bcebfd699a7f9fec09e564f32929312b281f1daf67059b9a555d90b41ba5a55f7f0fcb76046b7707ee0dad38f2bf406b7707868e624afe17fe1b2d8df3bf705d4887e3df5d7e7797dfdde57759ad537e84ffe57777f9dd5d7e7797dfdd7d48b81246efe96064ec5154cb94f442fa932ff2b6498b654a144d1bef8dff17391bbb0f1fddbbf7e8fec331ad61dda77cfe37ef6cec3fdadf1f536c7fff802c13cdfeff075d8dd7dbc75f3d7db3fdeaabe7af8d57f0e1ae4604e8ff6bfc0999335a88dfdd278e2039b8853f410c4e1cbc5de7bf685dd4f936b1f1ff375c080afea7a490687983a2585a8a218c7fe442d0c07ee4422819f40f206b49c0ad0202e06bfa9d09c0dfd21f3f7221f0f207b81000f15e2e047df7f3c162ef3fdad91b93c7b3471ed0376fb1e97f9f8e776815f4e1a77ba4fd89dcff5fb3d9af9fbc7823e69526d758d70f34d95198ffafb1d8f43f9ab34f69f18f1882c4e017d3bce4cb96c27920467ef5725aacb2926d2f2dbf3cdcbb47ab0c7b39ad7b534aff9cc84ecbaeb46c74ff21ad7fedd0820675d9e6cb6cd9f21b0ff6ce698582b2aa146e534e7197569228553dd9dea3e4dd6c87c2efc93e7c67a5f06b268a50329f81476822373b0f2442db246f2450e4344095c86c109ba99d6634a20c11e5b29f6da7e1809666f2c94e4ee9ed9d8c529784f1ff8b9c86887286d624025b8576fa6e4a0a9f7e09dfa4d5b04f0f325ae6a6d579c2659f5648691d9e16eeee51cefafec3bd3dc28ec0d222d13d5ae6a13c2ef2f8b40c48283fa0a5015acfcf762947fd60c22853ea174ba0e7db0fce39377f9fd2bd135ab1dab9b73f79706fe7d3e9c30954112d0a4fee9dd3d2c72c239edaa74c3b71d7012d67edec1d108d67939dfb68b6bb77bebfff80f420add620ff4d2b0b94109e6def514a7f77ba37cb3fbd07b69ddefbf47cf69030ca69c58f56a168a17832a165f9bdfc3e2d16eeefd0da1b92ee7bfbf7269f3ea0417eba33a5e585d939ad4250fcb34dcb4a794e0b6d5860e06659be93ed9d6fef4d279426cf084b5a967848ab10b307b4b64b0bfbf7d1e964fffec11e2df56ed38869a4347e5aa0b947c9f5c96c778f16de3f9555af4fefd3ba012d28d3da1a2d6cec03417a8d161a3ebd47cb8e3bb478b08748f4212d12659f12e2e77b3911e4d37d8236a14c38ad89d1dacf83075352ead46cf7febd7b3bf788bcb47a45b8cd6821e5e09c560b335a189ed1cad06cff1e16791edc9bed51ca7e6f3b7fb0836cfa43ea34a385dbbd7382393dc877efef42091d7c3afb94d66268f9f4535a59d8a7655f9a05d07897189cd415ad0ac0f379f820a365155a173998d14acffe39cdc7e43eadefdd7b48abeb139a53220535db7d40ab34b43c4673fd00e39bd242cac18456421eecdfa350706fb6f72946fae9f4feeea75362fbf37b5837a0f5412c73d3aae06c176b24192db760b2a6d3fbf9eeec1ea9a8035ab1d8a7a5095a322242d34ae43e169667d91e08b233a1e16376489a6816325a123f7830a3352d1ae7bd8cd6f1ce67e05e5a8fccce098fed4f69998fa0d1ea062dd1cd68d56b6f8f00d0ca368f74674a7a92c8432bc3b4ec482c4f534f2bace063c26e969def902924dcf24fef3fd839a715e0035a1cd9bf4f342624d1fddede7d5a8fcef6f7105310e47d22c383ed07d35d12993d5a76cc3ea5a99f7d7a303b2796a7251230f9392d90ececed4f49944823ecd34491322026987dba7bbe73fee90e2dcc63b22664550e1ed28a132dcf52b309ad906520e33dd2460ff3d9a79fceeec13c7d7a9eef4c77085a36258edca7416f1f10d7d014673451b4c649ebc3d4ecc17946eba0c43e58be27687bb444f980d88f16c71e9c1f106644276a46fc3d21d41e6e9fd36a3ccd292d3b3f3c206eda9fdccb77693d97de03414888f7776122f219cc0b4931712f2d7d612176b2b333a3256e2c403dc81f4c1e64b47cb633a105b6fd192148cba6340bd37c7f7a409a61976de3435aeadddda1fe0e0865a23d2d191ddc9bd1dc4dee918e2082dee3f4cf8309ada54d68a59e188030224544b3408ba3043bdb7948b22f39a17be70f884509f17bfbc4e9fb94b9dacef66945f6de94b8fcc16c464b7c18e98383fba00f0d817c269a85731ac21eadea4fce6955ebfc604a4021ceb454772f9f1d403a674490fbd41f4d32bd454b6a7b339217fa839ad1f2f38c98f4c17696d33adc3e2d76921d251d7b7e3e9deceed252d7de0eb8f7207f984f6982a9979cf88dac0a4ddb8c7afe74ba4f53959f3f3c076e93032c31d2b2faa7c428340b24a7937d6abb3bdbbd4783dc9f7eba874e099b87f7e893edf31cdc4b3d1141c80921ae25a7342335781f41c6c3e901addae6b488392104f71fd2381eee64b40a7dbe734004997e4a2bc1d48c14cf64ef535a03a79544747aef7c3bdba1254a32170f680668787b68f6e09c34312d44934aa0057d6a4aa4d9bd7f406a899c4f5ad0bd3f9961a4a47949099333349b40a99e3f20c9ca6976b307708c6644be5dc8c2c11e2db9de273edca52575c2ed531ac2f9a7b4ea499c46c39cec3cc8d029e596a8192d734f723827d37bf4dbc184386f6f760eaa3d9ced814368c9f9e0e001d9b2fb24b9a4dfee134bcd68e57cb2875578faf0fe03a89afd3d42618fbe242ad348490d6dd372f52e99094c3e2d82ef1c6016ee653939400f27dbf70f483befefd37ad18416f2e9cf4946aed2033862d48c56ee67f7eed1dafade399bb6fb98fabd7cfb01c90bc9ce01d91018ca5d9aa3f34f69c1f3c1c3031a026923e263824b168ab298b31db20d98535af926d370f029ad8b9e930e3920ddfb90a608524f9c464ae07c8239a544c6c1eedede3ecd0e08b20fa9df017d66c475f748f390f145b39dc9c307d4c1f6ee7dc28896906902c8926e3fb8774e62906507b4784ecd66247f070fc99611df1234caa4d2d26e766f9b3e2216223a1252d46c8f0c2d96e4b7f73e7d48727a4e6a0964207b9a1f106fd124ec8220640d1f4c485dd0976024d2a5640169521ee6f789791e124f3d44b37b07b4f0fde0e13e891299eefd0312880931fdf6747f6ff2906c0e85385035e48edc23c5f1e9f6039a639afa7382967f4a3a964c733ebb4f0cc0dc9bddbfb74b38ef6fefed9c93aad901345872caf6643bf7ee935c71529988739fcce601a9c71d1ac2435a12a711d09827bbf748caf7483d60a4e434ef1d3c209d9c119624a7a4da88aa19a13afd7437cf28be9a40bf65e7f432ad4b6dd35cd1483f7d48acf6802cc41ea9c5090d99c080df6835fed3d97d22031942c28dc6038240623f7d48b370fee0d30328ae19b1cd435244143ad0acef93c9dece8863b677f7c8077898ef93ce0441cecf1f7e9a914ed97e7000dd4beec4f6c37d323af7f6efed934747866107cdee1d9004ed92d2382041dcde9fdc27b34bbc430cb3039f961a72ee7cef80ac112db7d3aafe8486408326af86047bef0199be5db292c44fd48c8cfbfec1840ce8de9498719fc60b57ea607b9adddf272d42a37b804e492f4defcd1e9239260f939a918b7600969a200a7a40cec11e6b24b279245bf7a6dbf9012912e22fd29ba407b6c923cbb3ecfea7e7a40da8d984b4cec3198939a94c5235e43b91e222eb455c484a86541d991a6a466c7cffe01e4de20e3cc77dd2693404d2b19feeec7f7a3025a5f6e053c8c283fc5392466044e698a67e87e4f49c0cc9cef4fc3cfbf4c1949002b403720e3fcde9cb8c165b091a1124fbf43e31f3eebdf3fd9de994660caa865246d97df25db7f73e45a77b19753a218dbdfb60426c30dba7457d4023dd4b84248f8290a74e3f25234736ecfef6a7a4fa1fdcfff4dede0e777aefd37c9f2012f31361684e295223df6bb2fd606797f8860cd61e876b44e673d234145c12eb10879047f2903a2277f57c4abc7b4ef308ba91cf31d9235db67d7e1f6e1e3973d48234ebf4e03e69908387fba473a8d90149d86c8710dfc9c861df87513d80cf7a703f3f205b442367680f1f909dd921c76387d64d68a424b10f3f25a5faf01e392d07e7f7f7eeed011a710b39e9e41264a43f08b71d92bde94352c5f749899312a63161a40fc95b3aa7108460c0819a90d378f0e0e16c7b87f8212353b447ea819a914ac9693c242d102f9a7a12e71971ef6c7a9e9ddf9bec92e30571de814a39276db94b769534d201d9a17d7867e49ace76669fee938452b37bbbd3839d5d624b6263c26d4a499387d90ec50564d4771e92f69a4e3152f28c72420bd6608f262bdf7d405842e1efe4e42a3fcc6006a9d939c56b24a60403924ca689d404e9be6d326a33d22fe450f11ad49466f421295a78aa3404980f726f283c221ea295a907e7fbec4ae5b3dd9d1c429c3fcc88203b34c883fb640b29ee2629cda70fc86052b38ca46c7a8fdcd8d93e092b5185848a7c014a18654410784a9f42b2a62439bb9f924e266b428cb447cc41bdd3a4ecdccbf3fcdedebdfd7bc02ddbd9bd3721df9b08425a6dff9c2287ec53e284833df2d9691acec983a766e4d0640f1e827b771f5058711f5686740f490549c8eefd6cf2e92e9acdc8413a9fd2d4ef91bf8a21ccc82520db74ff01598cd9fef9fd831ce4dd2505f0e0fe3ed9320a8689bcd43d09f02e11847439adf0ed12f5a9d939454ba42bee6f4fc94d27f292a69b907626683332ab60b14f7908846a96510c8db890989c464a7a91bce57c27cf0eceef9140a1d3c9c39d87f788d2440b62b5fd3d7235c82cdddfce333230a455f71e9ca35372b1290c2415347d40fee2fe94f8ed80f4f7f6cef9bdf34fefc3d79e4087cc66e48c9292255b9f136fd21b2432077b14d6131b916da09817d072b2999f929f441a97fc9efddd7b34f5fbc448bbe77bf728ba3edf25e7919a11a949f5501a6f9a9396d9cf28baa6d09a5c2662001a1421b80f4339236376ffd387e40fef80f6b048939c102411b83fa5999addff144c4eaa7136dd27cdf190742b754a7e28c50b135229f749913ed89dce3ec510a6d9f4d37b93c9bdedddfdfbc46f1437914b406689e25062cf4f698d9067819c19f2cbc87c10e234f5e7c4bd137213c89d9b3ea4f97e484c8dc0f3216587f6a764fc08556ab6ff90464a3edb361936d2333b3ba482d12969e7fd8c141c248e14570ed2dc9b1205efe70f3e25e124fb08a9871b94ef932b35cd2744905d72e2b3736a96535a8d22db599edf872c9079cdf20798c47d9a4ee2105283934fc97bf97432a5a40df9a0539097a692b25f64f73ebd47aa94f023b67c40c6e13e4d3a79787b0ff30c9dee9383fa8086b39dcd282d4319d57d9ab68cc8787e3ebb7f1fbc7480663be793e9bdf329697898c17df026453664541f7e4a5127516e6706829c536849d9067209a69885fbe4609245d9d9de2323f5e90ce33c07417649074c3f25c535d9212f6aff1c0686ec39f9483446e2548a9ba01c282c2232ee9160dea37888a24ca005472223d54e015e2e9a9cb4c42e8de753b265306dbbd0bd9f52dc4b3ee739292e327bf7308429b948335a02a728f80169cb7ba42d1fee922627f726a3ccc6833de24b347b78b04384a3a8ed8010a720059345124bb1c2bd8c74e58cd40535231a92db4971044125bac14e93174d72b34fa660679f42b7fb10c0f34ff71f50828770a3e09086b04bdc4b50c80f4136832c2835a666bb0f281447044b2e0be910f2eeb733f263b769959e62ca29f9beec391013ec9def912d7b00d5465e1b05c534e5a4743ecd1fd00b07a434a8d91ea50b3e25cf66fbfea70f08da949caa09b9c4886a3fcd882007e4b052b3030a30288c214f9c5cee6d1a0b9177871c334abedcdb23cb0a8705cd728aeec8c26ecf288224ee25b334a120709bbc137200c9c97b308500124f900d24a768f72170db237f8aecc26c7bf6e0d31d5252c89361b2489951026a42cc4ff241cdf6284821ff83fe39d8a164c8c1c1ec3e4ffdf9fd9c7434451f14b890bb423692e6f4e1f6cece84d2b42469345bd48cf4f0747746211dcd19d905b2ae14b0932c4cf7486628a7f329193a6a4672ba4b52471ec53dd21ce4ddd26491a06fcfee535660fae0d3877b538c744abecfce1ecd24712579837b248a939cc2f129f91307b3d9fd9d7b1aa450249e93e678b00fe7679f92149319e5750e88f388cb692e763184fd4f89b870b6c96b2168e7c41c447e8a76677b148767fb14d6436476c9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf3fa1383ba34c1bf166969f4f30136c171e503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83ca4843d69fb877be037f20dcf67a4ecb7f76698","ac29f1e6e4802cf9cece3ea52648575046829a51be6b0faf50d04fc4db275b009d4e71fdc1f94e4ebed42e99076a067bbab747224a411f21788f42770a5e6921624af9182234b90760cb19f97efb947d227a7e4a8c441e00f99694459990a9a1eceb2e398d6846e944621ce20bca6910f78287327281c8beeded135a3b244d20c88c3801b931321a946ea0ec08b5a03c16cd0785e7594e4ee4a76876ef538a6d49696f93a744baf753f206261939ae3413e42f4d881ce7200851eb3cdf23c773f78058781f14a41160cce400ec12dd1f701e89621fca20511e81120da46a76c83b7f48e9ceed5db2263bf7299417ee253b3ba5a40f18899c5f32f80f0937721f29bb42d13425b3efef42000f28b730cd48d7ef9e43d53ca49c23f90b0fb6a7f7292f774eda85f2e0d4ecfeee2e7949348907341d8411f96419a5ac484191074f96916c04341271fc0e390294b7fc942c07059ec4040f7252f83b14d81d10db504843cd32b21da40af7b6cfc98d246814fc1c1c7c9a6fdfdfa3b9a679a589c510f6cf3f9dce28d94a6105a69ec277ea9ebcf3dd0985a6e72435a4a9a9d98ce2e87b7ba4f73ecd4902f67789c6077ba4fa29caa2c4eda7e41deea0d37c97268e9c2962ed8c143e0d88920934157b44ee87f760e598c91feeee11f7d21216e56a882dcf0924d18d5c2932f5f7299ca3f42924eb21e94a4aa990e79081bce4d89375a61094d2486455ee912f720f1ae9e03ee5fff61f90434bb96e1a0279190f2952c73fe48152c84d2e1035cbc8bb25cd4856664633b64f6b22644a69e08407799b0fcf770fee41d53c3c9f50c690f4022da5816ed4737640a2f160fa90d4ed7d72b61f2057733e25b57c8f269c52c8a491e86d62a47ba4eef677f64964c8dfdd036ee445915747924cec4572ba8f9152fe80647a465c4483b93701bfdd230f614f52cb1456ee93bf4f06989cea4fc95dcb76ef3f243f030278be474e23a5c4692689166c3ee8b719657828e74ec24c195134db478832a3b9ce29dfb9bdff29595632ea446d6285fb3b0484e4999a512667e7d37b3489d98cb43e25fd4837cd6862292b4ce1c8430a2a7718dac1cede2e25aeb6a7642b08b74f8941a79484239b936514d5efe63cf5b438b03b2307669ba69eb4e5941462467e381c255ad4b9b7b747212735a371136b10cfeedda310842681940e19540ac768f1905415f90e6846b6f4d309c546e482923bb6bf4349986c9774c81ea9da197994945ac52c50187e2fdfa1b4c9e43ef137e92952f894f0a77c48462698945ccea957d2cca4d58964a491672480","441ad2cc14cb50ae9862287208d8f92159208d4d2932caf4136e14c29131a2fcebfd3d32444453120930d2fe3dd2aff00628fb4e9d9e1383223db73d253ff7dea79f4e49ac21ce332458e12a3ea0f423412396a2d9a5f8942ceb39521bbbdc29990462548a0def91d1a659409092116f4ec9213bd823cf3adf87b6a4708b1c6c223bcd1f1124a39e1f3e20af96c69de7530ad4761f604e1f3e245920fbb1bdc73af280c2bfc98c526164d3a69f6205ffde1e9a910aa3e413cdce83f31d9afa7b145b1e101db7f726a4b1260feed1ea10e474f75362731adb36b95d34848724b10f0f48641e502e871402bbefd46cff01653067e493e7a432b6d90fa1c531d2e9f788df7382792e2ec13e999207a4d01e50dc4e169054cd438a3c480de607f91ea54af738dd743025af8ed2aadb33320cc46f84e5848c1fb9f9d4e7842279c2969a3df89408bf4b4ed184d27b048da2c18c8221ea94864eca8c5288d0bd24890fc8752513442e187d49b33b810dd99b9102a17402e5fba1df88f8d3d914110c1260fb7be4bf93c9a0b624160f1edc7fb847abd1d48c14fe030acc68a4901632f0c46fe7147d1c506a9bf4c88c74287083daa2a9a68598732c2ded127f930a81a0912da2fc227932500e944c38a095048a65c84811347294292c25dbfbe9a7f7299b0e3f09d0c815a7978839ee4173ec93a749b69ee8b3b7470b0014063f78b80bc5959349215781f296fb14d251044a524fa680140919c31df2e91eb00e21b79562290a9b7629c74a8c44e68a648db814aa7c9fc835d9c7d43f989ce739e9361219d82c8aa66816a8d9dece3dca9e52f07b7f02b6dcdda138f421493df109d92c523324ffb40a425e10710039e6f9a710c01dcafa3ca4616f9313058290cb4b6b1fc404fbb41abc4393ba7b0ff1c23dd250a4fb766855917c647230684e496753be682f9be5f4f7c30caa86b2ab24f7a4120e68624839508477b0fb80a2b3d9f4d34fa917925e343b9fcd28d5411cb997116549ea8920e7e44a51fe70ff7e36a358f5803bdda120855274247be4e1ed3fa491920122392565fb29595a920ee65e4a8443a0c9c120777cff3e71c881a4ff48b1907a21f6e439bd3f79b04751394d22a510f629b2223588888bc605daeed0c22235bb4fab57a45fc877a287464aca0863a4fce43929030a7eee31f712658886e4f71c501a98989cf22194d446ec3c258e47a235c3d49393b7f7108a8b4c17e146f908b2cee4e64d1fee50b6e01e7529a68d62a1fd4f298022ab42fa8dfa20ed4c9332d9c9cec98cefee530a889a7d4aa1d93e6516b6697d94a885e4e5c38c9222a43d4869ed9081fe14534f312f893329074af4108790f74fd04891900850f63bff941c1b34231c48b0081aad03106e190ce5833dfa876ccfee94f88a82066a46591e5a8420eb33bd4fe245e4253120a6d8be4f868d72df345bec3950b4457345fddd23a790464ade39624982b64b8a784a39855df01ba58b1f7c3a23bf97f43b8d94fc7c92644a9b1096538a5d2916e659f894b2651411d29a38adc2505c4f3e2b0d81589894074923b9bf0f31a79464dea76920a341ba8c864051e2016c08a54cc8a7cf284fbe0b77e5e0530a3028df4cd9637241884bc850926747aefba7146ecf2803cbcb377b584045baf8e12e725c07e4ebd148498f519cb047dfdca300989a65e7642830d76434982d4945536a80342bd9f603eaff7c17cd281972ef3ee50bc90451ec446a9b8cd17d5a69f894f2ec33cadccc2844a46694397bf890c4669b725a4410ea85f42971c2012db89ed3bad2643201877c3acd67934f29c7919185200ea1f86d724ed980079444a03583038ae9a0a2490f930f4aa9e5833d2203a91b22f42ef1fca76427ee13dc5c864011cd8c32eb34a7e7e408ee1315c9332606259ffd5eb6ff10997dcc02ade9932d8086a70092989c4c42b6473ddfdba580e79c72ee24cfd48c3431695f32b6538ae3692689371fce20acf71e50587e1f5e2026eb01ad04909bc39126f11b399ec46fc409444c4a4250804319606af690fcf3fbf9a744862918891c1992584a8566b40844e891a7be87c8e88026eb7e4e3ec0bd4f49d7ef4f89d0140dd3145352845c162207cbc284f43c99afe936055f34d21d7835144552d6eefcfe6c6f8f5c891970a3bcde144110a553c894eeef10936351814833dda160738f66122325e5309d2242278d44029891b6cc2080e7bb7bc4e6194512fb90d39c7c1872226979821624887b49a60f3e256d397d48511a69b507bb33e046d99c87941786e7000b38a1415280f19072323be4e6913ced9d031ae55a48f322bf9451c694c26c52af139a8ffbe46c93e1ce29a2019393c5999d433a49eb12bf1dd07c4c48bc69b8341c72452644236a461a85248f52e4645f6916281548ee0aa563c82ecf76efe784374f3d59384292acf3435287d48c049e1208bbb4ecb54f59594adb930b49cd8886a48fc880520287f86d467e01b92ba4a21f50de73ba73ef01f997d4ec3c9bd26a1ac913e5448878e4c39226a730ef9c726a9fd23aca39310a3523b770f7e1013123b961845b3e2571dea5508ad61876695229803bc72c4cc9e9002f6f3fc82914a60091586d8f064e3ed5c183e903320c394466e72179f564d6284f46a2bf4f5f6e6794742447893270b43e494915e046fe11c925c500e70f60821e5286969410890665698847ef51e0048250e66ef7202743f0e9399403119e82e23df23728bb499ee2de39c5fdd40c911531392d01932d236d89f0788732ff149d3f2037e0417eef01049026068bcbe4d06614b5535c42b89153bf7d4e717896532eea7c02a54a6b954449ca2f52b292e8466a86e494acf3e43eadd7ee921c91ab4fcd76884bcf6965943c07584038db943f254b4e0247e105d9ec3d744a9684d413a92bf2ba8891ce49df907013f1f2f37df21cf6485240b75d4ab43da44889bea494d5fe030ab61f125b6c53a8412edfec01ad4b832d69689473a48ce0c3fbf054a7b4ec41b690e09231bd4f390c8ae531a7f769f5865c4372c2298343e4a5160fa97f5a20985068749053400f3598dfa7b06c97d21bbbe4db902c10820f496752f79fee4e49694cf73857439a97b29320ef2e89174d3d253ae0c4ddcf29e74dfc963f60823c9c919a221626eb4321d6fea794207e788f7ca19cfcd09c32fde4e063ea77c9fda510ee80c84e110c5919222fe555488f1137d344d15400b707f7a6f7c94053cee101b8f7216961f253e81ff2d3ee3f20cb4e294a6a86e8825c1102f429b9bc841b4dc01e59724a817d4ae2418b16e7b032647988bc945339ff1404216712ea95b21d0f329210caacde9fa2197cc8879433a04ee14a21e571b04726339b3e24eff601cdc30138847426458bc4b814711341cec9504e281ea294d7f9bd1999354aef316ee7b34f67a4c7604f89a864f54814c9b43da47862f70179aae44051336264cac24ec9e724654d4c3e2543428c46c4a3a5cd73124ff251a91969eb29c540640d2816c5482996a18c1c850fe7b48a362305730087f6fc1e4dfe7d22fbf9bea852b2df7b2480142d90087f9a911f0b6894bed9a74c182572c9f21034b2489415dea1219011231346c10c4ffd1ec846b68c894a9f9311df23a9984d494550bae601a5b3a91949c2a7a4ebc9d1c542055919d2bd3b64b31e92cb491a8dd26d3ca7bb6469ef53b288c4994c10e95e92d37b347072904829ddff74ff1ebb2bf93965e6297e20c4c986206ac5ac935a222330a5e545b235dc292dddddbb47d9510a664900897b8025089293c3f590963558f74e68861fec50c04e11124dfd01c9cd43a458f27c8f42ab1949da0c9d92acd32c90c7758f8234e537a45e8910f7cec92ffc94a24d6a769f8275b246b3ed5db2af44378a54b37d128dfd8c966ec9fcd16c61a414fc500a9010a74435757a8f5248937d8a80762996254f90542ea74d289f4be68694ed1ea53c489c89f3c872dcdf9ed1fac403cab3523c812190d1a0b7495a3ea5f08a3a258d94dd27276e766f7f9722bd7bd37c1fdc9b53ea604acc4256063e12659609378ab828d74af29e93f3f110d0282820554c524f0b71a4062942a41890d8643225637f8fe2b79d0cb8d1e2c5c37d28f1ec21523a94c5c4744eb67767c4b9a4f069e8804646930c204514f41a092085ab240b34c5b4b43c253b431ee5017023ef9e388212d5e48610f7922f49511ba9c119997a5a40b8074b48cd2888a5156ef23e0f1003ec4f283c22454f3a36a349253a23d548cd727277c92b2063443a6a9bc217d24814fd914bb04309f5fbc45e136824e230caefa1d307e46753e6933abd47268c02220ac1c889dc3f87ff36c52217f95c648e613e0ec8244c1e92544c8952642f7629eb8139254f607a9f0477fbfe84acc1fe434aa050f44f1c4229cbfd3df29476d9efcdf727f7a719c5912414c417a486b749fc292e20a541eb13644e67e894228219b9ca6467291224634434a6408094c02c234bfae9a77b19f31b25b1f688f3b26d4a851279ef93074c43b84f0a6a3acb4848f61eec63b2eed31493d34679390a9848ea297939a1989572007ba406c87122e708cd882928be238c3e4542e23ef547fe1b651ac97b9960e1807c066a46339967e47d918a26c625578a44913866fb9c6c082144b93866245a42a229a6083d23bf647b9fc600ca5290f270e73eb132a538391f729f221eea98f8704a5edbfe2e9166724ee6634a4e38e967329af761170ef626f9837d0ad33ebd8f3832a3d882c27ff210a6e4ba7dba471ed101464a2f655332392406e4dc9145a0c150ce957235e724cc07940fdac364910a266b4dfe0985a33484dd87e4f212cb92b5a4d090d27739795dd48c16687768f103c11d59837d4a1113dd480a3f2559dc259ea4401ab8ed9013728f526bdb3bbb144053b294f41ba9baed9c38fa3ed6c7c8fc52b36936213540239dd1e41123516e889b91d5b84f06e31e297f40cbeee53475e48210b2a41c489c28aa21a3ba4352789f048dba65af8642c21da42cce79c1e53e7124e554c96ed24a01f904f776685d9a9ad122d5c114dee0a7fbc0ed3e8933891326f6de7db2c49466dac72cecd01ae939223f4af3106e39e91bcaa39fd35b64546694f899b1cda2e881bc6a48c00ef5474a878c388d777bb64301f66c97d64c24d1b17f801c2dc50b07344f147cd30b64b9b7774807525e9c72bc333012a960326034eb9f4ee11ee7b41844eb0bb4a04c8b81530a25b20719a0ed6764c2c93523ec29ed4dfe1bf1db3ed9d307a470c857f974875254d48c56bdc817a539ddbd4f667e7f4a0e2d65b1a7e40d1209c87fdfa7f5026a36a5e880d25724e6884a49d5909599113472a2285aded9fff4c11ee8f6e01ec9f87d884c4e34dedf2792650794a4a08087fef7e041b69b4300292b31232ff8e1f6fd0c74bb47fa86560569441496506a875c893dcce983fbe4b1de27b342d241fc36d923d71d99ff29b977c42e7b535a16a066fbe7e4427d4adec00e596392d3873452e20af2e4776981f23ecdd0149295efd26acf039ad39d8794a6a1389a9621884db7732200f12ebd36810e2151cca694d320850fe23d840106f128cc2682d0a20d2d13a219ad21ee925b45b881dfc815a32190a0d142dbbd29a500284d0b680fa67b64c3291e0232841b252926135299b48648f39291e53dc02c90d740ea958c3b457f2432a498896e942abc47be007d4cf3ff29248bf28c33f29fc85092b9263548747b48df42f429fad8276fe501a61e89095a99ccb7c9e327ba111fd010686989e684c2c9837be734b1d48c32d51439503c44138391124128aca505501accbdfb44fce914ba9798ea01b13d85dee798fa870492565ea7dba49d4969d23a39e55fa9d93ea560730a0b0867626161a45d58401a2e65e4731af1bd8fbeff4b7e09a991bc99d6c5aa2daae5478f3e3a2ecbf4e493e3b3f4f57a623f6fd2c5ba69d3797699a7ab3adf9ee5e7c5329f49c317af3f4feb759937e3347d9de7e9bc6d57cda3bb77b3b7d978d1dc5de66dd1547797cd45939e5775baa8ea3c9de56d56940de1b9a0df66599b7df4e8177f34adf3accd674fae090fe20e6279c40984eef63efcb687e42c6fdfdb23dd3ea160fdc1a710797de54ba0beb7434a9554f5defe9bbddd47f7f61eddbb37a6451818b89fa2a6eb15f5f37ed0f515039d56512907bbf36667f7d1ce3dfadf98dcc30352fb3ff51191315fd2e8a6f9225fb65f5464fe1e7df4343fcfd6658b2f8b19fd7d77555797c52caf9bbb5f14d3ba6aaaf376fc45b6cc2ef8adbb0bfbebe775b55e35772927496941b236c49530da94323e38208f80d2b21479dca734cdc3bd28d0e3753bafeae2071926efeeaa2a8be9f571d314174b406feebe78f5c5ebedd74f5ebcd97e7af6e2749b6670fb7267176cd35eaf80faad41d12bcb6c81575e0cc22cab29bf4d8d9a8ac015cb5981b0b1b96eda7cf15427bfcc1a10ae382f748e300d64ffc8b4ec917744c94672434882482b3da445db7b24fa0f115586efbd11fc8f572b42547a0d9b1cb7f4757f2e77c7a43848baf7682e7fc9e817d384e5cbb668098f5ffcd1aa2e96d36295956798450a9cc96d24d5c26bf99425a404dd2e05359423dfbb477e0f69750caecd97d9b2e5371eecd1b237655628570303bc4b3e2419a9c936e55ea7b31d0a1e68010b6f08eaaf992a42e27c06e6a1195ee5755be40db09915cdaaccae5f08d597f5a2d926d9da6ed61392b4df7f770cf320d344fc572c0bd080d188724a94fd2e7e16d8cf21d3dcbd470ee31ead6c1c508288024ba8d2664a637c2f24df434608fe2aab89602dc1050db3b2acaef2d973654cfeec322bd784c1f73eca895bd64d535e927a24c43c3578fa6e5aae1bfa257c8146436b78c402148e130a945ea2788256e0ceef9191229786967f30bfe415d2021a99440a3b49719327482e11f90214c067bb64941e4c1853d2f58879cec9cd65634ce98887137251294b4ccb743b94d59a4035511438b94709e1ed1927b2c9b412535146ed7c87122064cc273bf7d16c9752b0fb58b420f70c068f5c09b20033ca921c202b32a37c283c80e9bd4fcf67949b819f412c4a29646a4671f85e7e9fa283fd1d72b66165f7f669398e96f4b0464bfec48c72ff1925302969f2699e93670d8f829bd18a464639f3bd296517f633c292fc105aaba0e402057314c9df47a794993da08507caec53e6825c701aee64877252bb93d9ee1e45da9f8a9bfb2965f11e520449ce347932fb40905e23cfe2d37b1467ec90b7c0be0e65acf63224b2cff79014a0fc030d814c1f39c1e4ec3d783025254fcd76efdfbbb743c95ed2f7e445505e99dc99730a0f328a04298f727fb67f0f5edd034a92928da634dc0348392d1f50684e911ab1ed1ea597f2ddfbbc0247d9d74fc9f9a278e953722510fad32c80c6bb19adb8657be406c0ed78885c1b0514db073372edf629eb4a993672e8ef3da4709a9645686430ed9491a1e894d2e2c86fd210283344d6885c9f07b41046b49aed7d8a917e3abdbffbe994b89df27ee428504080b896c280d92e9ca28cfc2b4c16b90b392de75166e7805c145a7540144184a6d0631f91e48c1273d46c6742c3c7ec9010d12cd0a202b1252d38629cb46e4f1ede0cdc4b014846d9540a1bc8af2768e4ce904f4e29869dbd3d0240a12c8f74674a6909220f8582146710cbd3d45348053e26ec66d9396545a9d9342735ba43b9660a19886ef789c68424badfdba375dc5dca80c27322c8fb44065a8d98ee92c8ec519c4199564acdd00a15a5c6ef934f04263f278f688752ee244aa408289b0937909860f6e9eef9cef9a73b148963b226644d0e1e928b49f118359b904b9c818cb492471331fbf4534a8d53b34f69b166ba43d0b22971246534684186b886a638a389a2a08602426af6e03ca3c087d807f13a41a3942d796b94e3a315dff303c28ce844cd88bf2784dac3ed730abf694e29ce7c7840dc4499c87c9702387a0f042121a60c2fc9423ea33c2a798be4bf4ec8d745e435d9c1e2f80ed4242d6b4c1e64e42fef4cc8a3de476a96e2249a85694e2b0ea41976d92652f68df22ad4df01a14cb4271f91920d347713ca3c4f89a0f776c06fb432fd7032a1d09c188030224544b340d110c1ce2834ca49423052ca97108b12e2b4ba4b6c9993f6caf62904bb37252e7f309b914f8f91c2d522fad010c887a25938a721ec51184f4b0ac4440753020a7126df9c163b29a947a93122c87dea8f2699de221f7a6f46f2427f50338a3767c4a49473c9c9f1a6c01fe693742c2d7f5312827cdbbd1d702fa54c68399996d626b4fe4823a5fe6849807afe94fcef4f69d99032ddd48c96d028a6a0389a166b48003f25399dd0c2d5f62ea5d76890fb535af0a36684cdc37bf4c9f639a52748eaa16a76c8f920ae2527352335781fb69dd6e2294c43ae8273550f691c0fb1b476ff7c87f206b4244da11f3523c533a1ec3c25a1483d53a794adcf76c8712073f180668086b7876694bc21b7864836b94f113c3525d2d0e216a92572462982bb4fa94f6a469a9794303941941522c5754e89254a5b12973e80434469e5fbbb9085833d8ab1ee131fee520c4db8d122f2c139ad5c4f88d36898939d07193aa5441135a3b8762249817bf4db01e52af7f790653d7ff870b6070ea11893f2b464cbee93e4927e433e6846a1f2640f61377d48696a6ab6bf4728ecd19744651a29a9a16d8a4f29cd41ca85389b4cc8016681f252e4f73ca44c0456aef7f729c29950e44e7f520293fa210f8c87404af9de3d0aa6f7ced9b4ddc7d4ef51228ce4856487f2c613184af2c22804a2088756a46908a48d888f092e59a8dd1dcab8906dc09c52a84ba681b219f728a623b624ddfb90a608524f9c464ae07c8239a5f59c83ddbdbd7d9a1d10641f524feb0d94ab24aebb479a878c2f9aed4c1e3ea00eb677ef13461433d2049025dd7e40ae1f0590948fd9c764cd48fe0e1e922d23be2568bbbbe42e669451a38f8885888e841435a3c5b81c31f8f61e2ffb9d935a0219c89ee607c45b3409bb200859435a0525a54ad94c222fe952b2803429b4584cccf39078ea219ad1daef3eadfa51ea817c511a290904e5674923edef4d1e92cda19007aa86dc917ba4383edd7e40734c534f193c6a4a3a964c733ebb4f0cc0dc9bddbfb74b3853de768716cef62911433c44969c56dab29d7b94cefe7407b340c4b94f66f380d423655428d226767f80f998ec5226e2e11ea9078c34dfa755f707a49333c292e494541b51352354a79feee619c55bbc18969dd3cb944adba6b9a291524e8f38842cc41ea9c5090d99c080df28fcfe74769fc840869070a3f1802090584ab751aaf301ad5c53b319b1cd4352441432d0ac53ce85049038667b778f7c808739a526a720c8f9f9434ae9d1970f0ea07bc99da07c10199d7bfbf7f6c9a323c3b08366f70e48827649691c90206e530694cc2ef10e310c65a9f23d6ab88391d22afc03b240e408907aa5592006a53c132d0c53be3cdf252b49fc44cdc8b8d3522a1950caff13e2345eb852b49a95dda72404b1c9bd07e894f4d294b28c648ec9c3a466e4a21d80a526887e289b3fd9638d44368f648bb2323996f288bf486f921ea0a5474aaed1aa03adc983bc949822db47624e2a93540df94ea4b8c87a11179292215547a6869a111bdfa76c0bf9d4f01cf749a7d11048c77e4a89255a7098ec3df814b2f08056c2c9d61346648e69ea6979f680d26f94033d3fe7650c62146a7640cee1a758bbcd1ec0c10041b24fb14eb47bef7c7f674aabb453a89a0c8892efbabd474b42a487286348491d72aa1f503a9494cedefd7b8046ba9708491e05214f9df2ba2ba5c0b73f25d5ffe0fea7f7f676b8534af7ec1344627e220ccd29ad8891ef45e9b69d5de21b32587b9c7a26329f93a6a1a092588738843c124a98919c52b449bc7b4ef308ba91cf31d9235d86ec30cd023973d48234eb94f23884e3c37dd239d4ec80246c46abb4db3b1939ecb49a468384cf4a799d03b245347286f6f001d9195ad6dfded9a5c43925c828df4d2bd1a41cc8693938a730720fd0885bc84927972023fd41b8ed90ec4d1f922aa69427f9e0e47c7d8a913e246f8996cde9f54fe140d1ba1d09e0434aab113f64648af6483d50335229398d87a405e245534fe23c23ee9d4dcf697565b24b8e17c479072ae59cb4e52ed955d248b4be7ab00fef8c5cd3d9ce8c9655cec1bdf768e569871685299621354fca8e089251d293a683a480b4d75497d6a639a1056b40893e5aa0a10cf5a750f83b94ca2493013348cdce294c233125189064324da42648f76d93519b917e21878af308539ad187a468e1a9d210603ec8bda1f08878084b75e7b43a45cd725ae8cb21c4f9434a42ee53529726806c2185db24a5f9f401194c6a9691944def911b4b4b14046d468699bc23249028534b4b00b44e07c99a92e4ec7e4a3a99ac0931d21e3107f54e93426bc2797e6fefdefe3de096edec22490d829056db3fa7c821fb94388132a79f7e4ad3704e1e3c352387267b40cbd434f594d9dbbf0f2b43ba87a482246497d2afb4ca44cd66e4209d4f69eaf7c85fc51066e412906dba4ff9d27bb37d4a2fe6202f2d1b4f1edca7c5b77b14031379a97b12604a204e4997d332d12e519f9a9d53b444ba82566bc84d27f292a69b907626683332ab60b14f7908846a9651e88cb890989c464a7a91bce57c87566fcfef9140a1d309252629c70f5a10abd14232b98fe41f6fe7191918d2aa7b0fced129b9d81406920a9a5242923884f8ed80f4f7f6cef9bdf34fefc3d79e4087cc66e48c9292255b9f136fd21b2432b49c4ccae821e9b34f29e60534caaa50784976961c2e22ef2e2d8192f526637dbe778fa2ebf35d721ea919919a540fa5f528814b9dd2220a4d16f9483362001a1421b80f4339236376ffd387e40fef80f6b048939c102411a0f434f1e0fd4fc1e4a41a67d37dd21c0f49b752a7e48752bc4049e1ec3e29d207bbd3d9a71802a58d3fbd4789f2ed5d5abf2001a498931605293adbcb893d3fddbfff29cf023933e49791f920c469eab1883c213781dcb9e9439aef87c4d4083c91cbdd9f92f12354a9192d9510abd198c9b0919ea1b552f223a91969675a51a00886248e14570ed2dca3f4eefe7dca369370927d84d4c30dcaf7c9959ae6949726eb45a2480b81db39a5d328b2a59587fb900532af942cc624eed3741287901a9c7c4adecba793e9fd3d8a8eee73ca9ea6722f274544ca965429e1476cf9808cc37d9a74f2f0f61ee6193add2707f5010d679b56ebc8cad0b21d4d5b46643c3f9fddbf0f5e3a40b39df3c9f4de39adb6efc20cee833729b221a3faf0538a3a89723bbcbe724ea125651bc825a065691a1f3998645176b6f7c8487d3ac338cf41105a4da62524525c948fa766e7303064cfc947a23112a752dc04e540611191718f04f31ec5431465022d381219a9760af072d1e4a42576693c9f922d8369db85eefd94e25ef239cf497191d9bb87214cc945a2d57f4a9bec50069e1889b4302d1b512ef04146998d077bc49768f6f06087084751db01214e410a268b249662857b19e94a5aec8200120dc9eda43882a012dd60a7c98b26b9d92753b0b34fa1db7d08e0392d6751828770a3e09086b04bdc4b50c80f4136832c2835a666bbb450902382259785740879f7db19f9b1dbbbbbc46e0753f27dd9732026d8a3253af260a1dac86ba3a098a69c940eadb2d30b07a434a8d91ea50b3e25cf66fbfea7b45c42b126e910728911d57e9a11410ec861a5660714605018439e38b9dcdb341622ef0e3966947cb9b74796150e0b9ae514dd9185dd9e510449dc4b66694241e0367927e4009293f7600a01249e201b484ed1ee43e0b647fe14d9055a7a7cf0e90e2929e4c93059a4cc28013521e627f9a0667b14a490ff41ff1cec5032849685eff3d49fd3f20a471f14b890bb423692e69496a976688d69429246b345cd480f4f776714d2d19c915d20eb4a013bc9c2748f6486723ab4360bf2929cee92d49147718f340779b7345924e8db335ad83c9f3ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7709c5633776839f2fece3d0d522812a7659eed07b43449e3a024c584d6f188d377c87ba345eb7c1743d8ff94880b679bbc1682764ecc41e4a76877b6477178468b68f72132b484492b69942020e46908e4f29100921f72efe1f453d2593bb37b0fd0ec8098fbe103527e53921c82f690523ae42991dcec53484509c487f7c0bd148690692719b9b74f4926f206c12114123c200787683bfd74b20bb6dc2125bc47d24db92852f3fb138ab339433e2135753ec14cb05d7840d9444a9d1020329df40f09150535a4061fec3cb84fb905ca9602b77df22148e3932d2301267e23a17a484c4422f39016f048db3fdc03bf916f783e2365bfbd37c3644d893769119d5cd09d7d4a4d90aea08c0435a37cd71e5ea1a09f88b74fb6003a9de27a5ab9cec997da25f340cd604ff7f6484429e8230469e56c9b82575a80a015de3d2234b90760cb19f97efb947d227ad282ea3e7900e45b52166542a686b2afbbe434a219a5138971882f28a741dc0b1ecac80522fbb6b74f68ed9034812033e204e4c6c86850ba81b223d482f258341f149e673939919fa2d9bd4f29b625a5bd4d9e12e9de4fc91b9864e4b8d24c90bf3421729c832044ad735a3ba5f8f48058781f14a41160cce400ec12dd1f701e89621fca20511e81120da46a76c83b7f48e9ceed5db2263bf7299417ee253b3ba5a40f18899c5f32f8b4460bf791b22b144d5332fbfe2e04f080720bd38c74fdee3954cd43ca3992bf400bc3f7292f774eda85f2e0d4ecfeee2e7949348907341d8411f96419a5ac484191074f96916c04341271fc0e390294b7fc942c07059ec4040f7252f83b14d81d10db504843cd32b21da40af7b6cfc98d246814fc1c1cd08ae8fd3d9a6b9a579a580c61fffcd3e98c92ad145660ea297ca7eec93bdf9d50687a4e52439a9a9acd288ebeb7477aefd39c24607f97687cb047aa9fa22c4adc7e4adee10e3acd7769e2c89922d6ce48e1d38028994053b147e47e780f568e99fce1ee1e712f2d5d51ae86d8f29c4012ddc89522537f9fc2394a9f42b21e92aea4940a790e19c84b8e3d59670a41298d4456e51ef922f7a0910eee53fe6fff0139b494eba6219097f1902275fc431e2885dce40251b38cbc5bd28c6465663463fbb41442a694064e7890b7f9f09c16d0a16a1e9e4f2863487a8196d04037ea393b20d178307d48eaf63e39db0f90ab399f925abe47134e2964d248f43631d23d5277fb3bfb2432e4efee0137f2a2c8ab234926f62239ddc748297f40323d232ea2c1dc9b80dfee9187b027a9650a2bf7c9df27034c4ef5a7e4ae65bbf71f929f01013cdf23a79152e23493440b361ff4db8c323c94732761a68c289aed234499d15ce794efdcdeff942c2b1975a236b1c2fd1d0242f24ccd2893b3f3e93d9ac46c465a9f927ea49b6634b19415a670e42105953b0ced60676f971257db53b21584dba7c4a0534ac291cdc9328aea77739e7a5a1cd89d9103b34d534fda724a0a31233f1c8e122deadcdbdba390939ad1b889358867f7ee51084293404a870c2a8563f732e2014a8e3f4433b2a59f4e2836221794dcb1fd1d4ac264bba443f648d5cec8a3a4d42a6681c2f07bf90ea54d26f789bf494f91c2a7843fe5433232c1a4e4724ebd926626ad4e24238d4cdcfb9048439a996219ca15530c450e013b3f240ba4b1294546997ec28d42383246947fbdbf478688684a220146dabf47fa15de0065dfa9d3736250a4e7b6a7e4e7defbf4d3298935c47986042b5cc507947e2468c45234bb149f92653d476a63973b2593408c4ab1e13d32da340b085232e2cd293964077be459e7fbd096146e91834d64a7f9238264d4f3c307e4d5d2b8f37c4a81daee03cce9c387240b643fb6f758471e50f83799512a8c6cdaf453ace8dfdb43335261947ca2d97970be43537f8f62cb03a2e3f6de8434d6e4c13d5a1d829cee7e4a6c4e63db26b78b86f09024f6e10189cc03cae5904260f79d9aed3fa00ce68c7cf29c54c636fb21b438463afd1ef17b4e30cfc525d82753f28014da038adbc90292aa79489107a9c1fc20dfa354e91ea79b0ea6e4d5515a757b468681f88db09c90f123379ffa9c50244fd852b3079f12e177c9299a507a8fa05134985130449dd2d04999510a11ba9724f101b9ae6482c805a32f697627b0217b335220944ea07c3ff41b117f3a9b228241026c7f8ffc773219d496c4e2c183fb0ff768119a9a91c27f4081198d14d242069ef8ed9ca28f034a6d931e99910e056e505b34d5b410738ea5a55de26f52211034b245945f244f06ca81920907b49240b10c192982468e3285a5647b3ffdf43e65d3e127011ab9e2f41231c73d688e7df234c9d6137df6f6680180c2e0070f77a1b8723229e42a50de729f423a8a4049eac91490222163b8433edd03d621e4b6522c4561d32ee5588991c85c91ac11974295ef13b926fb98fa0793f33c27dd4622039b45d114cd0235dbdbb947d9530a7eef4fc096bb3b14873e24a9273e219b456a86e49f5641c80b220e20c73cff1402b843599f8734ec6d72a24010727969ed8398609f568377685277ef215eb8471a8a74df0ead2a928f4c0e06cd29e96cca17ed65b39cfe7e9841d5507695e49e54c2014d0c29078af00e761f5074369b7efa29f542d28b66e7b319a53a8823f732a22c493d11e49c5c29ca1feedfcf6614ab1e70a73b14a4508a8e648f3cbcfd873452324024a7a46c3f254b4bd2c1dc4b897008343918e48eefdf270e3990f41f2916522fc49e3ca7f7270ff6282aa749a414c23e4556a4061171d1b840db1d5a58a466f769f58af40bf94ef4d0484919618c949f3c276540c1cf3de65ea20cd190fc9e034a031393533e8492da889da7c4f148b466987a72f2f61e427191e922dc281f41d699dcbce9c31dca16dca32ec5b4512cb4ff290550645548bf511fa49d6952263bd93999f1dd7d4a0151b34f2934dba7ccc236ad8f12b590bc7c98515284b40729ad1d32d09f62ea29e6257126e540891ee210f2fe091a29121201ca7ee79f926383668403091641a37500c22d83a17cb047ff90edd99d125f51d040cd28cb438b10647da6f749bc88bc2406c414dbf7c9b051ee9b668b3d078ab668aea8bf7be414d248c93b472c49d07649114f29a7b00b7ea374f1834f67e4f7927ea791929f4f924c6913c2724ab12bc5c23c0b9f52b68c22425a13a755188aebc967a521100b93f2206924f7f721e69492ccfb340d64344897d110284a3c800da19409f9f419e5c977e1ae1c7c4a0106e59b297b4c2e087109194af2ecc875ff94c2ed19656079f9660f0ba848173fdc458eeb807c3d1a29e9318a13f6e89b7b140053b3ec9c0c05e69a8c06b325a9684a0d906625db7e40fd9fefa2192543eedda77c2199208a9d486d9331ba4f2b0d9f529e7d46999b198588d48c32670f1f92d86c534e8b0842bd903e254e38a005d7735a579a4c26e0904fa7f96cf229e53832b210c42114bf4dce291bf0809208b4667040311d5434e961f24129b57cb0476420754384de259eff94ecc47d829bcb1028a29951669de6f49c1cc17da22279c6c4a0e4b3dfcbf61f22b38f59a0357db205d0f0144012939349c8f6a8e77bbb14f09c53ce9de4999a912626ed4bc6764a713ccd24f1e6c31984f5de030acbefc30bc4643da09500727338d2247e23c793f88d3881884949080a7028034ccd1e927f7e3fff94c8300523912343124ba9d08c1681083df2d4f710191dd064ddcfc907b8f729e9fafd29119aa2619a624a8a90cb42e4605998909e27f335dda6e08b46ba03af86a248cada9ddf9feded912b31036e94d79b2208a2740a99d2fd1d62722c2a1069a63b146ceed14c62a4a41ca65344e8a491480033d2961904f07c778fd83ca348621f729a930f434e242d4fd08204712fc9f4c1a7a42da70f294a23adf6607706dc289bf390f2c2f01c60012734480a301e524e6687dc3c92a7bd7340a35c0b695ee49732ca9852984dea7542f3719f9c6d32dc3945346072b238b3734827695de2b7039a8f0989370d978643aec8846844cd48a390e4518a9cec2bcd02a502c95da1740cd9e5d9eefd9cf0e6a9270b474892757e48ea909a91c05302619796bdf6292b4b697b7221a919d190f41119504ae010bfcdc82f20778554f403ca7b4e77ee3d20ff929a9d67535a4d2379a29c08118f7c58d2e414e69d534eed535a47392746a166e416ee3e3c206624378c70cba724cebb144ad11ac32e4d2a0570e7988529391de0e5ed073985c2142012abedd1c0c9a73a78307d40862187c8ec3c24af9ecc1ae5c948f4f7e9cbed8c928ee42851068ed62729a902dcc83f22b9a418e0fc014cd043cad0921222d1a02c0df1e83d0a9c4010cadced1ee464083e3d877220c25350bc47fe066537c953dc3ba7b89f9a21b22226a72560b265a42d111eef50e69fa2f307e4063cc8ef3d8000d2c46071991cda8ca2768a4b083772eab7cf290ecf72ca459d4fa05469ad922849f9454a5612dd48cd909c92759edca7f5da5d922372f5a9d90e71e939ad8c92e7000b08679bf2a764c949e028bc209bbd874ec992907a2275455e1731d239e91b126e225e7ebe4f9ec31e490ae8b64b89b6871429d19794b2da7f40c1f643628b6d0a35c8e59b3da07569b0250d8d728e94117c781f9eea94963dc816125c32a6f7298741b13ce6f43eadde906b484e38657088bcd4e221f54f0b04130a8d0e720ae8a106f3fb1496ed527a63977c1b920542f021e94ceafed3dd29298de91ee76a48f3527612e4dd25f1a2a9a744079cb8fb39e5bc89dff2074c9087335253c4c2647d28c4daff9412c40fef912f94931f9a53a69f1c7c4cfd2eb9bf14c21d10d92982212b43e4a5bc0ae931e2669a289a0ae0f6e0def43e1968ca393c00f73e242d4c7e0afd437edafd0764d9294549cd105d902b42803e25979770a309d8234b4e29b04f493c68d1e21c56862c0f9197722ae79f8220e44c42bd52b6e34146124299d5fb5334830ff9907206d4295c29a43c0ef6c86466d387e4dd3ea07938008790cea468911897226e22c83919ca09c54394f23abf3723b346e93dc6ed7cf6e98cf418ec291195ac1e892299b687144fec3e204f951c286a468c4c59d829f99ca4ac89c9a7644888d18878b4b4794ee2493e2a35236d3da51888ac01c5a21829c5329491a3f0e19c56d166a4600ee0d09edfa3c9bf4f643fdf17554af67b8f0490a20512e14f33f263018dd237fb9409a3442e591e82461689b2c23b3404326264c22898e1a9df03d9c8963151e97332e27b2415b329a9084ad73ca07436352349f894743d39ba58a8202b43ba77876cd643723949a351ba8de774972ced7d4a169138930922dd4b727a8f064e0e1229a5fb9feedf6377253fa7cc3cc50f8438d91044ad9875524b6404a6b4bc48b6863ba5a5bb7bf7283b4ac12c0920710fb004417272b81ed2b206ebde09cdf0831d0ad82942a2a93f20b97988144b9eef51683523499ba15392759a05f2b8ee5190a6fc86d42b11e2de39f9859f52b449cdee53b04ed668b6bd4bf695e846916ab64fa2b19fd1d22d993f9a2d8c94821f4a0112e294a8a64eef510a69b24f11d02ec5b2e40992cae5b409e573f7ce1f90b2dda394078933711e598efbdb335a9f784079568a273004321af43649cba7145e51a7a491b2fbe4c4cdeeedef52a4776f9aef837b734a1d4c8959c8cac047a2cc32e1461117e55a49de73723e1e021a0505a48a49ea69218ed42045881403129b4ca664ecef51fcb69301375abc78b80f259e3d444a87b29898cec9f6ee8c3897143e0d1dd0c8689201a488825e2301a470956481a6989696a76467c8a33c006ee4dd134750a29adc10e25ef225296a23353823534f0b08f76009a91905b1b4c24ddee7016280fd098547a4e849c76634a94467a41aa9594eee2e7905648c48476d53f8421a89a23f72097628a17e9fd86b028d441c46f93d74fa80fc6cca7c52a7f7c88451404421183991fbe7f0dfa658e4229f8bcc31ccc7019984c943928a29518aecc52e653d30a7e4094cef93e06edf9f9035d87f4809148afe89432865b9bf479ed22efbbdf9fee4fe34a338928482f882d4f036893fc505a434687d82cce90c9d524430235799ec2c4582648c88c614089012986564493ffd742f637ea324d61e715eb64da95022ef7df2806908f749414d671909c9de837d4cd67d9a6272da282f470113493d252f2714b3520e608fd400394ee41ca1193105c57784d1a74848dca7fec87fa34c23792f132c1c90cf40cd6826f38cbc2f52d1c4b8e44a912812c76c9f930d21842817c78c444b4834c514a167e4976cefd31840590a521eeedc2756a61427e743ee53c4431d131f4ec96bdbdf25d24ccec97c4cc90927fd4c46f33eecc2c1de247fb04f61daa7f7114766145b50f84f1ec2945cb74ff7c8233ac048e9a56c4a2687c4809c3bb2083418cab952aee69c84f980f2417b982c52c164adc93fa1709486b0fb905c5e6259b296141a52fa2e27af8b9ad102ed0e2d7e20b8236bb04f2962a21b49e1a7248bbbc493144803b71d7242ee516a6d7b679702684a96927e2355b79d1347dfc7fa18995f6a36cd26a40668a4339a3c6224ca0d7133b21af7c960dc23e50f68d9bd9ca68e5c104296940389134535645477480aef93a051b7ecd55048b88394c5392fb8dc278ea49c2ad94d5a29209fe0de0ead4b53335aa43a98c21bfc741fb8dd27712671c2c4debb4f9698d24cfb98851d5a233d47e447691ec22d277d4379f4737a8b8cca8c123f33b659143d90570d09d8a1fe48e99011a7f16ecf7628c09eedd29a89243af60f90a3a578e180e689826f7a812cf7f60ee940ca8b538e77064622154c068c66fdd329dce39c1683687d8116946931704aa144f62003b4fd8c4c38b966843da5bdc97f237edb277bfa80140ef92a9fee508a8a9ad1aa17f9a234a7bbf7c9ccef4fc9a1a52cf694bc412201f9effbb45e40cda6141d50fa8ac41c5129a91ab2323382464e1445cb3bfb9f3ed803dd1edc2319bf0f91c989c6fbfb44b2ec80921414f0d0ff1e3cc876730820652566e4053fdcbe9f816ef748dfd0aa208d88c2124aed902bb187397d709f3cd6fb6456483a88df267be4ba23f33f25f78ed8656f4acb02d46cff9c5ca84fc91bd8216b4c72fa90464a5c419efc2e2d50dea7199a42b2f25d5aed794073baf390d2341447d33204b1e9764e0420dea5d726d021248ad994721aa4f041bc8730c0201e85d944105ab4a1654234a335c45d72ab0837f01bb962340412345a68bb37a51400a56901edc1748f6c38c543408670a324c564422a93d610695e32b2bc079805f21a48bd9271a7e88f44861433d18d5285f7c817a08f69fe3f8564519e7146fe13194a32d7a406896e0fe95b883e451ffbe4ad3cc0d42331412b93f93679fc4437e2031a022d2dd19c50387970ef9c26969a51a69a22078a8768623052220885b5b4004a83b9779f883f9d42f712533d20b6a7d0fb1c53ff9040d2caeb749bb433294d5a27a7fc2b35dba7146c4e6101e14c2c2c8cb40b0b48c3a58c7c4e23bef7d1f77fc92f21359237d3ba58b545b5fce8d147c765999e7c727c96be5e4fece74dba58376d3acf2ef37455e7dbb3fcbc58e63369f8e2f5e769bd2ef3669ca6aff33c9db7edaa7974f76ef6361b2f9abbcbbc2d9aeaeeb2b968d2f3aa4e17559da7b3bccd8ab2213c17f4db2c6bb38f1efde28fa6759eb5f9ecc935e141dc412c8f3881d0ddde87dff6909ce5ed7b7ba4db2714ac3ff81422afaf7c09d4f776e87b5ad9db79f866f7c1a3fd078ff61e8c1f923ff660e7fe4f51d3f58afa793fe8fa8a079db87aefcdcecea37bfb8fee13f49dbd7b7b7b9ffed44744c67c49a39be68b7cd97e5191f97bf4d1d3fc3c5b972dbe2c66f4f7dd555d5d16b3bc6eee7e514cebaaa9cedbf117d932bbe0b7ee2eecaf9fd7d57ad5dca59c24a505c9da1057c26853caf8e0803c024acb52e4719fd2340ff7a2408fd7edbcaa8b1f6498bcbbabaa2ca6d7c74d535c2c01bdb9fbe2d517afb75f3f79f166fbe9d98bd36d9ac1ed4b512cedf50aa8df1a14bdb2cc1678e5c520ccb29af2dbd4684a4324e6cb9a963e6fae9b365f3cd5c92fe943225c715ee81c611ac8fe9169d923ef88928de486900491567a488bb6f748f41f22aa0cdf7b23f81faf5684a8f41a36396ee9ebd85cdea72c3d45493497bf64f48b69c2f2655bb484c72ffe685517cb69b1caca33cce2039247724368e584d62e617529c2fa94c29e07e72481e4694f3e3d075a6dbecc96adbcb147cbde9459a15c0d0cf02ef99064a42604e0c174b643c1032d60e10d41fd355345489ccfc03c34c3abbc6e8bbc0136b3a25995d9f50ba1fab25e34db245bdbcd7a4292f6fbef8ec1b7324dc47fc5b2000d188d28a744d9efe26781fd1c32cdddc93da4dba7bbf9bd3d5a99e1047f33a531be1792ef2123047f95d544b096e0828659595657f9ecb932267f7699956bc2e07ba4fc976d4d7f34f93a5bd1abe0d675b3a77f5de54d6b5bd0dfcbaa6ee7fe0768c0bfe0bdac2930ba8cb4277d5f64dad0ff08cde86f910cf73dc3cdd7987afa4b3f2f963386f7d3d92a5bea8b6f499f7aefaddf3615919f7ed3cf2c2efc8b60078a9cd7d99232e3d288fee6d7b2f39ac486fba68f2ef29ae87d6dfea49f57d93540d11fcd55d1fe20afcb6c39a3cff9fb75969b5f19185a0e100008d8cf6c63fa903a2732e81f40d692805b0504c0d7f43b1380bfa53fd66ff553fa4807ca5f69bf4c83499dfd808c0f3ea6bfd0de80159a986ff8a750048de8132508fe5280f4218d99c882cfe80fa281fbc6a3917e2d5d3316dc277761fed036fcbb0322af70438c893e41bb7503cdda1013e784b1692b7f735bfaeba78b8a61a1bdf7a76b7e515613fae5fba4631acfda9fbe9b128af44b281714e5d15235a56f28eb44924659540a9b69a1f9fc1ef962e4b993fe841aa3e087d689c9f3a3ec0af92714f090e74f2e2fe5a9b25df2bd1e4c5820c9a541687f4e7a937d4ecaba3d9c5024468b21b41abd43c9db093419253b26f768dd637bc6eb35e44192eea4c4f1f90ee5f9c8679decdc47b35d5a69d8c7da1c4521f0ebc86326476746c9c00324ff6694f687a33bbdf7e9f98c529070a74913d34a0935a374d35e7e9f82e0fd1d8a29e14ceeedd3aa33ad5c6f7fba3325b779464b5c19e5e92937f8699e530009c7999bd1c25d464b437b534aa2ed678425b9dbb424473934ca5950c2ea3e3aa50588035a5fa3052c4ad051a449c39dec50ea757732dbdda384d2a712cd7d4ac9ea87e794ada2150b1a0210a4d7c881fef41e85d33be414b34b4f89d9bd0ceb35e77bc87d519a8d86401e1ec57a14d33c7830255f869aeddebf776f87d634c8ad216799964fc86b3fa72838a38407a50befcff6ef217879706fb647ae28659b1fd0fad03ead9251068a12127be704737a90efdee785665a64f894620c4a0b7c4a1e33325c340ba0f16e460bcbd91e79bb10d187482953dcbc7d30a308669f161728a14c71ebbd879435a2d53f1a193c584a3c521286567f90c6a7215002949c2ef2f01fd07a2fd16ab6f72946fae9f4feeea75352ea94de267f98e25ea46f28da9dedc2f7cf288cc06491579cd3aa3525300fc813a7c53504cb44688ab0f791309951fe999aed4c68f8981db215340bb476466c49ebea18e7bd8ce2534a6253338ab3335a34a0e898c25782465e3b859e9449dbd9db230094b1e191ee4c29fb46e4a18c0785d3c4f234f59439001f1376b3ec9c92ffd46c9a539a7d879654283226badd271a1392e87e6fef3ee55928d18f008120ef131968d18d6ce2f6fe1e85d3b4a04019485a88a515a0fbe4fa83c9cfc9f1dfa195251225b27794b447b4434c30fb74f77c8792939470c2644dc8693a78489114a51da8d98422bf0c64a4056b9a88d9a79fd20a1035fb94d624a73b042d9b124752e28ed61d896b688a339a288add29ef41cd1e9c6714df13fb202d45d068658282124a65cf1ed06a29614674a266c4df1342ede1f6396599684e299df2f080b88912eef92ee529e83d1084849816324816f2192d1750504461da84423a2418263b3bb4cab983c08a56ef260f320a0b77261438ee630582d201340bd39c16d64833ecb2eb4749664a1f527f078432d19e4221caa9d1dc4d6881654a04bdb7037e7b30a11871421e1b310061448a886681827e829d5106202709c148292d482c4a88dfa3c433c504a4bdb27dca34dc9b12973f98cd2874c5481f1cdc077d6808142ad02c9cd310f6285b452b67c4440753020a71a61094d6f429774d196022c87dea8f2699dea250716f46f2427f50334aabcc884929b598537c49f92d7889a463cfcfa7946ba3106e4fb2a3b4b840b936ca78d1323b8d94faa3952feaf9530a333fa5d5715ad0a166b4524ca133a58b684d9204f05392d309adcf6eef52169906b93fa5756d6a46d83cbc479f6c9f53168ea41eaa66877c6ce25a32be19a9c1fbb0860f29afff909246348984e0fe431ac743ac20df3fdfa1f4d86cfa296538a819299e092d4251ae95d433754a8b52d90e85de642e1ed00cd0f0f6d08c7294e4bd13c926f72951454d8934b4864b6a89622e4a54dca70c3f3523cd4b4a987c7d4a7e92e23aa7fc2965e7894b1fc0efa7d593fbbb9085833d4a25dc273edca55411e1f6290de1fc538ae689d36898939d07193aa57c2835a3f4cd44725ff7e8b7034ac9efef6131e1fce1c3d91e38845229b41c41b6ec3e492ee937a43d6794119aec21bb441f92634fcdf6f708853dfa92a84c232535b44d6918cae6917221ce2613728059a0f42bb9f70f29e17640da797f9f028d0925a8e84fcad3533fb4bac04320a57cef1ee58cf6ced9b4ddc7d4ef51be97e4856487","964726309494a3a6489f02f9070f0f6808a48d888f092e59a8dd1d4a2c926dc09c5246874c0325edee51ea82d89274ef439a22483d711a2981f309e694962d0f7669799a660704d987d4d3b21aa5e489ebee91e621e38b663b93870fa883edddfb8411a5466802c8926e3fb8774e62408bcf9414a2663392bf838764cb886f09daee2e6584324a1cd347c4424447428a9ad19a738e54d3f61eaf6e9f935a0219c89ee607c45b3409bb200859435aec27a54a497b222fe952b28034290ff3fbc43c0f89a71ea2d93d5a2aa0c56dcab0dd23d34d493aca6712d36f4ff7299a209b43913d540db923f748717c4ad966721a28ed49d0725a6127b29285bb4f0cc0dc9bddbfb74b38d3f2c40ead0fef53be9178882c392d28673bf768d5e6d31dcc0211e73e99cd03528f9438a48412b1fb03ccc76497126e0ff7483d60a4f9fe6cefe001e9e48cb0243925d54654cd08d5e9a7bb39c5879ff29a6f764e2f53c6789be68a464aa96be210b2107ba41627346402037ea32cd3a7b3fb44063284841b8d070481c452569932fa0f3e3d80e29a11db20a0a2c898669d528b2480c431dbbb7be4033ccc29033f0541cecf1f52e69abe7c70b04f1240ee04a53dc9e8dcdbbfb74f1e1d19861d34bb774012b44b4ae38004719b12fd64768977886128199bef51c31d8c74ef80ac11a591285b35a121d0a0c9ab21c1dea365a17c97ac24f1133523e3be7f3021034acb5c84388d17ae142dda66f729d7466c72ef013a25bd34a5643a9963f230a919b9680760a909827c5ab49aecb146229b47b245c9c71c2bd6c45fa437490fd00a3be5906971ed9cb40135a3fc2bd93e12735299a46ac87722c545d68bb890940ca93a3235d48cd8f83e2515297484e7b84f3a8d86403af653ca9fd2bada64efc1a7908507f9a7248dc088cc314dfd0ec929659929d57f7eceab75c428d4ec809cc34f73fa327b00070304c9901738d8bd77bebf339dd28c41d5506c9351aa81e69a563e490f51629c7297e4543fa0ac3f299dbdfbf7008d742f11923c0a429e3afd948c1cd9b0fbdb9f92ea7f70ffd37b7b3bdc296535f70922313f1186e694167ec9f7a2acf2ce2ef10d19ac3d5e6121329f93a6a1dc09b10e7108792494172639a5a40af1ee39cd23e8463ec7648f741916416816c899a316a459a794ae241c1fee93cea166072461b31d427c2723879d168d6990f059297d7940b68846ced01e3e203bb3438ec7ce2ead0f511e9896753e25a5faf01e392d07e7f729750668c42de4a4934b9091fe20dc7648f6a60f491553669f7c7072be3ec5481f92b7744e2108c1800345cbd324800f297b4cfc909129da23f540cd48a5e4341e921688174d3d89f38cb877363da745c4c92e395e10e71da89473d296bb645749231d901dda877746aee96c6746ab87e7e0de7bb4c0bab34b6c496c4cb84d2957f830a3dc3e4d07490169afa9ae204f73420bd680f2d9b40e490b319f42e1ef50c69e4c06cc20353ba76c048929c180249369223541ba6f9b8cda8cf40b3954bbc06d4a33fa90142d3c551a02cc07b937141e110f6145fa9c1661a9594eebd93984387f48b9f67d5abba009205b48592592d27cfa800c2635cb48caa6f7c88da59415419b916126ef88d665f668418256ba68391a923525c9d9fd947432591362a43d620eea9d2665e75e9ee7f7f6eeeddf036ed9ce2ed6624010d26afbe71439649f1227d002c1a79fd2349c93074fcdc8a1c91e3c04f7ee52027bff3eac0ce91e920a92905d5a65a0c5546a362307e97c4a53bf47fe2a86302397806cd37d5a16b837dba72c7a0ef2ee920278709fd698ef51aa87c84bdd9300539e7c4aba9c56437789fad4ec9ca225d215b428496e3a919734dd84b433419b9159058b7dca432054b38c3244880b89c969a4a417c95bce77f2ece0fc1e09143a9d50fe9d96b2400b6235ca0c92fb48fef1769e918121adbaf7e01c9d928b4d6120a9a029e5dd894388df0e487f6fef9cdf3bfff43e7ced0974c86c46ce282959b2f539f126bd41227340cb6107c446641b28e605b49c6ce6a7e42791c625bf677f9756fac97a93b13edfbb47d1f5f92e398fd48c484daa87b2d7d39cb4cc3ead15d264918f342306a0411182fb3094333266f73f7d48fef00e680f8b34c9094112015a85211ebcff29989c54e36cba4f9ae321e956ea94fc508a1768ed23bb4f8af4c1ee74f6298640ab239fdea3f5a0ed5d5aa62301a49893d6be293adbcb893d3fddbfff29cf023933e49791f920c469eacf897b27e426903b377d48f3fd90981a8127962cf6a764fc08556a462b82c46a3466326ca4677668a18b3b25ed4c0b6714c190c491e2ca419a7bb48ab17f9f16554838c93e42eae106e5fbe44a4d735a7e21eb45a248ebdddb39658d29b2a505b6fb900532afb4268249dca7e9240e213538f994bc974f27535a27261f9457a6682af7725244a46c4995127ec4960fc838dca749270f6f8f5296e8749f1cd407349c6dca069395a1d5699ab68cc8787e3ebb7f1fbc7480663be793e9bdf329697898c17df026453664541f7e4a5127516e879711cf29b4a46c03b90453ccc27d7230c9a2ec6cef9191fa7486719e8320bba403a69f92e2a265276a760e03f38056f429c2ce490ded50dc04e540611191718f04f31ec5431465022d381219a9760af072d1e4a42576693c9f922d8369db85eefd94e25ef239cf497191d9bb87214cc9459aed9256cb7768a1891889b430ad8e6e937b935166e3c11ef1259a3d3cd821c251d4764088539082c92289a558e15e46ba92d67421804443723b298e20a84437d869f2a2496ef6c914ecec53e8761f02784eabb694e021dc2838a421ec12f71214f24390cd200b4a8da9d92ead87e58860c965211d42defd76467eecf6ee2eb1dbc1947c5ff61c8809f668259a3c58a836f2da2828a62927a5f369fe805e3820a541cdf6285df0297936dbf73fa555418a354987904b8ca8f6d38c0872400e2b353ba00083c218f2c4c9e5dea6b1107977c831a3e4cbbd3db2ac7058d02ca7e88e2cecf68c2248e25e324b130a02b7c93b2107909cbc07530820f104d940728a761f02b73df2a7c82ed00afb834f774849214f86c922654609a809313fc90735dba32085fc0ffae7608792210707b3fb3cf5e7b48ac8d107052ee4ae908da439a5b58e1d5a4a9d90a4d16c5133d2c3d3dd19857434676417c8ba52c04eb230dd2399a19ccea764e8a819c929a5e9491b3cb8479a83bc5b9a2c12f4ed19addf9f4f1f7cfa706f8a914ec9f7d9d9a39924ae246f708f44719253384e8bf63bb4ea7e7fe79e06291489d36ae6f6035a81a77150926242cbd5c4e93be4bdcd682e763184fd4f89b870b6c96b2168e7c41c447e8a76677b148767b4567c1f22432bf5b4604c0902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf3fa1383ba34c1bf166969f4f30136c171e503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83ca4756ad2f60ff7c06fe41b9ecf48d96fefcd305953e2cdc90159f29d9d7d4a4d90aea08c0435a37cd71e5ea1a09f88b74fb6003a9de2fa035a7d265f6a97cc0335833ddddb2311a5a08f10bc47a13b05afb4ce36a57c0c119adc03b0e58c7cbf7dca3e113d3f2546220f807c4bcaa24cc8d450f675979c4634a37422310ef105e534887bc14319b94064dff6f609ad1d92261064469c80dc18190d4a375076845a501e8be683c2f32c2727f25334bbf729c5b6a4b4b7c95322ddfb297903938c1c579a09f29726448e731084a8759eef91e3b97b402cbc0f0ad208306672007689ee0f388f44b10f6590288f40890652353be49d3fa474e7f62e59939dfb14ca0bf7929d9d52d2078c44ce2f19fc87841bb98f945da1689a92d9f777218007945b9866a4eb77cfa16a1e52ce91fc8507dbd3fb94973b27ed4279706a767f7797bc249ac4039a0ec2887cb28c5256a4a0c88327cb4836021a89387e871c01ca5b7e4a9683024f6282073929fc1d0aec78293247b38c6c07a9c2bded737223091a053f0707b4f07f7f8fe69ae695261643d83fff743aa3642b8515987a0adfa97bf2ce7727149a9e93d490a6a666338aa3efed91defb342709d8df251a1fec91eaa7288b12b79f9277b8834ef35d9a3872a688b53352f834204a26d054ec11b91fde839563267fb8bb47dc4b2bb494ab21b63c2790443772a5c8d4dfa7708ed2a790ac87a42b29a5429e4306f292634fd699d27f944622ab728f7c917bd04807f729ffb7ff801c5aca75d310c8cb7848913afe210f94426e7281a85946de2d6946b232339ab17d5af123534a03273cc8db7c78be7b700faae6e1f9843286a41768a51874a39eb303128d07d387a46eef93b3fd00b99af329a9e57b34e19442268d446f1323dd2375b7bfb34f2243feee1e70232f8abc3a9264622f92d37d8c94f20724d333e2221accbd09f8ed1e79087b925aa6b0729ffc7d32c0e4547f4aee5ab67bff21f91910c0f33d721a29254e3349b460f341bfcd28c34339771266ca88a2d93e429419cd754ef9ceedfd4fc9b29251276a132bdcdf212024cfd48c32393b9fdea349cc66a4f529e947ba6946134b59610a471e5250b9c3d00e76f6762971b53d255b41b87d4a0c3aa5241cd99c2ca3a87e37e7a9a7c581dd193930db34f5a42da7a41033f2c3e128d1a2cebdbd3d0a39a9198d9b58837876ef1e85203409a474c8a05238762f231ea0e4f84334235bfae98462237241c91ddbdfa1244cb64b3a648f54ed8c3c4a4aad6216280cbf97ef50da64729ff89bf414297c4af8533e2423134c4a2ee7d42b6966d2ea4432d2c8c4bd0f8934a4992996a15c31c550e410b0f343b2401a9b526494e927dc2884236344f9d7fb7b648888a6241260a4fd7ba45fe10d50f69d3a3d2706457a6e7b4a7eeebd4f3f9d9258439c6748b0c2557c40e94782462c45b34bf12959d673a43676b9533209c4a8141bde23a34db380202523de9c924376b0479e75be0f6d49e11639d844769a3f2248463d3f7c405e2d8d3bcfa714a8ed3ec09c3e7c48b240f6637b8f75e401857f9319a5c2c8a64d3f9d9073706f0fcd488551f28966e7c1f90e4dfd3d8a2d0f888edb7b13d2589307f768750872bafb29b1398d6d9bdc2e1ac24392d8870724320f2897430a81dd776ab6ff80329833f2c9735219dbec87d0e218e9f47bc4ef39c13c1797609f4cc90352680f286e270b48aae621451ea406f3837c8f52a57b9c6e3a9892574769d5ed191906e237c27242c68fdc7cea7342913c614bcd1e7c4a84df25a76842e93d8246d16046c110754a432765462944e85e92c407e4ba920922178cbea4d99dc086eccd4881503a81f2fdd06f44fce96c8a080609b0fd3df2dfc964505b128b070fee3fdc9b4d305252f80f2830a391425ac8c013bf9d53f47140a96dd22333d2a1c00d6a8ba69a1662ceb1b4b44bfc4d2a048246b688f28be4c940395032e18056122896212345d0c851a6b0946cefa79fdea76c3afc244023579c5e22e6b807cdb14f9e26d97aa2cfde1e2d005018fce0e12e14574e26855c05ca5bee5348471128493d99025224640c77c8a77bc03a84dc568aa5286cdaa51c2b3112992b9235e252a8f27d22d7641f53ff60729ee7a4db486460b3289aa259a0667b3bf7287b4ac1effd09d8727787e2d08724f5c42764b348cd90fcd32a087941c401e498e79f42007728ebf39086bd4d4e1408422e2fad7d1013ecd36af00e4deaee3dc40bf7484391eedba15545f291c9c1a039259d4df9a2bd6c96d3df0f33a81acaae92dc934a38a08921e54011dec1ee038ace66d34f3fa55e487ad1ec7c36a3540771e45e469425a927829c932b45f9c3fdfbd98c62d503ee748782144ad191ec9187b7ff90464a0688e49494eda76469493a987b29110e81260783dcf1fdfbc4210792fe23c542ea85d893e7f4fee4c11e45e534899442d8a7c88ad420222e1a1768bb430b8bd4ec3ead5e917e21df891e1a2929238c91f293e7a40c28f8b9c7dc4b94211a92df734069606272ca8750521bb1f394381e89d60c534f4edede43282e325d841be523c83a939b377db843d9827bd4a598368a85f63fa5008aac0ae937ea83b4334dca64273b2733bebb4f29206af6298566fb9459d8a6f551a21692970f334a8a90f620a5b54306fa534c3dc5bc24cea41c28d1431c42de3f412345422240d9effc53726cd08c7020c12268b40e40b86530940ff6e81fb23dbb53e22b0a1aa8196579681182accff43e89179197c4809862fb3e1936ca7dd36cb1e740d116cd15f5778f9c421a2979e7882509da2e29e229e51476c16f942e7ef0e98cfc5ed2ef3452f2f34992296d42584e2976a5589867e153ca965144486be2b40a43713df9ac34046261521e248de4fe3ec49c5292799fa6818c06e9321a02458907b0219432219f3ea33cf92edc95834f29c0a07c33658fc905212e2143499e1db9ee9f52b83da30c2c2fdfec610115e9e287bbc8711d90af4723253d4671c21e7d738f02606a969d93a1c05c93d160b624154da901d2ac64db0fa8fff35d34a364c8bdfb942f241344b113a96d3246f769a5e153cab3cf287333a310919a51e6ece143129b6dca691141a817d2a7c40907b4e07a4eeb4a93c9041cf2e9349f4d3ea51c474616823884e2b7c93965031e501281d60c0e28a6838a263d4c3e28a5960ff6880ca46e88d0bbc4f39f929db84f70731902453433caacd39c9e9323b84f5424cf9818947cf67bd9fe4364f6310bb4a64fb6001a9e024862723209d91ef57c6f97029e73cab9933c5333d2c4a47dc9d84e298ea79924de7c3883b0de7b4061f97d788198ac07b412406e0e479ac46fe47812bf11271031290941010e6580a9d943f2cfefe79f1219a660247264486229159ad12210a1479efa1e22a3039aacfb39f900f73e255dbf3f254253344c534c49117259881c2c0b13d2f364bea6db147cd14877e0d550144959bbf3fbb3bd3d722566c08df27a530441944e2153babf434c8e450522cd748782cd3d9a498c9494c3748a089d3412096046da3283009eefee119b671449ec434e73f261c889a4e5095a9020ee25993ef894b4e5f4214569a4d51eecce801b65731e525e189e032ce084064901c643cac9ec909b47f2b4770e68946b21cd8bfc524619530ab349bd4e683eee93b34d863ba788064c4e1667760ee924ad4bfc7640f33121f1a6e1d270c81599108da8196914923c4a91937da559a05420b92b948e21bb3cdbbd9f13de3cf564e10849b2ce0f491d523312784a20ecd2b2d73e6565296d4f2e2435231a923e22034a091ce2b719f905e4ae908a7e4079cfe9cebd07e45f52b3f36c4aab69244f941321e2910f4b9a9cc2bc73caa97d4aeb28e7c428d48cdcc2dd8707c48ce486116ef994c4799742295a63d8a549a500ee1cb33025a703bcbcfd20a75098024462b53d1a38f954070fa60fc830e410999d87e4d59359a33c1989fe3e7db99d51d2911c25cac0d1fa242555801bf947249714039c3f80097a48195a5242241a94a5211ebd478113084299bbdd839c0cc1a7e7500e44780a8af7c8dfa0ec26798a7be714f753334456c4e4b4044cb68cb425c2e31dcafc5374fe80dc8007f9bd0710409a182c2e93439b51d44e7109e1464efdf639c5e1594eb9a8f309942aad55122529bf48c94aa21ba9199253b2ce93fbb45ebb4b7244ae3e35db212e3da79551f21c6001e16c53fe942c39091c851764b3f7d0295912524fa4aec8eb22463a277d43c24dc4cbcff7c973d8234901dd7629d1f6902225fa925256fb0f28d87e486cb14da106b97cb307b42e0db6a4a151ce9132820fefc3539dd2b207d942824bc6f43ee5302896c79cdea7d51b720dc909a70c0e91975a3ca4fe69816042a1d1414e013dd4607e9fc2b25d4a6fec926f43b240083e249d49dd7fba3b25a531dde35c0d695eca4e82bcbb245e34f594e88013773fa79c37f15bfe8009f270466a8a5898ac0f8558fb9f5282f8e13df28572f24373caf493838fa9df25f79742b803223b4530646588bc9457213d46dc4c13455301dc1edc9bde27034d398707e0de87a485c94fa17fc84fbbff802c3ba528a919a20b724508d0a7e4f2126e34017b64c92905f62989072d5a9cc3ca90e521f2524ee5fc5310849c49a857ca763cc8484228b37a7f8a66f0211f52ce803a852b8594c7c11e99cc6cfa90bcdb07340f07e010d299142d12e352c44d0439274339a17888525ee7f76664d628bdc7b89dcf3e9d911e833d25a292d5235124d3f690e289dd07e4a9920345cd8891290b3b259f93943531f9940c09311a118f9636cf493cc947a566a4ada714039135a0581423a558863272143e9cd32ada8c14cc011cdaf37b34f9f789ece7fba24ac97eef910052b44022fc69467e2ca051fa669f326194c825cb43d0c822515678878640468c4c1805333cf57b201bd932262a7d4e467c8fa46236251541e99a0794cea66624099f92ae2747170b15646548f7ee90cd7a482e2769344ab7f19cee92a5bd4fc92212673241a47b494eefd1c0c94122a574ffd3fd7becaee4e79499a7f88110271b82a815b34e6a898cc0949617c9d670a7b47477ef1e65472998250124ee019620484e0ed7435ad660dd3ba1197eb043013b454834f50724370f9162c9f33d0aad66246933744ab24eb3401ed73d0ad294df907a2542dc3b27bff0538a36a9d97d0ad6c91acdb677c9be6e53e047e4dd27d1d8cf68e996cc1fcd16464ac10fa50009714a5453a7f7288534d9a70868976259f20449e572da84f2b9646e48d9ee51ca83c499388f2cc7fded19ad4f3ca03c2bc5131802190d7a9ba4e5530aaf68b2482365f7c9899bdddbdfa548efde34df07f7e6943a9812b39095818f449965c28d222ecab592bce7e47c3c04340a0a481593d4d3421ca9418a1029062436994cc9d8dfa3f86d27036eb478f1701f4a3c7b88940e6531319d93eddd19712e297c1a3aa091d12403481105bd460248e12ac9024d312d2d4fc9ce90477900dcc8bb278ea04435b921c4bde44b52d4466a7046a69e1610eec11252330a6269859bbccf03c400fb130a8f48d1938ecd685289ce483552b39cdc5df20ac818918edaa6f0853412457fe412ec5042fd3eb1d7041a89388cf27be8f401f9d994f9a44eef9109a3808842307222f7cfe1bf4db1c8453e179963988f0332099387241553a214d98b5dca7a604ec91398de27c1ddbe3f216bb0ff90122814fd138750ca727f8f3ca55df67bf3fdc9fd694671240905f105a9e16d127f8a0b4869d0fa0499d3193aa5886046ae32d9598a04c918118d2910202530cbc8927efae95ec6fc4649ac3de2bc6c9b52a144defbe401d310ee93829ace321292bd07fb98acfb34c5e4b4515e8e0226927a4a5e4e2866a51cc01ea901729cc8394233620a8aef08a34f9190b84ffd91ff469946f25e265838209f819ad14ce619795fa4a28971c9952251248ed93e271b4208512e8e19899690688a2942cfc82fd9dea73180b214a43cdcb94fac4c294ece87dca788873a263e9c92d7b6bf4ba4999c93f99892134efa998ce67dd88583bd49fe609fc2b44fef238ecc28b6a0f09f3c8429b96e9fee9147748091d24bd9944c0e89013977641168309473a55ccd3909f301e583f63059a482c95a937f42e1280d61f721b9bcc4b2642d2934a4f45d4e5e1735a305da1d5afc407047d6609f52c4443792c24f49167789272990066e3be484dca3d4daf6ce2e05d0942c25fd46aa6e3b278ebe8ff53132bfd46c9a4d480dd048673479c448941be2666435ee93c1b847ca1fd0b27b394d1db920842c290712278a6ac8a8ee9014de2741a36ed9aba1907007298b735e70b94f1c493955b29bb452403ec1bd1d5a97a666b44875308537f8e93e70bb4fe24ce28489bd779f2c31a599f6310b3bb4467a8ec88fd23c845b4efa86f2e8e7f416199519257e666cb3287a20af1a12b043fd91d221234ee3dd9eed50803ddba535134974ec1f20474bf1c201cd1305dff40259eeed1dd2819417a71cef0c8c442a980c18cdfaa753b8c7392d06d1fa022d28d362e0944289ec410668fb19997072cd087b4a7b93ff46fcb64ff6f401291cf2553edda1141535a3552ff245694e77ef9399df9f92434b59ec2979834402f2dff769bd809a4d293aa0f4158939a2525235646566048d9c288a9677f63f7db007ba3db847327e1f2293138df7f78964d901252928e0a1ff3d7890ede61040ca4accc80b7eb87d3f03ddee91bea155411a11852594da2157620f73fae03e79acf7c9ac907410bf4df6c87547e67f4aee1db1cbde949605a8d9fe39b9509f9237b043d698e4f4218d94b8823cf95d5aa0bc4f33348564e5bbb4daf380e674e721a569288ea6650862d3ed9c0840bc4baf4da0434814b329e53448e183780f6180413c0ab38920b46843cb8468466b88bbe456116ee03772c568082468b4d0766f4a29004ad302da83e91ed9708a87800ce146498ac9845426ad21d2bc6464790f300be435907a25e34ed11f890c2966a21ba50aef912f401fd3fc7f0ac9a23ce38cfc27329464ae490d12dd1ed2b7107d8a3ef6c95b7980a94762825626f36df2f8896ec40734045a5aa239a170f2e0de394d2c35a34c35450e140fd1c460a444100a6b6901940673ef3e117f3a85ee25a67a406c4fa1f739a6fe2181a495d7e9366967529ab44e4ef9576ab64f29d89cc202c29958581869171690864b19f99c467cefa3efff925f426a246fa675b16a8b6af9d1a38f8ecb323df9e4f82c7dbd9ed8cf9b74b16eda749e5de6e9aaceb767f979b1cc67d2f0c5ebcfd37a5de6cd384d5fe7793a6fdb55f3e8eeddec6d365e347797795b34d5dd6573d1a4e7559d2eaa3a4f67799b156543782ee8b759d6661f3dfac51f4deb3c6bf3d9936bc283b883581e7102a1bbbd0fbfed2139cbdbf7f648b74f28587ff029445e5ff912a8efedd0f7b4b2b7b7ff66f7c1a3bdfb8f76f7c7947aa594edbd9fa2a6eb15f5f37ed0f5150f3a71f5ee9b9d9d47f7f61feddc1bdfa3989962c69ffa88c8982f6974d37c912fdb2f2a327f8f3e7a9a9f67ebb2c597c58cfebebbaaabcb6296d7cddd2f8a695d35d5793bfe225b6617fcd6dd85fdf5f3ba5aaf9abb9493a4b420591be24a186d4a191f1c90474069598a3cee539ae6e15e14e8f1ba9d5775f1830c9377775595c5f4fab8698a8b25a037775fbcfae2f5f6eb272fde6c3f3d7b71ba4d33b87d4979061a717bbd02eab70645af2cb3055e793108b3aca6fc3635ca888deaac2cb2a622b879d6b4f47d73ddb4f9e269840930136402c9baec918344f946f244488848313da475db7b24fd0f1158da57de08f6c7ab15a1297dda6f8f5bfa4626d16791ddf12e99f0039a434294f0a1b92bce0b00a3e6b7ec3f7c2f8a84dfc4c3c467a7bdf10e85071463103bfd92d12f269ec9976dd1121ebff8a3555d2ca7c52a2bcfc048944fa0e43305bc13327fe42450a03999911245428618e67c6fc268b5f9325bb6fa06adbc537287d245f00176c98d253b39d9a6f4ef74b643f10bada1e10d41fd354f88cc723e03ff1293adf2ba2df206d8cc8a665566d72f64e297f5a2d926f1debe2451df6ed613fad1fcfebb63d829e1171284625980128c4c9465a37270f1b320070e99e62ee5abc8664c68c18b62d87c0fccda4c69a4ef85e47b082bc15f653591ad25b8a0645696d5553e7bae12c29f5d66e59a30f8de47108f75d39497a4a709314f1f9fbe9b96eb867e095f203f9c161329c0a6bc00a140792e0a6c6829f0fc1e594bf2ad48196296c93da5953cb2cd14ff92052197947c33724a289390ed92757c30614cc9e820f83a277f9bbd02ca8b3c9c90af4ce96a5a2fdca1f4da0404a37074728f32d3db33cea8938d27d6a2d4def90e6562c8ab98ecdc47b35dca05ef63f584fc44585ef269c814cd285d7380f4cc8c12b37045a6f73e3d9f5192080e0f312ae5b2a9192504f6f2fb14a6ecef90d70f73bfb74feb82b4b688c562726c66b40891512695b2379fe639b9f8706db8192dad6494bcdf9b529a633f232cc921a24513ca725054492985fbe89452c407b402424b0c9442a15880863bd9a1e4d8ee64b6bb4721ffa7e26f7f4ae9c48714ca92574f2ed53e10a4d7c8c5f9f41e053c3be4b6b0d345a9b3bd0c19f5f33d642728114243201b4cde38799d0f1e4cc9da50b3ddfbf7eeed50d6990c0fb93394e026bfea9ce2948c42524ae8dc9feddf837bf980b2b5e42c503ef00165f0f7691d8372041432eed1da34e5b9f2ddfbbc144869e04fc90ba4c0ed53f2699083a059008d77335afacbf6c81f81fff310493f8a6cb60f66e463ee53fa97527e1459dc7b48713dadcfd0c8e063506a88c264cacf23d14a43a014159945f2c11ed08a1cd16ab6f72946fae9f4feeea753e2764a4092c7429109026c8a4766bbf0ce3272f43059e4b7e4b4ae4829265a3326c9a0b619656db72906da47483ba30c2135db99d0f0313b2444340bb4ba416c492b9f18e7bd8c22084a3352338a84324aeb52fc4201064123bf8a8203ca75ececed11008aa979a43b53ca8f10792826a58087589ea69e623bf0316137cbce293d4bcda63925427728e94db10bd1ed3ed1989044f77b7bb4a0bc4ba958b87004799fc840cb22d35d12993d0a7828e54b39225a2aa31cfd7d72cec0e4e7e49aed50ee9f44891401a555e18f1213cc3edd3ddfa1f411a504305913b229070fc9d7a5c0909a4dc837cf40465a52a489987dfa29e5e8a9d9a7b46a34dd2168d9943892522bb432445c43539cd1445174459129357b709e510446ecb34789038246b963721b29d9484bcfe7078419d1899a117f4f08b587dbe79407a039a580f7e1017113a544f35d8a24e93d1084849852cd240bf98c12bae4b692233d21a71b21e06407abf43b707d697d65f220239bb33321d77e1f39620ad86816a6392d7d9066d865134469404af0507f078432d19e9c55ca7ad0dc4d28053e2582dedb01bfd112f9c3c9847204c400841129229a050acb087646315a4e12829152e286589410a7656662cb9cb457b64fb1e0bd2971f983d98c820b8cf4c1c17dd0878640ce1ccdc2390d618ff209b4b6414c743025a010670a1268d595b28b94a32382dca7fe6892e92d72e6f766242ff40735a3c077464c4ac99f9c2200ca40c088928ea575f8c9ee2e39d97b92bfa2f42f6543c812d342288d94faa3b509eaf9530a043ea5f54b4ab953335acba3e086027a5a352201fc94e474422b68dbbb94e7a341ee4f69e5919a11360fefd127dbe7942721a987aad9211784b896bce58cd4e07d24de1f52e6f52185f5348984e0fe431ac743acf1dd3fdfa10406ad8d530c4acd48f14c689980b261a49ea9535a36c87628382273f180668086b78766944522e7864836b94fa9046a4aa4a15536524be4155328799f72b0d48c342f29617285283d458aeb9c325c943f252e7d00b788f2dbf777210b077b14ecdd273edca5609e70a3d5ec83735a429f10a7d130273b0f32744a192b6a4601f644b213f7e8b7034a9aeeef21dd7bfef0e16c0f1c42c12e258cc996dd27c925fd467e0f2d5211aa7b88ffe943ca9753b3fd3d42618fbe242ad348490d6d53a04cf916522ec4d964420e300b942023efe721a544b084bebf4f7ed8845208f4276552a91fcafff2104829dfbb4751fdde399bb6fb98fa3dcac891bc90ec50027b02434959448ac528d4a2a5711a026923e263824b166a7787523f641b30a714739369a0b4ca3d0a2e892d49f792db417f529a8e320139c927e69416960e76f7f6f6697640907d483d2d7cc0c3a37407691e32be68b63379f8803ad8debd4f1851f04a13409674fbc1bd7312035a1ea4b09d9acd48fe0e1e922d23be2568bbbb14b36794daa38f8885888e841435a355c11cc980ed3d5e7f3c27b50432903dcd0f88b76812764110b286b41c4b4a95d2aa445ed2a56401695268d59a98e721f1d44334a345e87d5a7ea41cc83d32dd9446214f95987e7bba0fcf746f87622fa81a7247ee91e2f874fb01cd314d3da512a929e95832cdf9ec3e3100736f76ffde2ee14c09e41d5ac1dba78c10f11059725af2cb76ee515efdd31dcc0211e73e99cd03528f94daa1909fd8fd01e663b24b2991877ba41e30d27c9f96ff1f904ece084b9253526d44d58c509d7eba9b6714f8f1aa5c764e2f534e6f9be68a464ac945e210b2107ba41627346402037ea33cc0a7b3fb44063284841b8d070481c452de8f72ae0f68099d9acd886d1e9222a2c081669d923f2480c431dbbb7be4033ccc29473a0541cecf1f526e91be7c7000dd4bee0425a6c8e8dcdbbfb74f1e1d19861d34bb774012b44b4ae38004719b52b1647689778861285d96ef51c31d8c74ef80ac1105fa944f98d01068d0e4d59060ef51e23edf252b49fc44cdc8b8d39a2e19505a8820c469bc70a568592dbb4fd91062937b0fd029e9a529a53bc91c938749cdc8453b004b4d1003d1b2c2648f3512d93c922d4a0fe5585324fe22bd497a80d64029cb47cb1fe7a40da81965c8c8f6919893ca245543be13292eb25ec485a46448d591a9a166c4c6f729ed433e353cc77dd2693404d2b19f52868b563e267b0f3e852c3ca02579b2f5841199639a7a5a273ea03c202563cfcf793d8518859a1d9073f8291691b30770304090ec532c58edde3bdfdf99d272f114aa2603a2e4bb6eefd1da14e9214a5d5276899cea07949725a5b377ff1ea091ee2542924741c853a7bc004cb9f8ed4f49f53fb8ff29a506b853ca3bed1344627e220ccd292dcd91ef4579bf9d5de21b32587b9c0327329f93a6a1d092588738843c12cadc919c52cc49bc7b4ef308ba91cf31d9235d863435cd023973d48234eb94124a84e3c37dd239d4ec80246c46cbc5db3b1939ec9401a141c267a504d301d9221a39437bf880ec0cc5e8db3bbb94c1a74c1d25de291626e5404ecbc1f9fdbd7b7b8046dc424e3ab90419e90fc26d87646ffa905431e55ec90727e7eb538cf421794bb47e4faf7f0a078a161049001f527e8ff8212353b447ea819a914ac9693c242d102f9a7a12e71971ef6c7a4ecb3c935d72bc20ce3b5029e7a42d77c9ae9246a285de837d7867e49ace7666b4be730eeebd474b603bb43a4db10ca979527644908cb2af341d2405a4bda6bac637cd092d5803ca38d24a11a5ca3f85c2dfa19c2a990c98416a764e611a8929c180249369223541ba6f9b8cda8cf40b3954bbc06d4a33fa90142d3c551a02cc07b937141e110f61cdf09c96c9a8594e2b8e3984387f48d9d07dca2ed304902da4a09ba4349f3e208349cd3292b2e93d726369ad84a0cdc83093774499f33d4a19d35a042d1842b2a62439bb9f924e266b428cb447cc41bdd3a4d0e2749edfdbbbb77f0fb8653bbbc8968320a4d5f6cf2972c83e254ea014eea79fd2349c93074fcdc8a1c91ed07a394d3da518f7efc3ca90ee21a92009d9a53c302d7751b3193948e7539afa3df257318419b904649bee53e2f6de6c9ff29c39c84bebd79307f76915f01ec5c0445eea9e0498329953d2e5b45eb54bd4a766e7142d91aea0652372d389bca4e926a49d09da8ccc2a58ec531e02a19a65143a232e2426a791925e246f39dfa165e4f37b2450e8744219525a6c002d88d568459bdc47f28fb7f38c0c0c69d5bd07e7e8945c6c0a0349054d29334a1c42fc7640fa7b7be7fcdef9a7f7e16b4fa0436633724649c992adcf8937e90d12195ad72665f490f4d9a714f3025a4e36f353f29348e392dfb3bf4b6bb164bdc9589fefdda3e8fa7c979c476a46a426d543f945ca2453a7b49a4393453ed28c1880064508eec350cec898ddfff421f9c33ba03d2cd22427044904284f4e3c78ff533039a9c6d9749f34c743d2add429f9a1142f50763abb4f8af4c1ee74f6298640f9eb4fef51c67e7b971652480029e6a4d5498acef67262cf4ff7ef7fcab340ce0cf965643e08719a7aac664fc84d20776efa90e6fb213135024f2495f7a764fc08556a466b36c46a3466326ca46768d196fc486a46da9996362882218923c5958334f728cfbc7f9fd2de249c641f21f57083f27d72a5a63925c8c97a9128d28ae4764e49358a6c6909e43e6481cc2b65ad3189fb349dc421a406279f92f7f2e9644a2b79e483f2da014de55e4e8a88942da952c28fd8f2011987fb34e9e4e1ed3dcc3374ba4f0eea031ace362d1b9295a1f5439ab68cc8787e3ebb7f1fbc7480663be793e9bd735af6df8519dc076f52644346f5e1a7147512e57678a1e79c424bca36904b40ebe3343e7230c9a2ec6cef9191fa7486719e8320b4ac4d6b59a4b86861809a9dc3c0903d271f89c6489c4a71139403854544c63d12cc7b140f519409b4e04864a4da29c0cb45939396d8a5f17c4ab60ca66d17baf7538a7bc9e73c27c54566ef1e8630251769b64b5a2ddfa1a5006224d2c2b47eb54dee4d46998d077bc49768f6f06087084751db01214e410a268b249662857b19e94a5a758300120dc9eda43882a03ed8264f8708b2bb4372b34fa660679f42b7fb10c0735a57a3040fe146c1210d6197b897a0901f826c0659506a4ccd7669c52247044b2e0be910f2eeb733f263b7777789dd0ea6e4fbb2e7404cb0476b85e4c142b591d74641314d39291d5aeea7170e486950b33d4a177c4a9ecdf6fd4f69dd86624dd221e41223aafd3423821c90c34acd0e28c0a030863c7172b9b7692c44de1d72cc28f9726f8f2c2b1c1634cb29ba230bbb3da30892b897ccd28482c06df24ec8012427efc11402483c4136909ca2dd87c06d8ffc29b20bb406fae0d31d5252c89361b2489951026a42cc4ff241cdf6284821ff83fe39d8a16408ad4fdfe7a93fa7751e8e3e28702177856c24cd29a5827768b16b429246b345cd480f4f776714d2d19c915d20eb4a013bc9c2748f6486723ab4480cf2929cee92d49147718f340779b7345924e8db335a613d9f3ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7709c965577685df4fece3d0d522812a7f5a6ed07b4464ae3a024c584161489d377c87ba3d5f37c1743d8ff94880b679bbc1682764ecc41e4a76877b647717846ab79f72132b4964a4b7a942020e46908e4f29100921f72efe1f453d2593bb37b0fd0ec8098fbe103527e53921c82f690523ae42991dcec53484509c487f7c0bd148690692719b9b74f4926f206c12114123c200787683bfd74b20bb6dc2125bc47d24db92852f3fb138ab333cab4116f66f9f90433c176e101651329754280c874d23f245414d4901aa4059dfb945ba06c2970db271f82343ed9321260e23712aa87c44424320f692591b4fdc33df01bf986e73352f6db7b334cd694789356f3c905ddd9a7d404e90aca485033ca77ede1150afa8978fb640ba0d329aea725f49c7ca95d320fd40cf6746f8f4494823e429096f0b62978a565085a6ade2342937b00b69c91efb74fd927a227adecee930740be25655126646a28fbba4b4e239a513a911887f882721ac4bde0a18c5c20b26f7bfb84d60e49130832234e406e8c8c06a51b283b422d288f45f341e179969313f9299addfb94625b52dadbe42991eefd94bc8149468e2bcd04f94b1322c7390842d43aa7455c8a4f0f8885f741411a01c64c0ec02ed1fd01e79128f6a10c12e51128d1402a7a87bcf38794eedcde256bb2739f4279e15eb2b3534afa8091c8f925834f8bc5701f29bb42d13425b3efef42000f28b730cd48d7ef9e43d53ca49c23f90bb4427d9ff272e7a45d280f4ecdeeefee929744937840d34118914f9651ca8a141479f06419c946402311c7ef90234079cb4fc97250e0494cf0202785bf4381dd01b10d8534d42c23db41aa706ffb9cdc488246c1cfc1012dcddedfa3b9a679a589c510f6cf3f9dce28d94a6105a69ec277ea9ebcf3dd0985a6e72435a4a9a9d98ce2e87b7ba4f73ecd4902f67789c6077ba4fa29caa2c4eda7e41deea0d37c97268e9c2962ed8c143e0d88920934157b44ee87f760e598c91feeee11f7d20216e56a882dcf0924d18d5c2932f5f7299ca3f42924eb21e94a4aa990e79081bce4d89375a61094d2486455ee912f720f1ae9e03ee5fff61f90434bb96e1a0279190f2952c73fe48152c84d2e1035cbc8bb25cd4856664633b64f4b21644a69e08407799b0fcf69251faae6e1f9843286a41768210d74a39eb303128d07d387a46eef93b3fd00b99af329a9e57b34e19442268d446f1323dd2375b7bfb34f2243feee1e70232f8abc3a9264622f92d37d8c94f20724d333e2221accbd09f8ed1e79087b925aa6b0729ffc7d32c0e4547f4aee5ab67bff21f91910c0f33d721a29254e3349b460f341bfcd28c34339771266ca88a2d93e429419cd754ef9ceedfd4fc9b29251276a132bdcdf212024cfd48c32393b9fdea349cc66a4f529e947ba6946134b59610a471e5250b9c3d00e76f6762971b53d255b41b8d1b2dec19492706473b28ca2fadd9ca79e16077667e4c06cd3d493b69c9242ccc80f87a3448b3af7f6f628e4a466346e620de2d9bd7b1482d02490d221834ae1d8bd8c788092e30fd18c6ce9a7138a8dc80525776c7f879230d92ee9903d52b533f22829b58a59a030fc5ebe436993c97de26fd253a4f029e14ff9908c4c3029b99c53afa49949ab13c9482313f73e24d29066a6588672c514439143c0ce0fc902696c4a9151a69f70a3108e8c11e55fefef9121229a92488091f6ef917e853740d977eaf49c1814e9b9ed29f9b9f73efd744a620d719e21c10a57f101a51f091ab114cd2ec5a76459cf91dad8e54ec92410a3526c788f8c36cd0282948c78734a0ed9c11e79d6f93eb425855be46013d969fe882019f5fcf00179b534ee3c9f52a0b6fb0073faf021c902d98fed3dd6910714fe4d66940a239b36fd7442cec1bd3d34231546c9279a9d07e73b34f5f728b63c203a6eef4d48634d1edca3d521c8e9eea7c4e634b66d72bb68080f49621f1e90c83ca05c0e290476dfa9d9fe03ca60cec827cf49656cb31f428b63a4d3ef11bfe704f35c5c827d32250f48a13da0b89d2c20a99a871479901acc69959352a57b9c6e3a9892574769d5ed191906e237c27242c68fdc7cea7342913c614bcd1e7c4a84df25a76842e93d8246d16046c110754a432765462944e85e92c407e4ba920922178cbea4d99dc086eccd4881503a81f2fdd06f44fce96c8a080609b0fd3df2dfc964505b128b070fee3fdca3a5686a460aff0105663452480b1978e2b7738a3e0e28b54d7a64463a14b8416dd154d342cc3996967689bf498540d0c816517e913c1928074a261cd04a02c53264a4081a39ca149692edfdf4d3fb944d879f0468e48ad34bc41cf7a039f6c9d3245b4ff4d9dba305000a831f3cdc85e2cac9a490ab4079cb7d0ae9280225a92753408a848ce10ef9740f588790db4ab114854dbb94632546227345b2465c0a55be4fe49aec63ea1f4ccef39c741b890c6c164553340bd46c6fe71e654f29f8bd3f015beeee501cfa90a49ef8846c16a919927f5a05212f8838801cf3fc5308e00e657d1ed2b0b7c9890241c8e5a5b50f62827d5a0ddea149ddbd8778e11e6928d27d3bb4aa483e32391834a7a4b3295fb497cd72fafb61065543d955927b5209073431a41c28c23bd87d40d1d96cfae9a7d40b492f9a9dcf6694ea208edccb88b224f544907372a5287fb87f3f9b51ac7ac09dee509042293a923df2f0f61fd248c900919c92b2fd942c2d4907732f25c221d0e460903bbe7f9f38e440d27fa45848bd107bf29cde9f3cd8a3a89c26915208fb1459911a44c445e3026d776861919adda7d52bd22fe43bd1432325658431527ef29c9401053ff7987b89324443f27b0e280d4c4c4ef9104a6a23769e12c723d19a61eac9c9db7b08c545a68b70a37c04596772f3a60f77285b708fba14d346b1d0fea71440915521fd467d9076a64999ec64e764c677f7290544cd3ea5d06c9f320bdbb43e4ad442f2f261464911d21ea4b476c8407f8aa9a79897c4999403257a8843c8fb2768a448480428fb9d7f4a8e0d9a110e2458048dd60108b70c86f2c11efd43b667774a7c45410335a32c0f2d4290f599de27f122f2921810536cdf27c346b96f9a2df61c28daa2b9a2feee9153482325ef1cb12441db25453ca59cc22ef88dd2c50f3e9d91df4bfa9d464a7e3e4932a54d08cb29c5ae140bf32c7c4ad9328a08694d9c566128ae279f9586402c4cca83a491dcdf8798534a32efd33490d1205d4643a028f10036845226e4d3679427df85bb72f0290518946fa6ec31b920c4256428c9b323d7fd530ab7679481e5e59b3d2ca0225dfc701739ae03f2f568a4a4c7284ed8a36fee51004ccdb2733214986b321acc96a4a22935409a956cfb01f57fbe8b66940cb9779ff2856482287622b54dc6e83ead347c4a79f619656e6614225233ca9c3d7c4862b34d392d2208f542fa9438e180165ccf695d69329980433e9de6b3c9a794e3c8c842108750fc3639a76cc0034a22d09ac101c57450d1a487c907a5d4f2c11e9181d40d117a9778fe53b213f7096e2e43a088664699759ad3737204f7898ae419138392cf7e2fdb7f88cc3e6681d6f4c91640c35300494c4e2621dba39eefed52c0734e397792676a469a98b42f19db29c5f13493c49b0f6710d67b0f282cbf0f2f1093f5805602c8cde14893f88d1c4fe237e2042226252128c0a10c30357b48fef9fdfc5322c3148c448e0c492ca542335a0422f4c853df4364744093753f271fe0dea7a4ebf7a744688a86698a2929422e0b91836561427a9eccd7749b822f1ae90ebc1a8a22296b777e7fb6b747aec40cb8515e6f8a2088d229644af77788c9b1a840a499ee50b0b9473389919272984e11a193462201cc485b6610c0f3dd3d62f38c22897dc8694e3e0c3991b43c410b12c4bd24d3079f92b69c3ea4288db4da83dd1970a36cce43ca0bc37380059cd02029c0784839991d72f3489ef6ce018d722da479915fca28634a6136a9d709cdc77d72b6c970e714d180c9c9e2ccce219da47589df0e683e2624de345c1a0eb92213a21135238d4292472972b2af340b940a247785d231649767bbf773c29ba79e2c1c2149d6f921a9436a46024f09845d5af6daa7ac2ca5edc985a4664443d2476440298143fc3623bf80dc1552d10f28ef39ddb9f780fc4b6a769e4d69358de4897222443cf26149935398774e39b54f691de59c18859a915bb8fbf0809891dc30c22d9f9238ef5228456b0cbb34a914c09d6316a6e4748097b71fe4140a538048acb64703279feae0c1f40119861c22b3f390bc7a326b942723d1dfa72fb7334a3a92a34419385a9fa4a40a7023ff88e4926280f30730410f29434b4a884483b234c4a3f7287002412873b77b909321f8f41cca81084f41f11ef91b94dd244f71ef9ce27e6a86c88a989c9680c99691b64478bc43997f8ace1f901bf020bff70002481383c5657268338ada292e21dcc8a9df3ea7383ccb2917753e8152a5b54aa224e51729594974233543724ad679729fd66b77498ec8d5a7663bc4a5e7b4324a9e032c209c6dca9f92252781a3f0826cf61e3a254b42ea89d415795dc448e7a46f48b88978f9f93e790e7b2429a0db2e25da1e52a4445f52ca6aff0105db0f892db629d420976ff680d6a5c1963434ca395246f0e17d78aa535af6205b4870c998dea71c06c5f298d3fbb47a43ae2139e194c121f2528b87d43f2d104c28343ac829a0871accef5358b64be98d5df26d481608c187a433a9fb4f77a7a434a67b9cab21cd4bd949907797c48ba69e121d70e2eee794f3267ecb1f30411ece484d110b93f5a1106bff534a103fbc47be504e7e684e997e72f031f5bbe4fe5208774064a70886ac0c9197f22aa4c7889b69a2682a80db837bd3fb64a029e7f000dcfb90b430f929f40ff969f71f9065a7142535437441ae0801fa945c5ec28d26608f2c39a5c03e25f1a0458b735819b23c445ecaa99c7f0a82903309f54ad98e071949086556ef4fd10c3ee443ca1950a770a590f238d82393994d1f9277fb80e6e1001c423a93a245625c8ab88920e7642827140f51caebfcde8ccc1aa5f718b7f3d9a733d263b0a74454b27a248a64da1e523cb1fb803c5572a0a81931326561a7e47392b226269f9221214623e2d1d2e6398927f9a8d48cb4f5946220b206148b62a414cb50468ec287735a459b91823980437b7e8f26ff3e91fd7c5f5429d9ef3d12408a1648843fcdc88f05344adfec53268c12b96479081a5924ca0aefd010c8889109a36086a77e0f64235bc644a5cfc988ef9154cca6a422285df380d2d9d48c24e153d2f5e4e862a182ac0ce9de1db2590fc9e5248d46e9369ed35db2b4f7295944e24c2688742fc9e93d1a383948a494ee7fba7f8fdd95fc9c32f3143f10e2644310b562d6492d911198d2f222d91aee9496eeeedda3ec2805b32480c43dc01204c9c9e17a48cb1aac7b2734c30f762860a70889a6fe80e4e621522c79be47a1d58c246d864e49d66916c8e3ba47419af21b52af44887be7e4177e4ad12635bb4fc13a59a3d9f62ed957a21b45aad93e89c67e464bb764fe68b630520a7e2805488853a29a3abd4729a4c93e4540bb14cb9227482a97d32694cf257343ca768f521e24cec4796439ee6fcf687de201e559299ec010c868d0db242d9f5278459d9246caee931337bbb7bf4b91debd69be0feecd2975302566212b031f8932cb841b455c946b2579cfc9f97808681414902a26a9a7853852831421520c486c329992b1bf47f1db4e06dc68f1e2e13e9478f610291dca62623a27dbbb33e25c52f834744023a3490690220a7a8d0490c25592059a625a5a9e929d218ff200b891774f1c41896a7243887bc997a4a88dd4e08c4c3d2d20","dc8325a46614c4d20a37799f078801f627141e91a2271d9bd1a4129d916aa46639b9bbe4159031221db54de10b69248afec825d8a184fa7d62af0934127118e5f7d0e903f2b329f3499dde23134601118560e444ee9fc37f9b62918b7c2e32c7301f076412260f492aa64429b217bb94f5c09c922730bd4f82bb7d7f42d660ff21255028fa270ea194e5fe1e794abbecf7e6fb93fbd38ce248120ae20b52c3db24fe141790d2a0f50932a733744a11c18c5c65b2b314099231221a5320404a60969125fdf4d3bd8cf98d92587bc479d936a54289bcf7c903a621dc2705359d6524247b0ff63159f7698ac969a3bc1c054c24f594bc9c50cc4a39803d5203e43891738466c41414df11469f2221719ffa23ff8d328de4bd4cb070403e0335a399cc33f2be484513e3922b45a2481cb37d4e368410a25c1c33122d21d11453849e915fb2bd4f630065294879b8739f5899529c9c0fb94f110f754c7c3825af6d7f9748333927f33125279cf43319cdfbb00b077b93fcc13e85699fde471c99516c41e13f79085372dd3edd238fe80023a597b229991c120372eec822d06028e74ab99a7312e603ca07ed61b2480593b526ff84c2511ac2ee4372798965c95a526848e9bb9cbc2e6a460bb43bb4f881e08eacc13ea588896e24859f922cee124f52200ddc76c809b947a9b5ed9d5d0aa029594afa8d54dd764e1c7d1feb63647ea9d9349b901aa091ce68f288912837c4cdc86adc2783718f943fa065f7729a3a72410859520e244e14d59051dd2129bc4f8246ddb2574321e10e5216e7bce0729f389272aa643769a5807c827b3bb42e4dcd6891ea600a6ff0d37de0769fc499c409137bef3e59624a33ed631676688df41c911fa57908b79cf40de5d1cfe92d322a334afcccd86651f4405e35246087fa23a543469cc6bb3ddba1007bb64b6b2692e8d83f408e96e285039a270abee905b2dcdb3ba403292f4e39de191889543019309af54fa7708f735a0ca2f5055a50a6c5c0298512d9830cd0f63332e1e49a11f694f626ff8df86d9fece9035238e4ab7cba43292a6a46ab5ee48bd29ceede2733bf3f258796b2d853f2068904e4bfefd37a01359b527440e92b127344a5a46ac8cacc081a3951142defec7ffa600f747b708f64fc3e4426271aefef13c9b2034a5250c043ff7bf020dbcd21809495989117fc70fb7e06badd237d43ab8234220a4b28b543aec41ee6f4c17df258ef935921e9207e9bec91eb8eccff94dc3b6297bd292d0b50b3fd7372a13e256f6087ac31c9e9431a29710579f2bbb440799f66680ac9ca7769b5e701cde9ce434ad3501c4dcb10c4a6db39118078975e9b408790286653ca6990c207f11ec20083781466134168d1869609d18cd61077c9ad22dcc06fe48ad11048d068a1edde94520094a605b407d33db2e1140f0119c28d92149309a94c5a43a479c9c8f21e6016c86b20f54ac69da23f121952cc44374a15de235f803ea6f9ff14924579c619f94f6428c95c931a24ba3da46f21fa147dec93b7f200538fc404ad4ce6dbe4f113dd880f6808b4b4447342e1e4c1bd739a586a46996a8a1c281ea289c148892014d6d202280de6de7d22fe740add4b4cf580d89e42ef734cfd4302492bafd36dd2cea43477338ab93059fb9482cd292c209c8985859176610169b89491cf69c4f73efafe2ff925a446f2665a17abb6a8961f3dfae8b82cd3934f8ecfd2d7eb89fdbc4917eba64de7d9659eaeea7c7b969f17cb7c260d5fbcfe3cadd765de8cd3f4759ea7f3b65d358feedecdde66e345737799b74553dd5d36174d7a5ed5e9a2aaf37496b759513684e7827e9b656df6d1a35ffcd1b4ceb3369f3db9263c883b88e5112710badbfbf9c10e5949e2b87b7ba4db2714ac3ff81422afaf7c09d4f776e87b5ad9db79f866f7c1a3fd078ff63e1d1fecdca310efd39fa2a6eb15f5f37ed0f5150f3a71f5de9b9d9d47f7ee3fdadf19ef52dae0dec1bd9ffa88c8982f6974d37c912fdb2f2a327f8f3e7a9a9f67ebb2c597c58cfebebbaaabcb6296d7cddd2f8a695d35d5793bfe225b6617fcd6dd85fdf5f3ba5aaf9abb9493a4b420591be24a186d4a191f1c90474069598a3cee539ae6e15e14e8f1ba9d5775f1830c9377775595c5f4fab8698a8b25a037775fbcfae2f5f64fbe387db3fdf4ecc5e936cde0f6a52896f67a05d46f0d8a5e59660bbc320cb3aca6fc36356aae8af607795d66cbd9b2aadb397ddb5c376dbe78aa2c50660dc8579c173a53980cb2826460f6c847a2942339232447a49b1ed2d2ed3d52000f115b86efbd91511caf5684aef41d36396ee9ebde8cde3b183fa4ec36493acde82f19fd629ab67cd9162de1f18b3f5ad5c5725aacb2f20c7349e67e670a81df7f40ee0a05e7f0b8c9789e93bb4aeb24bba4a831f4365f66cb96df78b0478bdf945fa18c0dccf02e799264aa26db94819dce762884a0652cbc21a8bf66aa08a1f3195888e67995d76d9137c0665634ab32bb7e21b45fd68b669b246cfb92a46dbb594fe847f3fbef8ec1c33265c48bc5b20025189928d74459f1e26781151d32cddd4fc9cfca1f50fe646742baf41c446ba634d2f742f23de485e0afb29ac8d6125c50322bcbea2a9f3d5726e5cf2eb3724d187c8f0cc1b2ade98f265f672b7a35271e5a377bfad755deb4b605fdcd2ced7f8006fc0bdecb9a02c9928c34297d5f64dad0ff08cde8ef290d8cd2dff67b869bafc100f4977e5e2c670cefa7b355b6d417df926ef5de5bbf6d2a223ffda69f595cf817c10e1439afb32565c9a511fdcdaf65e735090ff74d1f5de435d1fbdafc493fafb26b80a23f2252bdce72f32b0343cb01020001fb996d4c1f52e74406fd03c85a1270ab8000f89a7e6702f0b7f4c7faad7e4a1fe940f92bed976930a9b31f9021c2c7f417da1bb04213f30dff148aa0117da204c15f0a903ea4311359f019fd413470df7834d2afa56bc682fbe42ecc1fda867f7740e4156e8831d12768b76e586a888973c2d8b495bfb92dfdf5d345c5b0d0defbd335bf28ab09fdf27dd2348d67f94fdf4d0945fa25940b8af868d99a523994812249a38c2a85d0b4e87c7e8ffc32f2e269c513ca8c02215a33262f90322de4ab50f0435100b9bf94b3ca76c90f7b30618124f70661fe394576ec7f5206eee184a2325a18a195e91d4ae44ea0c928f131b9476b20db335ebb216f9234282591cf7728e747feeb64e73e9aedd2aac33ed6e9282221fdbc47de33393d334a0c1e201138a3250038bdd37b9f9ecf281d09d79af431ad9a50334a3dede5f72920dedfa1f8128ee5de3ead40d32af6f6a73b5372a167b4dc9551ce9ef2849fe639059370a2b9192de265b44cb437a584da7e465892eb4dcb73944fa3fc0525afeea3535a8c38a0b5365acca2641dd90e1aee6487d2b0bb93d9ee1e25973e95c8ee534a5c3fa4a409c58fe4bcef03417a8d9ce94fef5168bd430e32bbf794a4ddcbb07673be873c18a5dc6808e4ed51dc47f1cd830753f26ba8d9eefd7bf776687d835c1c729c6929853cf8738a88334a7e50eaf0fe6cff1e029907b42e406e29659e1fd05ad13ead9851368a92137be704737a90efdee745675a70f894e20d4a117c4ade33b25d340ba0f16e468bccd91e79be10d187482f936edf3e985134b34f0b0d945ca618f6de43ca20d14a208d0cde2c25212921432b4148e9d31028194a0e1879fb0f68ed976835dbfb1423fd747a7ff7d32929754a75936f4c3130523914f9ce76110764145260b2c843ce69059b929907e495d3421b0267223445dbfb489ecc28174dcd7626347ccc0ed90a9a055a4723b6a435768cf35e46b12a25b4a919c5dc192d2050a44ca12c41230f9ec250caaaedeced1100cadef04877a6948923f250f683426b62799a7aca22808f09bb59764e0b01d46c9a53ca7d879657284a26badd271a1392e87e6fef3ee55c28e98f608120ef131968016eba4b22b347a1351947ca46d2a22cad06dda730004c7e4e41c00ead32912891bda3043e221f6282d9a7bbe73b94a8a4e413266b42aed3c1438aaa280541cd2614056620232d5ed344cc3efd945683a8d9a7e4ba4c77085a36258ea4241ead4112d7d01467345114c7530e849a3d38cf28d627f6418a8aa0d12a05052894d69e3da09553c28ce844cd88bf2784dac3ed73ca38d19c526ae5e101711325dff35dca59d07b20080931f94d240bf98c960e2840a2906d42e11d920d939d1d5af1dc4190452b7913f20fceb777261444ee6335825203340bd39c16d94833ecb2034809674a25527f078432d19ec222caafd1dc4d68b1853c35d223e0b707138a1727948d2206208c4811d12c5002806067940dc8494230524a11128b12e2f728094df10169af6c9fb20ef7a6c4e50f66330a6331d20707f7411f1a02850d340be734843dca5cd12a1a31d1c19480429c291ca5f57dca6353369808729ffaa349a6b7286cdc9b91bcd01fd48c522c3362524a33e6146b52ae0bbe22e9d8f3f329e5dd289cdb934c292d3450de8db25fb4e44e23a5fe68158c7afe9442ce4f69a59c1677a819ad1a53184da9235a9f2401fc94e474426bb5dbbb9451a641ee4f698d9b9a11360f2988d9dd3ea78c1c493d54cd0e79dac4b5647c335283f7610d1f528eff212590681209c1fd87348e87584dbe7fbe43a9b2d9f453ca765033523c135a90a2bc2ba967ea9416a8b21d0ac3c95c3ca019a0e1eda119e52bc98727924dee53d28a9a1269683d97d412c55f94b4b84fd97e6a469a97943079fc940825c5754eb954cad413973e80f74f2b29f777210b077b9456b84f7cb84b6923c2ed531ac2f9a714d913a7d130273b0f32744ab9516a46a99c89e4c1eed16f07949edfdfc3c2c2f9c387b33d7008a5556869826cd97d925cd26f4881ce283b34d943a6893ea495196ab6bf4728ecd19744651a29a9a16d4ac950668f940b7136999003cc02a562c9c97f48c9b703d2cefbfb146e4c2859457f52ce9efaa195061e0229e57bf7287fb477cea6ed3ea67e8f72bf242f243bb4543281a1a47c3545fd14d43f78784043206d447c4c70c942edee5092916c03e694b23b641a2881778fd218c496a47b1fd21441ea89d348099c4f30a7b48479b04b4bd5343b20c83ea49e96d8283d4f5c778f340f195f34db993c7c401d6cefde278cf649cc49bd12c33cb8774e62400bd19420a2663392bf838764cb886f09daee2e6587324a22d347c4424447428a9ad1fa738eb4d3f61eaf749f935a0219c89ee607c45b3409bb200859435af827a54a097c222fe952b28034290ff3fbc43c0f89a71ea2d93d5a36a0856ecab6dd23d34d093bca6d12d36f4ff7f7260fc9e650940f5543eec83d521c9f52e6999c064a8112b49c56db89ac64e1ee130330f766f7efed12ceb454b1436bc5fb947b241e224b4e8bcbd9ce3d5ac1f97407b340c4b94f66f380d423251129b944ecfe00f331d9a5e4dbc33d520f1869be3fdb3b78403a39232c494e49b51155334275fae96e9e518a81d77fb3737a99c2c96d9a2b1a29a5b18943c842ec915a9cd090090cf88d324e9fceee1319c810126e341e1004124b1966caee3ff8f4008a6b466cf3901411c5c734eb94662401248ed9dedd231fe0614ed9f82908727efe90b2d8f4e58303e85e722728054a46e7defebd7df2e8c830eca0d9bd0392a05d521a072488db94f427b34bbc430c4389d97c8f1aee60a47b07648d28a54499ab090d81064d5e0d09f6de03327dbb6425899fa81919f7fd830919505af222c469bc70a5680137bb4f793762937b0fd029e9a52925d6c91c938749cdc8453b004b4d10ead302d6648f3512d93c922d4a44e658bd26fe22bd497a8056db299f4c0b6de7a40da819e562c9f6919893ca245543be13292eb25ec485a46448d591a9a166c4c6f729c148a1233cc77dd2693404d2b19f522e95d6d8267b0f3e852c3cc83f25690446648e69ea77484e29e34c69fff3735eb92346a16607e41c7e9ad397d90338182048f629964677ef9defef4ca73463503514db64f7c977dddea35550d2439424a73c2639d50f68058094cedefd7b8046ba9708491e05214f9d7e4a468e6cd8fded4f49f53fb8ffe9bdbd1dee94329cfb0491989f0843734a8bc0e47b5186796797f8860cd61eafb61099cf49d3500685588738843c12ca11939c526a8578f79ce61174239f63b247ba0c0b22340be4cc510bd2ac534a5d128e0ff749e750b30392b0d90e21be9391c34e0bc83448f8ac94ca3c205b442367680f1f909dd921c7636797d68a28274c4b3c9f92527d788f9c9683f3fb7bf7f6008db8859c74720932d21f84db0ec9def421a962caf2930f4eced7a718e943f296ce2904211870a068a99a04f0216592891f3232457ba41ea819a9949cc643d202f1a2a927719e11f7cea6e7b4a038d925c70be2bc0395724eda7297ec2a69a403b243fbf0cec8359dedcc6825f11cdc7b8f165b7776892d898d09b729e50d1f6694e7a7e9202920ed35d5d5e4694e68c11a506e9bd6246951e65328fc1dcade93c98019a466e7948d203125189064324da42648f76d93519b917e21876a17b84d69461f92a285a74a4380f920f786c223e221ac4e9fefb32b95d3da760e21ce1f52de7d9fd6316802c816526e89a4349f3e208349cd3292b2e93d726369558ea0cdc8309377446b347bb43841ab5eb4340dc99a92e4ec7e4a3a99ac0931d21e3107f54e93b2732fcff37b7bf7f6ef01b76c6717eb32200869b5fd738a1cb24f891368b1e0d34f691acec983a766e4d0640f1e827b772999bd7f1f5686740f490549c82ead38d0c22a359b9183743ea5a9df237f154398914b40b6e93e2d11dc9bed53463d07797749013cb84febcdf728d543e4a5ee498029673e255d4e2ba3bb447d6a764ed112e90a5aa024379dc84b9a6e42da99a0cdc8ac82c53ee52110aa59461922c485c4e43452d28be42de73b7976707e8f040a9d4e28174fcb5aa005b1da3e2d64c32cdddfce333230a455f71e9ca35372b1290c241534a51c3c7108f1db01e9efed9df37be79fde87af3d810e99cdc81925254bb63e27dea43748640e6869ec80d8886c03c5bc809693cdfc94fc24d2b8e4f7ecefd2aa3f596f32d6e77bf728ba3edf25e7919a11a949f550267b9a9396d9a775439a2cf29166c400342842701f867246c6ecfea70fc91fde01ed61912639214822402b32c483f73f0593936a9c4df749733c24dd4a9d921f4af102ad8364f749913ed89dce3ec51068a5e4d37bb436b4bd4b4b7624801473d23a3845677b39b1e7a7fbf73fe559206786fc32321f84384dfd3971ef84dc0472e7a60f69be1f125323f0c4f2c5fe948c1fa14acd687590588dc64c868df4cc0e2d7a71a7a49d69118d22189238525c3948738f5634f6efd3020b0927d947483ddca07c9f5ca9694e4b3164bd481469ed7b3ba7dc3145b6b4d8761fb240e695d6473089fb349dc421a406279f92f7f2e9644a6bc6e483f22a154de55e4e8a88942da952c28fd8f2011987fb34e9e4e1ed3dcc3374ba4f0eea031ace362d509395a1956a9ab68cc8787e3ebb7f1fbc7480663be793e9bdf329697898c17df026453664541f7e4a5127516e879714cf29b4a46c03b90453ccc27d7230c9a2ec6cef9191fa748671729e749774c0f453525cb40445cdce6160c89e938f4463244ea5b809ca81c22222e31e09e63d8a8728ca045a70243252ed14e0e5a2c9494becd2783e255b06d3b60bddfb29c5bde4739e93e222b3770f4398928b34db25ad96efd0a213311269615a29dd26f726a3ccc6833de24b347b78b04384a3a8ed8010a720059345124bb1c2bd8c7425adef42008986e476521c4150896eb0d3e44593dcec9329d8d9a7d0ed3e04f09c567029c143b851704843d825ee2528e487209b4116941a53b35d5a1bcb11c192cb423a84bcfbed8cfcd8eddd5d62b78329f9beec391013ecd1aa3479b0506de4b551504c534e4ae753ca44dfdb3b20a541cdf6285df0297936dbf73fa515428a354987904b8ca8f6d38c0872400e2b353ba00083c218f2c4c9e5dea6b1107977c831a3e4cbbd3db2ac7058d02ca7e88e2cecf68c2248e25e324b130a02b7c93b2107909cbc07530820f104d940728a761f02b73df2a7c82ed06afb834f774849214f86c922654609a809313fc90735dba32085fc0ffae7608792210707b3fb3cf5e7b4a2c8d107052ee4ae908da439a5158f1d5a569d90a4d16c5133d2c3d3dd19857434676417c8ba52c04eb230dd2399a19ccea764e8a819c9e92e491d7914f7487390774b934582be3da3b5fcf3e9834f1fee4d31d229f93e3b7b3493c495e40dee91284e720ac769017f8756e0efefdcd3208522715ad9dc7e40abf1340e4a524c68e99a387d87bcb719cdc52e86b0ff291117ce36792d04ed9c9883c84fd1ee6c8fe2f08cd68def436476c9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf3fa1383ba34c1bf166969f4f30136c171e503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83ca4356bd2f60ff7c06fe41b9ecf48d96fefcd305953e2cdc90159f29d9d7d4a4d90aea08c0435a37cd71e5ea1a09f88b74fb6003a9de2fa035a89265f6a97cc0335833ddddb2311a5a08f10a4c5e26d0a5e69b56d4af9182234b90760cb19f97efb947d227a7e4a8c441e00f99694459990a9a1eceb2e398d6846e944621ce20bca6910f78287327281c8beeded135a3b244d20c88c3801b931321a946ea0ec08b5a03c16cd0785e7594e4ee4a76876ef538a6d49696f93a744baf753f206261939ae3413e42f4d881ce7200851eb3cdf23c773f78058781f14a41160cce400ec12dd1f701e89621fca20511e81120da46a76c83b7f48e9ceed5db2263bf7299417ee253b3ba5a40f18899c5f32f80f0937721f29bb42d13425b3efef42000f28b730cd48d7ef9e43d53ca49c23f90b0fb6a7f7292f774eda85f2e0d4ecfeee2e7949348907341d8411f96419a5ac484191074f96916c04341271fc0e390294b7fc942c07059ec4040f6835913c7bf262886d28a4a16619d90e52857bdbe7e44612340a7e0e0e3ecdb7efefd15cd3bcd2c46208fbe79f4e67946ca5b002534fe13b754fdef9ee8442d373921ad2d4d46c4671f4bd3dd27b9fe62401fbbb44e3833d52fd146551e2f653f20e77d069be4b1347ce14b176460a9f0644c9049a8a3d22f7435ab1230386c97ab8bb47dc4bebb494ab21b63c2790443772a5c8d4dfa7708ed2a790ac87a42b29a5429e4306f292634fd69942504a239155b947bec83d68a483fb94ffdb7f400e2de5ba6908e4653ca4481d2c4c1e2885dce40251b38cbc5bd28c6465663463fbb4e247a694064e7890b7f9f07cf7e01e54cdc3f309650c492fd07a31e8463d6707241a0fa60f49ddde2767fb017235e75352cbf768c229854c1a89de2646ba47ea6e7f679f4486fcdd3de0465e14797524c9c45e24a7fb1829e50f48a667c44534987b13f0db3df210f624b54c61e53ef9fb6480c9a9fe94dcb56cf7fe43f2332080e77be434524a9c669268c1e6837e9b51868772ee24cc941145b37d8428339aeb9cf29ddbfb9f926525a34ed42656b8bf4340489ea9196572763ebd479398cd48eb53d28f74d38c2696b2c2148e3ca4a07287a11dececed52e26a7b4ab68270fb9418744a4938b239594651fd6ece534f8b03bb337260b669ea495b4e492166e487c351a2459d7b7b7b147252331a37b106f1ecde3d0a41681248e99041a570ec5e463c40c9f1876846b6f4d309c546e482923bb6bf4349986c9774c81ea9da197994945ac52c50187e2fdfa1b4c9e43ef137e92952f894f0a77c48462698945ccea957d2cca4d58964a491897b1f12694833532c43b9628aa1c82160e78764813436a5c828d34fb8510847c688f2aff7f7c810114d4924c048fbf748bfc21ba0ec3b757a4e0c8af4dcf694fcdc7b9f7e3a25b18638cf906085abf880d28f048d588a6697e253b2ace7486dec72a7641288512936bc47469b6601414a46bc392587ec608f3ceb7c1fda92c22d72b089ec347f44908c7a7ef880bc5a1a779e4f2950db7d80397df8906481ecc7f61eebc8030aff26334a85914d9b7e3a21e7e0de1e9a910aa3e413cdce83f31d9afa7b145b1e101db7f726a4b1260feed1ea10e474f75362731adb36b95d34848724b10f0f48641e502e871402bbefd46cff01653067e493e7a432b6d90fa1c531d2e9f788df7382792e2ec13e999207a4d01e50dc4e169054cd438a3c480de607f91ea54af738dd743025af8ed2aadb33320cc46f84e5848c1fb9f9d4e7842279c2969a3df89408bf4b4ed184d27b048da2c18c8221ea94864eca8c5288d0bd24890fc8752513442e187d49b33b810dd99b9102a17402e5fba1df88f8d3d914110c1260fb7be4bf93c9a0b624160f1edc7fb8379b60a4a4f01f5060462385b49081277e3ba7e8e38052dba44766a443811bd4164d352dc49c63696997f89b5408048d6c11e517c9938172a064c201ad24502c43468aa091a34c6129d9de4f3fbd4fd974f8498046ae38bd44cc710f9a639f3c4db2f5449fbd3d5a00a030f8c1c35d28ae9c4c0ab90a94b7dca7908e2250927a3205a448c818ee904ff7807508b9ad144b51d8b44b395662243257246bc4a550e5fb44aec93ea6fec1e43ccf49b791c8c066513445b340cdf676ee51f69482dffb13b0e5ee0ec5a10f49ea894fc866919a21f9a75510f2828803c831cf3f8500ee50d6e7210d7b9b9c2810845c5e5afb2026d8a7d5e01d9ad4dd7b8817ee918622ddb743ab8ae423938341734a3a9bf2457bd92ca7bf1f665035945d25b9279570401343ca8122bc83dd07149dcda69f7e4abd90f4a2d9f96c46a90ee2c8bd8c284b524f043927578af287fbf7b319c5aa07dce90e052994a223d9230f6fff218d940c10c92929db4fc9d2927430f752221c024d0e06b9e3fbf789430e24fd478a85d40bb127cfe9fdc9833d8aca69122985b04f9115a941445c342ed076871616a9d97d5abd22fd42be133d345252461823e527cf491950f0738fb99728433424bfe780d2c0c4e4940fa1a43662e729713c12ad19a69e9cbcbd87505c64ba0837ca47907526376ffa7087b205f7a84b316d140bed7f4a01145915d26fd40769679a94c94e764e667c779f5240d4ec530acdf629b3b04deba3442d242f1f66941421ed414a6b870cf4a7987a8a79499c493950a2873884bc7f82468a844480b2dff9a7e4d8a019e1408245d0681d8070cb60281fecd13f647b76a7c45714345033caf2d02204599fe97d122f222f890131c5f67d326c94fba6d962cf81a22d9a2beaef1e39853452f2ce114b12b45d52c453ca29ec82df285dfce0d319f9bda4df69a4e4e7932453da84b09c52ec4ab130cfc2a7942da38890d6c4691586e27af2596908c4c2a43c481ac9fd7d8839a524f33e4d03190dd26534048a120f60432865423e7d4679f25db82b079f528041f966ca1e930b425c4286923c3b72dd3fa5707b4619585ebed9c3022ad2c50f7791e33a205f8f464a7a8ce2843dfae61e05c0d42c3b274381b926a3c16c492a9a5203a459c9b61f50ffe7bb6846c9907bf7295f482688622752db648ceed34ac3a794679f51e66646212235a3ccd9c3872436db94d32282502fa44f89130e68c1f59cd69526930938e4d3693e9b7c4a398e8c2c047108c56f9373ca063ca02402ad191c504c07154d7a987c504a2d1fec111948dd10a17789e73f253b719fe0e632048a68669459a7393d2747709fa8489e313128f9ecf7b2fd87c8ec6316684d9f6c01343c0590c4e46412b23deaf9de2e053ce794732779a666a48949fb92b19d521c4f3349bcf9700661bdf780c2f2fbf00231590f682580dc1c8e3489dfc8f1247e234e2062521282021cca0053b387e49fdfcf3f25324cc148e4c890c4522a34a34520428f3cf53d4446073459f773f201ee7d4aba7e7f4a84a66898a6989222e4b21039581626a4e7c97c4db729f8a291eec0aba12892b276e7f7677b7be44acc801be5f5a60882289d42a6747f87981c8b0a449ae90e059b7b349318292987e914113a692412c08cb46506013cdfdd2336cf2892d8879ce6e4c3901349cb13b42041dc4b327df02969cbe9438ad248ab3dd89d0137cae63ca4bc303c0758c0090d92028c879493d921378fe469ef1cd028d7429a17f9a58c32a61466937a9dd07cdc27679b0c774e110d989c2cceec1cd2495a97f8ed80e66342e24dc3a5e1902b32211a5133d2282479942227fb4ab340a9407257281d437679b67b3f27bc79eac9c21192649d1f923aa46624f09440d8a565af7dcaca52da9e5c486a4634247d4406941238c46f33f20bc85d2115fd80f29ed39d7b0fc8bfa466e7d99456d3489e282742c4231f9634398579e79453fb94d651ce8951a819b985bb0f0f8819c90d23dcf22989f32e8552b4c6b04b934a01dc3966614a4e077879fb414ea1300588c46a7b3470f2a90e1e4c1f9061c821323b0fc9ab27b346793212fd7dfa723ba3a423394a9481a3f5494aaa0037f28f482e2906387f0013f49032b4a4844834284b433c7a8f022710843277bb073919824fcfa11c88f01414ef91bf41d94df214f7ce29eea76688ac88c96909986c19694b84c73b94f9a7e8fc01b9010ff27b0f20803431585c268736a3a89de212c28d9cfaed738ac3b39c7251e71328555aab244a527e9192954437523324a7649d27f769bd7697e4885c7d6ab6435c7a4e2ba3e439c002c2d9a6fc29597212380a2fc866efa153b224a49e485d91d7458c744efa86849b88979fef93e7b0479202baed52a2ed21454af425a5acf61f50b0fd90d8629b420d72f9660f685d1a6c4943a39c2365041fde87a73aa5650fb28504978ce97dca61502c8f39bd4fab37e41a92134e191c222fb57848fdd302c18442a3839c027aa8c1fc3e8565bb94ded825df866481107c483a93baff74774a4a63bac7b91ad2bc949d04797749bc68ea29d10127ee7e4e396fe2b7fc0113e4e18cd414b130591f0ab1f63fa504f1c37be40be5e487e694e927071f53bf4bee2f85700744768a60c8ca107929af427a8cb899268aa602b83db837bd4f069a720e0fc0bd0f490b939f42ff909f76ff0159764a5152334417e48a10a04fc9e525dc6802f6c892530aec53120f5ab438879521cb43e4a59ccaf9a72008399350af94ed789091845066f5fe14cde0433ea49c01750a570a298f833d3299d9f42179b70f681e0ec021a433295a24c6a5889b08724e867242f110a5bcceefcdc8ac517a8f713b9f7d3a233d067b4a4425ab47a248a6ed21c513bb0fc85325078a9a11235316764a3e27296b62f22919126234221e2d6d9e9378928f4acd485b4f2906226b40b128464ab10c65e4287c38a755b41929980338b4e7f768f2ef13d9cff7459592fdde2301a4688144f8d38cfc5840a3f4cd3e65c228914b9687a09145a2acf00e0d818c1899300a6678eaf74036b2654c54fa9c8cf81e49c56c4a2a82d2350f289d4dcd48123e255d4f8e2e162ac8ca90eedd219bf5905c4ed268946ee339dd254b7b9f924524ce648248f7929cdea3819383444ae9fea7fbf7d85dc9cf29334ff103214e3604512b669dd4121981292d2f92ade14e69e9eede3dca8e52304b0248dc032c41909c1cae87b4acc1ba774233fc608702768a9068ea0f486e1e22c592e77b145acd48d266e894649d66813cae7b14a429bf21f54a84b8774e7ee1a7146d52b3fb14ac93359a6def927d25ba51a49aed9368ec67b4744be68f660b23a5e0875280843825aaa9d37b94429aec5304b44bb12c7982a472396d42f95c3237a46cf728e541e24c9c4796e3fef68cd6271e509e95e2090c818c06bd4dd2f2298557d42969a4ec3e3971b37bfbbb14e9dd9be6fbe0de9c5207536216b232f09128b34cb851c445b95692f79c9c8f8780464101a962927a5a882335481122c580c426932919fb7b14bfed64c08d162f1eee4389670f91d2a12c26a673b2bd3b23ce25854f430734329a640029a2a0d74800295c2559a029a6a5e529d919f2280f801b79f7c41194a8263784b8977c498ada480dcec8d4d302c23d58426a46412cad7093f7798018607f42e111297ad2b1194d2ad119a9466a9693bb4b5e011923d251db14be9046a2e88f5c821d4aa8df27f69a40231187517e0f9d3e203f9b329fd4e93d326114105108464ee4fe39fcb72916b9c8e722730cf371402661f290a4624a94227bb14b590fcc297902d3fb24b8dbf727640df61f520285a27fe2104a59eeef91a7b4cb7e6fbe3fb93fcd288e24a120be2035bc4de24f7101290d5a9f20733a43a71411ccc855263b4b91201923a2310502a404661959d24f3fddcb98df2889b5479c976d532a94c87b9f3c601ac27d5250d3594642b2f7601f93759fa6989c36cacb51c044524fc9cb09c5ac9403d82335408e13394768464c41f11d61f4291212f7a93ff2df28d348decb040b07e43350339ac93c23ef8b5434312eb952248ac431dbe764430821cac53123d112124d3145e819f925dbfb340650968294873bf7899529c5c9f990fb14f150c7c48753f2daf67789349373321f5372c2493f93d1bc0fbb70b037c91fec5398f6e97dc49119c51614fe93873025d7edd33df2880e30527a299b92c9213120e78e2c020d8672ae94ab3927613ea07cd01e268b5430596bf24f281ca521ec3e2497975896ac25858694becbc9eba266b440bb438b1f08eec81aec538a98e84652f829c9e22ef12405d2c06d879c907b945adbded9a5009a92a5a4df48d56de7c4d1f7b13e46e6979a4db309a9011ae98c268f18897243dc8cacc67d3218f748f9035a762fa7a92317849025e540e244510d19d51d92c2fb2468d42d7b351412ee206571ce0b2ef7892329a74a7693560ac827b8b743ebd2d48c16a90ea6f0063fdd076ef7499c499c30b1f7ee9325a634d33e666187d648cf11f9519a8770cb49df501efd9cde22a332a3c4cf8c6d16450fe455430276a83f523a64c469bcdbb31d0ab067bbb46622898efd03e468295e38a079a2e09b5e20cbbdbd433a90f2e294e39d819148059301a359ff740af738a7c5205a5fa005655a0c9c5228913dc8006d3f23134eae19614f696ff2df88dff6c99e3e208543becaa73b94a2a266b4ea45be28cde9ee7d32f3fb537268298b3d256f904840fefb3ead1750b329450794be223147544aaa86accc8ca0911345d1f2cefea70ff640b707f748c6ef436472a2f1fe3e912c3ba02405053cf4bf070fb2dd1c024859891979c10fb7ef67a0db3dd237b42a4823a2b084523be44aec614e1fdc278ff53e9915920ee2b7c91eb9eec8fc4fc9bd2376d99bd2b20035db3f2717ea53f20676c81a939c3ea49112579027bf4b0b94f76986a690ac7c97567b1ed09cee3ca4340dc5d1b40c416cba9d13018877e9b5097408896236a59c06297c10ef210c30884761361184166d689910cd680d7197dc2ac20dfc46ae180d81048d16daee4d290540695a407b30dd231b4ef1109021dc2849319990caa435449a978c2cef016681bc0652af64dc29fa239121c54c74a354e13df205e8639aff4f215994679c91ff448692cc35a941a2db43fa16a24fd1c73e792b0f30f5484cd0ca64be4d1e3fd18df88086404b4b3427144e1edc3ba789a56694a9a6c881e2219a188c940842612d2d80d260eedd27e24fa7d0bdc4540f88ed29f43ec7d43f2490b4f23add26ed4c4a93d6c929ff4acdf629059b53584038130b0b23edc202d27029239fd388ef7df4fd5ff24b488de4cdb42e566d512d3f7af4d17159a6279f1c9fa5afd713fb79932ed64d9bceb3cb3c5dd5f9f62c3f2f96f94c1abe78fd795aafcbbc19a7e9eb3c4fe76dbb6a1eddbd9bbdcdc68be6ee326f8ba6babb6c2e9af4bcaad34555e7e92c6fb3a26c08cf05fd36cbdaeca347bff8a3699d676d3e7b724d78107710cb234e2074b7f7e1b73d246779fbde1ee9f60905eb0f3e85c8eb2b5f02f5bd1dfa9e56f6f6f6dfec3e78b477ffd1eebdf1c37be4bd3d7cf853d474bda27ede0fbabee24127aede7db3b3f3e8defea3fdfb630aef2880daffa98f888cf9924637cd17f9b2fda222f3f7e8a3a7f979b62e5b7c59cce8efbbabbaba2c6679dddcfda298d655539db7e32fb26576c16fdd5dd85f3fafabf5aab94b39494a0b92b521ae84d1a694f1c10179049496a5c8e33ea5691eee45811eafdb7955173fc83079775755594caf8f9ba6b858027a73f7c5ab2f5e6fffe48bd337db4fcf5e9c6ed30c6e5f529e8146dc5eaf80faad41d12bcb6c8157866196d594dfa6464d45e0f2ac69b3a640e4d85c376dbe781a997f4c02593f322c7be41b51aa919c10921fd2490f69c9f61e09fe43c494f6953782f8f16a45184a77f6dbe396be91f9f3b96367bcfb80ace6ee1eb8a324a468de8af302d0a8fd2d1108df8b62e137f150f159697fbcf3f0214d2958e9978c7e31f14bbe6c8b96f0f8c51fadea62392d5659790626222781340e055c14c5104fec106e135a08df9e51eef5534a1e7ffae01eb4449b2fb365cb6f3cd8a355774aec50aa08f67f975c58b291936d4afd4e673b14bbd0fa19de10d45ff38cc80ce733f02e31d82aafdb226f80cdac68566576fd42269dfa2816597995d5395ec8da35517cdd12f742707effdd318c95300d4943b12c4012c62acab75161b8f8591086d779ebf069eee6349f7bfb7b94b5a30086b2b8847433a551bf179eef21b4047f59b5afd10511f57befdf092d5fd26a26b984b46042912a7e9bdea30cc8fd8ce6935ceee9f421c4ebbde1ee53a27fb24b113799f03d5a53255f7167879c67ca5413937dba4fde3366f4bde1deff743ac9c8f725c78ebcc6dd7b9465a4009a22015a6b9b525e8bec115c87f7864b294f5a6a864b728e881d8936ca8f9d6fefe6b45cb5f7f001bcd6af0337a3640ea5413fa5d52b8abbef931f847f28afbc931f50869752c0ec86bd375c4afd92674041c46e4e9ecfa70f29a3b937238fe1001c481ece946cfdd7814be9607a955602eeed928abbbf47f1074d20058b148d6594709cee9ec34b7a6fb89497a2e88bd257e42e91d97f486b187bf0491eee64933df2ef485cbed6bc1d501c43ce1e052114ac915ea5908f62920794d7260768428effee74fad1f749756435299a960043f7906f525de5b3e76a4f9a5d7c7899956b12d4ef91d3b66c6bfaa3c9d7d98a90829959377bfad755deb4b605fdbdacea76ee7f8006fc0bde53f39491d743df179936f43f4233fa7b4a43a3a52afb3dc3cdd7d099f4977e5e2c670cefa7b355b6d417df921fe4bdb77ecbb6917ed3cf2c2efc8b6007de38afb325ad684923fa9b5fcbce6bb237dc377d7491d744f16bf327fdbccaae018afe68ae8af607795d66cb197dcedfafb3dcfccac0d072800040c07e661bd387d4399141ff00b29604dc2a2000bea6df9900fc2dfdb17eab9fd2473a50fe4afb651a4ceaec07e434e263fa0bed0d58a189f9867f0a45d0883e5182e02f05481fd298892cf88cfe201ab86f3c1ae9d7d23563c17d7217e60f6dc3bf3b20f20a37c498e813b45b37d01bf860dd34e525fdde1047e784bd794ffee6f7e8af8bb29af0c73f5d54dc0180787f9af7229efc49b598146492e9af26adcec9852fdb625592070f1348e63c6dab94dc84097d049b9d8ad14653cfaca7d6aea7f93bf22a1a0247fd9350d27cf7ddb65b3ad6fa8ae758dfdfdeb9f7666fe7d1dedea3bd07634a44ef52620a8e9960f55ed0f5150f3aa9ad4fdfec92cf77ffd1bd7b638a9e28e4bd4fbe164dc5ff87dcf6d7a727dbc78bd7c5c557ab199c6bb092ba6db70642afa8c31e83e6b9ea8144877ebaefd0f2bc80f43fabbe72387f3b7b7b14d7117710d36ff295f3c98cd66a68b16fff9cb2d9fbb430be4deba7b40c4f4b9bfbf71f64f7f77711c6135713c3f31b3f9bbe325981f5bbec0724494d3e5dd784f12a9bbe85e4cdf255595d1759d690c70c7b2ab3468ca81e2ae3166599281ffe103ce607f7f6c819a4a5cf1df2b0285f4148ff6c7bccefe30b806d45c14614e34b0c88a6a8abff641aa0ff8e314b5f5434d8aa7e8e693bbe2074492dcee4abd73a81de77d5323dcbb2d729cd6eb526850241236c4984446654e3b1b8dc528de92b9e1a23979c94e4ee23d2933bf7c6bb9436dfd9a790d16abcf781aeaf78d029c17c0f01e9fd4f1fed930adedba5b77649c8fe3fa8245f1f6fffe417db27f40119c7edcb5d0815c91b30bf35247ac5d79431909eba74fedbcfb5aef4a7f1d3f17dca8d73866ab3aafc94f2a8f7f7269429a66c3e658a7729b74b0bc5048dd62d67b39d8c742975f9ff2e5509ad23d346eca8aa89718b324e941b7f08aa7297f2fbf70e68ed257b48cbc753f8abff6f5295ea41fe286c325182f9937e527c0050f4871712d0e7fc3d850ce65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98f9f5f61938446aeadfccd6de92f1312a1bdf7a76baeb1d4cf9947304e9fd1fa47369bb162c84a02cfab208fba4b26d90f48ed198d37ad96e7c505a14f024dbc2256455d033628b7b4f7fa4ad7deef3e7cb4b3f7e8deee78e7d3bdddfdfb07df9437414b7492dedea50cf783f1c31d4a23ed50a69d68ffff796f0276874c1230bf35247a65933701909e37217ac1b16ee853e854f2fc600a6ee14ed857a29e847edb75229437689d64ffe1fd7b0fc98b2024492869d6d8e9781f04c2f7a258f84d1c2a1d46fa94b2b2b4e04f8cb4d9a19951b272f701e515f70971724fa6b4fe496bc1db07fb9f524c48cbf7d373a8d9ff973834978b060e0d7c4ae11c9208752018b728ef4605e287e0d0ecd1a2f8c1fd7b0f76ee1f3cfc74f62912cbff6f72686036d63fecd8ef27bf78ed697ac298b02509eecbeb2df5a9bee2f4a91ffbd1cae50e89d7de0e898155bdef035d5ff1a0b3bc939021683818efdda799b847d0897effdfd4d6af5f7bca1562451207dc6f0d8b5ee9e9eb1e504f6383ebd4fb0b95b5afd5788e300d3f9b0a3398cb07c4290ff70f0e3ea5b9dcac30efdddf99eece1ed21ae2a7b4dab5fff0de6cfbe05ef6603b7b90df9fd014653bbb53eaf3ff5d0a136653a68e98521514e316659f284ffe1014e6fd4f677bfbf777f627f71eeedcdfbfc7aeecff8b14a6ba193f8a004dc063fea49f14ea0014fde14537f4397f4fd18ff99581a1e500018080fdcc36a60fa9732283fe01642d09b85540007c4dbf3301f85bfae34711a04680f49709f9d0defbd335ffe14780301ace2ff87f730448cb2a0f0f1eeedda765319a557110de07babee2a0fb8efbfece78efe1c10e7b2c44fbff1ff814b03c649480fbad61d12b9b7d0a00f57c0aab301c0787be85ce284f1366e2166e857d25ea51e8b75d67425864efe1f860778f164f99457ce7e37d1008df8b62e13771a8f8fc74ef60fcf0e0fe1e7929c44f9bfd9afb93f37b0f670ff7b6f3fbf7ef11fb524838d9d97db0fd603f3b7fb0bfff69763f7f487dfe90fc9a40b045b9acb34553902f03fd262c43c2a0be03e31365dba82cfc107c994f7767d9fe8383c934cff7771fecdd27a47fb67d9965d5be461744ceefbd7f27d964ef01b15f461c793fdb7e90d3a2c6748ffcda030a5eefed65b3e9740ab67c6fb8a42af3ecfede03e2abfd7bdb0fa67b9f6eef51767ffbfcc1eefe6c329b65f739d5ffde703f9d7c3abb77fee0def6e47cef3e2d55cf76b627b3fdfd6d7212ee7fba3bd99b4d77c07def0d778758fadee4fc60fb60f7d3fbdbb3d9c1a7dba4cacfb7771feeed5162e4d3f38733f8f7ef0df7c183ec80049ce43c9f3cdcbe373bd8dbbe77402273efe1a79f927cd18ac7c1d7a2c3747a6f677a2fa775a887bb44871d8a4c764956b77726fbbbfb3971c6bd1d7849ef0d77e7c1a7e7b3073362bafdfd87db9feeef10e6f7882c7bfb937cf629854a9383afc70ffbd3ece0606f67fbd3d98474e07e7e4ef4bdffe9f6e4feeec3c9ece1ecfebd83af356ffb9387f9dec36c7ffbdef97eb63dcd77a7dbb3fb93fbdb647b673b7bf77667f73f85d9786fb8d3fbd3ddddbd7dd2ab0734faf37d22ed837b1312be7bb3d9ecfede414693fa75e01e9054e5bb24129f4e7262315a3f247d4b44de7930b9f7e0600752f7b5e6ed606f963df894e4826463b63d7bb07fb07d6f46e49e4c1f9edf3fcfee4d0eee7d2dfa3ec81ece0e0ef283edecde43e2b3d943e2b873b214f4cb0e598bdde9a75384faef0ff7d3030aa827144f9f1f4c88be64096707f7ef6f3f38dfd9bffff0e0dec1bdf39daf03f7d34f69ce27240d7be7a439cff749694e76b31d92e37ce7209b4ec9a44129bf37dc7bd9dec39d7b44dae90199c89d5d827bf029c9f1ec1ea9fb87d3f3ecd37bc8f4bd37dc9c7c82e97d4275fae9ee0129b5fd29e9495212fb7b07f70f76ee4df60ef2afc567fbf9040bd30f29a34bffec66c4710f73f81c7bf9fd9d87d32951f86bf1d9f90151786797e8fbf0018871906f1f9cef7fba7deffeee419ee5fb0ff71ece3efa3e99ea1f45d882946087399468521bd1dffc5ac6f124f74d1f694069fea49f144a0214fde1458ff4397f4fd1a5f99581a1e500018080fdcc36a60fa9732283fe01642d09b85540007c4dbf3301f85bfae34711f6cf56847dfc030a9a5f92339c92e3599d70982b413387d5088efedf1c3befeebfd9dba3142ba2db4f292cda7f40d108cd9704c2ef035d5f09a0efed21d6b97fffd1fe2ead9eee7cfae943e470890bff3f173b7fb1fdd5f1f617afcf28c0058769dc746b28f44a103577c079f1328bade3c59f8358d9b2c4bdfdf1bd4fef113c5af2261c49ca68b238a07d1f04c2f7a258f84d02541cffec50d87eb07b6f975021b1dc142b3ff8940cdc7d0a0ac8029e6f5380bcbffd706f4a8eec83ddfbf726d9c1bd87ecb3fcd062654aab912c735acd08b4c4cc142e430f0baf10ff6b78ca28453935cafe3f84709982b5ec0191fe419e3f38201f9090fed90e977fe4982852821d482246581bd1dffc9a9861ee9b3e523b6cfea49f6481018afef08c2e7dcedf935136bf3230b41c200010b09fd9c6f421754e64d03f80ac2501b70a0880afe97726007f4b7ffcfc724cf0c19a97f50937f132d02bbc130740fe6600f497714f00c4fbd334bf9d9302a543be06b40e96018c3e4aa190d84df93c5fe69759ca297fea85448f66b56f736ee90ae82b9e2bb0cbaafcdea3fbfb94f91cefed1edc7fb047aa9ce82f5ec3fb40d7573ce894f8f8f4cdeefd47bb04fd607c6fe7de0e6917321444f0ffcf391a2fb7a95df594e78abc030804190e607e6b48f44ae06c44407a0e07188b193c74357c9bccb38309f85935f7fe2c3e2077f1e0e0c12e39a3c4e030f1a454864cec9adce9b469e660f3395955a492842834d96ac5fedf6755f71fec53def653023cd9cff6eecf08e91f59553127ee7b866b4d8a7ece0a90fe64a3a22fb251d1efe9cf1f5955f9943ed281f257da2fd3c0b353f417da1bb04213f30dff148aa0117da204c15f0a903ea4311359f019fd413470df7834d2afa56bc682fbe42ecc1fda867f7740e4156e8831d12768d7b7aa623cdd7bf237bf477f599b6bcc2880787f9af72256f5cdbc6852165e92964b9854d23a4d7a35cf09238ae997d729af9a53c4dfa414e473e04fd24336b669aeaa7ab65d2dcb6b7a8d9a53e422329792754a5fbffef6387d9de7e9bc0d720017ed5d5e94677b7ecd4d1734c964c739674068932c139b88be569bcbaafa9686545ff10ce9fef6deee9bbddd477b0f1eed1d8c4973ecd1f3b361a6ef3f1c93dda024e50129789ac1ffaf99694c3e4ff7cbab19995436391f68a66320ff5f649269c628d9bd77ef53cc184c32d18df83816814f1e4c685d67f7e1f6f9012d2deeefdda7787a428b60e7b383ece0d3c9deeec31d30c8cf65042eccf9fbdffbff4804fe70baffe9f4fcd3fce0de2c9f4d769935fe5fe42bacdf92f66705ab76772fa6414faac5a458cafb88421624dfc58aa2131e32cd5d376091494253337da44c3560a14005010b0ded672160d9d9dea1a5937b6f761f3eba47cc7f7ffcf0e1ce83fd4f1f7e639a90f4ec3d64b6f60e1edddb1bdfbf776f87f3ae44b2ffcf694293fedebedcb907be211903d6b78642aff85ab00bce0b54aca764acf4662d749fa425a76c15e91e5a20a615685ab83be0b99ad222e96e9eed92ee207c89e37eceb510b8442843b3ad52cf2845e7253ad93f042db4f720bbf7e0413edbdbfbf4e1fd83294ccbff9bb490b205f95c12a3885bf8a3880528916b0e50f487e78dd3e7fc3d79ebe65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98f1f452ce63df99bdfa3bf3e2062f9ff8ebd252db0bfbd7bffcdceeea3dd4f1feded8f1feeedefeffe2c451ef7c6f7f71e1eecec90352792fd7fdade62b0644d80f5ada1d02b43f616e03c7b2b4265188c18930ddeff3b82913d0a1ff7770f1e9a6084c839687aebfc17ad0b8a9b91217c9b4b204dfcee85e194337c48fd0aad68fed5e2fdbfcf024f1f9cdfdfcb770ece77a7fbfbb30cf4fcd9b6c0cbaa7d8d2e88b0dffb3ed1e84706599012ec40a19e9ce035313fdc377da4f6c7fc493fc9f20014fde1191bfa9cbf2763647e65606839400020603fb38de943ea9cc8a07f00594b026e1510005fd3ef4c00fe96fef8914136efc9dffc1efdf50106b99b4224a8a4b0524227658348ad607c390944f94332da9a46bc9a17d3f97b2413bfa29604887e678547bd72e290ad7a4efd654b0ba819a76fc8f22f27a4f8df8ed2599592c0075d19b09ddefedf98b27c38de3ff8f4de83879ffe6c380ef7ee8f2963f9f0c1ff4757169fe6cb6be62c4d2fc2e07d98ef1083f8ff221f81e66b778702fd837d9a","2ff8084435e2de58aae09ca83ecd3e3dd8ce277b845636a354414ee03efd74efe0dea7b37be7fbf7c11e3fa454c1e5e272d134e745ddb4646ddbeb36bb704a835c95fb0458a686388ebfa9fe5fe8aadccb1f4e3e9deeeddfcb26e7d9c31c4af667db55216a11057fe49b28762089d8616d447ff36b6289b96ffa484db1f9937e92110628fac3b3bbf4397f4f76d9fccac0d072800040c07e661bd387d4399141ff00b29604dc2a2000bea6df9900fc2dfdf1f3d737b1de8738250e80fccd00e82fe38c0088f7a7697e0bdf644a125334b4c0497e0469de9c520034c094552ea50558e2e149b4e9555196267590d1afbb4d4bbe03e92df25d46f47ff82f453ba7d7539279d2c0e7446af49a926223e448628919c460a879675b714b9badaf78367b6f7be7fe9bdd8347fbfb8f761f8c7776eeef3e7c403680a68d917c2fe8fa8a07ddb330fbf7c69f7ebaf360f73e412782fe7fc923f8c92f3031cf60635e62ae28fcdf855d5183756b40f48a7a044310c9afe477a9097367206aff2f7217f6f728ebb4b77f709b8cc2c9ebd32fd32734b2b7e9777ff2694a89fd6a4d336fbd78ea5028450cc03255ddd24077e7ff366ec6ade7df21d3dc85efc6b87b287f6df37c1b2c093e05163693f0fe9d7cf1fad99beda7af5f9d6e9fbdfe72fbecf80b82f8de401e4ef37bf73e7d986ddfdfbf3fd99e9e4fb2ede93d72f9ee7d7a6f777f676772fffe1e18eabde112255fe7e5f9bc62aebedbac2756b7922794e5c4bed93e753a215573ff21116a6f97bccbf3877b3bf974767f6f0a55f3de9dde7f787fb6b37330d9dea1652e22fbf9c17676bef3707beffefefedecef9ecc1fd07bb5f07ee4959ad672f4f40f0d7fe40be0eac4ff7a7b30793870fb6ef1fe43bdb94b3bab77d706f6fb27dfffea7f71f3cb8f7703223cf90d24aa131a2d93d3e7e7afae2f3df73617b99560b4260c8583c38dfbdffe061f6e9f6f4d3fd836d723a77b7b3e96ebebd33bd47cbb9b3d9c3c901dc0b7dc5a8f39d6d9a86dd0758e7dddf7d74efd3f1bd9d83bd4f3f7dd03516b784aeaf18e8a45feed1ffdeecd13aefa78f7676c60f09f87d9822b2073f0bc6e2366218051a53169e8ebfeb341dd38f1ad160bfbea58880fb25dfff","25ff0f72830cb6fb640300"], [ + 'Cache-Control', + 'no-cache', + 'Pragma', + 'no-cache', + 'Transfer-Encoding', + 'chunked', + 'Content-Type', + 'application/json; charset=utf-8', + 'Content-Encoding', + 'gzip', + 'Expires', + '-1', + 'Vary', + 'Accept-Encoding', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'Server', + 'Kestrel', + 'x-ms-ratelimit-remaining-subscription-reads', + '11998', + 'x-ms-request-id', + '7f6205d8-a042-4e52-bada-4d312323330b', + 'x-ms-correlation-request-id', + '7f6205d8-a042-4e52-bada-4d312323330b', + 'x-ms-routing-request-id', + 'SOUTHEASTASIA:20211018T025538Z:7f6205d8-a042-4e52-bada-4d312323330b', + 'X-Content-Type-Options', + 'nosniff', + 'Date', + 'Mon, 18 Oct 2021 02:55:38 GMT' +]); diff --git a/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_get_test.js b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_get_test.js new file mode 100644 index 000000000000..ca5c5b4551e4 --- /dev/null +++ b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_get_test.js @@ -0,0 +1,147 @@ +let nock = require('nock'); + +module.exports.hash = "da175dcb796641a7d5ce170197d3482f"; + +module.exports.testInfo = {"uniqueName":{},"newDate":{}} + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '6e696c6f-a9ba-43a3-bb16-4b5882ea0f00', + 'x-ms-ests-server', + '2.1.12158.6 - SEASLR1 ProdSlices', + 'Set-Cookie', + 'fpc=Ao96P-vBZfhDgjUkdDRbWZg; expires=Wed, 17-Nov-2021 02:55:36 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrKw3bAu1H06nS6Z6lk88UHVzxgLzqSOUuI4m_oEs9R0-Lp8SQtiGXDy6aXrVSTfT_olcOV9dSENyNfF7KCgT_F2vdvYj4Ex0icHzHYngbqHiJWSiRzbeXUvtaLJK8puV3r7vHFdkh9SNBA_f6QfIdceRzkM3QyWKAF2hRV64W5awgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:36 GMT', + 'Content-Length', + '980' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'dc166749-de8d-4169-86e2-e69fa0e20f00', + 'x-ms-ests-server', + '2.1.12158.6 - KRSLR2 ProdSlices', + 'Set-Cookie', + 'fpc=AuuUROv_FhdKtVpvCFlbakI; expires=Wed, 17-Nov-2021 02:55:36 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrDRNCLW1n_npz5yW9OPS1b9idWNhyekulr23k8BLlloJY7DzMO0JE3B-_L7lUMdDcc0hKX0OsxAey0nFP5T-c6X18JmBvXg5X4hdNe6k5NO71_xEq2pZHydESPwu5elFmBMKJTEcbBoAnqW7SjhRT-wNm8HDFCctNLMJuemrT4_ogAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:36 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.3.2&x-client-OS=win32&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=5|771,2,,,|,&x-client-last-telemetry=5|0|||0,0&client-request-id=756733e3-53a4-49c4-972e-37820fe49233&client_secret=azure_client_secret&claims=%7B%22access_token%22%3A%7B%22xms_cc%22%3A%7B%22values%22%3A%5B%22CP1%22%5D%7D%7D%7D") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + 'ea3e9b90-f5ac-4be3-85d3-ff0295541000', + 'x-ms-ests-server', + '2.1.12158.6 - KRSLR1 ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AtO-F_PgTHlGi5FoFohIWjoWPr5BAQAAACjZ_tgOAAAA; expires=Wed, 17-Nov-2021 02:55:37 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:36 GMT', + 'Content-Length', + '1351' +]); + +nock('https://management.azure.com:443', {"encodedQueryParams":true}) + .get('//providers/Microsoft.Management/managementgroups/20000000-0001-0000-0000-000000000123//providers/Microsoft.Authorization/policyAssignments/passigment') + .query(true) + .reply(200, ["1f8b0800000000000400edbd07601c499625262f6dca7b7f4af54ad7e074a10880601324d8904010ecc188cde692ec1d69472329ab2a81ca6556655d661640cced9dbcf7de7befbdf7de7befbdf7ba3b9d4e27f7dfff3f5c6664016cf6ce4adac99e2180aac81f3f7e7c1f3f227ef147abba5ae5755be4cd478fe8afaa2ca6d74ff3f36259b445b53c9b7df4e8a3bbd4e6b298e57573f78b625a574d75de8ebfc896d945bec897eddd85fdf5f3ba5aaf9abb7b3bf26cd3ff77f10fff26fff0b3bb772f0af478ddceabbaf84186beef769169f49365b6c8b377ef3e1a7dd44c09f9f7c2f0e2f61812fc45de66b3accd409a699d676d3e7b724dfd9d3ff8f4fc60efd3fbdb9f660ff2edfd6cef7cfbe1eeec60fbfecede24fff47c677f76be4fafeb2b5f2ee995bd9dbdddeddd9deddd83373b7b8feedf7f74efd3f1a7bb0f76f6f7effd14355dafa81f81be5c97a5fd00efe2835f32fa285f9e57f59447f14535c3b08934d9ba6c3fa22f8bf79ba8f7204314686ca28e9ba6b858023a4d54863ff03b8dadbde649baf5dbf40aa6985e09c034d74d9b2f9ec6a623db7f90eddedbd93ecfee4fb7f767939ded87d3e9fdedc9f4d3fb3bf7a707fb0ff61f1000fbca1b41e878b5a29e1909f7ed714bdfc426ebfe439aadfb98ab326b3003c5790160d4fc96fd87ef4591f09bdc88c92ff925","ff0fb9790b49bf030000"], [ + 'Cache-Control', + 'no-cache', + 'Pragma', + 'no-cache', + 'Transfer-Encoding', + 'chunked', + 'Content-Type', + 'application/json; charset=utf-8', + 'Content-Encoding', + 'gzip', + 'Expires', + '-1', + 'Vary', + 'Accept-Encoding', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'Server', + 'Kestrel', + 'x-ms-ratelimit-remaining-tenant-reads', + '11998', + 'x-ms-request-id', + '46487860-a668-4859-8242-7df91b89488f', + 'x-ms-correlation-request-id', + '46487860-a668-4859-8242-7df91b89488f', + 'x-ms-routing-request-id', + 'SOUTHEASTASIA:20211018T025537Z:46487860-a668-4859-8242-7df91b89488f', + 'X-Content-Type-Options', + 'nosniff', + 'Date', + 'Mon, 18 Oct 2021 02:55:36 GMT' +]); diff --git a/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_list_test.js b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_list_test.js new file mode 100644 index 000000000000..0b470a3fa3f9 --- /dev/null +++ b/sdk/policy/arm-policy/recordings/node/policy_test/recording_policyassignments_list_test.js @@ -0,0 +1,147 @@ +let nock = require('nock'); + +module.exports.hash = "967dca88e6d33d7541fa056c6658a700"; + +module.exports.testInfo = {"uniqueName":{},"newDate":{}} + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/common/discovery/instance') + .query(true) + .reply(200, {"tenant_discovery_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration","api-version":"1.1","metadata":[{"preferred_network":"login.microsoftonline.com","preferred_cache":"login.windows.net","aliases":["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{"preferred_network":"login.partner.microsoftonline.cn","preferred_cache":"login.partner.microsoftonline.cn","aliases":["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{"preferred_network":"login.microsoftonline.de","preferred_cache":"login.microsoftonline.de","aliases":["login.microsoftonline.de"]},{"preferred_network":"login.microsoftonline.us","preferred_cache":"login.microsoftonline.us","aliases":["login.microsoftonline.us","login.usgovcloudapi.net"]},{"preferred_network":"login-us.microsoftonline.com","preferred_cache":"login-us.microsoftonline.com","aliases":["login-us.microsoftonline.com"]}]}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '5da9ec7f-059c-4c02-98e9-e47441800f00', + 'x-ms-ests-server', + '2.1.12158.6 - SEASLR2 ProdSlices', + 'Set-Cookie', + 'fpc=AuKFvee1l9NAhlPpSB3hng4; expires=Wed, 17-Nov-2021 02:55:37 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrBVa2-beMzNNvf_VxQrLp9zh36SQyGggle18MnWNdp1Wp0P916Qko8mAp8KKBgwj70ZRv0Zz8nA56NMF51rP7L1xBI160kJ5IGMSo2spNszjJfdVFrxTJnaTz7wKmvAm54DxQ7P1G1IzyAbV6HZWLQ0ujz7cwlPt1UqZqsgYxPZUgAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:36 GMT', + 'Content-Length', + '980' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .get('/88888888-8888-8888-8888-888888888888/v2.0/.well-known/openid-configuration') + .reply(200, {"token_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt","client_secret_basic"],"jwks_uri":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/discovery/v2.0/keys","response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"id_token_signing_alg_values_supported":["RS256"],"response_types_supported":["code","id_token","code id_token","id_token token"],"scopes_supported":["openid","profile","email","offline_access"],"issuer":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/v2.0","request_uri_parameter_supported":false,"userinfo_endpoint":"https://graph.microsoft.com/oidc/userinfo","authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/authorize","device_authorization_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/devicecode","http_logout_supported":true,"frontchannel_logout_supported":true,"end_session_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/oauth2/v2.0/logout","claims_supported":["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint":"https://login.microsoftonline.com/88888888-8888-8888-8888-888888888888/kerberos","tenant_region_scope":"WW","cloud_instance_name":"microsoftonline.com","cloud_graph_host_name":"graph.windows.net","msgraph_host":"graph.microsoft.com","rbac_url":"https://pas.windows.net"}, [ + 'Cache-Control', + 'max-age=86400, private', + 'Content-Type', + 'application/json; charset=utf-8', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'Access-Control-Allow-Origin', + '*', + 'Access-Control-Allow-Methods', + 'GET, OPTIONS', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '6616db41-f937-4b49-8195-be55f5f70f00', + 'x-ms-ests-server', + '2.1.12158.6 - SEASLR2 ProdSlices', + 'Set-Cookie', + 'fpc=AvOKCmAKRGtJpr1DMjk8DZs; expires=Wed, 17-Nov-2021 02:55:37 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrYmVM4qqaY5X9EBakKqFeACsF9qGcs0vHj38_xDrbQ3-OHW99KgqQGIcWFTFp9FUSObNeDhYnw1d8V0xTwsuu7n0N36XThp-pd8Yfupkggq9itaaq0EJ-RBv2V6fEFhRhmZHDi5B8cSGBRGtrt5eN6DwamJEKWMYqYbea2sOUbRggAA; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:36 GMT', + 'Content-Length', + '1753' +]); + +nock('https://login.microsoftonline.com:443', {"encodedQueryParams":true}) + .post('/88888888-8888-8888-8888-888888888888/oauth2/v2.0/token', "client_id=azure_client_id&scope=https%3A%2F%2Fsanitized%2F&grant_type=client_credentials&x-client-SKU=msal.js.node&x-client-VER=1.3.2&x-client-OS=win32&x-client-CPU=x64&x-ms-lib-capability=retry-after, h429&x-client-current-telemetry=5|771,2,,,|,&x-client-last-telemetry=5|0|||0,0&client-request-id=dc8f3402-a7dc-4911-bf3d-4cb9dc1ebc08&client_secret=azure_client_secret&claims=%7B%22access_token%22%3A%7B%22xms_cc%22%3A%7B%22values%22%3A%5B%22CP1%22%5D%7D%7D%7D") + .reply(200, {"token_type":"Bearer","expires_in":86399,"ext_expires_in":86399,"access_token":"access_token"}, [ + 'Cache-Control', + 'no-store, no-cache', + 'Pragma', + 'no-cache', + 'Content-Type', + 'application/json; charset=utf-8', + 'Expires', + '-1', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'X-Content-Type-Options', + 'nosniff', + 'P3P', + 'CP="DSP CUR OTPi IND OTRi ONL FIN"', + 'x-ms-request-id', + '67857af0-7c4f-4793-a717-964e6c2f1000', + 'x-ms-ests-server', + '2.1.12158.6 - KRSLR1 ProdSlices', + 'x-ms-clitelem', + '1,0,0,,', + 'Set-Cookie', + 'fpc=AtKlzlWs4Y1DgfMrGQiB4j0WPr5BAQAAACnZ_tgOAAAA; expires=Wed, 17-Nov-2021 02:55:37 GMT; path=/; secure; HttpOnly; SameSite=None', + 'Set-Cookie', + 'x-ms-gateway-slice=estsfd; path=/; secure; samesite=none; httponly', + 'Set-Cookie', + 'stsservicecookie=estsfd; path=/; secure; samesite=none; httponly', + 'Date', + 'Mon, 18 Oct 2021 02:55:37 GMT', + 'Content-Length', + '1351' +]); + +nock('https://management.azure.com:443', {"encodedQueryParams":true}) + .get('/subscriptions/azure_subscription_id/providers/Microsoft.Authorization/policyAssignments') + .query(true) + .reply(200, ["1f8b0800000000000400edbd07601c499625262f6dca7b7f4af54ad7e074a10880601324d8904010ecc188cde692ec1d69472329ab2a81ca6556655d661640cced9dbcf7de7befbdf7de7befbdf7ba3b9d4e27f7dfff3f5c6664016cf6ce4adac99e2180aac81f3f7e7c1f3f227ef1479759b9ce3f7af4bd5ffcd1aaae5679dd1679f3d1a35ffcd1ac68566576fd225bd0b71f1dbf3e499fe6e7d9ba6cd3ad663d69a675b16a8b6af9287db877fef0feece07cfbdef4d307dbfbbb7bfbdb0f77a70fb60fa6e73b0fa6b3c9f9defeee9d8f461fadaab2985e13906259e0cdb319c1bd4b9d5e16b3bc6eee7e514cebaaa9cedbf1f1ba9d5775f1830ccdeeca7baff3d6bddadcdd3dbf979dcfce1f6ecf76a60fb7f7a7f766db07fb0fceb70f1eceb24f77efe50f76b203eab399d290d08d8f7273f73628d3dbabaca6d1b7849c1024bb58564d5b4c9be7d54573b67c9dd797c5347f964dea62fa4545a811d2cb8bd3f3f37cdae20d25ed47c7eb59d19e9dbfa8dad37745d3361ffd12c2ecba69f3c557ab59d6e6cdd77bf9a45a9e1717eb9ac9f4de30f2e56c5515cbf6655db5d49c40bc2f04e290b7a7cb697dcd547ddfb797797b55d56f5fe7d3755db4d79fd7d57af5de83b8ca27c7ab15f107d3e05951e7575959be2f94e61795fc31bdf0355efd1012bc6b3fcf97b9cce0d7c5fe725d02c4a428898cc74d93378b7cd9be2f94861a6717f97b0c066ffd74d1be90793c9e4ef3e6bde72f9b65d4d965ee4d2271755b57e57b832225b26c89024ff3a6b85892543d277cdeccb3e59757449e0f07f74555e70c6e9933c4af0bf074994dcafc8b67c7cfaa9a01bdcceb45d13434f4af8da40ff3bb244df9370cf3559ecdbe0190aff24575993fcd57754e739dcf8867aaf5b2fd6ed1cebf294a0c74f161e04edf910d5866a502fbe6f18d74f04d4de360071f34a7d4c12cb706959abc99174d2a963acd08e2c5124a28bdca9a345bb7d582447b4abaed3a9dd639e6259d5ca7c73f58d7796a0c407a422fe435995d32b9a417da0c2808ac7cf6e49a3ae936252cf2e579554f7374f6453503b2e425c04bc197057b18ef6ffa6fed9490b625ecd07973d72027b83d5917657bb6a4d1b4d7ec81dc1a10bdb2ccd8e78a43fc25a3cd9e5a86c94a9b660ec2cf7fffddf13e41945e8834ea400dfb5e5f644b3203c0e4eec2fe7ac1c6f9eefec1793ebb97ed6eef1cecee6fef93c3b57d7030cdb7270f3efd74f7fefdf3bd070ff7a2406343ee3874f726f94e9eed4ef2f37bb307bbd38c90b6ce5b0c64144f71226e8527c10fddbbe3b2acaef2d9f38af40630dac5872a01dffb68fd7659d5ed9cde5abf6d2a1acede47df1f90021e12c1b8cc6906682e9af46a9eb7f3bc4eb3e575fabc58aedfa53ff945935635fd78fd3a5d3779ba223e272b3adbae96242398381a0d490ce0a6c4e1e9ebd7df1e93a8e4e9bc6d57cda3bb77b3b7d978d1dcbd68efb218bd649a72d30519aa744632549460261aa19526153e16a6ddf307f7270f67b3edfdf35dfa273fd8d97e787f6f77fbdede6e7630d93dbfffe053708ebef22586b7b7b3b7b3bd737f7b77efcddebd47fb078ff61e8eefefef3e3878f053d472cdbeec7b01d7570c709ab0ddedbd83373b3b04f9d1bd4fc7fbfbf73ebdb7b7ff53c4f4b791f49f0d3e89028df1b327c2149d4cf7a60f67f9fdf34f1f2a337f7d35d00376930658d68b667b92b5d3f9769dffa235b995dbc463f5b6af08b7174443520e3bd48ff44dd464ceadfedfa01c1c32cddd07fbd3870793fb0fb34fefedefee1f04615d0c5e14c9f79871821f6a06b25b8166c06756314c09784d7f34f93a5bd1ab79d6b4eb664fffbaca9bd6b6a0bf5989f81fa001ff82f7b2a600ab64eb06df179936f43f4233fa7b4a039b79df33dc7c0da6a0bff4f36249212bfdf9d3d92a5bea8b6f493978efa93273bf61f4fab5458b7f1144f1f5799d2da7b936a2bff93db41b401fefd8cf6c63fa5006a17f00be1d00b70ad0c7d7f43ba3cfdfd21febb7faa953cef4a562c98d14031ec0a4ce7e401a111fd35f78d374200332df5c94d584c7252ff0bbdcd234e03ff0bef95d7ba13fd7994717fac3a0c5af66e79426c8221f29ace6aa687f90d765b69cd946ee236d74411e1b9911d340ffc497ae63faf22abb0629ec1f68407fc890b86bfd1a5fac9b7bf41b3e58374d7949bf37c4ee39d1c44094bff93dfaeba70bca1bd0b8f1aef7a769fe7dd2c779dc878c388e4f32d253a9faa54dba2046618b98a52fabaa4c619545ec5268fdb43a4fbf225d96369e2e4be97f34a0f4787689899ca56d3649db2a9d6a7e04c07e92c254b2ccdcce7ff7629ca66cb5730e771a6e80fea9a317af3fa7bfabb4811f96f3379ab44869a0e7e7c594ed2d3e0f46412023969a5e2d9aeaee257e2e7f9aa843bdf3fb3f9bf67af7e1f6ce3e59d5377b7b8fc864df7f387ef8e0d39dfb9fee7d6306fb607befd337bbf71fedee3fdadb1ddf3bb8fff0e03e41a779feff92c1fe74727efee0e16cef41369d3c9cb28df9fa063b024c12764f755a4b12352249715e28f541e0d9ecc1cef683bd9cb2990fcfa7dbd9ee74b2fd2959bdbd07f7f6f39d87e704257cef8d20e8a54e3a4d8e4900e3b3f4e9a7fb0f770e68966e722528bd95cd9a6df6638bf325650a3900d40f96176933afd6254573b90ad00cc29819412466c9447c288ca15f5abc439eef3225c0f4777d99d7ffdf70420ecea7f983073bb3fcfce1c37b0f1f12c23ff2416860dfac0fa29f595cf817c10e14113bad8de86f7e4d4c28f74d1fa93d347fd24f327e00457f78c6943ee7efbb261a2d07080004ec67b6317d489d1319f40f206b49c0ad0202e06bfa9d09c0dfd21fd68ba18f74a0fc95f6cb34f0ec36fd85f606acd0c47cc33f852268449f2841f09702a40f69cc44167c467f100ddc371e8df46be99ab1e03eb90bf387b6e1df1d10e78ee9d4624c0287ffc440e913eb6801ca0fcf0709f258a4e669512783ae73cd5effc4f3e3a7af4fdf4dcbf52c9fa1916a2ebf91aa3ba8d08e47c3bd342941510d9796f9655e52544f9f1314f24be843d209c61ff9e2757a52d5abb42598e43dd07048ee89a7c458a841673b714b2badaf182b4d31fba7dbbb3b6f76f61eedee3dbaf760bcff60f7c1fd1db2d2344362d0df07babe62a0438f19eb72ffd1cefef8d3079f3e78789f8c0b4dc1ff975c80e9ce64fffec1decefec3c984b43c8df4035c803eb0ffd7b8003249fb7b0f1fee130b10ff7e3d1720587642ce97965b4085b84b705dadc969b746bff9ff86d5dfdfdd99ee3dfcf4d36c37df3db8ff292bf5ff7f997df02cb4ee80d5f33f4233fa5bec9dfb9e75bdb579fa392b63fa93ad9ebec8564fbfa73fd536d06ffa19db18b4e55fa0d8c51a8a89d346f437bf26468efba68fd4ca993fe927d93780a23f3c93469ff3f764f2ccaf0c0c2d07080004ec67b6317d489d1319f40f206b49c0ad0202e06bfa9d09c0dfd21f3f32fb80f2ff66b34fad060dfb4f06ca8f4c80517ed6b6d3787ff886fdfecec307a4ae7e560cfbc3f1de3e96cb10361295ff3f64d90f7632ca4bec66fbf73f355afceb5bf6833eb0ff3759769aa5bd073bf71feed22c7d5dcb9eb5c4b2d47fe39972f280910afb98e2d08fe1b7d2bbf4194cf94dd1feff372c7d36bd773e3dc866f73eddcd1e520a8b30fe91a5a781fdc8d22b19f40f206b49c0ad0202e06bfa9d09c0dfd21f3fb2f480f2ff454b9f51929e56f1a9797afce62572f4d41fb550ed984119d00ac10fddd2ef934add79b0fbf0fec39f154bff607c70efc1c39dff2f5afa7cb23fbd7f7e90cf26441cd6e2982ac2f1d630e81561978f22c0fedf64e96996761f3ed87b8859bac9d22feb4583e57f5a7bdaaef35fb42eea7c7bd95cfc7fc3344f0ece77cfb3ec53a2e4feee399bce1f99661ad8376b9af5378c5ebfb668f12f8228be168ba48de86f7e0fed06d0c73bf633db983e9441e81f806f07c0ad02f4f135fdcee8f3b7f48735acce1ed1978a2537520c78009e7da2bff0a6e9400664beb1564b5ee077b9a569c07fe07df3bbf6427f06a696fe3068f1ab62b6231f292ccf34db46ee236da4e6de34d03ff1a5eb98be24eb0f52d83fd080fe902171d7fa35bef8e1996668aaaea92dcbf4e493e3b3f4b5b72adfa40b6298749e91f5cdb00e8f142289212fe337883f6800c13afec635775275cd0f77a97dffd1ceeef853caff3ea04438b182d8dbf701aeaf2870fade29fffd47fbf7c70f1fee3ddcdfbd47ca9fa8fdff21139d4db3fdd9eec36cb29fdfdbb9c7daf6eb9be808b0ffd7986899a507f73ebd7f1fb304134db45ab6141b03b3555d2ca7c52a2bd9dadecf7677f6f767f4f283f34f8929eecdb627949fdfbeb743ac919307b2ffe994fa14f792df78b077fef0e06072be7df0e9f9eef6fe6e76befd70379b6cefcd1e4c673bbbbbf4ca03bc21a8bf66aa080de1f1928983aa1d7017dee6d797601f4cc62c2fc910b231a6915fe6ffeff5195ee7adc3a7b9bb77efde4136c93fddbf4f9e32f91084f40fd76d20cd16b80dbbf850d5e1ff7ffc06fdcce2c2bf08762089d8566d447ff36b62f6b86ffa486d98f9937e92c10228fac33380f4397fdf35ab6839400020603fb38de943ea9cc8a07f00594b026e1510005fd3ef4c00fe96feb09e077da403e5afb45fa681676be92fb437608526e61bfe29144123fa440982bf14207d486326b2e033fa8368e0bef168a45f4bd78c05f7c95d983fb40dffee80c82bdc1063a24fd0ee7d3d03eb3b199f0040bc3fcd7bdf2775d8f103decc0b1876125e921632fb53921884f069759e92e2cd97b3940698b2c6bd4e59e24977911f90b5e95541ae01a9465a6c4c21cb64e2a1b48cd340ea2c157d46a8907cd2d48b755003ce86e19666595ff1ccf2fef6eea76f76761edd2785bf3bbe7f7f6767e7e067212ebff768ffe178e7e1ee83dd7b94df27f2fd7fc9e81fff5e3fb9fdfae9f6999ddeedcb9d9d5d1ab09aa75b43a257d4f40f822c55df521b8fa9e98bffd77806349507e39dfd070ff7f76f93a6e7e0fd2aab97944ddf5e56cbede92759b16df2ecdbf5baccff3f9264cf3f7d787f96efd0c0270fee3f9811c23f5c8b4cca20b0c8f8ecff7706597fc3e8a7f9125f5bb4f81741145fc30ef56c33da0da08f77ec67b6317d2883d03f00df0e805b05e8e36bfa9dd1e76fe90f6b4e7f14c8d397ae63fa926c3e4861ff4003fa4386c45debd7f8e27dcdb531cb78d7fbd334df18c8936cd50509bbd159faf5f73edadd8126da655dbcbb8319dcdd015abb3bb070bb3bc8a3eeee7ccaff2242d9dd39e07f1fe2df5d7e7797dfdde57777f9dd5d7e7797dfdde57777f9dd5d7e77f721e14a18851e05f9dfff3fcc2cdc7b74ff217919fb0fefed535849cc292ec3fb40d757143a7def4c13fd6f67fc2999bc7d0e5a69feff3fe4654c3ebd3f3ddf7b3899ccf627625ebebe7bd187f5ff1af781fe4773b4ff60ff3e1cc15b790f6fd793bc2696b5c9ffec076bfa973eb9aaeab7ab727d512cffbfe142ec7d3a9b1cccf61e4c3e3dcf28df01adff231f8206f6231fe2473e84fe892f5dc7f425b90d2085fd030de80f191277ad5fe38b1fa60f41df8526fbf7523da5569ae488cdf1f1ec1293324bc946436151209456fc4eda56c8149c1717a4cfb8ad0141b9015ade2736aad10690b2f4278bba5d67a50143ed2979406907c0a1571bcfea23ed80cfe8c59a3c00ce4e4886013907fe1c4dc881a0bfab94a3314180fa16e075767e5e4cd93bc0e73e62d5921c8525431ef62d2ef173f9d3443ae003303f4c278322d483fbf7f67f76962f1e8cef3fbcbffb60e7011930e28fff2ff918d3fcfef9f4fc60b2bf73ff9ed89f0f7032fac0fe5fe365c82c3dd8bb4f934bb374939bd1fca2329b35db1904bb385f566dfe0ed9bbedcc882eb143266242498bb49957eb72964e7215aa1964f0ba5ad72901a266f5254dcbff373c92fcdef4fcfcd37cefde34dfdfd93de049fc91470263eebe67b8d6a0ebe76c27e84f36e9fa229b74fd9efe543f847ed3cf2c2efc8b60078a88d5d646f437bf260695fba68fd43a9a3fe927994280a23f3cd34a9ff3f75d838d9603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe90febd3d0473a50fe4afb651a78569cfe427b03566862bee19f421134a24f9420f84b01d2873466220b3ea33f8806ee1b8f46fab574cd58709fdc85f943dbf0ef0e8873ce746a312681c37f62a0f48975bb00e587e7919c9dbfa8da53565c303d6d76218ada357bfd13cf8f9fbe3e7d47aec50ceba8d42af460184e9352bb941a92a527454632ce1ec017afd393aa5ea5b28a3b26dc4888894144d7ab3966357f4b23abaf1823bbb3bdf3e9f6eece9b9dbd47bb7b8feedd1fdfdf79b8737fefe09b37e1f71fed7c3abe776fe7d3fd7be4201011febf64c2f373329613a2fb83f349260afbeb9bf008b0ffd798709925ca9a1df02cdd64c23953309f15b4ee763177a982663d2147f4ff1bb698f2870ff7773f7d389bdc7fb8f3601f74fc912da6817db3b6587fc3e8f56b8b16ff2288e26b3141da88fee6f7d06e007dbc633fb38de9431984fe01f87600dc2a401f5fd3ef8c3e7f4b7f584bea0c107da9587223c58007e01924fa0b6f9a0e6440e61b6ba6e4057e975b9a06fc07de37bf6b2ff467605be90f8316bf2a763af291c2f26cb16de43ed2466adf4d03fd135fba8ee94b32f72085fd030de80f191277ad5fe38b1f9e2d86beead8d66f3f3d13dd949e10ad2172619ae084fea8166473251fc01218cd135026805200b164ff0545e4df40acef302547019812d8ff5706fafb8f7676c7f7eedf7b707f87a23c6244b1f9ef035d5f51e8f4bd3340fb8ff6f6c6073bf71e3cbc4f4e08cde7ff97dc84f3e964923d38c827e7f7f203b1255fdf4d8800fb7f8d9bc0b3f4e0c1de83834f1fd22cdde42670889f62f8c4a125593e95150ee1dfe6d7e92526f4ff1bfec27d62fdf39d4f27e7b3035af0d9c7c2e2cf337fc1b3b7d0ea4400b23ba46c8c86260e86fdb0e6563f672d4e7fb2c1d517d9e0eaf7f4a77a09f49b7ec6e6116df917580431bf6253b511fdcdaf89b9e3bee923b55de64ffa49860aa0e80fcff0d1e7fc7dd79ca2e5cf99c7411fe940f92bed9769e0d958fa0bed0d58a189f9867f0a45d0883e5182e02f05481fd298892cf88cfe201ab86f3c1ae9d7d23563c17d7217e60f6dc3bf3b20f20a37c498e813ebffe0851f8a6bc0ca073aaae31abc26694f9f8a3a629f20cc2c925bee5413c6fc8d5a5404de645477dfecec3cda218bba3fbef7f0de01c521dfbc45bdff68efe1787777ff3e1911d2d544a2ff0f59d4df2bbfdefe49e0b68de9da96e9dabedca5217f7dcbba01e8ff6b2c2ccfdacec383fd9dbd3d9ab59b2c2c07e293ac9dceb74d104e2e68bddd788eeaf68266fbf7df1b639c421d9a77b56bff6f33b25936dddd7bb833dbdb9f929b31238c7f646469603f32b24a06fd03c85a1270ab8000f89a7e6702f0b7f4c7ffcb8dacb58f8203a3c39d735fe60f6dccbf3b682e51a1738cc1091cfe1323a64ff0f20fc5f20e05e54f32d253e9cbaa2a351a27cb6b23ed19e26512ad4ec44d9f50ecde78ea8ce2e36f20ec165c8ea7d36a4df9f5fff784dc7010f6b6f7f6dfec3e7c746fefd17d32e19fdea7ccfc37ef1fec3fda7d38de3b3840e29f2c0d4de4ff87fc8317afbe78bdfde4cdc9b7b78fbf7afa66fb27cf5e7c67fb92c64743fefafec106a0ffaff10f64d6ee3f78f86097788264ec16fec186443d34855084e65acdf0ffcb7c82ddc9cef9c3e98c867c7eff7c671fdaf8473e010dec473e819241ff00b29604dc2a2000bea6df9900fc2dfdf1239f002fff9cfa042efdfda3443d9b925b1a767dc518f68ed7704021e4de83070714f81303880ff03ed0f515031dfad219a07b9f92dbf0e0e0de03b23f34d5ff5ff31a681e5f04067e17a2f1815e431ce8ff8bbc064cda03ca297c4a2c4152780bafe1ed7a92d7c4c5dbc669c87e4022b24d9f403c56e5faa258fe7fc383984e1e4e1fee7e7a3edb9f7c3abdb7076df7230f8206f6230f42c9a07f00594b026e1510005fd3ef4c00fe96fef8910781977f4e3d88df4bf554c771389e5d82b8b394bc0228ac627911f51bd0d68020df406d3bda0012791545ddaeb3d280a1f61979190d960af06ae3391a7028f019bd08e7e01bf0397cc4aa25b90e4b86fcff4ab7e3dea39dbd31ad36ecd27fdfbcdb41ff7b307ef8e9fdddbd7dac3c1383fc7fcdeff8bd9ebc78d377113ed0ef8803fd7f8ddf41ffa359dbbfbf7b9fbd45f81d44bb655bb484077c9062392d5659c90ec3e441b6ff70efde83edf3fb939dedfd07f7ceb7b3fdf3f3ed4f0feed182c0bdec7cf70116045a12a965cb6f3cd83b7f78703039df3ef8f47c777b7f373bdf7eb89b4db6f7660fa6b39dddddd964ff01de10d45f33558496f90c6c4273b9d9075a3617dbf5baccb7777776c9d781969319215e53f7821189724594d57eb67d9d87b30707f9a7bb0ff6f34ff34f1f4ed892a9af13851745322e0f512409fe8f7c1d414ab00345c4ae6b23fa9b5f13cbce7dd3476adacd9ff4938c3a40d11f9e1da7cff97bb2f3e65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98f1ff93a78f967c1d7818679517982f211a91be8a7826c9cfff109cd06d9c774729d1e23184b4f687ec81b203f82346a4af423019ea5a215462969b3693eaf4a12f9f4ba5aa7c400e40960d11bdfd110c87d214f423d88297917cd85bc8bcec9cba2c963217e49c479952d2f444f2a36dffb687fff1ee34f7aa5ada655e97df9d19be90a40880a64a4c576b82f5fe7f56531cdd337d9856bf493f2a56ba59e973a5e6898b15bd36b780c9583ef6714a67213ffdbb3e584d67858dfb7d985184ff7edebb7c5ea05595218cb09b1e3db060d1bcfab3b7d079f907e0906ff7d326620916945a0088df4e493e3b3f4b5f7b67aa5f3ec324f5775be3d83aea639e286e409a698fc66a34f47b3d2fcf05cb9bddd477b0f1fed7c3abeff70ff53f2b7be79576effd1fdddf1fd07fb9fee221741b2445c4ef30fc343be0411f7ffed9e1c4ddb36e57b4eb75fbf224185d30595a05ec6ad61d12bc28ce2c9c581966a46a915a93fa3a4fe5fe3dfed3fda7f38a6d40ab9779fd25c6ef6eff6b2e9bdf3fb7be7dbe7f732e29c9d6c7ffbe1646fb69d657bfbf9fef4c1643281a1f839f2efee917f07c69579220e54978a1189f24a94017fb6fdbb7bd39d07bb0f1fdc7bb897cd3eddc334fec8bda381fdc8bd5332e81f40d692805b0504c0d7f43b1380bfa53f7ee4dee1e51f927b770feae903dd3bc0659f6e02af006e1dbdba6ed359952e2b5aa59ac3634b095132ae69b16abe19a7ef5b3c26d2353d97ef5b0020dd8931715fddcee1a3e1aec8db7bb99e103a68f7b3e8efa12f34693c5f2deee97d94efdc9f4d26a4181f3c9cee6defdfcff6b6b3073999b1dd9dfb0707f73f3dcf27e099fdc9e4fede83f37bdbf71fec1e50fae20119ab7b59befdf0d36c876cddc3fdfd7308e3343b9f52d387648d0fa07577a6db93870ff7b6a79f7eba7fef60677792efef52b349b63fbdff70f7c1f6fd49768f6cf8fdc9f6c1fd0764c8cf6909672fbb3fd9ddbd4fcdf2fdc9fd6936bdbf3ddd39bfbf4d2ed50199d38707db642676f3dd83e9fd7372a8a819163ff2fdfded4f1feee7e4b4dddb212dbf976d3f9865fbf9f9a79fee657b0fa9d9a79383bdddbd87d9f6ee3d1adffefdfb64a1ef65f7b777c9dc669f7efa608f9c366a76ff7c773f9bedef6d3f38a7f1edefdd3f206864a5b30919f2c9fea764b391a8b9bf7f40e3c90823f20f081af5373938b8b73d9b7c7a7ff2e96ce7d3f36c4acd76b2f33cbb77fffef6f9743625ba653bdbd9c1de94b240fbf708215a677cb843cd760ff6a7d901f9a85946fdedd31840d9ddedfb0f77ee4ff7eecd1ede63bff3fece6c4a1dcfb677a6bb34845d22cd849c8eede9e4d387f71fcc1ece76ee43f80ff626f983fde92ecd0279befbd9849aedeee484c3ee83dd4ff72607d3038c945ecaa6f7f207dbfbe44fd110721accecc1c3edbd0939bf0f0e76cef7f63059b3bd5976f0e0d3bdedd9fd090d81ecf3f6c3fdd9cef6c174efe1c1f9f4d3fc3ef92334f5bb939df3f37b93edfb39dc99e9f9a744b7bd7bdb9fee4ff7763fbd4fa9d307c06de780e8712f27877c774643d83ff894ecf2f9ce76be7b7eeffe2c3f98663b136a36cd26d904239dd1e41123dd87f9a6660f0e1ededf3da0a6f7f6012dbb97d3d47d4ad08873a8d38c9a3d78b0b7bdf370ba7f7fffe143eaf6809aedef7c7a6fe7419e11574fa9d97de2c8c9bd7b07dbe7b3f387f70f8861767210e4dee4e1c1144edba7fbc0edfe3d9a8f7b9f6262ef51d28e98fcc13e6661e7c1a7d37372d568a4c4e9fb79be47ae1e71c8a7fb0ff28319258867330ce1de83fdbd9d5d48002d575340b17f9fe8b67fb03ddb996407b35df884c06d77ff20df03a128c020269f64f44246dcb4b34780f7887deecdc048d383e9f9ce3ecdfaa7d34fa9597e8fd0bab7b3bf9def4c1e4ccff3fbd9830cd0f6b3ec7c32a1a1eddf9f822d7789dff6cf2724ddb3599eef7fbaf330c79c3edc7b781f92b1bd7bff0111643a7bb89de5c49639453f07f9cecebe38e8d32ca301cc48cc1f7e4ab2704ef391cd08daec016175b0b3ffe9833dd08d1cb6877bf7213239d1787f9f48961decdedb9ee494a37bf8e041b69b43000f7676663b3975753f03ddee91be993c04ddee13c6b307fb3b077b98d307f7a793d9fde98c26fc1ef1db847cf2ecc1f983ede9ecc139b1cbdef4c14374ba7fbe7b7ffa69f6707be7de94b877ef218d94b8629b2660ef3ebd7ffe700ac9ca29a47bf880e674e7e1a734a7f7761e6e1f109b6ee74400e25d7a6d021d42a2984d770e26dbbb0720dec303622410effe6c87084241c5de43cce964924f76f7482f1c1c80df1ed2d4d3f2ebee767e3eb937dd7f38bd77ef53407b30dddbf9f46092313284dbfe647b322195495127cd4b36a5a16216a6f90352afbb13d26f39894c7640cbd007fb146d3ed8dda58f69fe3f8564ed3c389fdd9becccb677efdd2771fe94e8f690be85e81f7c3addff343f7880a9cf1f7c3adb3f2731a76888e8467c4043387fb84d73726f373fb8774e134bcdee3d3cb89fdfbbb7bb4d1383911241b2ecc13de2907cefde7d22fe740add4b4cf580d8fec1f6a7e798fa870492b2afd36dd2cea43477b307b31c93b57f9fb4e4830739e14c2c2c8cb43bdde7e1ee92c34623461a856c11195f638ac8529195932cc1ffe7d3090f1edd7f382613766ff7e1bd9f8d74c2feee98b41fad3bfd7f746588e6cd85fef710fa63c81ad5de1a16bd22ce4e249f60817af9047205c9c70587febf299d409921ca25ec22ef4422b1299d704ed8dc83d0911121954aa9826d42870c18a9a33dd25bf7ce99737e8ed209fb944e807d90692206d4089e1189b24a94ff7eb6d309644b77cec91f2381dddf252f9530fe513e8106f6a37c829241ff00b29604dc2a2000bea6df9900fc2dfdf1a37c025efe21e513f6a19f7e944fc097ae150d17f984d719270b7e169309af8fbf8b168de7a8fdff3097f0a35c0225097e944bf8512ee1fc47b9044a0a6c5398fba35c02f9fa3fca25fc107309078ff6ee8f77897549cabff95cc2fd477bf7c69feedfdfb9f729412732fe7f3b97b08fb01f9a4543da5bc3a257c4d789e4122c502f97e00701ffafc926d064eed164d2a7f730999bb309fbd9eeee3d52c0e40890d62763747f3b9b3e84269f9c9301993ccc6710c09fa36cc2fdff6f64131eee9eefef4d77a6e4249c9f3f98419bfe289b4003fb513641c9a07f00594b026e1510005fd3ef4c00fe96fef85136012fff90b209f7a19fbad984a75fa62fbe7c933e3d7d7efae634dd4ebf5b905351e70d19c3b458a667275f90a37099eed157916cc328fda02cc1eefe3d8c9c7ec082dfbbb7c33ee93dfe90623b50ec530aeee8c7839d1df85df4033edf83dd87f8f0e1ce3e9a3cdcfd14df3da408847eecea1b7be6e7839ddd074c13d255df7c36e26c495a8afc263419c8453ccd97428faf9f8a78fa040d1acfcd1bc8447cba7bf0e9413639d8de253f96a2889cecf0c3f3f3edf37be48453c8b6471a97884251ef3d8a5bc9314560b24f912e857c14ebccee539c414ef78309ab61f26567f7f6c9723e38e760e33ef9af130ac177eeed4f1ed06c9129c5c4ed51c2fede39c572b38c2ce53e850e64330f283edfd93b9850b032d9b98f66bb7be7fbfb0fc8efa3f0130e3d854ae4e1ceb6f72846d99deecdf24fef61c2a6f73e3d9f3d248cf2fb13b2c0b37b641d2607f7b7f7f2fbf7285cdaa16402a288bdfd7b934f1fd0203f25cb44cdce29acba7fffd36d8a93f37ce7d373444cdc2ccb77b2bdf3edbde984fcfe8cb0a438eb218555b307bb936cb633bb8f4e27fbf70ff62664ec69c434521a3f459cf7285a98cc76f73e45e4be07689fdea740e8fcc12e250b2852db0782f41a454e9fdea33cca0e45431ccbd1a2d85ef629217ebe9713413edd27681372ed29c8a760f6c1832939b1d46cf73eb1fc3d222f85e384db8c22c383734a7f64e7941ba05077b67f0f51eb837bb33d8a41f6b6f307b4e4b33f7d489d6639d1ed9c604e0ff2ddfbbbf0ad0e3e9d7d4ac1e583edfb9f52a8b4bfb38359008d77b37b19796114e640313f7c90519c4881dec18c42d7fd739a8fc97d4a58dc7b98e79f4e684e8914d46c975c248ae91fd05c3fc0f8a614191e4c28b47bb07fef01d16ab6f72946fae9f4feeea75332e5e7f7100851c2637b32a5d99dcd7611f465143f62b2281cca7767f73e25181482ed53ac453130119a522bfbd983fc7c96ed81203b131a3e66873c049a85ec21e5351ecc2848a771decb2831713e03f75282253b273cb63f259784a051b84639871985f17b7b04e0de6c8747ba333dcf29eea44801791462799a7a4a19818f09bb5976be43ae3fe1967f7affc1ce39a5b40e28da4394b04d48a2fbbdbdfbf7c9f9dbdf43644890f7890c0fb61f4c774964f6288f927d4a533ffbf460764e2c4f311f989c3ca4839dbdfd2989127939fb3451e4e01013ccc801dd39ff74e79c02676a362167f9e02185d0946fa266130af93390f1de4e461331fbf4d3192bc14fcff39de90e41cba6c491fb34e8ed03e21a9ae28c268a923694f0a2660fce334aec10fbecdda709a7689f722e0f88fd28da7f707e4098119da819f1f784507bb87dbe4f334919068aa40e889bf627f7f25d4a50d17b200809f1fe2e1cdf7cb64f9345524cdc4bb13c324b939d9d19e5ece0033ec81f4c1e64940fd89950c6607f4608521e8866619aef4f0f4833ecb2cbff907257bb3bd4df01a14cb4a718f8e0de8ce66e728f740411f4de0ef8edc1849203134a3d12031046a488681628db43b0330a0a7392108cf4def903625142fcde3e71fa3e59c5ed6c9f524cf7a6c4e5e49b52ce02237d70701ff4a121508c48b3704e43d8a334e5e49cc2f4f3832901853853eee15e3e3b8074ce8820f7a93f9a647a8b72047b339217fa839a513e6d464cfa603bcb29b140894d4407a463cfcfa793dd5d8addf7d8f21ce40f735a77a354e7794efc46113e4ddb8c7afe94f20b9f7e9a9f3f3c076e9303e44c284ff829310acd02c9e9649fdaeece76efd120f7a79feea153c2e6e13dfa64fb9cd2af24f550353b145b11d792cb95911abc0f1fe8e1f480d250c8c54e08c1fd87348e873b14f0dc3fdfa1bce86cfa29a5b6a819299ec9dea794d4a3d4083abd47b9d81dcab990b978403340c3db43b307e7a4892930229540194a6a4aa4d9a5642a1190b215f71ede9fcc3052d2bca48429c69b4da054cf697df6614eb39b3d40bc3723f2ed42160ef62887749ff87097728484dba73484f34f298d439c46c39cec3cc8d0e9fe8307d48cf27613497a529036399810e7edcdce41b587b33d7008e5d00e0e1e902dbb4f924bfaed3eb1d48c5281933da415e9c3fb0fa06af6f708853dfa92a84c232535b44df9374ae3927221ce2613728059b897e514d6512878ff80b4f3fe3e6570269499a43f271905800f0e28934dcd281539bb778f92857be76cdaee63eaf7f2ed07242f243b076443602877698ece3fa50cce8387073404d246c4c704972cd4ee0e6594c936604e299547a681b2b5f72867456c49baf7214d11a49e388d940005a5d4ecfc617eb0bbb7b74fb30382ec43ea77409f1971dd3dd23c647cd16c67f2f00175b0bd7b9f30a29c184d0059d2ed07f7ce490c32ca37ef63b266247f070fc99611df12b4dd5d4a056619e5c6ef11d533a2232145cdf6c8d022c7b8bdf7e94392d373524b2003d9d3fc80788b26611704216bf86042ea82be0423912e250b4893f230bf4fccf39078ea219add3ba04cde8387945abd47a69bb2b394c826a6df9eeeef4d1e92cda1940e540db923f748717cbafd80e698a6fe9ca0e59f928e25d39ccfee130330f766f7efed12cefbdb7b3be7a46a28d14c3c4496fce0fe41b673ef3ec9d50e668188739fcce601a947ca18532691d8fd01e663b24b99d6877ba41e30d27c7fb677f08074724658929c926a23aa6684eaf4d3dd3ca37cd204fa2d3ba79769a9609be68a464a6b16c4216421f6482d4e68c80406fc46e9c54f67482c902124dc683c200824969613a664a73e3d80e29a11db3c24454419119a75ca29930012c76cefee910ff030a7a5972908727efe90962ce8cb0707d0bde44e50be9b8cce3d7291c9a323c3b08366f70e48827649691c90206eef4f28a5898406310c65e1f33d6ab88391ee1d9035a2fc21a5292734041a34793524d8e413cff25db292c44fd48c8cfbfec1840ce8de9498719fc60b57ea607b9adda7242bb1c9bd07e894f4d2945651c81c938749cdc8453b004b4d90dc7940cec11e6b24b279245b9475ce0f4891107f91de243db04d1e599e65f73f3d276d40cd28f14eb68fc49c5426a91af29d487191f5222e242543aa8e4c0d352336be4fd9644a18c073dc279d4643201dfb2925ce0fa6a4d41e7c0a5978907f4ad2088cc81cd3d4ef909cd2f202adf19c9f679f3e981252807640cee1a7397d99510841d08820d9a7f7899977ef9defef4ca73463503514d166f7c977dddefb149deed18a0825adc9a97e40cb3da474f6eedf0334d2bd4448f2280879eaf453327264c3ee6f7f4aaaffc1fd4fefeded70a794cede2788c4fc44189ad319793524c9db149810df90c1dae3a53522f339691aca9911eb10879047420b0224a7944c23de3da77904ddc8e798ec912ec3ea17cd023973d48234eb94f2d484e3c37dd239d4ec80246cb64388ef64e4b0efc3a81ec067a5bcf501d9221a39437bf880eccc0e391e3bbbbb3459c4a2942a23a5faf01e392d07e7f729c90668c42de4a4934b9091fe20dc7648f6a60f4915d3920ef9e0e47c7d8a913e246fe99c42108201076a424ee3012d9a6c5366fe5e46a6688fd40335239592d378485a205e34f524ce33e2ded9f43ca3c5af5d72bc20ce3b5029e7a42d77c9ae92463a203bb40fef8c5cd3d9ceecd37d92506a766f774a8b88c496c4c684db9492c40f33ca67d274901490f69a4e3152f28c72420bd6801632f6f35d5a81fb140a7f87966ac864c00c52b373ca419198120c483299265213a4fbb6c9a8cd48bf9043b50bdca634a30f49d1c253a521c07c907b43e111f1d0ee2e89d03ebb52f96c77278710e70f6991659f16ad6802c816523691a4349f3e208349cd3292b2e93d7263690996a0cdc8309377840439ad44dd83a7f429246b4a92b3fb29e964b226c4487bc41cd43b4dcacebd3ccfefeddddbbf07dcb29d5d2cc28120a4d5f6cf2972c83e254ea0f4faa79fd2349c93074fcdc8a1c91e3c04f7eed2cac5fe7d5819d23d24152421bbb4bcf4e92e9acdc8413a9fd2d4ef91bf8a21ccc82520db749fd683eecdf669f92407797749013cb8bf4fb68c127c445eea9e04981648a6a4cb29f7b04bd4a766e7142d91aeb8bf3d25379dc84b9a6e42da99a0cdc8ac82c53ee52110aa59467941c485c4e43452d28be42de73b7976707e8f040a9d4e68e185d630410b62b5fd3d7235c82cdddfce333230a455f71e9ca35372b1290c241534a50517e210e2b703d2dfdb3be7f7ce3fbd0f5f7b021d329b91334a4a966c7d4ebc496f90c81cd03ae801b111d9068a79012d279bf929f949a471c9efd9dfbd4753bf4f8cb47bbe778fa2ebf35d721ea919919a540f2d5b4c73d232fbb4484c93453ed28c1880064508eec350cec898ddfff421f9c33ba03d2cd2242704490468f98d78f0fea76072528db3e93e698e87a45ba953f243295ea045afec3e29d207bbd3d9a718022d8b7d7a8f1602b777697d96049062ceec80cc12c5a1c49e9feedfff9467819c19f2cbc87c64fbfb34f5e7c4bd137213c89d9b3ea4f97e484c8dc0136b55fb53327e842a35a3a56062351a331936d2339491213f929a9176a615538a6048e24871e520cd3d5abedabf4fab69249c641f21f57083f27d72a5a639adbb91f522513ca76639ad1650644b2babf7210b645e69310c93b84fd3491c426a70f229792f9f4ea6f7f7283abacf4b9234957b39292252b6a44a093f62cb07641ceed3a49387b7f730cfd0e93e39a80f6838dbd98c52cdb48244ab6a641028103c9fddbf0f5e3a40b39df3c9f4def994343ccce03e7893221b32aa0f3fa5a89328b7c3ebc7e7145a52b6815c822966e13e3998645176b6f7c8487d3ac338cf41905dd201d34f4971d17a23353b8781217b4e3e128d913895e22628070a8b888c7b2498f7281ea2281368c191c848b55380978b26272db14be3f9946c194cdb2e74efa714f792cf794e8a8bccde3d0c614a2ed26c97b45abe432b8cc448a48569597c9bdc9b8c321b0ff6882fd1ece1c10e118ea2b603429c82144c16492cc50af732d295b4980f01241a92db4971044125bac14e93174d72b34fa660679f42b7fb10c0735aaea7040fe146c1210d6197b897a0901f826c0659506a4ccd7669213447044b2e0be910f2eeb733f263b7777789dd0ea6e4fbb2e7404cb077be47b6ec01541b796d1414d39493d2f9347f402f1c90d2a0667b942ef8943c9bedfb9fd27230c59aa443c8254654fb694604392087959a1d508041610c79e2e4726fd35888bc3be49851f2e5de1e5956382c689653744716767b461124712f99a5090581dbe49d9003484ede8329049078826c203945bb0f81db1ef953641766b48affe90e2929e4c93059a4cc28013521e627f9a0667b14a490ff41ff1cec5032e4e060769fa7fe9c968f39faa0c085dc15b29134a7b40cbf436be81392349a2d6a467a78ba3ba3908ee68cec0259570ad84916a67b243394d3f9940c1d352339dd25a9238fe21e690ef26e69b248d0b767f7292b307df0e9c3bd29463a25df67678f6692b892bcc13d12c5494ee1f894fc8983d9ecfece3d0d522812a765eced07b4c846e3a024c56446799d03e23ce2729a8b5d0c61ff53222e9c6df25a08da393107919fa2ddd91ec5e1d93e85f510995d72eacfef51828090a72190cb4702487ec8bd87d34f4967edccee3d40b30362ee870f48f94d497208da434ae990a74472b34f211525101fde03f7521842a69d64e4de3e2599c81b04875048f0801c1ca2edf4d3c92ed8728794f01e4937e5a248cdef4f28cece28d346bc99e5e713cc04db8507944da4d4090122d349ff90505150436af0c1ce83fb945ba06c2970db271f82343ed9321260e23712aa87c44424320f773e3d206dff700ffc46bee1f98c94fdf6de0c933525de9c1c9025dfd9d9a7d404e90aca485033ca77ede1150afa8978fb640ba0d329ae3f38dfc9c997da25f340cd604ff7f6484429e82304ef51e84ec12badaf4e291f438426f7006c3923df6f9fb24f44cf4f8991c80320df92b228133235947ddd25a711cd289d488c437c41390de25ef050462e10d9b7bd7d426b87a409049911272037464683d20d941da11694c7a2f9a0f03ccbc989fc14cdee7d4ab12d29ed6df29448f77e4adec02423c7956682fca50991e31c04216a9de77be478ee1e100bef838234028c991c805da2fb03ce2351ec431924ca2350a28154cd0e79e70f29ddb9bd4bd664e73e85f2c2bd6467a794f4012391f34b06ff21e146ee236557289aa664f6fd5d08e001e516a619e9fadd73a89a879473247fe1c1f6f43ee5e5ce49bb501e9c9adddfdd252f8926f180a68330229f2ca394152928f2e0c932928d8046228edf214780f2969f92e5a0c09398e0414e0a7f8702bb03621b0a69a85946b68354e1def639b991048d829f83834ff3edfb7b34d734af34b118c2fef9a7d319255b29acc0d453f84edd9377be3ba1d0f49ca4863435359b511c7d6f8ff4dea73949c0fe2ed1f8608f543f455994b8fd94bcc31d749aefd2c4913345ac9d91c2a701513281a6628fc8fdf01eac1c33f9c3dd3de25e5a99a75c0db1e5398124ba912b45a6fe3e8573943e85643d245d492915f21c3290971c7bb2ce1482521a89acca3df245ee41231ddca7fcdffe03726829d74d43202fe32145eaf8873c500ab9c905a2661979b7a419c9cacc68c6f6699d974c290d9cf0206ff3e1f9eec13da89a87e713ca18925e7840da93e8463d6707241a0fa60f49ddde2767fb017235e75352cbf768c229854c1a89de2646ba47ea6e7f679f4486fcdd3de0465e14797524c9c45e24a7fb1829e50f48a667c44534987b13f0db3df210f624b54c61e53ef9fb6480c9a9fe94dcb56cf7fe43f2332080e77be434524a9c669268c1e6837e9b51868772ee24cc941145b37d8428339aeb9cf29ddbfb9f926525a34ed42656b8bf4340489ea9196572763ebd479398cd48eb53d28f74d38c2696b2c2148e3ca4a07287a11dececed52e26a7b4ab68270fb9418744a4938b239594651fd6ece534f8b03bb337260b669ea495b4e492166e487c351a2459d7b7b7b147252331a37b106f1ecde3d0a41681248e99041a570ec5e463c40c9f1876846b6f4d309c546e482923bb6bf4349986c9774c81ea9da197994945ac52c50187e2fdfa1b4c9e43ef137e92952f894f0a77c48462698945ccea957d2cca4d58964a491897b1f12694833532c43b9628aa1c82160e78764813436a5c828d34fb8510847c688f2aff7f7c810114d4924c048fbf748bfc21ba0ec3b757a4e0c8af4dcf694fcdc7b9f7e3a25b18638cf906085abf880d28f048d588a6697e253b2ace7486dec72a7641288512936bc47469b6601414a46bc392587ec608f3ceb7c1fda92c22d72b089ec347f44908c7a7ef880bc5a1a779e4f2950db7d80397df8906481ecc7f61eebc8030aff26334a85914d9b7e3a21e7e0de1e9a910aa3e413cdce83f31d9afa7b145b1e101db7f726a4b1260feed1ea10e474f75362731adb36b95d34848724b10f0f48641e502e871402bbefd46cff01653067e493e7a432b6d90fa1c531d2e9f788df7382792e2ec13e999207a4d01e50dc4e169054cd438a3c480de607f91ea54af738dd743025af8ed2aadb33320cc46f84e5848c1fb9f9d4e7842279c2969a3df89408bf4b4ed184d27b048da2c18c8221ea94864eca8c5288d0bd24890fc8752513442e187d49b33b810dd99b9102a17402e5fba1df88f8d3d914110c1260fb7be4bf93c9a0b624160f1edc7fb8379b60a4a4f01f5060462385b49081277e3ba7e8e38052dba44766a443811bd4164d352dc49c63696997f89b5408048d6c11e517c9938172a064c201ad24502c43468aa091a34c6129d9de4f3fbd4fd974f8498046ae38bd44cc710f9a639f3c4db2f5449fbd3d5a00a030f8c1c35d28ae9c4c0ab90a94b7dca7908e2250927a3205a448c818ee904ff7807508b9ad144b51d8b44b395662243257246bc4a550e5fb44aec93ea6fec1e43ccf49b791c8c066513445b340cdf676ee51f69482dffb13b0e5ee0ec5a10f49ea894fc866919a21f9a75510f2828803c831cf3f8500ee50d6e7210d7b9b9c2810845c5e5afb2026d8a7d5e01d9ad4dd7b8817ee918622ddb743ab8ae423938341734a3a9bf2457bd92ca7bf1f665035945d25b9279570401343ca8122bc83dd07149dcda69f7e4abd90f4a2d9f96c46a90ee2c8bd8c284b524f043927578af287fbf7b319c5aa07dce90e052994a223d9230f6fff218d940c10c92929db4fc9d2927430f752221c024d0e06b9e3fbf789430e24fd478a85d40bb127cfe9fdc9833d8aca69122985b04f9115a941445c342ed076871616a9d97d5abd22fd42be133d345252461823e527cf491950f0738fb99728433424bfe780d2c0c4e4940fa1a43662e729713c12ad19a69e9cbcbd87505c64ba0837ca47907526376ffa7087b205f7a84b316d140bed7f4a01145915d26fd40769679a94c94e764e667c779f5240d4ec530acdf629b3b04deba3442d242f1f66941421ed414a6b870cf4a7987a8a79499c493950a2873884bc7f82468a844480b2dff9a7e4d8a019e1408245d0681d8070cb60281fecd13f647b76a7c45714345033caf2d02204599fe97d122f222f890131c5f67d326c94fba6d962cf81a22d9a2beaef1e39853452f2ce114b12b45d52c453ca29ec82df285dfce0d319f9bda4df69a4e4e7932453da84b09c52ec4ab130cfc2a7942da38890d6c4691586e27af2596908c4c2a43c481ac9fd7d8839a524f33e4d03190dd26534048a120f60432865423e7d4679f25db82b079f528041f966ca1e930b425c4286923c3b72dd3fa5707b4619585ebed9c3022ad2c50f7791e33a205f8f464a7a8ce2843dfae61e05c0d42c3b274381b926a3c16c492a9a5203a459c9b61f50ffe7bb6846c9907bf7295f482688622752db648ceed34ac3a794679f51e66646212235a3ccd9c3872436db94d32282502fa44f89130e68c1f59cd69526930938e4d3693e9b7c4a398e8c2c047108c56f9373ca063ca02402ad191c504c07154d7a987c504a2d1fec111948dd10a17789e73f253b719fe0e632048a68669459a7393d2747709fa8489e313128f9ecf7b2fd87c8ec6316684d9f6c01343c0590c4e46412b23deaf9de2e053ce794732779a666a48949fb92b19d521c4f3349bcf9700661bdf780c2f2fbf00231590f682580dc1c8e3489dfc8f1247e234e2062521282021cca0053b387e49fdfcf3f25324cc148e4c890c4522a34a34520428f3cf53d4446073459f773f201ee7d4aba7e7f4a84a66898a6989222e4b21039581626a4e7c97c4db729f8a291eec0aba12892b276e7f7677b7be44acc801be5f5a60882289d42a6747f87981c8b0a449ae90e059b7b349318292987e914113a692412c08cb46506013cdfdd2336cf2892d8879ce6e4c3901349cb13b42041dc4b327df02969cbe9438ad248ab3dd89d0137cae63ca4bc303c0758c0090d92028c879493d921378fe469ef1cd028d7429a17f9a58c32a61466937a9dd07cdc27679b0c774e110d989c2cceec1cd2495a97f8ed80e66342e24dc3a5e1902b32211a5133d2282479942227fb4ab340a9407257281d437679b67b3f27bc79eac9c21192649d1f923aa46624f09440d8a565af7dcaca52da9e5c486a4634247d4406941238c46f33f20bc85d2115fd80f29ed39d7b0fc8bfa466e7d99456d3489e282742c4231f9634398579e79453fb94d651ce8951a819b985bb0f0f8819c90d23dcf22989f32e8552b4c6b04b934a01dc3966614a4e077879fb414ea1300588c46a7b3470f2a90e1e4c1f9061c821323b0fc9ab27b346793212fd7dfa723ba3a423394a9481a3f5494aaa0037f28f482e2906387f0013f49032b4a4844834284b433c7a8f022710843277bb073919824fcfa11c88f01414ef91bf41d94df214f7ce29eea76688ac88c96909986c19694b84c73b94f9a7e8fc01b9010ff27b0f20803431585c268736a3a89de212c28d9cfaed738ac3b39c7251e71328555aab244a527e9192954437523324a7649d27f769bd7697e4885c7d6ab6435c7a4e2ba3e439c002c2d9a6fc29597212380a2fc866efa153b224a49e485d91d7458c744efa86849b88979fef93e7b0479202baed52a2ed21454af425a5acf61f50b0fd90d8629b420d72f9660f685d1a6c4943a39c","2365041fde87a73aa5650fb28504978ce97dca61502c8f39bd4fab37e41a92134e191c222fb57848fdd302c18442a3839c027aa8c1fc3e8565bb94ded825df866481107c483a93baff74774a4a63bac7b91ad2bc949d04797749bc68ea29d10127ee7e4e396fe2b7fc0113e4e18cd414b130591f0ab1f63fa504f1c37be40be5e487e694e927071f53bf4bee2f85700744768a60c8ca107929af427a8cb899268aa602b83db837bd4f069a720e0fc0bd0f490b939f42ff909f76ff0159764a5152334417e48a10a04fc9e525dc6802f6c892530aec53120f5ab438879521cb43e4a59ccaf9a72008399350af94ed789091845066f5fe14cde0433ea49c01750a570a298f833d3299d9f42179b70f681e0ec021a433295a24c6a5889b08724e867242f110a5bcceefcdc8ac517a8f713b9f7d3a233d067b4a4425ab47a248a6ed21c513bb0fc85325078a9a11235316764a3e27296b62f22919126234221e2d6d9e9378928f4acd485b4f2906226b40b128464ab10c65e4287c38a755b41929980338b4e7f768f2ef13d9cff7459592fdde2301a4688144f8d38cfc5840a3f4cd3e65c228914b9687a09145a2acf00e0d818c1899300a6678eaf74036b2654c54fa9c8cf81e49c56c4a2a82d2350f289d4dcd48123e255d4f8e2e162ac8ca90eedd219bf5905c4ed268946ee339dd254b7b9f924524ce648248f7929cdea3819383444ae9fea7fbf7d85dc9cf29334ff103214e3604512b669dd4121981292d2f92ade14e69e9eede3dca8e52304b0248dc032c41909c1cae87b4acc1ba774233fc608702768a9068ea0f486e1e22c592e77b145acd48d266e894649d66813cae7b14a429bf21f54a84b8774e7ee1a7146d52b3fb14ac93359a6def927d25ba51a49aed9368ec67b4744be68f660b23a5e0875280843825aaa9d37b94429aec5304b44bb12c7982a472396d42f95c3237a46cf728e541e24c9c4796e3fef68cd6271e509e95e2090c818c06bd4dd2f2298557d42969a4ec3e3971b37bfbbb14e9dd9be6fbe0de9c5207536216b232f09128b34cb851c445b95692f79c9c8f8780464101a962927a5a882335481122c580c426932919fb7b14bfed64c08d162f1eee4389670f91d2a12c26a673b2bd3b23ce25854f430734329a640029a2a0d74800295c2559a029a6a5e529d919f2280f801b79f7c41194a8263784b8977c498ada480dcec8d4d302c23d58426a46412cad7093f7798018607f42e111297ad2b1194d2ad119a9466a9693bb4b5e011923d251db14be9046a2e88f5c821d4aa8df27f69a40231187517e0f9d3e203f9b329fd4e93d326114105108464ee4fe39fcb72916b9c8e722730cf371402661f290a4624a94227bb14b590fcc297902d3fb24b8dbf727640df61f520285a27fe2104a59eeef91a7b4cb7e6fbe3fb93fcd288e24a120be2035bc4de24f7101290d5a9f20733a43a71411ccc855263b4b91201923a2310502a404661959d24f3fddcb98df2889b5479c976d532a94c87b9f3c601ac27d5250d3594642b2f7601f93759fa6989c36cacb51c044524fc9cb09c5ac9403d82335408e13394768464c41f11d61f4291212f7a93ff2df28d348decb040b07e43350339ac93c23ef8b5434312eb952248ac431dbe764430821cac53123d112124d3145e819f925dbfb340650968294873bf7899529c5c9f990fb14f150c7c48753f2daf67789349373321f5372c2493f93d1bc0fbb70b037c91fec5398f6e97dc49119c51614fe93873025d7edd33df2880e30527a299b92c9213120e78e2c020d8672ae94ab3927613ea07cd01e268b5430596bf24f281ca521ec3e2497975896ac25858694becbc9eba266b440bb438b1f08eec81aec538a98e84652f829c9e22ef12405d2c06d879c907b945adbded9a5009a92a5a4df48d56de7c4d1f7b13e46e6979a4db309a9011ae98c268f18897243dc8cacc67d3218f748f9035a762fa7a92317849025e540e244510d19d51d92c2fb2468d42d7b351412ee206571ce0b2ef7892329a74a7693560ac827b8b743ebd2d48c16a90ea6f0063fdd076ef7499c499c30b1f7ee9325a634d33e666187d648cf11f9519a8770cb49df501efd9cde22a332a3c4cf8c6d16450fe455430276a83f523a64c469bcdbb31d0ab067bbb46622898efd03e468295e38a079a2e09b5e20cbbdbd433a90f2e294e39d819148059301a359ff740af738a7c5205a5fa005655a0c9c5228913dc8006d3f23134eae19614f696ff2df88dff6c99e3e208543becaa73b94a2a266b4ea45be28cde9ee7d32f3fb537268298b3d256f904840fefb3ead1750b329450794be223147544aaa86accc8ca0911345d1f2cefea70ff640b707f748c6ef436472a2f1fe3e912c3ba02405053cf4bf070fb2dd1c024859891979c10fb7ef67a0db3dd237b42a4823a2b084523be44aec614e1fdc278ff53e9915920ee2b7c91eb9eec8fc4fc9bd2376d99bd2b20035db3f2717ea53f20676c81a939c3ea49112579027bf4b0b94f76986a690ac7c97567b1ed09cee3cfcf47c9be2685a862036ddce8900c4bbf4da043a8444319b524e83143e88f7100618c4a3309b08428b36b44c8866b486b84b6e15e1067e23578c864082460b6df7a69402a0342da03d98ee910da77808c8106e94a4984c4865d21a22cd4b4696f700b3405e03a95732ee14fd91c8906226ba51aaf01ef902f431cdffa7902cca33cec87f224349e69ad420d1ed217d0bd1a7e8639fbc9507987a2426686532df268f9fe8467c4043a0a5259a130a270fee9dd3c45233ca5453e440f1104d0c464a04a1b09616406930f7ee13f1a753e85e62aa07c4f6147a9f63ea1f12485a799d6e937626a549ebe4947fa566fb9482cd292c209c8985859176610169b89491cf69c460a44fcfef93ad23a927254723258f9a224a5a1da55ef6288b0f5ffade47dfff25bf84b44dde4ceb62d516d5f2a3471f1d97657af2c9f159fa7a3db19f37e962ddb4e93cbbccd3559d6fcff2f36299cfa4e18bd79fa7f5bacc9b719abecef374deb6abe6d1ddbbd9db6cbc68ee2ef3b668aabbcbe6a249cfab3a5d54759ecef2362bca86f05cd06fb3accd3e7af48b3f9ad679d6e6b327d7840731114906c2091ad5f63edcbb87e4536fdfdb231330a198fec1a7d00cfaca97407d6f87742f69f4bdfd377bbb8ff60e1eed3f18ef22cebbf753d472bda26ede0fb8be6280d35a2b656a3f7db37bff11fd6feffef8e0012d7aec7efa531f1115f3250d6e9a2ff265fb454546f2d1474ff3f36c5db6f8b298d1df7757757559ccf2bab9fb4531adaba63a6fc75f64cbec82dfbabbb0bf7e5e57eb5573973297943c249b44bc0bd34e89e58303f21b28794bf1c97d4ae63cdc8b023d5eb7f3aa2e7e9061eeeeaeaab2985e1f374d71b104f4e6ee8b575fbcdea669db7e7af6e274fbf52b723cb62f45ffb4d72be07e6b58f4ca325be0950d40cb6acaaf53ab8cf8a8ceca226b2a029c674d4bdf37d74d9b2f9e2a1794f42191b0382f74b63021642fc914ed913745c949725b48e2488b3da445de7ba42a1e220a0ddf7b2303395ead0863e93d6c72dcd2d7fd59dd1fdfbf47e991fb0734abbf64f48b69eaf2655bb484c72ffe685517cb69b1caca33cc27f98d0f29b34fbe00ad101027910741b907e402c9cdd8fd9462fd1c836ff365b66cf98d077bb44c4e9918924418ec5df239c9a84db629573b9ded50b0410b5e7843507fcd54115ae733b011cdf52aafdb226f80cdac68566576fd42c8bfac17cd3609d93644911cfc4f7fffdd31ba9719235e2c9605a8c08844b926ca8a173f0bace89069ee52b288c25e4a6e9065dd99ec40ab36531ae57b21f91ef242f057594d246b092ea89895657595cf9e2b8bf2679759b9260cbe47e662096e5d37f93a5bd1abe0d775b3a77f5de54d6b5bd0dfcbaa6ee7fe0768c0bfe0bdac299052b102a00dfd8fd08cfe9ed2c028496ebf67b8f91a934f7fe9e7c572c6f07e3a5b654b7df12da956efbdf55b1632fa4d3fb3b8f02f821d28725e674bcaa54b23fa9b5fcbce6b121cee9b3ebac86ba2f7b5f9937e5e65d700457f345745fb83bc2eb3e58c3ee7efd7596e7e65606839400020603fb38de943ea9cc8a07f00594b026e1510005fd3ef4c00fe96fe58bfd54fe9231d287fa5fd320d2675f603b243f898fe427b03566862bee19f421134a24f9420f84b01d2873466220b3ea33f8806ee1b8f46faf545594df82bc181d1e1ceb92ff38736e6df1db4f55bea891be91c63700287ffc488e913bcbc6ea005f0c1ba69ca4bfabd2176cf696c0698fccdefd15f3f5d54dc19def5fe34cdbf4f6a081ae645e5090a2d1d7e0afd54900df43f7efa65fae2cb37e9d3d3e7a76f4ed3edf4bb05391775de90554c8b657a76f205390c97e91e7d75fc8335b90527347ff4d1745d93c61da50d7913ea454cb382949be80f74454e0b4d158bec4b22c5ab6c79215a51fbfe1ea5c3087d0a391e32cea44bda6a5a955e938fde4c5700452327c32df6c27df93aaf2f8b699ebec92e5ca39f942f5dabb325e911f270d0249b029b5e93a7f952302eea9c5bf85f9e2d27d57ac9cabdcd2ec492ba6f5fbf2d5630abaf9ebe7cfdfadb68d4784ed9e9bb29710dfd128e9b62f64f0f324ac6510e91b420e5c42909724ee9857be459531c466bd63032fbbb535af5273f9e7265e46d52f84a711c05309475cc76c9937e306165490e2a1235e7db0f28bfbcbd7f8f72a80f271457d3d2d6e4c1bd1d4ac54fe02951ea6a728f56b1b667bcfa46f10059365a0638dfa1ac2d4520939dfb68b64beb46fb5869a598125e3ac53fe4b6ce28b57b8054ee8c167110b64cef7d7a3ea384328223b293b4ee45cd2879b897dfa794c6fe0e6508101aeceddf9b7cfa8006f9e9ce9482a0192d5866b4ea4299de4ff39cd2010883b819b9c1192df4ed4d2925ba9f1196143cd1022b6544290345e9c7fbe89496930e68b594962329dd4a79031aee648712e9bb93d9ee1ea5073f95d8fc535a7a7848692fca0050f8b50f04e935b2ff9fdea3e4c80e85381ca0519a7d2fc3eadbf91e32999434a52190bf4e913b45a80f1e4cc9e7a466bbe46cecd00a15b99f14fad06218c560e794d3c8287d45c9dffbb3fd7b08451fd0ca0e0516b476f08056fbf669cd93f289945eda3b2798d3837cf7fe2e3c205a32fa9422464af27c4af10ff295340ba0f16e762f235f896217a8cf875820a02cc8f6c18ce2d17d5a2aa2e501ca42dc7b4839405acba591211e21f786526ab4968745191a02a5b3c939a678ed01adde13ad667b9f62a49f4eefef7e3a25834b8b1514dd501603c938ca5dcc7611c965141462b228c6c9776794a4a778845c6e0aa028b0254253be641fe9af19ad2650b39d090d1fb343769c66815642892d671479d338ef65946da025096a4659938c968028d741c908824631182512282fbab3b7470028ffc623dd99522e95c843f92b4a8e10cbd3d4531e087c4cd8cdb2735acaa166d39c164d7668818cf21c44b7fb44634212ddefeddda7ac19b972704c08f23e91819650a7bb24327b941ca1e521ca27d3b23aade7dda7400e4c7e4e61dc0ead139228912f424b30885d8909669fee9eef50aa99d28798ac09b9b4070f292ea62412359b501c9f818cf776329a88d9a79fd27a1e35fb945698a73b042d9b1247521a965691896b688a339a28cac450168b9a3d38cf285b43ec83242341a375260a31696162f680d6be0933a2133523fe9e106a0fb7cf296748734ac9b18707c44db47c92ef52d689de0341488869598a64219fd1e20f85b814744f284047ba68b2b3436bd63b0893692d76f220fbf47c7b674269807dac2751728766619ad3322969865d76cc69c98092c1d4df01a14cb4a7c09632a43477135a2e9b1241efed80df1e4c28e29f503e91188030224544b340291c829ded3c24d9dfddc14829c94b2c4a88dfa365048add487b65fb9437ba37252e7f309b512202237d70701ff4a121504847b3704e43d8a3dc23ad8312131d4c0928c499120af7f219ad44503e9f08729ffaa349a6b728f0df9b91bcd01fd48c92643362524a14e7942da06c257c78d2b1e7e753ca9c5240be27b96e5a2aa2cc29e52fcf69e1659fc2769a365ae69a7c4a49834f3fa5a4f43970a3757f4a8450f28f569849003f25399dd06afbf62ead09d020f7a79feea153c2e6e13dfa64fb9c72aa24f550353b140111d7926394911abc0f4fe521add23ca414204d2221b8ff90c6f17027a35cd9f90e253b67d34f295f45cd48f14c68499132e7a49ea9535a62cc76289142e6e201cd000d6f0fcd28e34cb115916c729fd28ed49448432bf2a4962836a6b4d37d5aafa166a4794909532446a96c525ce7940da7b516e2d20788ca682decfe2e64e1608f1243f7890f7729f147b8210b71fe29e56688d36898939d07193aa5ec3635a364dc443299f7e8b7035a60d9dfc3d2d0f9c387b33d700825c66871896cd97d925cd26f4862cf28bf37d943ae903ea4b5356ab6bf4728ecd19744651a29a9a16d4aaa516e96940b7136999003cc0225d329f87a48e9d303d2cefbfb94969950ba91fea45517ea87d68a7808a494efdda30ce0de399bb6fb98fa3dcade93bc90ecd062d7048692561c286f436999070f0f6808a48d888f092e59a8dd1d4a13936dc09c527e8e4c03a560ef51228ad89274ef439a22483d711a2981f309e69416a10f76f7f6f6697640907d483d2d92d2020b71dd3dd23c647cd16c67f2f00175b0bd7b9f30a244174d0059d2ed07f7ce490c324a22ef63b266247f070fc99611df12b4dd5dcaef65b40c401f110b111d09296ab647861689c3edbd4f1f929c9e935a0219c89ee607c45b3409bb200859c307135217f4251889742959409a9487f97d629e87c4530fd1ec1e2dfc3c7cf090f2a5f7c87453ca95b2d3c4f4dbd3fdbdc943b239948181aa2177e41e298e4fb71fd01cd3d4d3b20335251d4ba6399fdd270660eecdeedfdb259c69b1698756fbf7297b4c3c4496fce0fe41b6738fd6e03eddc12c1071ee93d93c20f54869604a0f12bb3fc07c4c76297dfa708fd403469aefcff60e1e904ece084b9253526d44d58c509d7eba9b6794fee115fcec9c5ea6fcff36cd158d9416228843c842ec915a9cd090090cf88d72869fceee1319c810126e341e1004124b6b04b43ef3e0d30328ae19b1cd43524494b7a059a74431092071ccf6ee1ef9000f735a4f998220e7e70f691d82be7c7000dd4bee0425b1c9e8dcdbbfb74f1e1d19861d34bb774012b44b4ae38004719b966dc8ec12ef10c3506a3ddfa3863b18e9de0159234a0a52ee714243a04193574382bd478b7cf92e5949e2276a46c67dff60420694162d09711a2f5c295a82cfee53e694d8e4de03744a7a694a4b23648ec9c3a466e4a21d80a52648c1d012e4648f3512d93c922d4a25e707a44888bf486f921ed8268f2ccf68a9f49cb40135a36c3ad93e12735299a46ac87722c545d68bb890940ca93a3235d48cd8f83ea58829ac87e7b84f3a8d86403af653ca86d32ae964efc1a7908507f9a7248dc088cc314dfd0ec929ad19d0c2cdf939afbd12a35033cacce49fe6f465f6000e0608927d8ac5eddd7be7fb3bd329cd18540dc59dd97df25db7f7681d9bf4102d7350269a9cea07b486434a67effe3d4023dd4b84248f8290a74e3f25234736ecfef6a7a4fa1fdcfff4dede0e774a39ea7d8248cc4f84a139a5657cf2bd688d606797f8860cd61eaf971199cf49d350668b588738843c12caf2939c52ca8b78f79ce61174239f63b247ba0c4b5a340be4cc510bd2ac534a3e138e0ff749e750b30392b0d90e21be9391c3be0fa37a009f9592d107648b68e40cede103b2333be478ec207945597d5aa4fb9494eac37be4b41c9cdfdfbbb70768c42de4a4934b9091fe20dc7648f6a60f4915d33a0df9e0e47c7d8a913e246fe99c42108201076a424ee301ad846c53bafd5e46a6688fd40335239592d378485a205e34f524ce33e2ded9f49c968427bbe478419c77a052ce495bee925d258d744076681fde19b9a6b39d19ad059f837befd172f9ce2eb125b131e136a59c2e65e6282e20a3bef390b4d7748a91926794135ab006b43a41abcab4acf62914fe0eadbf90c98019a466e79429223125189064324da42648f76d93519b917e21876a17b84d69461f92a285a74a4380f920f786c223e2a1dd5d1221caff51b37cb6bb934388f387b47242392ea2db7db28594f32329cda70fc86052334a2492834b6e2cadab12b4191966f28e90cea6e5255ab7bcb7fb29246b4a92b3fb29e964b226c4487bc41cd43b4dcacebd3ccfefeddddbbf07dcb29d5dacac8120a4d5f6cf2972c83e254ea0e59e4f3fa56938270f9e9a9143933d7808eedda5e588fdfbb032a47b482a48427669cd88529cd46c460ed2f994a67e8ffc550c61462e01d9a6fbb4c8736fb64f6b2239c8bb4b0ae0c1fd7db265948623f252f724c0b4ea31255d4ed9e05da23e353ba7688974052d31939b4ee4254d3721ed4cd0666456c1629ff21008d52ca3ec1de24262721a29e945f296f39d3c3b38bf4702854e27b49a420b93a005b1dafe1eb91a6496ee6fe7191918d2aa7b0fced129b9d81406920a9ad22a0a7108f1db01e9efed9df37be79fde87af3d810e99cdc81925254bb63e27dea437486428c34bcae821e9b34f29e605b49c6ce6a7e42791c625bf677ff71e4dfd3e31d2eef9de3d8aaecf77c979a466446a523db4ca30cd49cbecd3ca2f4d16f9483362001a1421b80f4339236376ffd387e40fef80f6b048939c102411a03535e2c1fb9f82c94935cea6fba4391e926ea54ec90fa5788156b2b2fba4481fec4e679f6208b4d6f5e93d5adddbdea5455712408a39b303324b1487127b7eba7fff539e057266c82f23f34188d3d49f13f74ec84d20776efa90e6fb213135024f2c40ed4fc9f811aad48cd67789d568cc64d848cfecd0b225774ada9996412982218923c5958334f7684d6aff3e2d919170927d84d4c30dcaf7c9959ae6b49846d68b44f19c9ae594d3a7c896964bef4316c8bcd20a1726719fa6933884d4e0e453f25e3e9d4c69d59f7c505e67a4a9dccb491191b225554af8115b3e20e3709f269d3cbcbd8779864ef7c9417d40c3d9ce669410a6051f5a2a23834081e0f9ecfe7df0d2019aed9c4fa6f7cea7a4e16106f7c19b14d990517df829459d44b91d5e143ea7d092b20de4124c310bf7c9c1248bb2b3bd4746ead319c6790e82ec920e987e4a8a8b1611a9d9390c0cd973f291688cc4a91437413950584464dc23c1bc47f1104599400b8e4446aa9d02bc5c343969895d1acfa764cb60da76a17b3fa5b8977cce73525c64f6ee610853729166bba4d5f21d5a362446222d4c6bdddbe4de6494d978b0477c89660f0f76887014b51d10e214a460b248622956b89791aea4157a0820d190dc4e8a23082ad10d769abc68929b7d32053bfb14badd87009ed31a3c257808370a0e6908bbc4bd0485fc106433c88252636ab64beb8e392258725948879077bf9d911fbbbdbb4bec763025df973d0762823d5a9f240f16aa8dbc360a8a69ca49e97c9a3fa0170e486950b33d4a177c4a9ecdf6fd4f698d97624dd221e41223aafd3423821c90c34acd0e28c0a030863c7172b9b7692c44de1d72cc28f9726f8f2c2b1c1634cb29ba230bbb3da30892b897ccd28482c06df24ec8012427efc11402483c4136909ca2dd87c06d8ffc29b20b335a9aff74879414f264982c526694809a10f3937c50b33d0a52c8ffa07f0e762819727030bbcf537f4e6bc21c7d50e042ee0ad9489a535a5bdfa185f109491acd1635233d3cdd9d51484773467681ac2b05ec240bd33d9219cae97c4a868e9a919cee92d49147718f340779b7345924e8dbb3fb9415983ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7707c4afec4c16c767fe79e06291489d3daf4f6837d383ffb94a498cc28af73409c475c4e73b18b21ec7f4ac485b34d5e0b413b27e620f253b43bdba3383ca3259dfbd38f68eac9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700927540ccfdf00129bf29490e417b48291df294486ef629a4a204e2c37be05e0a43c8b4938cdcdba724137983e0100a091e908343b49d7e3ad9055bee9012de23e9a65c14a9f9fd09c5d91965da8837b3fc7c829960bbf080b289943a2140643ae91f122a0a6a480d3ed879709f720b942d056efbe44390c6275b46024cfc4642f590988844e6e1cea707a4ed1fee81dfc8373c9f91b2dfde9b61b2a6c49b9303b2e43b3bfb949a205d4119096a46f9ae3dbc42413f116f9f6c01743ac5f507e73b39f952bb641ea819ece9de1e8928057d84202df76f53f04aaba053cac710a1c93d005bcec8f7dba7ec13d1f3536224f200c8b7a42cca844c0d655f77c96944334a2712e3105f504e83b8173c94910b44f66d6f9fd0da2169024166c409c88d91d1a074036547a805e5b1683e283ccf7272223f45b37b9f526c4b4a7b9b3c25d2bd9f923730c9c871a599207f6942e4380741885ae7f91e399ebb07c4c2fba0208d006326076097e8fe80f34814fb500689f20894682055b343def9434a776eef9235d9b94fa1bc702fd9d929257dc048e4fc92c17f48b891fb48d9158aa629997d7f17027840b9856946ba7ef71caae621e51cc95f78b03dbd4f79b973d22e9407a766f77777c94ba2493ca0e9208cc827cb2865450a8a3c78b28c6423a09188e377c811a0bce5a7643928f02426789093c2dfa1c0ee80d886421a6a9691ed2055b8b77d4e6e2441a3e0e7e0e0d37cfbfe1ecd35cd2b4d2c86b07ffee97446c9560a2b30f514be53f7e49def4e28343d27a9214d4dcd661447dfdb23bdf7694e12b0bf4b343ed823d54f5116256e3f25ef70079de6bb3471e44c116b67a4f06940944ca0a9d823723fbc072bc74cfe70778fb897d6cf2957436c794e20896ee44a91a9bf4fe11ca54f21590f4957524a853c870ce425c79eac3385a0944622ab728f7c917bd04807f729ffb7ff801c5aca75d310c8cb7848913afe210f94426e7281a85946de2d6946b232339ab17d5a8d25534a03273cc8db7c78be7b700faae6e1f9843286a417681d1f74a39eb303128d07d387a46eef93b3fd00b99af329a9e57b34e19442268d446f1323dd2375b7bfb34f2243feee1e70232f8abc3a9264622f92d37d8c94f20724d333e2221accbd09f8ed1e79087b925aa6b0729ffc7d32c0e4547f4aee5ab67bff21f91910c0f33d721a29254e3349b460f341bfcd28c34339771266ca88a2d93e429419cd754ef9ceedfd4fc9b29251276a132bdcdf212024cfd48c32393b9fdea349cc66a4f529e947ba6946134b59610a471e5250b9c3d00e76f6762971b53d255b41b87d4a0c3aa5241cd99c2ca3a87e37e7a9a7c581dd193930db34f5a42da7a41033f2c3e128d1a2cebdbd3d0a39a9198d9b58837876ef1e85203409a474c8a05238762f231ea0e4f84334235bfae98462237241c91ddbdfa1244cb64b3a648f54ed8c3c4a4aad6216280cbf97ef50da64729ff89bf414297c4af8533e2423134c4a2ee7d42b6966d2ea4432d2c8c4bd0f8934a4992996a15c31c550e410b0f343b2401a9b526494e927dc2884236344f9d7fb7b648888a6241260a4fd7ba45fe10d50f69d3a3d2706457a6e7b4a7eeebd4f3f9d9258439c6748b0c2557c40e94782462c45b34bf12959d673a43676b9533209c4a8141bde23a34db380202523de9c924376b0479e75be0f6d49e11639d844769a3f2248463d3f7c405e2d8d3bcfa714a8ed3ec09c3e7c48b240f6637b8f75e401857f9319a5c2c8a64d3f9d9073706f0fcd488551f28966e7c1f90e4dfd3d8a2d0f888edb7b13d2589307f768750872bafb29b1398d6d9bdc2e1ac24392d8870724320f2897430a81dd776ab6ff80329833f2c9735219dbec87d0e218e9f47bc4ef39c13c1797609f4cc90352680f286e270b48aae621451ea406f3837c8f52a57b9c6e3a9892574769d5ed191906e237c27242c68fdc7cea7342913c614bcd1e7c4a84df25a76842e93d8246d16046c110754a432765462944e85e92c407e4ba920922178cbea4d99dc086eccd4881503a81f2fdd06f44fce96c8a080609b0fd3df2dfc964505b128b070fee3fdc9b4d305252f80f2830a391425ac8c013bf9d53f47140a96dd22333d2a1c00d6a8ba69a1662ceb1b4b44bfc4d2a048246b688f28be4c940395032e18056122896212345d0c851a6b0946cefa79fdea76c3afc244023579c5e22e6b807cdb14f9e26d97aa2cfde1e2d005018fce0e12e14574e26855c05ca5bee5348471128493d99025224640c77c8a77bc03a84dc568aa5286cdaa51c2b3112992b9235e252a8f27d22d7641f53ff60729ee7a4db486460b3289aa259a0667b3bb4827d9f82dffb13b0e5ee0ec5a10f49ea894fc866919a21f9a75510f2828803c831cf3f8500ee50d6e7210d7b9b9c2810845c5e5afb2026d8a7d5e01d9ad4dd7b8817ee918622ddb743ab8ae423938341734a3a9bf2457bd92ca7bf1f665035945d25b9279570401343ca8122bc83dd07149dcda69f7e4abd90f4a2d9f96c46a90ee2c8bd8c284b524f043927578af287fbf7b319c5aa07dce90e052994a223d9230f6fff218d940c10c92929db4fc9d2927430f752221c024d0e06b9e3fbf789430e24fd478a85d40bb127cfe9fdc9833d8aca69122985b04f9115a941445c342ed076871616a9d97d5abd22fd42be133d345252461823e527cf491950f0738fb99728433424bfe780d2c0c4e4940fa1a43662e729713c12ad19a69e9cbcbd87505c64ba0837ca47907526376ffa7087b205f7a84b316d140bed7f4a01145915d26fd40769679a94c94e764e667c779f5240d4ec530acdf629b3b04deba3442d242f1f66941421ed414a6b870cf4a7987a8a79499c493950a2873884bc7f82468a844480b2dff9a7e4d8a019e1408245d0681d8070cb60281fecd13f647b76a7c45714345033caf2d02204599fe97d122f222f890131c5f67d326c94fba6d962cf81a22d9a2beaef1e39853452f2ce114b12b45d52c453ca29ec82df285dfce0d319f9bda4df69a4e4e7932453da84b09c52ec4ab130cfc2a7942da38890d6c4691586e27af2596908c4c2a43c481ac9fd7d8839a524f33e4d03190dd26534048a120f60432865423e7d4679f25db82b079f528041f966ca1e930b425c4286923c3b72dd3fa5707b4619585ebed9c3022ad2c50f7791e33a205f8f464a7a8ce2843dfae61e05c0d42c3b274381b926a3c16c492a9a5203a459c9b61f50ffe7bb6846c9907bf7295f482688622752db648ceed34ac3a794679f51e66646212235a3ccd9c3872436db94d32282502fa44f89130e68c1f59cd69526930938e4d3693e9b7c4a398e8c2c047108c56f9373ca063ca02402ad191c504c07154d7a987c504a2d1fec111948dd10a17789e73f253b719fe0e632048a68669459a7393d2747709fa8489e313128f9ecf7b2fd87c8ec6316684d9f6c01343c0590c4e46412b23deaf9de2e053ce794732779a666a48949fb92b19d521c4f3349bcf9700661bdf780c2f2fbf00231590f682580dc1c8e3489dfc8f1247e234e2062521282021cca0053b387e49fdfcf3f25324cc148e4c890c4522a34a34520428f3cf53d4446073459f773f201ee7d4aba7e7f4a84a66898a6989222e4b21039581626a4e7c97c4db729f8a291eec0aba12892b276e7f7677b7be44acc801be5f5a60882289d42a6747f87981c8b0a449ae90e059b7b349318292987e914113a692412c08cb46506013cdfdd2336cf2892d8879ce6e4c3901349cb13b42041dc4b327df02969cbe9438ad248ab3dd89d0137cae63ca4bc303c0758c0090d92028c879493d921378fe469ef1cd028d7429a17f9a58c32a61466937a9dd07cdc27679b0c774e110d989c2cceec1cd2495a97f8ed80e66342e24dc3a5e1902b32211a5133d2282479942227fb4ab340a9407257281d437679b67b3f27bc79eac9c21192649d1f923aa46624f09440d8a565af7dcaca52da9e5c486a4634247d4406941238c46f33f20bc85d2115fd80f29ed39d7b0fc8bfa466e7d99456d3489e282742c4231f9634398579e79453fb94d651ce8951a819b985bb0f0f8819c90d23dcf22989f32e8552b4c6b04b934a01dc3966614a4e077879fb414ea1300588c46a7b3470f2a90e1e4c1f9061c821323b0fc9ab27b346793212fd7dfa723ba3a423394a9481a3f5494aaa0037f28f482e2906387f0013f49032b4a4844834284b433c7a8f022710843277bb073919824fcfa11c88f01414ef91bf41d94df214f7ce29eea76688ac88c96909986c19694b84c73b94f9a7e8fc01b9010ff27b0f20803431585c268736a3a89de212c28d9cfaed738ac3b39c7251e71328555aab244a527e9192954437523324a7649d27f769bd7697e4885c7d6ab6435c7a4e2ba3e439c002c2d9a6fc29597212380a2fc866efa153b224a49e485d91d7458c744efa86849b88979fef93e7b0479202baed52a2ed21454af425a5acf61f50b0fd90d8629b420d72f9660f685d1a6c4943a39c2365041fde87a73aa5650fb28504978ce97dca61502c8f39bd4fab37e41a92134e191c222fb57848fdd302c18442a3839c027aa8c1fc3e8565bb94ded825df866481107c483a93baff74774a4a63bac7b91ad2bc949d04797749bc68ea29d10127ee7e4e396fe2b7fc0113e4e18cd414b130591f0ab1f63fa504f1c37be40be5e487e694e927071f53bf4bee2f85700744768a60c8ca107929af427a8cb899268aa602b83db837bd4f069a720e0fc0bd0f490b939f42ff909f76ff0159764a5152334417e48a10a04fc9e525dc6802f6c892530aec53120f5ab438879521cb43e4a59ccaf9a72008399350af94ed789091845066f5fe14cde0433ea49c01750a570a298f833d3299d9f42179b70f681e0ec021a433295a24c6a5889b08724e867242f110a5bcceefcdc8ac517a8f713b9f7d3a233d067b4a4425ab47a248a6ed21c513bb0fc85325078a9a11235316764a3e27296b62f22919126234221e2d6d9e9378928f4acd485b4f2906226b40b128464ab10c65e4287c38a755b41929980338b4e7f768f2ef13d9cff7459592fdde2301a4688144f8d38cfc5840a3f4cd3e65c228914b9687a09145a2acf00e0d818c1899300a6678eaf74036b2654c54fa9c8cf81e49c56c4a2a82d2350f289d4dcd48123e255d4f8e2e162ac8ca90eedd219bf5905c4ed268946ee339dd254b7b9f924524ce648248f7929cdea3819383444ae9fea7fbf7d85dc9cf29334ff103214e3604512b669dd4121981292d2f92ade14e69e9eede3dca8e52304b0248dc032c41909c1cae87b4acc1ba774233fc608702768a9068ea0f486e1e22c592e77b145acd48d266e894649d66813cae7b14a429bf21f54a84b8774e7ee1a7146d52b3fb14ac93359a6def927d25ba51a49aed9368ec67b4744be68f660b23a5e0875280843825aaa9d37b94429aec5304b44bb12c7982a472396d42f95c3237a46cf728e541e24c9c4796e3fef68cd6271e509e95e2090c818c06bd4dd2f2298557d42969a4ec3e3971b37bfbbb14e9dd9be6fbe0de9c5207536216b232f09128b34cb851c445b95692f79c9c8f8780464101a962927a5a882335481122c580c426932919fb7b14bfed64c08d162f1eee4389670f91d2a12c26a673b2bd3b23ce25854f430734329a640029a2a0d74800295c2559a029a6a5e529d919f2280f801b79f7c41194a8263784b8977c498ada480dcec8d4d302c23d58426a46412cad7093f7798018607f42e111297ad2b1194d2ad119a9466a9693bb4b5e011923d251db14be9046a2e88f5c821d4aa8df27f69a40231187517e0f9d3e203f9b329fd4e93d326114105108464ee4fe39fcb72916b9c8e722730cf371402661f290a4624a94227bb14b590fcc297902d3fb24b8dbf727640df61f520285a27fe2104a59eeef91a7b4cb7e6fbe3fb93fcd288e24a120be2035bc4de24f7101290d5a9f20733a43a71411ccc855263b4b91201923a2310502a404661959d24f3fddcb98df2889b5479c976d532a94c87b9f3c601ac27d5250d3594642b2f7601f93759fa6989c36cacb51c044524fc9cb09c5ac9403d82335408e13394768464c41f11d61f4291212f7a93ff2df28d348decb040b07e43350339ac93c23ef8b5434312eb952248ac431dbe764430821cac53123d112124d3145e819f925dbfb340650968294873bf7899529c5c9f990fb14f150c7c48753f2daf67789349373321f5372c2493f93d1bc0fbb70b037c91fec5398f6e97dc49119c51614fe93873025d7edd33df2880e30527a299b92c9213120e78e2c020d8672ae94ab3927613ea07cd01e268b5430596bf24f281ca521ec3e2497975896ac25858694becbc9eba266b440bb438b1f08eec81aec538a98e84652f829c9e22ef12405d2c06d879c907b945adbded9a5009a92a5a4df48d56de7c4d1f7b13e46e6979a4db309a9011ae98c268f18897243dc8cacc67d3218f748f9035a762fa7a92317849025e540e244510d19d51d92c2fb2468d42d7b351412ee206571ce0b2ef7892329a74a7693560ac827b8b743ebd2d48c16a90ea6f0063fdd076ef7499c499c30b1f7ee9325a634d33e666187d648cf11f9519a8770cb49df501efd9cde22a332a3c4cf8c6d16450fe455430276a83f523a64c469bcdbb31d0ab067bbb46622898efd03e468295e38a079a2e09b5e20cbbdbd433a90f2e294e39d819148059301a359ff740af738a7c5205a5fa005655a0c9c5228913dc8006d3f23134eae19614f696ff2df88dff6c99e3e208543becaa73b94a2a266b4ea45be28cde9ee7d32f3fb537268298b3d256f904840fefb3ead1750b329450794be223147544aaa86accc8ca0911345d1f2cefea70ff640b707f748c6ef436472a2f1fe3e912c3ba02405053cf4bf070fb2dd1c024859891979c10fb7ef67a0db3dd237b42a4823a2b084523be44aec614e1fdc278ff53e9915920ee2b7c91eb9eec8fc4fc9bd2376d99bd2b20035db3f2717ea53f20676c81a939c3ea49112579027bf4b0b94f76986a690ac7c97567b1ed09cee3ca4340dc5d1b40c416cba9d13018877e9b5097408896236a59c06297c10ef210c30884761361184166d689910cd680d7197dc2ac20dfc46ae180d81048d16daee4d290540695a407b30dd231b4ef1109021dc2849319990caa435449a978c2cef016681bc0652af64dc29fa239121c54c74a354e13df205e8639aff4f215994679c91ff448692cc35a941a2db43fa16a24fd1c73e792b0f30f5484cd0ca64be4d1e3fd18df88086404b4b3427144e1edc3ba789a56694a9a6c881e2219a188c940842612d2d80d260eedd27e24fa7d0bdc4540f88ed29f43ec7d43f2490b4f23add26ed4c4a93d6c929ff4acdf629059b53584038130b0b23edc202d27029239fd388ef7df4fd5ff24b488de4cdb42e566d512d3f7af4d17159a6279f1c9fa5afd713fb79932ed64d9bceb3cb3c5dd5f9f62c3f2f96f94c1abe78fd795aafcbbc19a7e9eb3c4fe76dbb6a1eddbd9bbdcdc68be6ee326f8ba6babb6c2e9af4bcaad34555e7e92c6fb3a26c08cf05fd36cbdaeca347bff8a3699d676d3e7b724d78107710cb234e2074b7f7e1b73d246779fbde1ee9f60905eb0f3e85c8eb2b5f02f5bd1d52aaa4aaf7f6dfeced3eda3b7874ffdef8fe7d9ad2077b3f454dd72beae7fda0eb2b063aada2520ef6d337bbf71fedee3fdadd1953be82ecd3fe4f7d4464cc9734ba69bec897ed171599bf471f3dcdcfb375d9e2cb62467fdf5dd5d56531cbebe6ee17c5b4ae9aeabc1d7f912db30b7eebeec2fefa795dad57cd5dca49525a90ac0d71258c36a58c0f0ec823a0b42c451ef7294df3702f0af478ddceabbaf84186c9bbbbaaca627a7ddc34c5c512d09bbb2f5e7df17a9be66dfbe9d98bd3edd7af7629a6bb14cdd25eaf80fbad61d12bcb6c815736002dab29bf4ead7e3a5b65cbabbc69e9e3e6ba69f3c5539dfd326b40b9e2bcd049c23c900124dbb247ee11651bc90f211122b5f490566def91ec3f445819bef746f03f5ead0851e9741434396ee9ebde64ee7c3a3ea0ac02b93e3499bf64f48b69c6f2655bb484c72ffe685517cb69b1caca334c23e9108a4528dd749f16e6b7697d81b22b53cabf93d37e6fe73ead0f673308609b2fb3652b6fecd1ba37a5562859030bbc4b4e2459a9c936255fa7b31d8a1e68050b6f08eaaf992a42e27c06eea1295ee5755be40db09915cdaaccae5f08d597f5a2d926e1da860892c7fee0f7df1d83e43251c482c5b200e9199128b34439f0e26781031d32cd5d8a53c8a7b83fa57c00e9cd7328dd664aa37c2f24df434c08fe2aab89642dc10515b3b2acaef2d973e54cfeec322bd784c1f748ff2fdb9afe68f275b6a25773e29f75b3a77f817b6d0bfa7b59d5eddcff000df817bc9735057224192950fabec8b4a1ff119ad1df531a1865bdedf70c375f63f2e92ffdbc58ce181ecb91bef89654aaf7defa6d5311f9e937fdcce2c2bf0876a0c8799d2d29392e8de86f7e2d3baf4970b86ffae822af89ded7e64ffa79955d0314fdd15c15ed0ff2bacc9633fa9cbf5f67b9f99581a1e500018080fdcc36a60fa9732283fe01642d09b85540007c4dbf3301f85bfa63fd563fa58f74a0fc95f6cb3498d4d90fc8fee063fa0bed0d58a189f9867f0a45d0883e5182e02f05481fd298892cf88cfe201ab86f3c1ae9d7176535e1af040746873be7becc1fda987f77d0d66fa9276ea4738cc1091cfe1323a64ff0f2ba8116c007eba6292fe9f786d83da7b11960f237bf477ffd7451716778d7fbd334ff3ea921689817952728b416f800faa920d3e77ffcf4cbf4c5976fd2a7a7cf4fdf9ca6dbe9770b722aeabc21639816cbf4ece40b72142ed33dfaeaf8076b72074e68fee8a3e9ba268d3b4a1bf222d47b9866052937d11fe88a9c159a2a16d997448a57d9f242b4a2f6fdbd8ff6306e72c8e85ff2e9e85f5a03d11f9ff23048bdb4d5b42abdb73e7a335d013a11834cb89810f7e5ebbcbe2ca679fa26bb708d7e52be74adce96a45ac8d941936c0a047b4d9ee64b194451e7dcc2fff26c39a9d64bd6f76d762136d57dfbfa6db18281fde262c13d349e7776fa6e4a6c44bf8484a0a8fcd3838cd26d942524b548596f4a739c5302e11ef9ce1469d1aa34ac0e05abb4ae4f9e3a65c3c89fa4009522350a5128af98ed92affc60c2da935c50a462ceb71f500699ac1e65491f4e2872a6c5abc9837b3b946c9fc063a2e4d4e41ead536dcf323270fbe4f193a9233379be4379598a31263bf7d16c975686f6b1964a5123fc708a70c8319d51f2f600c9da192dd3203099defbf47c462602e10f194e5ad9a266941edccbef53d2627f87720070fef7f6ef4d3e7d4083fc74674a61ce8c9624335a57a15ceea7794e013f021d6e460bad192de5ed4d29e9b99f1196141ed1122ae53c29c7c4469d9ad182d101ad87d282232554293340c39dec50aa7c7732dbdda304e0a7127d7f4a8b0b0f29b145313e0558fb40905ea380e7d37b94fed8a1208643304aa4ef65585f3bdf43ae92d2a23404f2c82936a718f4c18329f99ed46cf73e390fb406456e280537b4dc4551d639652d324a50517af7fe6cff1e82cd07b47643a103ad0e3ca0f5bc7d5ad5a48c212590f6ce09e6f420dfbdbf0b978816853ea59890d2389f5284838c24cd0268bc9bddcbc879a2e804faf421960028cfb17d30a388739f1683680180f20cf71e52968f566b6964901c4a1453d28c56ebc841c2f828614d4e3245640f687d9e6835dbfb1423fd747a7ff7d32959605a8ea0f885f21448b7517662b68b582da3b00f9345514cbe3ba3343ca555c8f5a61089425722346544f691e09ad17a0135db99d0f0313b64d8691668ad93d87246b1358df35e46f9045a74a0669417c9689187b219946e2068146551aa80329f3b7b7b0480326c3cd29d29654b893c94a1a2f407b13c4d3d657ac0c784dd2c3ba7c51a6a36cd6959648796c028934174bb4f342624d1fddede7dca8bd1c20c023a82bc4f64a045d2e92e89cc1ea53f68018832c6b4704e2b76f7295403939f53a0b6432b81244ae49cd0220ba2536282d9a7bbe73b944ca60421266b423eeec1438a7c294d44cd2614a96720e3bd9d8c2662f6e9a7b46247cd3ea535e4e90e41cba6c4919468a57562e21a9ae28c268a722d94a7a2660fce33cac710fb208d48d068258982485a7a983da0d56dc28ce844cd88bf2784dac3ed73ca0ad29c52faebe10171132d90e4bb9457a2f7401012625a782259c867b4bc43412c85d5130ac191109aececd0aaf40e02615a6d9d3cc8288cdf9950a0bf8f15234adfd02c4c735a0825cdb0cb9e3a2d0a50ba97fa3b209489f614ba520e94e66e420b62e442931e01bf3d98504c3fa18c21310061448a8866819234043ba38c4d4e128291521a97589410bf470b0514c391f6caf62933746f4a5cfe6036a3540346fae0e03ee84343a0d08e66e19c86b047d9455ae924263a9812508833a50ceee5335a6ba08c3d11e43ef547934c6f5168bf372379a13fa819a5c166c4a4940ace291f40f94838f5a463cfcfa7941ba5907b4fb2d9b41844b951ca509ed3d2ca3e05e6346db49035f994d2029f7e4a69e773e0462bfb94eaa0f41ead2193007e4a723aa1f5f4ed5dcafad320f7a79feea153c2e6e13dfa64fb9cb2a624f550353b141211d792a794911abc0fd7e521adc33ca4241f4d2221b8ff90c6f1102bfef7cf77289d399b7e4a19296a468a67428b86941b27f54c9dd22262b643a91232170f680668787b684639650ab6886493fb9458a4a6441a5a7327b54431322596eed38a0c3523cd4b4a9842334a5693e23aa77c37ada610973e409846ab5df777210b077b94fab94f7cb84ba93dc2ed531ac2f9a7947d214ea3614e761e64e894f2d7d48cd26d13c955dea3df0e6809657f0f8b3fe70f1fcef6c02194faa2e523b265f7497249bf214d3da30cde640fd940fa9056cfa8d9fe1ea1b0475f129569a4a486b6296d46d957522ec4d964420e300b942ea768ec2125480f483befef53e265420945fa93d655a81f5a0de2219052be778f727c7be76cdaee63eaf7283f4ff242b243cb5913184a5a53f8f4fc534abc3c78784043206d447c4c70c942edee5022986c03e6943270641a28c97a8f524dc496a47b1fd21441ea89d348099c4f30a7b4cc7cb0bbb7b74fb30382ec43ea691994965088ebee91e621e38b663b93870fa883edddfb8411a5b26802c8926e3fb8774e6290519a781f933523f93b7848b68cf896a0edee52062fa3443f7d442c447424a4a8d91e195aa406b7f73e7d48727a4e6a0964207b9a1f106fd124ec8220640d1f4c485dd0976024d2a5640169521ee6f789791e124f3d44b37bb4b4f3f0c143ca88de23d34d4955ca3f13d36f4ff7f7260fc9e6502606aa86dc917ba4383edd7e40734c534f0b0bd494742c99e67c769f1880b937bb7f6f9770a6e5a41d5acfdfa7fc30f11059f283fb07d9ce3d5a65fb7407b340c4b94f66f380d423257a290148ecfe00f331d9a504e9c33d520f1869be3fdb3b78403a39232c494e49b51155334275fae96e9e511a88d7e8b3737a9932fcdb345734525a6a200e210bb1476a7142432630e037ca0a7e3abb4f64204348b8d1784010482cad02d00acc834f0fa0b866c4360f4911512283669d52c12480c431dbbb7be4033ccc69c5640a829c9f3fa49506faf2c101742fb91394a626a3738f520ee4d19161d841b37b072441bba4340e4810b7696186cc2ef10e310c25cff33d6ab88391ee1d9035a2b41f65172734041a34793524d87bb48c97ef9295247ea26664dcf70f26644069599210a7f1c295a245f60c893462937b0fd029e9a5292d7e9039260f939a918b7600969a2027438b8c933dd64864f348b628599c1f902221fe22bd497a609b3cb23ca3c5d073d206d48cf2e564fb48cc496592aa21df891417592fe2425232a4eac8d4503362e3fb9404a6381f9ee33ee9341a02e9d84f29df4deba093bd079f42161ee49f9234022332c734f53b24a7b42a404b33e7e7bcba4a8c42cd0ec839fc34a72fb30770304090ec532c5fefde3bdfdf994e69c6a06a2810cd28d143734d2bd5a48768218372cde4543fa0551a523a7bf7ef011ae95e22247914843c75fa291939b261f7b73f25d5ffe0fea7f7f676b853ca42ef1344627e220ccd292dd493ef45ab003bbbc43764b0f678458cc87c4e9a86525dc43ac421e491501e9fe4947260c4bbe7348fa01bf91c933dd26558b4a25920678e5a90669d527a99707cb84f3a879a1d9084cd7608f19d8c1c765ae4a741c267a574f301d9221a39437bf880eccc0e391e3bbbb49e47797b5a86fb9494eac37be4b41c9cdfdfbbb70768c42de4a4934b9091fe20dc7648f6a60f4915d34a0cf9e0e47c7d8a913e246fe99c42108201076a424ee301ad756c5342fd5e46a6688fd40335239592d378485a205e34f524ce33e2ded9f49c167d27bbe478419c77a052ce495bee925d258d744076681fde19b9a6b39d19adf69e837befd182f8ce2eb125b131e136a5dceec38cd662683a480a487b4d75c57f9a135ab006b4fe40ebc6b470f62914fe0eadb090c98019a466e7943a223125189064324da42648f76d93519b917e21876a17b84d69461f92a285a74a4380f920f786c223e2a1dd5d12215a34a766f96c77278710e70f696d649fd69a6802c816521290a4349f3e208349cd3292b2e93d726369e594a0cdc830937784bc362d20d1cae4bddd4f215953929cdd4f492793352146da23e6a0de695276eee5797e6fefdefe3de096edec62ed0c0421adb67f4e9143f62971022de87cfa294dc33979f0d48c1c9aecc14370ef2e2d38ecdf879521dd43524112b24bab42b4f84dcd66e4209d4f69eaf7c85fc51066e41290","6dba4fcb38f766fbb4ea9183bcbba4001edcdf275b467939222f754f024ceb1a53d2e5b47abd4bd4a766e7142d91aea0456472d389bca4e926a49d09da8ccc2a58ec531e02a19a6594ce435c484c4e2325bd48de72be936707e7f748a0d0e984d64bee11a58916c46afb7be46a9059babf9d67646048abee3d3847a7e4625318482a684aeb24c421c46f07a4bfb777ceef9d7f7a1fbef6043a6436236794942cd9fa9c7893de209139a0e5cb036223b20d14f3025a4e36f353f29348e392dfb3bf7b8fa67e9f1869f77cef1e45d7e7bbe43c52332235a91e5a6d98e6a465f6696d97268b7ca41931000d8a10dc87a19c9131bbffe943f28777407b58a4494e089208d0aa19f1e0fd4fc1e4a41a67d37dd21c0f49b752a7e48752bc406b55d97d52a40f76a7b34f31045acdfaf41eaddf6defd2b22a0920c59cd90199258a43893d3fddbfff29cf023933e49791f920c469eacf897b27e426903b377d48f3fd90981a81279698f6a764fc08556a462bb8c46a3466326ca467766861923b25ed4c0b9d14c190c491e2ca419a7bb4eab47f9f16c14838c93e42eae106e5fbe44a4d735a2e23eb45a2784ecd724af253644b0ba2f7210b645e690d0b93b84fd3491c426a70f229792f9f4ea6b4ae4f3e28af24d254eee5a48848d9922a25fc882d1f9071b84f934e1ededec33c43a7fbe4a03ea0e16c6733ca10d3c20f2d869141a040f07c76ff3e78e900cd76ce27d37be753d2f03083fbe04d8a6cc8a83efc94a24ea2dc0e2ffb9e536849d9067209a69885fbe4609245d9d9de2323f5e90ce33c07417649074c3f25c545cb84d4ec1c0686ec39f9483446e2548a9ba01c282c2232ee9160dea37888a24ca005472223d54e015e2e9a9cb4c42e8de753b265306dbbd0bd9f52dc4b3ee739292e327bf7308429b948b35dd26af90e2d0c12239116a6d5ec6d726f32ca6c3cd823be44b387073b44388ada0e08710a52305924b1142bdccb4857d21a3c049068486e27c5110495e8063b4d5e34c9cd3e99829d7d0addee4300cf69959d123c841b058734845de25e82427e08b2196441a93135dba5f5cb1c112cb92ca443c8bbdfcec88fdddedd25763b9892efcb9e0331c1def91ed9b207506de4b551504c534e4ae7d3fc01bd70404a839aed51bae053f26cb6ef7f4aabb8146b920e21971851eda71911e4801c566a764001068531e48993cbbd4d6321f2ee906346c9977b7b6459e1b0a0594ed11d59d8ed194590c4bd64962614046e9377420e2039790fa61040e209b281e414ed3e046e7be44f915d98d1e2fba73ba4a49027c3649132a304d484989fe4839aed519042fe07fd73b043c9908383d97d9efa735af5e5e88302177257c846d29cd2eaf90e2d7d4f48d268b6a819e9e1e9ee8c423a9a33b20b645d2960275998ee91cc504ee7533274d48ce47497a48e3c8a7ba439c8bba5c92241df9edda7acc0f4c1a70ff7a618e9947c9f9d3d9a49e24af206f74814273985e353f2270e66b3fb3bf73448a1489c569fb71fecc3f9d9a724c56446799d03e23ce2729a8b5d0c61ff53222e9c6df25a08da393107919fa2ddd91ec5e119adeddf87c8ec92537f7e8f1204843c0d815c3e1240f24368c9ec53d2593bb37b0fd0ec8098fbe103527e53921c82f690523ae42991dcec53484509c487f7c0bd148690692719b9b74f4926f206c12114123c200787683bfd74b20bb6dc2125bc47d24db92852f3fb138ab333cab4116f66f9f90433c176e101651329754280c874d23f245414d4901a7cb0f3e03ee516285b0adcf6c987208d4fb68c0498f88d84ea21311189ccc39d4f0f48db3fdc03bf916f783e2365bfbd37c3644d8937270764c97776f6293541ba823212d48cf25d7b7885827e22de3ed902e8748aeb0fce7772f2a576c93c5033d8d3bd3d12510afa08415ad0dfa6e0959645a7948f2142937b00b69c91efb74fd927a2e7a7c448e401906f49599409991acabeee92d38866944e24c621bea09c06712f7828231788ecdbde3ea1b543d20482cc8813901b23a341e906ca8e500bca63d17c50789ee5e4447e8a66f73ea5d89694f636794aa47b3f256f609291e34a3341fed284c8710e8210b5cef33d723c770f8885f741411a01c64c0ec02ed1fd01e79128f6a10c12e51128d140aa6687bcf38794eedcde256bb2739f4279e15eb2b3534afa8091c8f92583ff907023f791b22b144d5332fbfe2e04f080720bd38c74fdee3954cd43ca3992bff0607b7a9ff272e7a45d280f4ecdeeefee929744937840d34118914f9651ca8a141479f06419c946402311c7ef90234079cb4fc97250e0494cf0202785bf4381dd01b10d8534d42c23db41aa706ffb9cdc488246c1cfc1c1a7f9f6fd3d9a6b9a579a580c61fffcd3e98c92ad145660ea297ca7eec93bdf9d50687a4e52439a9a9acd288ebeb7477aefd39c24607f97687cb047aa9fa22c4adc7e4adee10e3acd7769e2c89922d6ce48e1d38028994053b147e47e780f568e99fce1ee1e712f2da853ae86d8f29c4012ddc89522537f9fc2394a9f42b21e92aea4940a790e19c84b8e3d59670a41298d4456e51ef922f7a0910eee53fe6fff0139b494eba6219097f1902275fc431e2885dce40251b38cbc5bd28c6465663463fbb43c4ba694064e7890b7f9f07cf7e01e54cdc3f309650c492fd0c23ee8463d6707241a0fa60f49ddde2767fb017235e75352cbf768c229854c1a89de2646ba47ea6e7f679f4486fcdd3de0465e14797524c9c45ef9f6fe3e464af90392e91971110de6de04fc768f3c843d492d5358b94ffe3e196072aa3f25772ddbbdff90fc0c08e0f91e398d9412a799245ab0f9a0df6694e1a19c3b09336544d16c1f21ca8ce63aa77ce7f6fea76459c9a813b58915eeef101092676a46999c9d4fefd1246633d2fa94f423dd34a389a5ac3085230f29a8dc6168073b7bbb94b8da9e92ad20dc3e25069d52128e6c4e965154bf9bf3d4d3e2c0ee8c1c986d9a7ad29653528819f9e170946851e7dede1e859cd48cc64dac413cbb778f42109a04523a6450291cbb97110f5072fc219a912dfd7442b111b9a0e48eedef501226db251db247aa76461e25a556310b1486dfcb77286d32b94ffc4d7a8a143e25fc291f92910926259773ea953433697522196964e2de87441ad2cc14cb50ae9862287208d8f92159208d4d2932caf4136e14c29131a2fcebfd3d32444453120930d2fe3dd2aff00628fb4e9d9e1383223db73d253ff7dea79f4e49ac21ce332458e12a3ea0f423412396a2d9a5f8942ceb39521bbbdc29990462548a0def91d1a659409092116f4ec9213bd823cf3adf87b6a4708b1c6c223bcd1f1124a39e1f3e20af96c69de7530ad4761f604e1f3e245920fbb1bdc73af280c2bfc98c526164d3a69f4ec839b8b78766a4c228f944b3f3e07c87a6fe1ec5960744c7edbd0969acc9837bb43a0439ddfd94d89cc6b64d6e170de121492cad61522a8c7239a410d87da766fb0f288339239f3c2795b1cd7e082d8e914ebf47fc9e13cc737109f6c9943c2085f680e276b280a46a1e52e4416a303fc8f72855bac7e9a6832979759456dd9e9161207e232c2764fcc8cda73e2714c913b6d4ecc1a744f85d728a2694de2368140d66140c51a734745266944284ee25497c40ae2b992072c1e84b9add096cc8de8c1408a51328df0ffd46c49fcea688609000dbdf23ff9d4c06b525b178f0e0fec3bdd904232585ff8002331a29a4850c3cf1db39451f0794da263d32231d0adca0b668aa6921e61c4b4bbbc4dfa4422068648b28bf489e0c940325130e68258162193252048d1c650a4bc9f67efae97dcaa6c34f023472c5e925628e7bd01cfbe46992ad27faecedd1020085c10f1eee4271e56452c855a0bce53e8574148192d49329204542c670877cba07ac43c86da5588ac2a65dcab1122391b92259232e852adf27724df631f50f26e7794eba8d4406368ba2299a056ab6b7738fb2a714fcde9f802d7777280e7d48524f7c42368bd40cc93fad829017441c408e79fe29047087b23e0f69d8dbe4448120e4f2d2da0731c13ead06efd0a4eede43bc708f3414e9be1d5a55241f991c0c9a53d2d9942fdacb6639fdfd3083aaa1ec2ac93da984039a18520e14e11dec3ea0e86c36fdf453ea85a417cdce67334a751047ee654459927a22c839b952943fdcbf9fcd28563de04e772848a1141dc91e7978fb0f69a46480484e49d97e4a9696a483b99712e110687230c81ddfbf4f1c7220e93f522ca45e883d794eef4f1eec51544e934829847d8aac480d22e2a27181b63bb4b048cdeed3ea15e917f29de8a1919232c218293f794eca80829f7bccbd4419a221f93d0794062626a77c0825b5113b4f89e39168cd30f5e4e4ed3d84e222d345b8513e82ac33b979d3873b942db8475d8a69a35868ff530aa0c8aa907ea33e483bd3a44c76b27332e3bbfb9402a2669f5268b64f99856d5a1f256a2179f930a3a408690f525a3b64a03fc5d453cc4be24cca81123dc421e4fd13345224240294fdce3f25c706cd0807122c8246eb00845b0643f9608ffe21dbb33b25bea2a0819a5196871621c8fa4cef93781179490c8829b6ef9361a3dc37cd167b0e146dd15c517ff7c829a49192778e5892a0ed92229e524e6117fc46e9e2079fcec8ef25fd4e23253f9f2499d22684e59462578a8579163ea56c194584b4264eab3014d793cf4a43201626e541d248eeef43cc292599f7691ac868902ea321509478001b422913f2e933ca93efc25d39f894020cca3753f6985c10e2123294e4d991ebfe2985db33cac0f2f2cd1e1650912e7eb88b1cd701f97a3452d2631427ecd137f72800a666d939190acc35190d664b52d1941a20cd4ab6fd80fa3fdf45334a86dcbb4ff9423241143b91da2663749f561a3ea53cfb8c3237330a11a91965ce1e3e24b1d9a69c1611847a217d4a9c70400baee7b4ae34994cc0219f4ef3d9e453ca716464218843287e9b9c5336e001251168cde080623aa868d2c3e483526af9608fc840ea8608bd4b3cff29d989fb04379721504433a3cc3acde9393982fb4445f28c8941c967bf97ed3f44661fb3406bfa640ba0e129802426279390ed51cff77629e039a79c3bc93335234d4cda978ced94e2789a49e2cd873308ebbd071496df871788c97a402b01e4e670a449fc468e27f11b71021193921014e05006989a3d24fffc7efe2991610a46224786249652a1192d02117ae4a9ef21323aa0c9ba9f930f70ef53d2f5fb53223445c334c59414219785c8c1b230213d4fe66bba4dc1178d74075e0d459194b53bbf3fdbdb23576206dc28af37451044e91432a5fb3bc4e4585420d24c7728d8dca399c44849394ca788d04923910066a42d3308e0f9ee1eb1794691c43ee434271f869c485a9ea00509e25e92e9834f495b4e1f5294465aedc1ee0cb85136e721e585e139c0024e689014603ca49ccc0eb979244f7be78046b916d2bcc82f659431a5309bd4eb84e6e33e39db64b8738a68c0e4647166e7904ed2bac46f07341f13126f1a2e0d875c9109d1889a914621c9a31439d9579a054a0592bb42e918b2cbb3ddfb39e1cd534f168e9024ebfc90d421352381a704c22e2d7bed535696d2f6e4425233a221e92332a094c0217e9b915f40ee0aa9e80794f79ceedc7b40fe25353bcfa6b49a46f2443911221ef9b0a4c929cc3ba79cdaa7b48e724e8c42cdc82ddc7d7840cc486e18e1964f499c772994a235865d9a540ae0ce310b53723ac0cbdb0f720a8529402456dba381934f75f060fa800c430e91d979485e3d9935ca9391e8efd397db19251dc951a20c1cad4f525205b8917f44724931c0f90398a08794a1252544a241591ae2d17b1438812094b9db3dc8c9107c7a0ee54084a7a0788ffc0dca6e92a7b8774e713f354364454c4e4bc064cb485b223cdea1cc3f45e70fc80d7890df7b0001a489c1e23239b41945ed1497106ee4d46f9f531c9ee5948b3a9f40a9d25a255192f28b94ac24ba919a213925eb3cb94febb5bb2447e4ea53b31de2d2735a1925cf011610ce36e54fc99293c0517841367b0f9d922521f544ea8abc2e62a473d23724dc44bcfc7c9f3c873d9214d06d97126d0f2952a22f2965b5ff8082ed87c416db146a90cb377b40ebd2604b1a1ae51c2923f8f03e3cd5292d7b902d24b8644cef530e836279cce97d5abd21d7909c70cae01079a9c543ea9f160826141a1de414d0430de6f7292cdba5f4c62ef936240b84e043d299d4fda7bb53521ad33dced590e6a5ec24c8bb4be245534f890e3871f773ca7913bfe50f98200f67a4a68885c9fa5088b5ff2925881fde235f28273f34a74c3f39f898fa5d727f29843b20b25304435686c84b7915d263c4cd34513415c0edc1bde97d32d094737800ee7d485a98fc14fa87fcb4fb0fc8b2538a929a21ba205784007d4a2e2fe14613b047969c52609f9278d0a2c539ac0c591e222fe554ce3f0541c899847aa56cc7838c248432abf7a768061ff221e50ca853b85248791cec91c9cca60fc9bb7d40f370000e219d49d122312e45dc4490733294138a8728e5757e6f46668dd27b8cdbf9ecd319e931d853222a593d1245326d0f299ed87d409e2a3950d48c1899b2b053f239495913934fc99010a311f16869f39cc4937c546a46da7a4a311059038a4531528a65282347e1c339ada2cd48c11cc0a13dbf47937f9fc87ebe2faa94ecf71e0920450b24c29f66e4c7021aa56ff6291346895cb23c048d2c12658577680864c4c8845130c353bf07b2912d63a2d2e764c4f7482a6653521194ae7940e96c6a4692f029e97a7274b15041568674ef0ed9ac87e4729246a3741bcfe92e59dafb942c2271261344ba97e4f41e0d9c1c24524af73fddbfc7ee4a7e4e99798a1f0871b221885a31eba496c8084c6979916c0d774a4b77f7ee51769482591240e21e600982e4e4703da4650dd6bd139ae1073b14b0538444537f4072f31029963cdfa3d06a46923643a724eb340be471dda3204df90da95722c4bd73f20b3fa568939adda7609dacd16c7b97ec2bd18d22d56c9f44633fa3a55b327f345b1829053f940224c429514d9ddea314d2649f22a05d8a65c9132495cb6913cae792b92165bb47290f1267e23cb21cf7b767b43ef180f2ac144f60086434e86d92964f29bca24e492365f7c9899bdddbdfa548efde34df07f7e6943a9812b39095818f449965c28d222ecab592bce7e47c3c04340a0a481593d4d3421ca9418a1029062436994cc9d8dfa3f86d27036eb478f1701f4a3c7b88940e6531319d93eddd19712e297c1a3aa091d12403481105bd460248e12ac9024d312d2d4fc9ce90477900dcc8bb278ea04435b921c4bde44b52d4466a7046a69e1610eec11252330a6269859bbccf03c400fb130a8f48d1938ecd685289ce483552b39cdc5df20ac818918edaa6f0853412457fe412ec5042fd3eb1d7041a89388cf27be8f401f9d994f9a44eef9109a3808842307222f7cfe1bf4db1c8453e179963988f0332099387241553a214d98b5dca7a604ec91398de27c1ddbe3f216bb0ff90122814fd138750ca727f8f3ca55df67bf3fdc9fd694671240905f105a9e16d127f8a0b4869d0fa0499d3193aa5886046ae32d9598a04c918118d2910202530cbc8927efae95ec6fc4649ac3de2bc6c9b52a144defbe401d310ee93829ace321292bd07fb98acfb34c5e4b4515e8e0226927a4a5e4e2866a51cc01ea901729cc8394233620a8aef08a34f9190b84ffd91ff469946f25e265838209f819ad14ce619795fa4a28971c9952251248ed93e271b4208512e8e19899690688a2942cfc82fd9dea73180b214a43cdcb94fac4c294ece87dca788873a263e9c92d7b6bf4ba4999c93f99892134efa998ce67dd88583bd49fe609fc2b44fef238ecc28b6a0f09f3c8429b96e9fee9147748091d24bd9944c0e89013977641168309473a55ccd3909f301e583f63059a482c95a937f42e1280d61f721b9bcc4b2642d2934a4f45d4e5e1735a305da1d5afc407047d6609f52c4443792c24f49167789272990066e3be484dca3d4daf6ce2e05d0942c25fd46aa6e3b278ebe8ff53132bfd46c9a4d480dd048673479c448941be2666435ee93c1b847ca1fd0b27b394d1db920842c290712278a6ac8a8ee9014de2741a36ed9aba1907007298b735e70b94f1c493955b29bb452403ec1bd1d5a97a666b44875308537f8e93e70bb4fe24ce28489bd779f2c31a599f6310b3bb4467a8ec88fd23c845b4efa86f2e8e7f416199519257e666cb3287a20af1a12b043fd91d221234ee3dd9eed50803ddba535134974ec1f20474bf1c201cd1305dff40259eeed1dd2819417a71cef0c8c442a980c18cdfaa753b8c7392d06d1fa022d28d362e0944289ec410668fb19997072cd087b4a7b93ff46fcb64ff6f401291cf2553edda1141535a3552ff245694e77ef9399df9f92434b59ec2979834402f2dff769bd809a4d293aa0f4158939a2525235646566048d9c288a9677f63f7db007ba3db847327e1f2293138df7f78964d901252928e0a1ff3d7890ede61040ca4accc80b7eb87d3f03ddee91bea155411a11852594da2157620f73fae03e79acf7c9ac907410bf4df6c87547e67f4aee1db1cbde949605a8d9fe39b9509f9237b043d698e4f4218d94b8823cf95d5aa0bc4f33348564e5bbb4daf380e674e721a569288ea6650862d3ed9c0840bc4baf4da0434814b329e53448e183780f6180413c0ab38920b46843cb8468466b88bbe456116ee03772c568082468b4d0766f4a29004ad302da83e91ed9708a87800ce146498ac9845426ad21d2bc6464790f300be435907a25e34ed11f890c2966a21ba50aef912f401fd3fc7f0ac9a23ce38cfc27329464ae490d12dd1ed2b7107d8a3ef6c95b7980a94762825626f36df2f8896ec40734045a5aa239a170f2e0de394d2c35a34c35450e140fd1c460a444100a6b6901940673ef3e117f3a85ee25a67a406c4fa1f739a6fe2181a495d7e9366967529ab44e4ef9576ab64f29d89cc202c29958581869171690864b19f99c467cefa3efff925f426a246fa675b16a8b6af9d1a38f8ecb323df9e4f82c7dbd9ed8cf9b74b16eda749e5de6e9aaceb767f979b1cc67d2f0c5ebcfd37a5de6cd384d5fe7793a6fdb55f3e8eeddec6d365e347797795b34d5dd6573d1a4e7559d2eaa3a4f67799b156543782ee8b759d6661f3dfac51f4deb3c6bf3d9936bc283b883581e7102a1bbbd0fbfed2139cbdbf7f648b74f28587ff029445e5ff912a8efed90522555bdb7ff666ff7d1dec347bbbb63f2761feeecdeff296aba5e513fef075d5f31d069159572b09fbed9bdff88ff37dedbddfb74f7e1ee4f7d4464cc9734ba69bec897ed171599bf471f3dcdcfb375d9e2cb62467fdf5dd5d56531cbebe6ee17c5b4ae9aeabc1d7f912db30b7eebeec2fefa795dad57cd5dca49525a90ac0d71258c36a58c0f0ec823a0b42c451ef7294df3702f0af478ddceabbaf84186c9bbbbaaca627a7ddc34c5c512d09bbb2f5e7df17a9be66dfbe9d98bd3edd7af683564fb52344b7bbd02eeb78645af2cb3055ed900b4aca6fc3ab55abf6d2a82481f36d74d9b2f9eeadc975903ba15e7854e116681cc1f59963d728e28d7485e08091029a587b4667b8f24ff2182caf0bd3782fdf16a45684a976193e396beee4fe5fe98966249e2f6682a7fc9e817d37ce5cbb668098f5ffcd1aa2e96d36295956798c407b307b4d2484b01b42c4fe2b747ae76f629f966079415a468764a361cfaa8cd97d9b29537f668d59b122b94aa81fddd2517926cd4649b52afd3d90ec50eb47e853704f5d74c1521703e03efd004aff2ba2df206d8cc8a665566d72f84e6cb7ad16c93686d4300c95f3ff8fd77c720b84c133160b12c40054624ca2a51febbf859e03f874c73970c382da49cdfbb8ff5eb87ecdd35531ae57b21f91e4242f057594d246b092ea89895657595cf9e2b5ff2679759b9260cbe47da7fd9d6f44793afb315bd9a13ffac9b3dfdeb2a6f5adb82fe5e56753bf73f4003fe05ef654d810c4946ea93be2f326de87f8466f4f7940646fc63bf67b8f91a934f7fe9e7c572c6f07e3a5b654b7df12d2954ef3d2760fa99c5857f11ec4091f33a5b526a5c1ad1dffc5a765e93e070dff4d1455e13bdafcd9ff4f32abb0628faa3b92ada1fe475992d67f4397fbfce72f32b0343cb01020001fb996d4c1f52e74406fd03c85a1270ab8000f89a7e6702f0b7f4c7faad7e4a1fe940f92bed976930a9b31f90f5c1c7f417da1bb04213f30dff148aa0117da204c15f0a903ea4311359f019fd413470df34579646faf545594df82bc181d1e1ceb92ff38736e6df1db4f55bea891be91c63700287ffc488e913bcbc6ea005f0c1ba69ca4bfabd2176cf696c0698fccdefd15f3f5d54dc19def5fe34cdbf4f6a081ae645e5090aad041e403f1564f8fc8f9f7e99bef8f24dfaf4f4f9e99bd3743bfd6e412e459d37640ad362999e9d7c416ec265ba475f1dff604dcec009cd1f7d345dd7a471476993e7a9fa0ed3ac20e526fa035d91ab4253c522fb9248f12a5b5e8856d4bebf47cbb584fe2ef4e92e3cdbfbf8f353fcb6bb0bc76e770f1f504a90ff8589bfff109f1c3cc0bf6401e088d14a27ffb5bb47ef60e8a492da6a5a955e4f1f7d0bf810f9c8e48bd1715fbdceebcb629aa76fb20bd7e827e54bd7ea6c49ca889c2334c9a61852afc9d37c29c32eea9c5bf85f9e2d27d57ac916a2cd2ec406bb6f5fbf2d5630c8df2e2ee668d278dedce9bb29311efd12928ea2f84f0f324acf515691142965c9292d724e09877be46b536446abd8a02b05b7f7283c25ff13f107a52f48df3ea09086f290d92ef9d60f26ac6fc96545eae67cfb01659cb7f7ef5156f5e184226d5aec9a3cb8b743c9f909c84f7660728fd6b5b667bc1e47110219475a1838dfa13c2ec524939dfb68b64b2b49fb587ba528137e3b4544e4c8ce28d97b80e4ee8c967530c9d37b9f9ecf28c58c70894c2dad8451334a27eee5f729c9b1bf43390318e7bdfd7b934f1fd0203fdd99525834a325cc8cd66128f7fb699e538200811137a385d98c96fef6a69424ddcf084b0aa768c99572a49493a284e47d744a0b4c07b47e4a0b949480a54c020d77b243a9f5ddc98cdc4304e87b80f6292d463ca44418e5042820db0782f41a05489fdea374c90e053d1cb251e27d2fc37adcf91e729b9446a52190074fb13cc5ac0f1e4cc957a566bbf7efdddba1352b725b2918a2e5318acace29cb9151428bd2c1f767fbf7109c3ea0b51e0a356835e101adffedd32a28651829e1b4774e30a707f9eefd5d3851b488f429c59094f6f99422226430691640e3ddec5e46ee164533d0c00fb16440fef4f6c18c22d47d5a3ca20503ca4bdc7b4859415adda5912142a1c43225d9c8fbc3320d0d8112dce4545304f780d6f38956b3bd4f31d24fa7f7773f9d92cda6e50b8a7728af81f41c653366bb88ed320a13315914f5e4bb334adb531a865c750aa928d425425306651f09b119ad2f50b39d090d1fb343ae00cd02ad8d125bce2816a771decb28ff408b14d48cf228e473d032c1a7949e20681495516a8132a53b7b7b048032723cd29d296557893c94d1a27409b13c4d3d6586c0c784dd2c3ba7c51d6a36cd6919658796cc28f34174bb4f342624d1fddede7dcaa3d1420e024082bc4f64a045d5e92e89cc1ea54b68c18832ccb4d04e2b7cf729b403939f9333b4432b87244ae4ced0a20ca2596282d9a7bbe73b947ca68422266b425ef1c1438a9429ad44cd2614d96720e3bd9d8c2662f6e9a7b4c247cd3ea535e7e90e41cba6c4919498a57565e21a9ae28c268a723394d7a2660fce33cadf10fbec51da91a0d1ca13059db454317b40abe18419d1899a117f4f08b587dbe79445a439a574d9c303e2265a50c977290f45ef812024c4b45045b290cf683988825e0ac32714b2238134d9d9a155ec1d04ceb43a3b799051d8bf33a1c4c03e569828dd43b330cd69e19434c32efbf6b48840e961eaef805026da53a84b39539abb092da04d89a0f776c06f0f26940398508691188030224544b340491d829ded3c24d987a1a2f8fa9cd606288b45f97fe2f47d327fdbd93e6592ee4d89cb1fcc66949ac0481f1cdc077d6808140ad22c9cd310f6281b492ba3c4440753020a71a614c3bd7c466b1394e12782dca7fe6892e92d4a05eccd485ee80f6a4669b3193129a58e73ca1f50fe126100e9d8f3f329e5522944df63934399df9c72a994d13ca7a5987d0ae469da68e16bf229a5113efd94d2d4e7c06d7280d408a50369cd9904f05392d309adbf6fefd22a010d727ffae91e3a256c1edea34fb6cf29cb4a520f55b3434114712df95619a9c1fb70761ed2bacd434a0ad224128214bdd0aac14e46d9b3f31d4a7fcea69f52068b9a91e299d022238538a49ea9535a74cc7628b542e6e201cd000d6f0fcd28074de119916c729f1291d49448436bf4a49628a6a644d47d5ac1a166a4794909533047c96d525ce7941fa7d517e2d20708ec68754cccf2c11ea58aee131fee522a9070fb948670fe29656b88d36898939d07193aa57c3735a3f4dc44729bf7e8b7035a72d9dfc362d1f9c387b33d7008a5ca68b9896c19051cd4e90ed2da33caf84df6903da40fef3f80aad9df2314f6e84ba2328d94d4d036a5d9285b4bca85389b4cc8016681d2eb14bf3da484ea0169e7fd7d4ad44c2801497fd23a0cf543ab473c0452caf7ee514e70ef9c4ddb7d4cfd1ee5f3495e48760ec886c050d21a0465722851f3e0e1010d81b411f131c1250bb5bb438963b20d9853cad89169a0a4ec3d4a4d115b92ee7d485304a9274e2325703ec19cd2b2f4c1eedede3ecd0e08b20fa9a765535a7221aebb479a878c2f9aed4c1e3ea00eb677ef134694faa209204bbafde0de3989414669e57d4cd68ce4efe021d932e25b82463e14a5a46861803e2216223a1252d46c8f0c2d5289db7b9f3e24393d27b50432903dcd0f88b76812764110b2860f26a42ee84b3012e952b28034290ff3fbc43c0f89a71ea2d93d5a0a7af8e0216550ef91e9a6242ce5ab89e9b7a7fb7b938764732873035543eec83d521c9f6e3fa039a6a9a785086a4a3a964c733ebb4f0cc0dc9bddbfb74b38d3f2d3ce39a91aca27130f91253fb87f90eddca355b94f77300b449cfb64360f483d5262981286c4ee0f301f935d4aa83edc23f58091e6fbb3bd8307a49333c292e494541b51352354a79feee619a58d784d3f3ba7976945609be68a464a4b13c4216421f6482d4e68c80406fc4659c44f67e46d6e932124dc683c20082496560d68c5e6c1a707505c33629b87a48828f541b34ea9631240e2986d7266296b9ad30acb1404393f7f482b13f4e58303e85e722728ad4d46e7defebd7df2e8c830eca0d9bd0392a05d521a072488dbb4904366977887188692edf91e35dcc148f70ec81a519a90b291131a020d9abc1a12ec3d5af6cb77c94a123f513332eefb071332a0b48c4988d378e14ad1a27c769f72a9c426f71ea053d24b535a2c21734c1e26352317ed002c354116871625277bac91c8e6916c5172393f204542fc457a93f4c036796479468ba7e7a40da819e5d7c9f6919893ca245543be13292eb25ec485a46448d591a9a166c4c6f729694c9901788efba4d36808a4633fa5fc38ad9b4ef61e7c0a5978907f4ad2088cc81cd3d4ef909cd22a022de59c9ff36a2c310a353b20e7f0d39cbecc1ec0c10041b24fb1dcbd7bef7c7f673aa51983aaa1d035bb4fbeebf61ead6c931ea2850fca4d9353fd80567548e9ecddbf0768a47b8990e45110f2d4e9a764e4c886dddffe9454ff83fb9fdedbdbe14e296bbd4f1089f9893034a7b4b04fbe17ad1a504e9316af484df10a1a91f99c340d25c788758843c823a1bc3fc92965cd8877cf691e4137f239267ba4cbb0c845b340ce1cb520cd3aa57434e1f8709f740e353b2009a30c17f96f1939ecfb30aa07f059293d7d40b68846ced01e3e203bb3438ec7ce2eadff519e9f96ed3e25a5faf01e392d07e7f7f7eeed011a710b39e9e41264a43f08374a9d1d4c1f922aa6951bf2c1c9f9fa14237d48ded239852004030ed4849cc6035a1bd9a604fcbd8c4cd11ea9076a462a25a7f190b440bc68ea499c67c4bdb3e9392d124f76c9f18238ef40a59c93b6dc25bb4a1ae980ecd03ebc33724d673b335a1d3e07f7dea305f49d5d624b6263c26d4ab9e08719adddd074901490f69a4e3152f28c72420bd680d62b689d9916da3e85c2dfa1151932193083d4ec9c924d24a60403924ca689d404e9be6d326a33d22fe45071dc39a5197d488a169e2a0d01e683dc1b0a8f88877677498468919d9ae5b3dd9d1c429c3fa4b5947d5a9ba209205b48694392d27cfa800c2635cb48caa6f7c88da59556823623c34cde11f2e0b4e0442b99f7763f85644d4972763f259d4cd68418698f98837aa749d9b997e739a5e3f6ef01b76c67176b6d200869b5fd738a1c28bb49a2b1473e3b4dc33979f0d48c1c9aecc14370ef2e2d50ecdf879521dd43524112b24bab48b4584ecd66e4209d4f69eaf7c85fc51066e412906dba4fcb3ef766fbb44a9283bcbba4001edcdf275b46993c222f754f024ceb2053d2e5b4dabd4bd4a766e7142d91aea0456772d389bca4e926a49d09da8ccc2a58ec531e02a19a659400445c484c4e2325bd48de72be936707e7f748a0d0e984b2bdb454095a10abedef91ab4166e9fe769e918121adbaf7e01c9d928b4d6120a9a029adab108710bf1d90fedede39bf77fee97df8da13e890d98c9c5152b264eb73e24d7a8344e680963b0f888dc83650cc0b6839d9cc4fc94f228d4b7ecffeee3d9afa7d62a4ddf3bd7b145d9fef92f348cd88d4a47a6875629a9396d9a7b5609a2cf29166c400342842701f867246c6ecfea70fc91fde01ed6191263921482240ab6cc483f73f0593936a9c4df749733c24dd4a9d921f4af102ad6d65f749913ed89dce3ec51068f5ebd37bb4deb7bd4bcbb02480147366076496280e25f6fc74fffea73c0be4cc905f46e68310a7a93f27ee9d909b40eedcf421cdf743626a049e5892da9f92f12354a919adf812abd198c9b0919ed9a1854cee94b4332d8c52044312478a2b0769eed12ad5fe7d5a3423e124fb08a9871b94ef932b35cd69798dac1789e23935cb695980225b5a40bd0f5920f34a6b5e98c47d9a4ee2105283934fc97bf97432bdbf47d1d17d5e79a4a9dccb491191b225554af8115b3e20e3709f269d3cbcbd8779864ef7c9417d40c3d9ce669453a685225a3c23834081e0f9ecfe7df0d2019aed9c4fa6f7cea7a4e16106f7c19b14d990517df829459d44b91d5e263ea7d092b20de4124c310bf7c9c1248bb2b3bd4746ead319c6790e82ec920e987e4a8a8b9615a9d9390c0cd973f291688cc4a91437413950584464dc23c1bc47f1104599400b8e4446aa9d02bc5c343969895d1acfa764cb60da76a17b3fa5b8977cce73525c64f6ee610853729166bba4d5f21d5a482446222d4cabdfdbe4de6494d978b0477c89660f0f76887014b51d10e214a460b248622956b89791aea4357b0820d190dc4e8a23082ad10d769abc68929b7d32053bfb14badd87009ed3aa3c257808370a0e6908bbc4bd0485fc106433c88252636ab64beb9d392258725948879077bf9d911fbb4dcb3514534ec9f765cf819860ef9c16e368b588049ebc360a8a69ca49e97c9a3fa0170e486950b33d4a177c4a9ecdf6fd4f69d597624dd221e41223aafd3423821c90c34acd0e28c0a030863c7172b9b7692c44de1d72cc28f9726f8f2c2b1c1634cb29ba230bbb3da30892b897ccd28482c06df24ec8012427efc11402483c4136909ca2dd87c06d8ffc29b20b335aacff74879414f264982c526694809a10f3937c50b33d0a52c8ffa07f0e762819727030bbcf537f4eabc41c7d50e042ee0ad9489a535a6ddfa1a5f209491acd1635233d3cdd9d51484773467681ac2b05ec240bd33d9219cae97c4a868e9a919cee92d49147718f340779b7345924e8dbb3fb9415983ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7707c4afec4c16c767fe79e06291489d36af5f6035a18a37150926232a3bcce01711e7139cdc52e86b0ff291117ce36792d04ed9c9883c84fd1ee6c8fe2f06c9fc27a88cc2e39f5e7f7284140c8d310c8e52301243fe4dec3e9a7a4b37666f71ea0d90131f7c307a4fca6243904ed21a574c85322b9d9a7908a12880fef817b290c21d34e32726f9f924ce40d8243282478400e0ed176fae964176cb9434a788fa49b7251a4e6f727146767946923deccf2f3096682edc203ca2652ea840091e9a47f48a828a82135f860e7c17dca2d50b614b8ed930f411a9f6c190930f11b09d54362221299873b9f1e90b67fb8077e23dff07c46ca7e7b6f86c99a126fd23a22b9a03bfb949a205d4119096a46f9ae3dbc42413f116f9f6c01743ac5f507e73b39f952bb641ea819ece9de1e8928057d84e03d0add2978a585d429e56388d0e41e802d67e4fbed53f689e8f92931127900e45b52166542a686b2afbbe434a219a5138971882f28a741dc0b1ecac80522fbb6b74f68ed9034812033e204e4c6c86850ba81b223d482f258341f149e673939919c86bff729c5b6a4b4b7c95322ddfb297903938c1c579a09f29726448e731084a8759eef91e3b97b402cbc0f0ad208306672007689ee0f388f44b10f6590288f40890652353be49d3fa474e7f62e59939dfb14ca0bf7929d9d52d2078c44ce2f19fc87841bb98f945da1689a92d9f777218007945b9866a4eb77cfa16a1e52ce91fc8507dbd3fb94973b27ed4279706a462bc5e425d1241ed0741046e4936594b22205451e3c5946b211d048c4f13be40850def253b21c147812133cc849e1ef506077406c43210d35cbc876902adcdb3e273792a051f07370f069be7d7f8fe69ae695261643d83fff743aa3642b8515987a0adfa97bf2ce7727149a9e93d490a6a666338aa3efed91defb342709d8df251a1fec91eaa7288b12b79f9277b8834ef35d9a3872a688b53352f834204a26d054ec11b91fde839563267fb8bb47dc4b4bf094ab21b63c2790443772a5c8d4dfa7708ed2a790ac87a42b29a5429e4306f292634fd69942504a239155b947bec83d68a483fb94ffdb7f400e2de5ba6908e4653ca4481dff90074a2137b940d42c23ef963423599919cdd83e2de89229a581131ee46d3e3cdf3db80755f3f07c421943d20b0f487b12dda8e7ec8044e3c1f421a9dbfbe46c3f40aee67c4a6af91e4d38a5904923d1dbc448f748ddedefec93c890bfbb07dcc88b22af8e2499d88be4741f23a5fc01c9f48cb88806736f027ebb471ec29ea49629acdc277f9f0c3039d59f92bb96edde7f487e0604f07c8f9c464a89d34c122dd87cd06f33caf050ce9d849932a268b68f106546739d53be737bff53b2ac64d489dac40af7770808c93335a34ccecea7f76812b319697d4afa916e9ad1c4525698c291871454ee30b4839dbd5d4a5c6d4fc956106e9f12834e2909473627cb28aadfcd79ea69716077460ecc364d3d69cb2929c48cfc70384ab4a8736f6f8f424e6a46e326d6209eddbb4721084d02291d32a8148eddcb88072839fe10cdc8967e3aa1d8885c5072c7f677280993ed920ed923553b238f9252ab98050ac3efe53b943699dc27fe263d450a9f12fe940fc9c8049392cb39f54a9a99b43a918c343271ef43220d69668a6528574c31143904ecfc902c90c6a6141965fa09370ae1c81851fef5fe1e1922a22989041869ff1ee9577803947da74ecf8941919edb9e929f7befd34fa724d610e71912ac70151f50fa91a0114bd1ec527c4a96f51ca98d5dee944c02312ac586f7c868d32c2048c98837a7e4901dec91679def435b52b8450e36919de68f089251cf0f1f90574be3cef329056abb0f30a70f1f922c90fdd8de631d7940e1df6446a930b269d34f27e41cdcdb43335261947ca2d97970be43537f8f62cb03a2e3f6de8434d6e4c13d5a1d829cee7e4a6c4e63db26b78b86f09024f6e10189cc03cae5904260f79d9aed3fa00ce68c7cf29c54c636fb21b438463afd1ef17b4e30cfc525d82753f28014da038adbc90292aa79489107a9c1fc20dfa354e91ea79b0ea6e4d5515a757b468681f88db09c90f123379ffa9c50244fd852b3079f12e177c9299a507a8fa05134985130449dd2d04999510a11ba9724f101b9ae6482c805a32f697627b0217b335220944ea07c3ff41b117f3a9b228241026c7f8ffc773219d496c4e2c183fb0ff766138c9414fe030acc68a4901632f0c46fe7147d1c506a9bf4c88c74287083daa2a9a68598732c2ded127f930a81a0912da2fc227932500e944c38a095048a65c84811347294292c25dbfbe9a7f7299b0e3f09d0c815a7978839ee4173ec93a7b9fd704af4d9dba305000a831f3cdc85e2cac9a490ab4079cb7d0ae9280225a92753408a848ce10ef9740f588790db4ab114854dbb94632546227345b2465c0a55be4fe49aec63ea1f4ccef39c741b890c6c164553340bd46c6fe71e654f29f8bd3f015beeee501cfa90a49ef8846c16a919927f5a05212f8838801cf3fc5308e00e657d1ed2b0b7c9890241c8e5a5b50f62827d5a0ddea149ddbd8778e11e6928d27d3bb4aa483e32391834a7a4b3295fb497cd72fafb61065543d955927b5209073431a41c28c23bd87d40d1d96cfae9a7d40b492f9a9dcf6694ea208edccb88b224f544907372a5287fb87f3f9b51ac7ac09dee509042293a923df2f0f61fd248c900919c92b2fd942c2d4907732f25c221d0e460903bbe7f9f38e440d27fa45848bd107bf29cde9f3cd8a3a89c26915208fb1459911a44c445e3026d776861919adda7d52bd22fe43bd1432325658431527ef29c9401053ff7987b89324443f27b0e280d4c4c4ef9104a6a23769e12c723d19a61eac9c9db7b08c545a68b70a37c04596772f3a60f77285b708fba14d346b1d0fea71440915521fd467d9076a64999ec64e764c677f7290544cd3ea5d06c9f320bdbb43e4ad442f2f261464911d21ea4b476c8407f8aa9a79897c4999403257a8843c8fb2768a448480428fb9d7f4a8e0d9a110e2458048dd60108b70c86f2c11efd43b667774a7c45410335a32c0f2d4290f599de27f122f2921810536cdf27c346b96f9a2df61c28daa2b9a2feee9153482325ef1cb12441db25453ca59cc22ef88dd2c50f3e9d91df4bfa9d464a7e3e4932a54d08cb29c5ae140bf32c7c4ad9328a08694d9c566128ae279f9586402c4cca83a491dcdf8798534a32efd33490d1205d4643a028f10036845226e4d3679427df85bb72f0290518946fa6ec31b920c4256428c9b323d7fd530ab7679481e5e59b3d2ca0225dfc701739ae03f2f568a4a4c7284ed8a36fee51004ccdb2733214986b321acc96a4a22935409a956cfb01f57fbe8b66940cb9779ff2856482287622b54dc6e83ead347c4a79f619656e6614225233ca9c3d7c4862b34d392d2208f542fa9438e180165ccf695d69329980433e9de6b3c9a794e3c8c842108750fc3639a76cc0034a22d09ac101c57450d1a487c907a5d4f2c11e9181d40d117a9778fe53b213f7096e2e43a088664699759ad3737204f7898ae419138392cf7e2fdb7f88cc3e6681d6f4c91640c35300494c4e2621dba39eefed52c0734e397792676a469a98b42f19db29c5f13493c49b0f6710d67b0f282cbf0f2f1093f5805602c8cde14893f88d1c4fe237e2042226252128c0a10c30357b48fef9fdfc5322c3148c448e0c492ca542335a0422f4c853df4364744093753f271fe0dea7a4ebf7a744688a86698a2929422e0b91836561427a9eccd7749b822f1ae90ebc1a8a22296b777e7fb6b747aec40cb8515e6f8a2088d229644af77788c9b1a840a499ee50b0b9473389919272984e11a193462201cc485b6610c0f3dd3d62f38c22897dc8694e3e0c3991b43c410b12c4bd24d3079f92b69c3ea4288db4da83dd1970a36cce43ca0bc37380059cd02029c0784839991d72f3489ef6ce018d722da479915fca28634a6136a9d709cdc77d72b6c970e714d180c9c9e2ccce219da47589df0e683e2624de345c1a0eb92213a21135238d4292472972b2af340b940a247785d231649767bbf773c29ba79e2c1c2149d6f921a9436a46024f09845d5af6daa7ac2ca5edc985a4664443d2476440298143fc3623bf80dc1552d10f28ef39ddb9f780fc4b6a769e4d69358de4897222443cf26149935398774e39b54f691de59c18859a915bb8fbf0809891dc30c22d9f9238ef5228456b0cbb34a914c09d6316a6e4748097b71fe4140a538048acb64703279feae0c1f40119861c22b3f390bc7a326b942723d1dfa72fb7334a3a92a34419385a9fa4a40a7023ff88e4926280f30730410f29434b4a884483b234c4a3f7287002412873b77b909321f8f41cca81084f41f11ef91b94dd244f71ef9ce27e6a86c88a989c9680c99691b64478bc43997f8ace1f901bf020bff70002481383c5657268338ada292e21dcc8a9df3ea7383ccb2917753e8152a5b54aa224e51729594974233543724ad679729fd66b77498ec8d5a7663bc4a5e7b4324a9e032c209c6dca9f92252781a3f0826cf61e3a254b42ea89d415795dc448e7a46f48b88978f9f93e790e7b2429a0db2e25da1e52a4445f52ca6aff0105db0f892db629d420976ff680d6a5c1963434ca395246f0e17d78aa535af6205b4870c998dea71c06c5f298d3fbb47a43ae2139e194c121f2528b87d43f2d104c28343ac829a0871accef5358b64be98d5df26d481608c187a433a9fb4f77a7a434a67b9cab21cd4bd949907797c48ba69e121d70e2eee794f3267ecb1f30411ece484d110b93f5a1106bff534a103fbc47be504e7e684e997e72f031f5bbe4fe5208774064a70886ac0c9197f22aa4c7889b69a2682a80db837bd3fb64a029e7f000dcfb90b430f929f40ff969f71f9065a7142535437441ae0801fa945c5ec28d26608f2c39a5c03e25f1a0458b735819b23c445ecaa99c7f0a82903309f54ad98e071949086556ef4fd10c3ee443ca1950a770a590f238d82393994d1f9277fb80e6e1001c423a93a245625c8ab88920e7642827140f51caebfcde8ccc1aa5f718b7f3d9a733d263b0a74454b27a248a64da1e523cb1fb803c5572a0a81931326561a7e47392b226269f9221214623e2d1d2e6398927f9a8d48cb4f5946220b206148b62a414cb50468ec287735a459b91823980437b7e8f26ff3e91fd7c5f5429d9ef3d12408a1648843fcdc88f05344adfec53268c12b96479081a5924ca0aefd010c8889109a36086a77e0f64235bc644a5cfc988ef9154cca6a422285df380d2d9d48c24e153d2f5e4e862a182ac0ce9de1db2590fc9e5248d46e9369ed35db2b4f7295944e24c2688742fc9e93d1a383948a494ee7fba7f8fdd95fc9c32f3143f10e2644310b562d6492d911198d2f222d91aee9496eeeedda3ec2805b32480c43dc01204c9c9e17a48cb1aac7b2734c30f762860a70889a6fe80e4e621522c79be47a1d58c246d864e49d66916c8e3ba47419af21b52af44887be7e4177e4ad12635bb4fc13a59a3d9f62ed957a21b45aad93e89c67e464bb764fe68b630520a7e2805488853a29a3abd4729a4c93e4540bb14cb9227482a97d32694cf257343ca768f521e24cec4796439ee6fcf687de201e559299ec010c868d0db242d9f5278459d9246caee931337bbb7bf4b91debd69be0feecd2975302566212b031f8932cb841b455c946b2579cfc9f97808681414902a26a9a7853852831421520c486c329992b1bf47f1db4e06dc68f1e2e13e9478f610291dca62623a27dbbb33e25c52f834744023a3490690220a7a8d0490c25592059a625a5a9e929d218ff200b891774f1c41896a7243887bc997a40c2da9c119997a5a40b8074b48cd2888a5156ef23e0f1003ec4f283c22454f3a36a349253a23d548cd727277c92b2063443a6a9bc217d24814fd914bb04309f5fbc45e136824e230caefa1d307e46753e6933abd47268c02220ac1c889dc3f87ff36c52217f95c648e613e0ec8244c1e92544c8952642f7629eb8139254f607a9f0477fbfe84acc1fe434aa050f44f1c4229cbfd3df29476d9efcdf727f7a719c5912414c417a486b749fc292e20a541eb13644e67e894228219b9ca6467291224634434a6408094c02c234bfae9a77b19f31b25b1f688f3b26d4a851279ef93074c43b84f0a6a3acb4848f61eec63b2eed31493d34679390a9848ea297939a1989572007ba406c87122e708cd882928be238c3e4542e23ef547fe1b651ac97b9960e1807c066a46339967e47d918a26c625578a44913866fb9c6c082144b93866245a42a229a6083d23bf647b9fc600ca5290f270e73eb132a538391f729f221eea98f8704a5edbfe2e9166724ee6634a4e38e967329af761170ef626f9837d0ad33ebd8f3832a3d882c27ff210a6e4ba7dba471ed101464a2f655332392406e4dc9145a0c150ce957235e724cc07940fdac364910a266b4dfe0985a33484dd87e4f212cb92b5a4d090d27739795dd48c16687768f103c11d59837d4a1113dd480a3f2559dc259ea4401ab8ed9013728f526bdb3bbb144053b294f41ba9baed9c38fa3ed6c7c8fc52b36936213540239dd1e41123516e889b91d5b84f06e31e297f40cbeee53475e48210b2a41c489c28aa21a3ba4352789f048dba65af8642c21da42cce79c1e53e7124e554c96ed24a01f904f776685d9a9ad122d5c114dee0a7fbc0ed3e8933891326f6de7db2c49466dac72cecd01ae939223f4af3106e39e91bcaa39fd35b64546694f899b1cda2e881bc6a48c00ef5474a878c388d777bb64301f66c97d64c24d1b17f801c2dc50b07344f147cd30b64b9b7774807525e9c72bc333012a960326034eb9f4ee11ee7b41844eb0bb4a04c8b81","530a25b20719a0ed6764c2c93523ec29ed4dfe1bf1db3ed9d307a470c857f974875254d48c56bdc817a539ddbd4f667e7f4a0e2d65b1a7e40d1209c87fdfa7f5026a36a5e880d25724e6884a49d5909599113472a2285aded9fff4c11ee8f6e01ec9f87d884c4e34dedf2792650794a4a08087fef7e041b69b4300292b31232ff8e1f6fd0c74bb47fa86560569441496506a875c893dcce983fbe4b1de27b342d241fc36d923d71d99ff29b977c42e7b535a16a066fbe7e4427d4adec00e596392d3873452e20af2e4776981f23ecdd0149295efd26acf039ad39d8794a6a1389a9621884db7732200f12ebd36810e2151cca694d320850fe23d840106f128cc2682d0a20d2d13a219ad21ee925b45b881dfc815a32190a0d142dbbd29a500284d0b680fa67b64c3291e0232841b252926135299b48648f39291e53dc02c90d740ea958c3b457f2432a498896e942abc47be007d4cf3ff29248bf28c33f29fc85092b9263548747b48df42f429fad8276fe501a61e89095a99ccb7c9e327ba111fd010686989e684c2c9837be734b1d48c32d51439503c44138391124128aca505501accbdfb44fce914ba9798ea01b13d85dee798fa870492565ea7dba49d4969d23a39e55fa9d93ea560730a0b0867626161a45d58401a2e65e4731af1bd8fbeff4b7e09a991bc99d6c5aa2daae5478f3e3a2ecbf4e493e3b3f4f57a623f6fd2c5ba69d3797699a7ab3adf9ee5e7c5329f49c317af3f4feb759937e3347d9de7e9bc6d57cda3bb77b3b7d978d1dc5de66dd1547797cd45939e5775baa8ea3c9de56d56940de1b9a0df66599b7df4e8177f34adf3accd674fae090fe20e6279c40984eef63efcb687e42c6fdfdb23dd3ea160fdc1a710797de54ba0beb7434a9554f5defe9bbddd477b0f1fedec8df7292b72f0e9839fa2a6eb15f5f37ed0f515039d56512907fbe99bddfb8f76f71fdddb19dfa335817b070f7fea232263bea4d14df345be6cbfa8c8fc3dfae8697e9eadcb165f1633fafbeeaaae2e8b595e3777bf28a675d554e7edf88b6c995df05b7717f6d7cfeb6abd6aee524e92d282646d882b61b429657c70401e01a56529f2b84f699a877b51a0c7eb765ed5c50f324cdedd555516d3ebe3a6292e9680dedc7df1ea8bd7db346fdb4fcf5e9c6ebf7e45abb8db97a259daeb1570bf352c7a65992df0ca06a06535e5d7a9d5455ed338afaff2a69dd2fb7556d2f7cd75d3e68ba7ca0665d68084c579a1b38509214b4846668ffc244a3b924342b244fae9212ddfde2325f010f165f8de1b19c8f16a45184bef6193e396beeecdeadec3f12ea529c9aed1acfe92d12fa6a9cb976dd1121ebff8a3555d2ca7c52a2bcf309ff7c99ba0551db2f26470c956939c3dc43fa41428b1448103adf8539f6dbecc962dbff1608f16c029c742591b98e25df226c95c4db6290b3b9ded5018414b597843507fcd54115ae733b011cdf52aafdb226f80cdac68566576fd42c8bfac17cd3649d93664915cf787bfffee18b49719235e2c9605a8c08844b926ca8a173f0bace89069ee929924f54e0efe84564aee9d631e9b298df2bd907c0f7921f8abac2692b5041754cccab2baca67cf9545f9b3cbac5c1306df2343c02cba6ef275b6a25773e29f75b3a77f794cbc6641a8ea76ee7f8006fc0bdecb9a02c9928c34297d5f64dad0ff08cde8ef290d8cd2dff67b869baf31f9f4977e5e2c670cefa7b355b6d417df926ef5de5bbf6d2a223ffda69f595cf817c10e1439afb32565c9a511fdcdaf65e735090ef74d1fa9dc9a3fe9e755760d50f4477355b43fc8eb325bcee873fe7e9de5e65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98ff55bfd943ed281f257da2fd36052673f2043848fe92fb437608526e61bfe29144123fa440982bf14207d486326b2e033fa8368e0bef168a45f5f94d584bf121c181dee9cfb327f6863fedd415bbfa59eb891ce31062770f84f8c983ec1cbeb065a001fac9ba6bca4df1b62f79cc66680c9dffc1efdf5d345c59de15def4fd3fcfba486a0615e549ea0d0a2e043e8a7826ca0fff1d32fd3175fbe499f9e3e3f7d739a6ea7df2dc8bba8f386ac625a2cd3b3932fc863b84cf7e8abe31facc92f38a1f9a38fa6eb9a34ee286dc89d5037629a15a4dc447fa02bf25a68aa58645f12295e65cb0bd18adaf7f73ea26c23e1bf7b0f1a95569af85ffee453b878146ed1bf64bce9df4fefc16fdda340023f288fce3fd813bcb7c7d9fefbe422e3c743fa010a90666aab69557a1d7ef42da045542427406c8ffbea755e5f16d33c7d935db8463f295fba56674bd249e42ea14936c5c87a4d9ee64b197d51e7dcc2fff26c39a9d64b36146d762156d97dfbfa6db18289fe229f15eb051a359e8777fa6e4a1c48bf8434a4c8fed3838c52769469248d4a99734a959c5312e21ef9df14add1ca36c84b01ef3d0a59c927454c42290d52bc0f28cca1dc64b64bfef683092b5e726391ce39df7e4059e8edfd7b94697d38a1e89b16c0260feeed50c27e02af8b125c937bb4d6b53de3353a8a1ac84ad262c1f90ee576294e99ecdc47b35d5a5ddac77a2c459ef0e5294a22e7764609e003247c67b4d483f99cdefbf47c4669678450647369758c9a518a712fbf4f898ffd1dca232080d8dbbf37f9f4010df2d39d29854a335ad6cc686d86f2c19fe639250d102c71335aaccd6839706f4a89d3fd8cb0a4108b9661296f4a792a4a52de47a7b4e874406baab468494959ca2ed070273b946edf9dcc7689a32868df03b44f6981e22125c7284f4041da3e10a4d72868faf41ea550762810e2308e92f17bd9a784f8f91ef29d945aa52190a341f13dc5b10f1e4cc97fa566bbe48ceed03a16b9b21420d19219456ae794f9c828c94529e2fbb3fd7b08581fd0fa0f851fb4c2f080d604f7696594b28e9484da3b2798d3837cf7fe2eac302d2c7d4a7125a5823ea52809594d9a05d07837bb9791df45110e54f1432c2350ae64fb604651eb3e2d28d12202e52aee3da44c21adf8d2c810b550b299126fb4e287a51b1a0225bdc9d1a6a8ee01adf113ad667b9f62a49f4eefef7e3a25e34d4b1a140351ae03293bca70cc7611ef65143a62b22812ca776794caa7d40cb9ef146651f84b84a6acca3e9264335a73a0663b131a3e66877c029a055a2f25b69c517c4ee3bc97514e82162ea819e556325a28a28c08a52c081a456a946ea0ece9cede1e01a02c1d8f74674a1957220f65b92885422c4f534fd922f0316137cbce69c1879a4d735a5ad9a16534ca8610ddee138d094974bfb7779f726bb4b8038d4290f7890cb4d03add2591d9a3140a2d2251d69916df69d5ef3e857b60f2730af6766835914489fc1a5aa841844b4c30fb74f77c8712d29464c4644dc83d3e7848d133a59aa8d984a2fd0c64bcb793d144cc3efd9456fda8d9a7b40e3ddd2168d994389292b5b4d64c5c43539cd14451be86725dd4ecc17946391d621fa422091aad4651204acb17e4a29d1f106644276a46fc3d21d41e6e9f536691e69452680f0f889b689125dfa5dc14bd07829010d3e215c9423ea325220a8429349f50188fa4d264678756b677104cd38aede44146a9809d09250bf6b1ea4429209a85694e8ba9a41976d9c9a785054a19537f078432d19ec25fcaa3d2dc4dc8699f1241efed80df1e4c282f30a1ac23310061448a886681123d043ba3ac4f4e128291522a98589410bf478b0d140792f6caf629bb746f4a5cfe6036a3740546fae0e03ee84343a0f09066e19c86b047194a5a2d25263a9812508833a51deee5335aafa0ac3f11e43ef547934c6f517a606f46f2427f50334aa5cd8849299d9c534e81729a880748c79e9f4f29bf4a61fb1e59196a460b4a945fa52ce7392dcfec53704fd3468b61934f29b5f0e9a794ba3e076e9303a44b284548ebd024809f929c4e684d7e7b97560e6890fbd34ff7d02961f3f01e7db27d4e9957927aa89a1d8aa6886bc9c9ca480dde87d7f390d6721e52a290269110dc7f48e378b8935146ed7c8752a2b3e9a794d5a266a47826b4f048f97552cfd4292d44663b946e2173415e3cadf751e68c9a515e9ae23422d9e43e2527a9299186d6ed492d519c4dc9a9fbb4aa43cd48f39212a6a88e12dea4b8ce29674e2b32c4a50f10e1d18ad9fd5dc8c2c11ea58fee131fee527a9070fb948670fe29657088d36898939d07193aa51c3835a394dd44f29df7e8b7035a86d9a72c3ea846311a3884d267b40445b6ec3e492ee937a4ba6794059cec21a3481fd20a1c35dbdf2314f6e84ba2328d94d4d036a5de28834bca85389b4cc801668152ee14c83da424eb0169e7fd7d4ade4c2829497fd2da0cf5432b4a3c0452caf7ee519e70ef9c4ddb7d4cfd1ee5f8495e487668496c024349eb1294dda1e4cd8387073404d246c4c704972c14795a335a93ddc19c52168f4c03256aef51ba8ad89274ef439a22483d711a2981f309e69496aa0f76f7f6f6697640907d483d2da5d2320c71dd3dd23c647cd16c67f2f00175b0bd7b9f30a274184d0059d2ed07f7ce490c324a35ef63b266247f070fc99611df12b4dd5dca0266b458401f110b111d09296ab6478616e9c5edbd4f1f929c9e935a0219c89ee607c45b3409bb200859c307135217f4251889742959409a9487f97d629e87c4530fd1ec1e2d0f3d7cf090b2aaf7c87453629672d8c4f4dbd3fdbdc943b23994cd81aa2177e41e298e4fb71fd01cd3d4d3e20435251d4ba6399fdd270660eecdeedfdb259c69496ae79c540de5988987c8921fdc3fc876eed14adda71cb81371ee93d93c20f548c9624a2212bb3fc07c4c7629c9fa708fd403469a53e47ff08074724658929c926a23aa6684eaf4d3dd3ca35412aff367e7f432ad126cd35cd14869b98238842cc41ea9c5090d99c080df28b3f8e9ec3e91810c21e146e3014120b1b49240ab380f3e3d80e29a11db3c24454439109a754a27930012c76cefee910ff030a755972908727efe90562be8cb0707d0bde44e50aa9b8ccebdfd7bfbe4d19161d841b37b072441bba4340e4810b7697187cc2ef10e310c25e0f33d6a48fe3de17640d688528794a19cd01068d0e4d59060efd15260be4b5692f8899a9171dfa7bc08998f2931e33e8d17ae142dd467f729bf4a6c72ef013a25bd34a5051432c7e461523372d10ec05213a47368a172b2c71a896c1ec916259cf3035224c45fa437490f6c93479667b4a07a4eda809a51ce9d6c1f8939a94c5235e43b91e222eb455c484a86541d991a6a466c7c9f12c9942280e7b84f3a8d86403af653ca99d35aea64efc1a7908507f9a7248dc088cc314dfd0ec929ad2cd0f2cef939afd012a350b303720e3fcde9cbec011c0c1024fb144be0bbf7cef777a6539a31a81a8a61b3fbe4bb6eefd16a37e9215a0ca17c3539d50f68a587940e6511018d742f11923c0a429e3afd948c1cd9b0fbdb9f92ea7f70ffd37b7b3bdc2965b2f70922313f1186e69416fbc9f7a295849d5de21b32587bbcaa46643e274d435932621de210f248682d80e494d267c4bbe7348fa01bf91c933dd26558f8a25920678e5a90669d528a9a707cb84f3a879a1d9084cd7608f19d8c1cf67d18d503f8ac94b23e205b442367680f1f909dd921c7636797d60429f74f4b799f92527d788f9c9683f3fb7bf7f6008db8859c74720932d21f84db0ec9def421a9625acd211f9c9caf4f31d287e42d9d53084230e04051a28804f021ad18103f64648af6483d50335229398d87a405e245534fe23c23ee9d4dcf9157da25c70be2bc0395724eda7297ec2a69a403b243fbf0cec8359dedcc68c5f81cdc7b8f16d57776892d898d09b729e5871f66b49e43d3415240da6b3ac548c933ca092d58035ac3a0b5675a7cfb140a7f875669c864c00c52b373ca3a9198120c483299265213a4fbb6c9a8cd48bf9043b50bdca634a30f49d1c253a521c07c907b43e111f1d0ee2e89102dbc53b37cb6bb934388f387b4beb24feb553401640b297f48529a4f1f90c1a4661949d9f41eb9b1b4fa4ad0666498c93b426e9c16a16875f3deeea790ac2949ceeea7a493c99a1023ed117350ef34293bf7f23cbfb7776fff1e70cb7676b1fe06829056db3fa7c821fb94388116853efd94a6e19c3c786a460e4df6e021b87797162df6efc3ca90ee21a92009d9a595255a40a766337290cea734f57be4af6208337209c836dda7a5a07bb37d5a39c941de5d52000feeef932da3941e9197ba2701a6b59129e9725a01df25ea53b3738a964857d04234b9e9445ed27413d2ce046d4666152cf6290f8150cd32ca04222e2426a791925e246f39dfc9b383f37b2450e874426b2eb47c095a10abedef91ab4166e9fe769e918121adbaf7e01c9d928b4d6120a9a029adb5108710bf1d90fedede39bf77fee97df8da13e890d98c9c5152b264eb73e24d7a8344e68096400f888dc83650cc0b6839d9cc4fc94f228d4b7ecf3ee528482a889176cf29054133bf4bce2335235293eaa1158b694e5a669fd68769b2c8479a1103d0a008c17d18ca1919b3fb9f3e247f7807b487459ae484208900adbc110fdee77c06a9c6d9749f34c743d2add429f9a1142fd07a57769f14e983dde9ec530c8156c43ebd476b80dbbbb4344b0248316776406689e25062cf4ff7ef7fcab340ce0cf965643e08719afa73e2de09b909e4ce4d1fd27c3f24a646e08965aafd29193f42959ad12a30b11a8d990c1be9991d5adce44e493bd3622945302471a4b87290e61ead5ceddfa78534124eb28f907ab841f93eb952d39c96dcc87a91289e53b39cd60728b2a545d5fb900532afb40e8649dca7e9240e213538f994bc974f27d3fb7b141ddde7d5489acabd9c1411295b52a5841fb1e503320ef769d2c9c3db7b9867e8749f1cd407349ced6c46c9655a3ca20535320814089ecfeedf072f1da0d9cef9647aef7c4a1a1e66701fbc49910d19d5879f52d44994dbe1a5e3730a2d29db402ec114b3709f1c4cb2283bdb7b64a43e9d619ce720c82ee980e9a7a4b868a9919a9dc3c0903d271f89c6489c4a71139403854544c63d12cc7b140f519409b4e04864a4da29c0cb45939396d8a5f17c4ab60ca66d17baf7538a7bc9e73c27c54566ef1e8630251769b64b5a2ddfa1c5456224d2c2b422be4dee4d46998d077bc49768f6f06087084751db01214e410a268b249662857b19e94a5ac78700120dc9eda43882a012dd60a7c98b26b9d92753b0b34fa1db7d08e039add453828770a3e09086b04bdc4b50c80f4136832c2835a666bbb4069a2382259785740879f7db19f9b1db94f1a398724abe2f7b0ec4047be77b64cb1e40b591d74641314d39299d4ff307f4c201290d6ab647e9824fc9b3d9beff29ad0453ac493a845c6244b59f664490037258a9d901051814c690274e2ef7368d85c8bb438e19255feeed916585c382663945776461b767144112f792599a5010b84dde093980e4e43d9842008927c8069253b4fb10b8ed913f457661460bf89fee9092429e0c9345ca8c125013627e920f6ab647410af91ff4cfc10e25430e0e66f779eacf69e598a30f0a5cc85d211b49734a2bf03bb47c3e2149a3d9a266a487a7bb330ae968cec82e9075a5809d6461ba473243399d4fc9d0513392d35d923af228ee91e620ef96268b047d7b769fb202d3079f3edc9b62a453f27d76f66826892bc91bdc23519ce4148e4fc99f3898cdeeefdcd3208522715ac1de7eb00fe7679f92149319e5750e88f388cb692e763184fd4f89b870b6c96b2168e7c41c447e8a76677b148767fb14d6436476c9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf4fcb7ac46fe4394c484d9dd3421fa544a1061f503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83cdcf9f480b4fdc33df01bf986e73352f6db7b334cd69478737240967c67679f5213a42b282341cd28dfb5875728e827e2ed932d804ea7b8fee07c27275f6a97cc0335833ddddb2311a5a08f10bc47a13b05afb4a23aa57c0c119adc03b0e58c7cbf7dca3e113d3f2546220f807c4bcaa24cc8d450f675979c4634a37422310ef105e534887bc14319b94064dff6f609ad1d92261064469c80dc18190d4a375076845a501e8be683c2f32c2727f25334bbf729c5b6a4b4b7c95322ddfb297903938c1c579a09f29726448e731084a8759eef91e3b97b402cbc0f0ad208306672007689ee0f388f44b10f6590288f40890652353be49d3fa474e7f62e59939dfb14ca0bf7929d9d52d2078c44ce2f19fc87841bb98f945da1689a92d9f777218007945b9866a4eb77cfa16a1e52ce91fc8507dbd3fb94973b27ed4279706a767f7797bc249ac4039a0ec2887cb28c5256a4a0c88327cb4836021a89387e871c01ca5b7e4a9683024f6282073929fc1d0aec0e886d28a4a16619d90e52857bdbe7e44612340a7e0e0e3ecdb7efefd15cd3bcd2c46208fbe79f4e67946ca5b002534fe13b754fdef9ee8442d373921ad2d4d46c4671f4bd3dd27b9fe62401fbbb44e3833d52fd146551e2f653f20e77d069be4b1347ce14b176460a9f0644c9049a8a3d22f7c37bb072cce40f77f7887b692d9e7235c496e70492e846ae1499fafb14ce51fa1492f5907425a554c873c8405e72ecc93a53084a6924b22af7c817b9078d74709ff27ffb0fc8a1a55c370d81bc8c8714a9e31ff24029e42617889a65e4dd9266242b33a319dba7955d32a53470c283bccd87e7bb07f7a06a1e9e4f2863487ae101694fa21bf59c1d90683c983e24757b9f9ced07c8d59c4f492ddfa309a7143269247a9b18e91ea9bbfd9d7d1219f277f7801b7951e4d59124137b919cee63a4943f20999e1117d16068c99a9add230f614f52cb1456ee93bf4f06989cea4fc95dcb76ef3f243f030278be474e23a5c4692689166c3ee8b719657828e74ec24c195134db478832a3b9ce29dfb9bdff29595632ea446d6285fb3b0484e4999a512667e7d37b3489d98cb43e25fd4837cd6862292b4ce1c8430a2a7718dac1cede2e25aeb6a7642b08b74f8941a79484239b936514d5efe63cf5b438b03b2307669ba69eb4e5941462467e381c255ad4b9b7b747212735a371136b10cfeedda310842681940e19540ac7ee65c403941c7f8866644b3f9d506c442e28b963fb3b9484c9764987ec91aa9d914749a955cc0285e1f7f21d4a9b4cee137f939e22854f097fca8764648249c9e59c7a25cd4c5a9d48461a99b8f72191863433c532942ba6188a1c02767e48164863538a8c32fd841b8570648c28ff7a7f8f0c11d19444028cb47f8ff42bbc01cabe53a7e7c4a048cf6d4fc9cfbdf7e9a753126b88f30c0956b88a0f28fd48d088a56876293e25cb7a8ed4c62e774a2681189562c37b64b4691610a464c49b5372c80ef6c8b3cef7a12d29dc22079bc84ef34704c9a8e7870fc8aba571e7f99402b5dd0798d3870f4916c87e6cefb18e3ca0f06f32a35418d9b4e9a713720eeeeda119a9304a3ed1ec3c38dfa1a9bf47b1e501d1717b6f421a6bf2e01ead0e414e773f2536a7b16d93db4543784812fbf08044e601e5724821b0fb4ecdf61f500673463e794e2a639bfd105a1c239d7e8ff83d2798e7e212ec932979400aed01c5ed640149d53ca4c883d4607e90ef51aa748fd34d0753f2ea28adba3d23c340fc46584ec8f8919b4f7d4e2892276ca9d9834f89f0bbe4144d28bd47d0281acc2818a24e69e8a4cc288508dd4b92f8805c573241e482d19734bb13d890bd1929104a2750be1ffa8d883f9d4d11c12001b6bf47fe3b990c6a4b62f1e0c1fd877bb309464a0aff0105663452480b1978e2b7738a3e0e28b54d7a64463a14b8416dd154d342cc3996967689bf498540d0c816517e913c1928074a261cd04a02c53264a4081a39ca149692edfdf4d3fb944d879f0468e48ad34bc41cf7a039f6c9d3245b4ff4d9dba305000a831f3cdc85e2cac9a490ab4079cb7d0ae9280225a92753408a848ce10ef9740f588790db4ab114854dbb94632546227345b2465c0a55be4fe49aec63ea1f4ccef39c741b890c6c164553340bd46c6fe71e654f29f8bd3f015beeee501cfa90a49ef8846c16a919927f5a05212f8838801cf3fc5308e00e657d1ed2b0b7c9890241c8e5a5b50f62827d5a0ddea149ddbd8778e11e6928d27d3bb4aa483e32391834a7a4b3295fb497cd72fafb61065543d955927b5209073431a41c28c23bd87d40d1d96cfae9a7d40b492f9a9dcf6694ea208edccb88b224f544907372a5287fb87f3f9b51ac7ac09dee509042293a923df2f0f61fd248c900919c92b2fd942c2d4907732f25c221d0e460903bbe7f9f38e440d27fa45848bd107bf29cde9f3cd8a3a89c26915208fb1459911a44c445e3026d776861919adda7d52bd22fe43bd1432325658431527ef29c9401053ff7987b89324443f27b0e280d4c4c4ef9104a6a23769e12c723d19a61eac9c9db7b08c545a68b70a37c04596772f3a60f77285b708fba14d346b1d0fea71440915521fd467d9076a64999ec64e764c677f7290544cd3ea5d06c9f320bdbb43e4ad442f2f261464911d21ea4b476c8407f8aa9a79897c4999403257a8843c8fb2768a448480428fb9d7f4a8e0d9a110e2458048dd60108b70c86f2c11efd43b667774a7c45410335a32c0f2d4290f599de27f122f2921810536cdf27c346b96f9a2df61c28daa2b9a2feee9153482325ef1cb12441db25453ca59cc22ef88dd2c50f3e9d91df4bfa9d464a7e3e4932a54d08cb29c5ae140bf32c7c4ad9328a08694d9c566128ae279f9586402c4cca83a491dcdf8798534a32efd33490d1205d4643a028f10036845226e4d3679427df85bb72f0290518946fa6ec31b920c4256428c9b323d7fd530ab7679481e5e59b3d2ca0225dfc701739ae03f2f568a4a4c7284ed8a36fee51004ccdb2733214986b321acc96a4a22935409a956cfb01f57fbe8b66940cb9779ff2856482287622b54dc6e83ead347c4a79f619656e6614225233ca9c3d7c78ffe1c136e5b48820d40be953e284035a703da775a5c964020ef9749acf269f528e23230b411c42f1dbe49cb2010f2889406b060714d34145931e261f9452cb077b4406523744e85de2f94fc94edc27b8b90c81229a1965d6694ecfc911dc272a92674c0c4a3efbbd6cff2132fb98055ad3275b000d4f0124313999846c8f7abeb74b01cf39e5dc499ea9196962d2be646ca714c7d34c126f3e9c4158ef3da0b0fc3ebc404cd6035a09203787234de237723c89df881388989484a0008732c0d4ec21f9e7f7f34f890c533012393224b1940acd681188d0234f7d0f91d1014dd6fd9c7c807b9f92aedf9f12a1291aa629a6a408b92c440e968509e979325fd36d0abe68a43bf06a288aa4acddf9fdd9de1eb91233e04679bd2982204aa79029dddf2126c7a2029166ba43c1e61ecd24464aca613a45844e1a890430236d994100cf77f788cd338a24f621a739f930e444d2f2042d4810f7924c1f7c4ada72fa90a234d26a0f7667c08db2390f292f0ccf0116704283a400e321e56476c8cd2379da3b0734cab590e6457e29a38c2985d9a45e27341ff7c9d926c39d53440326278b333b877492d6257e3ba0f9989078d3706938e48a4c8846d48c340a491ea5c8c9bed22c502a90dc154ac7905d9eeddecf096f9e7ab270842459e787a40ea919093c25107669d96b9fb2b294b62717929a110d491f9101a5040ef1db8cfc02725748453fa0bce774e7de03f22fa9d97936a5d5349227ca8910f1c887254d4e61de39e5d43ea575947362146a466ee1eec303624672c308b77c4ae2bc4ba114ad31ecd2a45200778e599892d3015ede7e9053284c0122b1da1e0d9c7caa8307d30764187288ccce43f2eac9ac519e8c447f9fbedcce28e9488e1265e0687d92922ac08dfc23924b8a01ce1fc0043da40c2d2921120dcad2108fdea3c00904a1ccddee414e86e0d3732807223c05c57be46f5076933cc5bd738afba919222b62725a02265b46da12e1f10e65fe293a7f406ec083fcde0308204d0c1697c9a1cd286aa7b8847023a77efb9ce2f02ca75cd4f9044a95d62a8992945fa46425d18dd40cc92959e7c97d5aafdd253922579f9aed10979ed3ca28790eb08070b6297f4a969c048ec20bb2d97be8942c09a9275257e47511239d93be21e126e2e5e7fbe439ec91a4806ebb94687b4891127d4929abfd07146c3f24b6d8a650835cbed9035a97065bd2d028e74819c187f7e1a94e69d9836c21c125637a9f721814cb634eefd3ea0db986e484530687c84b2d1e52ffb44030a1d0e820a7801e6a30bf4f61d92ea53776c9b7215920041f92cea4ee3fdd9d92d298ee71ae86342f652741de5d122f9a7a4a74c089bb9f53ce9bf82d7fc00479382335452c4cd68742acfd4f2941fcf01ef94239f9a13965fac9c1c7d4ef92fb4b21dc01919d2218b232445ecaab901e236ea689a2a9006e0fee4def9381a69cc30370ef43d2c2e4a7d03fe4a7dd7f40969d5294d40cd105b92204e853727909379a803db2e49402fb94c483162dce6165c8f2107929a772fe290842ce24d42b653b1e6424219459bd3f4533f8900f2967409dc29542cae3608f4c66367d48deed039a87037008e94c8a16897129e226829c93a19c503c4429aff37b33326b94de63dcce679fce488fc19e1251c9ea912892697b48f1c4ee03f254c981a266c4c894859d92cf49ca9a987c4a8684188d88474b9be7249ee4a35233d2d6538a81c81a502c8a91522c4319390a1fce69156d460ae6000eedf93d9afcfb44f6f37d51a564bff74800295a2011fe34233f16d0287db34f99304ae492e521686491282bbc4343202346268c82199efa3d908d6c1913953e2723be4752319b928aa074cd034a67533392844f49d793a38b850ab232a47b77c8663d249793341aa5db784e77c9d2dea7641189339920d2bd24a7f768e0e4209152baffe9fe3d7657f273cacc53fc4088930d41d48a5927b54446604acb8b646bb8535ababb778fb2a314cc920012f7004b10242787eb212d6bb0ee9dd00c3fd8a1809d22249afa03929b8748b1e4f91e85563392b4193a2559a759208feb1e0569ca6f48bd1221ee9d935ff829459bd4ec3e05eb648d66dbbb645f896e14a966fb241afb192ddd92f9a3d9c24829f8a11420214e896aeaf41ea59026fb1401ed522c4b9e20a95c4e9b503e97cc0d29db3d4a79903813e791e5b8bf3da3f589079467a578024320a3416f93b47c4ae115754a1a29bb4f4edcecdefe2e457af7a6f93eb837a7d4c1949885ac0c7c24ca2c136e147151ae95e43d27e7e321a0515040aa98a49e16e2480d5284483120b1c9644ac6fe1ec56f3b1970a3c58b87fb50e2d943a474288b89e99c6cefce887349e1d3d0018d8c2619408a28e83512400a574916688a6969794a76863cca03e046de3d710425aac90d21ee255f92a23652833332f5b480700f96909a51104b2bdce47d1e2006d89f5078448a9e746c46934a7446aa919ae5e4ee925740c68874d436852fa49128fa2397608712eaf789bd26d048c46194df43a70fc8cfa6cc27757a8f4c18054414829113b97f0eff6d8a452ef2b9c81cc37c1c9049983c24a99812a5c85eec52d603734a9ec0f43e09eef6fd095983fd879440a1e89f38845296fb7be429edb2df9bef4fee4f338a234928882f480d6f93f8535c404a83d627c89cced0294504337295c9ce522448c688684c81002981594696f4d34ff732e6374a62ed11e765db940a25f2de270f9886709f14d474969190ec3dd8c764dda72926a78df272143091d453f27242312be500f6480d90e344ce119a1153507c47187d8a84c47dea8ffc37ca3492f732c1c201f90cd48c6632cfc8fb22154d8c4bae14892271ccf639d91042887271cc48b48444534c117a467ec9f63e8d0194a520e5e1ce7d62654a71723ee43e453cd431f1e194bcb6fd5d22cde49cccc7949c70d2cf6434efc32e1cec4df207fb14a67d7a1f716446b10585ffe4214cc975fb748f3ca2038c945ecaa66472480cc8b9238b4083a19c2be56ace49980f281fb487c922154cd69afc130a476908bb0fc9e52596256b49a121a5ef72f2baa8192dd0eed0e207823bb206fb942226ba91147e4ab2b84b3c49813470db2127e41ea5d6b677762980a66429e9375275db3971f47dac8f91f9a566d36c426a80463aa3c92346a2dc103723ab719f0cc63d52fe8096ddcb69eac805216449399038515443467587a4f03e091a75cb5e0d85843b48599cf382cb7de248caa992dda49502f209eeedd0ba3435a345aa8329bcc14ff781db7d126712274cecbdfb648929cdb48f59d8a135d273447e94e621dc72d23794473fa7b7c8a8cc28f133639b45d10379d590801dea8f940e19711aeff66c8702ecd92ead9948a263ff00395a8a170e689e28f8a617c8726fef900ea4bc38e57867602452c164c068d63f9dc23dce693188d6176841991603a7144a640f3240dbcfc884936b46d853da9bfc37e2b77db2a70f48e190aff2e90ea5a8a819ad7a912f4a73ba7b9fccfcfe941c5aca624fc91b241290ffbe4feb05d46c4ad101a5af48cc119592aa212b332368e44451b4bcb3ffe9833dd0edc13d92f1fb10999c68bcbf4f24cb0e284941010ffdefc1836c378700525662465ef0c3edfb19e8768ff40dad0ad288282ca1d40eb9127b98d307f7c963bd4f6685a483f86db247ae3b32ff5372ef885df6a6b42c40cdf6cfc985fa94bc811db2c624a70f69a4c415e4c9efd202e57d9aa129242bdfa5d59e0734a73b0f294d4371342d43109b6ee74400e25d7a6d021d42a2984d29a7410a1fc47b08030ce251984d04a1451b5a2644335a43dc25b78a7003bf912b46432041a385b67b534a01509a16d01e4cf7c886533c046408374a524c26a432690d91e62523cb7b805920af81d42b19778afe4864483113dd2855788f7c01fa98e6ff534816e51967e43f91a124734d6a90e8f690be85e853f4b14fdeca034c3d1213b432996f93c74f74233ea021d0d212cd09859307f7ce6962a91965aa2972a07888260623258250584b0ba034987bf789f8d329742f31d503627b0abdcf31f50f0924adbc4eb7493b93d2a47572cabf52b37d4ac1e6141610cec4c2c248bbb080345ccac8e734e27b1f7dff97fc1252237933ad8b555b54cb8f1e7d745c96e9c927c767e9ebf5c47edea48b75d3a6f3ec324f5775be3dcbcf8b653e93862f5e7f9ed6eb326fc669fa3acfd379dbae9a4777ef666fb3f1a2b9bbccdba2a9ee2e9b8b263dafea7451d5793acbdbac281bc27341bfcdb236fbe8d12ffe685ae7599bcf9e5c131ec41dc4f2881308dded7df86d0fc959debeb747ba7d42c1fa834f21f2faca97407d6f87942aa9eabdfd377bbb8ff60e1edd7f30260e7b4089fb9fa2a6eb15f5f37ed0f515039d56512907fbe99bddfb8fe87f7bbbe33de2877b7bfb3ff51191315fd2e8a6f9225fb65f5464fe1e7df4343fcfd6658b2f8b19fd7d77555797c52caf9bbb5f14d3ba6aaaf376fc45b6cc2ef8adbb0bfbebe775b55e35772927496941b236c49530da94323e38208f80d2b21479dca734cdc3bd28d0e3753bafeae2071926efeeaa2a8be9f571d314174b406feebe78f5c5eb6d9ab7eda7672f4eb75fbfda255ebb14cdd25eaf80fbad61d12bcb6c815736002dab29bf4ead9a8ae0e559d3664d81d8b1b96eda7cf15439a0a42f887ac579a11385b9202348f6658f5c24ca38922f426244aae921addcde23f97f88d0327cef8d8ce178b52264a5e3b0c9714b5ff72674f7e1f80119d1bd838734a1bf64f48b3f22d2aef2ba2df206b8cd8a665566d72f64b4cb7ad16c5f65f5b2585e6c2fabe5f6f493acd86ef2e9ba2edaeb6d1688df7f778cd10bcd881b8a650164cede8f192e7e1698c121d3dca540e4fcc13d8a61e0c19cdf83f268a634f0f742f23d3896e0afb29aa8d8125c10362bcbea2a9f3d5726e1cf2eb3724d187c8f54f1b2ade98f265f672b7a15acb36ef6f4afabbc696d0bfa7b59d5eddcff000df817bca72c97912ea3ef8b4c1bfa1fa119fd3da5815102da7ecf70f335f881fed2cf8be58ce1fd74b6ca96fae25bd26ede7bebb7cceff49b7e6671e15f043b50e4bcce9694a79646f437bf969dd7c4bfdc377d7491d744ef6bf327fdbccaae018afe68ae8af607795d66cb197dcedfafb3dcfccac0d072800040c07e661bd387d4399141ff00b29604dc2a2000bea6df9900fc2dfdb17eab9fd2473a50fe4afb651a4ceaec07640af031fd85f606acd0c47cc33f852268449f2841f09702a40f69cc44167c467f100ddc371e8df4eb8bb29af0578203a3c39d735fe60f6dccbf3b68ebb7d41337d239c6e0040eff8911d3277879dd400be08375d39497f47b43ec9ed3d80c30f99bdfa3bf7ebaa8b833bcebfd699a7f9fec09e564f32929312b281f1daf67059b9a555d90b41ba5a55f7f0fcb76046b7707ee0dad38f2bf406b7707868e624afe17fe1b2d8df3bf705d4887e3df5d7e7797dfdde57759ad537e84ffe57777f9dd5d7e7797dfdd7d48b81246efe96064ec5154cb94f442fa932ff2b6498b654a144d1bef8dff17391bbb0f1fddbbf7e8fec331ad61dda77cfe37ef6cec3fdadf1f536c7fff802c13cdfeff075d8dd7dbc75f3d7db3fdeaabe7af8d57f0e1ae4604e8ff6bfc0999335a88dfdd278e2039b8853f410c4e1cbc5de7bf685dd4f936b1f1ff375c080afea7a490687983a2585a8a218c7fe442d0c07ee4422819f40f206b49c0ad0202e06bfa9d09c0dfd21f3f7221f0f207b81000f15e2e047df7f3c162ef3fdad91b93c7b3471ed0376fb1e97f9f8e776815f4e1a77ba4fd89dcff5fb3d9af9fbc7823e69526d758d70f34d95198ffafb1d8f43f9ab34f69f18f1882c4e017d3bce4cb96c27920467ef5725aacb2926d2f2dbf3cdcbb47ab0c7b39ad7b534aff9cc84ecbaeb46c74ff21ad7fedd0820675d9e6cb6cd9f21b0ff6ce698582b2aa146e534e7197569228553dd9dea3e4dd6c87c2efc93e7c67a5f06b268a50329f81476822373b0f2442db246f2450e4344095c86c109ba99d6634a20c11e5b29f6da7e1809666f2c94e4ee9ed9d8c529784f1ff8b9c86887286d624025b8576fa6e4a0a9f7e09dfa4d5b04f0f325ae6a6d579c2659f5648691d9e16eeee51cefafec3bd3dc28ec0d222d13d5ae6a13c2ef2f8b40c48283fa0a5015acfcf762947fd60c22853ea174ba0e7db0fce39377f9fd2bd135ab1dab9b73f79706fe7d3e9c30954112d0a4fee9dd3d2c72c239edaa74c3b71d7012d67edec1d108d67939dfb68b6bb77bebfff80f420add620ff4d2b0b94109e6def514a7f77ba37cb3fbd07b69ddefbf47cf69030ca69c58f56a168a17832a165f9bdfc3e2d16eeefd0da1b92ee7bfbf7269f3ea0417eba33a5e585d939ad4250fcb34dcb4a794e0b6d5860e06659be93ed9d6fef4d279426cf084b5a967848ab10b307b4b64b0bfbf7d1e964fffec11e2df56ed38869a4347e5aa0b947c9f5c96c778f16de3f9555af4fefd3ba012d28d3da1a2d6cec03417a8d161a3ebd47cb8e3bb478b08748f4212d12659f12e2e77b3911e4d37d8236a14c38ad89d1dacf83075352ead46cf7febd7b3bf788bcb47a45b8cd6821e5e09c560b335a189ed1cad06cff1e16791edc9bed51ca7e6f3b7fb0836cfa43ea34a385dbbd7382393dc877efef42091d7c3afb94d66268f9f4535a59d8a7655f9a05d07897189cd415ad0ac0f379f820a365155a173998d14acffe39cdc7e43eadefdd7b48abeb139a53220535db7d40ab34b43c4673fd00e39bd242cac18456421eecdfa350706fb6f72946fae9f4feeea75362fbf37b5837a0f5412c73d3aae06c176b24192db760b2a6d3fbf9eeec1ea9a8035ab1d8a7a5095a322242d34ae43e169667d91e08b233a1e16376489a6816325a123f7830a3352d1ae7bd8cd6f1ce67e05e5a8fccce098fed4f69998fa0d1ea062dd1cd68d56b6f8f00d0ca368f74674a7a92c8432bc3b4ec482c4f534f2bace063c26e969def902924dcf24fef3fd839a715e0035a1cd9bf4f342624d1fddede7d5a8fcef6f7105310e47d22c383ed07d35d12993d5a76cc3ea5a99f7d7a303b2796a7251230f9392d90ececed4f49944823ecd34491322026987dba7bbe73fee90e2dcc63b22664550e1ed28a132dcf52b309ad906520e33dd2460ff3d9a79fceeec13c7d7a9eef4c77085a36258edca7416f1f10d7d014673451b4c649ebc3d4ecc17946eba0c43e58be27687bb444f980d88f16c71e9c1f106644276a46fc3d21d41e6e9fd36a3ccd292d3b3f3c206eda9fdccb77693d97de03414888f7776122f219cc0b4931712f2d7d612176b2b333a3256e2c403dc81f4c1e64b47cb633a105b6fd192148cba6340bd37c7f7a409a61976de3435aeadddda1fe0e0865a23d2d191ddc9bd1dc4dee918e2082dee3f4cf8309ada54d68a59e188030224544b3408ba3043bdb7948b22f39a17be70f884509f17bfbc4e9fb94b9dacef66945f6de94b8fcc16c464b7c18e98383fba00f0d817c269a85731ac21eadea4fce6955ebfc604a4021ceb454772f9f1d403a674490fbd41f4d32bd454b6a7b339217fa839ad1f2f38c98f4c17696d33adc3e2d76921d251d7b7e3e9deceed252d7de0eb8f7207f984f6982a9979cf88dac0a4ddb8c7afe74ba4f53959f3f3c076e93032c31d2b2faa7c428340b24a7937d6abb3bdbbd4783dc9f7eba874e099b87f7e893edf31cdc4b3d1141c80921ae25a7342335781f41c6c3e901addae6b488392104f71fd2381eee64b40a7dbe734004997e4a2bc1d48c14cf64ef535a03a79544747aef7c3bdba1254a32170f680668787b68f6e09c34312d44934aa0057d6a4aa4d9bd7f406a899c4f5ad0bd3f9961a4a47949099333349b40a99e3f20c9ca6976b307708c6644be5dc8c2c11e2db9de273edca52575c2ed531ac2f9a7b4ea499c46c39cec3cc8d029e596a8192d734f723827d37bf4dbc184386f6f760eaa3d9ced814368c9f9e0e001d9b2fb24b9a4dfee134bcd68e57cb2875578faf0fe03a89afd3d42618fbe242ad348490d6dd372f52e99094c3e2d82ef1c6016ee653939400f27dbf70f483befefd37ad18416f2e9cf4946aed2033862d48c56ee67f7eed1dafade399bb6fb98fabd7cfb01c90bc9ce01d91018ca5d9aa3f34f69c1f3c1c3031a026923e263824b168ab298b31db20d98535af926d370f029ad8b9e930e3920ddfb90a608524f9c464ae07c8239a544c6c1eedede3ecd0e08b20fa9df017d66c475f748f390f145b39dc9c307d4c1f6ee7dc28896906902c8926e3fb8774e62906507b4784ecd66247f070fc99611df1234caa4d2d26e766f9b3e2216223a1252d46c8f0c2d96e4b7f73e7d48727a4e6a0964207b9a1f106fd124ec8220640d1f4c485dd0976024d2a5640169521ee6f789791e124f3d44b37b07b4f0fde0e13e891299eefd0312880931fdf6747f6ff2906c0e85385035e48edc23c5f1e9f6039a639afa7382967f4a3a964c733ebb4f0cc0dc9bddbfb74b38ef6fefed9c93aad901345872caf6643bf7ee935c71529988739fcce601a9c71d1ac2435a12a711d09827bbf748caf7483d60a4e434ef1d3c209d9c119624a7a4da88aa19a13afd7437cf28be9a40bf65e7f432ad4b6dd35cd1483f7d48acf6802cc41ea9c5090d99c080df6835fed3d97d22031942c28dc6038240623f7d48b370fee0d30328ae19b1cd435244143ad0acef93c9dece8863b677f7c8077898ef93ce0441cecf1f7e9a914ed97e7000dd4beec4f6c37d323af7f6efed934747866107cdee1d9004ed92d2382041dcde9fdc27b34bbc430cb3039f961a72ee7cef80ac112db7d3aafe8486408326af86047bef0199be5db292c44fd48c8cfbfec1840ce8de9498719fc60b57ea607b9adddf272d42a37b804e492f4defcd1e9239260f939a918b7600969a200a7a40cec11e6b24b279245bf7a6dbf9012912e22fd29ba407b6c923cbb3ecfea7e7a40da8d984b4cec3198939a94c5235e43b91e222eb455c484a86541d991a6a466c7cffe01e4de20e3cc77dd2693404d2b19feeec7f7a3025a5f6e053c8c283fc5392466044e698a67e87e4f49c0cc9cef4fc3cfbf4c1949002b403720e3fcde9cb8c165b091a1124fbf43e31f3eebdf3fd9de994660caa865246d97df25db7f73e45a77b19753a218dbdfb60426c30dba7457d4023dd4b84248f8290a74e3f25234736ecfef6a7a4fa1fdcfff4dede0e777aefd37c9f2012f31361684e295223df6bb2fd606797f8860cd61e876b44e673d234145c12eb10879047f2903a2277f57c4abc7b4ef308ba91cf31d9235db67d7e1f6e1e3973d48234ebf4e03e69908387fba473a8d90149d86c8710dfc9c861df87513d80cf7a703f3f205b442367680f1f909dd921c76387d64d68a424b10f3f25a5faf01e392d07e7f7f7eeed011a710b39e9e41264a43f08b71d92bde94352c5f749899312a63161a40fc95b3aa7108460c0819a90d378f0e0e16c7b87f8212353b447ea819a914ac9693c242d102f9a7a12e71971ef6c7a9e9ddf9bec92e30571de814a39276db94b769534d201d9a17d7867e49ace76669fee938452b37bbbd3839d5d624b6263c26d4a499387d90ec50564d4771e92f69a4e3152f28c72420bd6608f262bdf7d405842e1efe4e42a3fcc6006a9d939c56b24a60403924ca689d404e9be6d326a33d22fe450f11ad49466f421295a78aa3404980f726f283c221ea295a907e7fbec4ae5b3dd9d1c429c3fcc88203b34c883fb640b29ee2629cda70fc86052b38ca46c7a8fdcd8d93e092b5185848a7c014a18654410784a9f42b2a62439bb9f924e266b428cb447cc41bdd3a4ecdccbf3fcdedebdfd7bc02ddbd9bd3721df9b08425a6dff9c2287ec53e284833df2d9691acec983a766e4d0640f1e827b771f5058711f5686740f490549c8eefd6cf2e92e9acdc8413a9fd2d4ef91bf8a21ccc82520db74ff01598cd9fef9fd831ce4dd2505f0e0fe3ed9320a8689bcd43d09f02e11847439adf0ed12f5a9d939454ba42bee6f4fc94d27f292a69b907626683332ab60b14f7908846a96510c8db890989c464a7a91bce57c27cf0eceef9140a1d3c9c39d87f788d2440b62b5fd3d7235c82cdddfce333230a455f71e9ca35372b1290c2415347d40fee2fe94f8ed80f4f7f6cef9bdf34fefc3d79e4087cc66e48c9292255b9f136fd21b2432077b14d6131b916da09817d072b2999f929f441a97fc9efddd7b34f5fbc448bbe77bf728ba3edf25e7919a11a949f5501a6f9a9396d9cf28baa6d09a5c2662001a1421b80f4339236376ffd387e40fef80f6b048939c102411b83fa5999addff144c4eaa7136dd27cdf190742b754a7e28c50b135229f749913ed89dce3ec510a6d9f4d37b93c9bdedddfdfbc46f1437914b406689e25062cf4f698d9067819c19f2cbc87c10e234f5e7c4bd137213c89d9b3ea4f97e484c8dc0f3216587f6a764fc08556ab6ff90464a3edb361936d2333b3ba482d12969e7fd8c141c248e14570ed2dc9b1205efe70f3e25e124fb08a9871b94ef932b35cd2744905d72e2b3736a96535a8d22db599edf872c9079cdf20798c47d9a4ee2105283934fc97bf97432a5a40df9a0539097a692b25f64f73ebd47aa94f023b67c40c6e13e4d3a79787b0ff30c9dee9383fa8086b39dcd282d4319d57d9ab68cc8787e3ebb7f1fbc7480663be793e9bdf329697898c17df026453664541f7e4a5127516e6706829c536849d9067209a69885fbe4609245d9d9de2323f5e90ce33c07417649074c3f25c535d9212f6aff1c0686ec39f9483446e2548a9ba01c282c2232ee9160dea37888a24ca005472223d54e015e2e9a9cb4c42e8de753b265306dbbd0bd9f52dc4b3ee739292e327bf7308429b948335a02a728f80169cb7ba42d1fee922627f726a3ccc6833de24b347b78b04384a3a8ed8010a720059345124bb1c2bd8c74e58cd40535231a92db4971044125bac14e93174d72b34fa660679f42b7fb10c0f34ff71f50828770a3e09086b04bdc4b50c80f4136832c2835a666bb0f281447044b2e0be910f2eeb733f263b769959e62ca29f9beec391013ec9def912d7b00d5465e1b05c534e5a4743ecd1fd00b07a434a8d91ea50b3e25cf66fbfea70f08da949caa09b9c4886a3fcd882007e4b052b3030a30288c214f9c5cee6d1a0b9177871c334abedcdb23cb0a8705cd728aeec8c26ecf288224ee25b334a120709bbc137200c9c97b308500124f900d24a768f72170db237f8aecc26c7bf6e0d31d5252c89361b2489951026a42cc4ff241cdf6284821ff83fe39d8a164c8c1c1ec3e4ffdf9fd9c7434451f14b890bb423692e6f4e1f6cece84d2b42469345bd48cf4f0747746211dcd19d905b2ae14b0932c4cf7486628a7f329193a6a4672ba4b52471ec53dd21ce4ddd26491a06fcfee535660fae0d3877b538c744abecfce1ecd24712579837b248a939cc2f129f91307b3d9fd9d7b1aa450249e93e678b00fe7679f92149319e5750e88f388cb692e763184fd4f89b870b6c96b2168e7c41c447e8a76677b148767fb14d6436476c9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf3fa1383ba34c1bf166969f4f30136c171e503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83ca4843d69fb877be037f20dcf67a4ecb7f76698","ac29f1e6e4802cf9cece3ea52648575046829a51be6b0faf50d04fc4db275b009d4e71fdc1f94e4ebed42e99076a067bbab747224a411f21788f42770a5e6921624af9182234b90760cb19f97efb947d227a7e4a8c441e00f99694459990a9a1eceb2e398d6846e944621ce20bca6910f78287327281c8beeded135a3b244d20c88c3801b931321a946ea0ec08b5a03c16cd0785e7594e4ee4a76876ef538a6d49696f93a744baf753f206261939ae3413e42f4d881ce7200851eb3cdf23c773f78058781f14a41160cce400ec12dd1f701e89621fca20511e81120da46a76c83b7f48e9ceed5db2263bf7299417ee253b3ba5a40f18899c5f32f80f0937721f29bb42d13425b3efef42000f28b730cd48d7ef9e43d53ca49c23f90b0fb6a7f7292f774eda85f2e0d4ecfeee2e7949348907341d8411f96419a5ac484191074f96916c04341271fc0e390294b7fc942c07059ec4040f7252f83b14d81d10db504843cd32b21da40af7b6cfc98d246814fc1c1c7c9a6fdfdfa3b9a679a589c510f6cf3f9dce28d94a6105a69ec277ea9ebcf3dd0985a6e72435a4a9a9d98ce2e87b7ba4f73ecd4902f67789c6077ba4fa29caa2c4eda7e41deea0d37c97268e9c2962ed8c143e0d88920934157b44ee87f760e598c91feeee11f7d21216e56a882dcf0924d18d5c2932f5f7299ca3f42924eb21e94a4aa990e79081bce4d89375a61094d2486455ee912f720f1ae9e03ee5fff61f90434bb96e1a0279190f2952c73fe48152c84d2e1035cbc8bb25cd4856664633b64f6b22644a69e08407799b0fcf770fee41d53c3c9f50c690f4022da5816ed4737640a2f160fa90d4ed7d72b61f2057733e25b57c8f269c52c8a491e86d62a47ba4eef677f64964c8dfdd036ee445915747924cec4572ba8f9152fe80647a465c4483b93701bfdd230f614f52cb1456ee93bf4f06989cea4fc95dcb76ef3f243f030278be474e23a5c4692689166c3ee8b719657828e74ec24c195134db478832a3b9ce29dfb9bdff29595632ea446d6285fb3b0484e4999a512667e7d37b3489d98cb43e25fd4837cd6862292b4ce1c8430a2a7718dac1cede2e25aeb6a7642b08b74f8941a79484239b936514d5efe63cf5b438b03b2307669ba69eb4e5941462467e381c255ad4b9b7b747212735a371136b10cfeedda310842681940e19540ac768f1905415f90e6846b6f4d309c546e482923bb6bf4349986c9774c81ea9da197994945ac52c50187e2fdfa1b4c9e43ef137e92952f894f0a77c48462698945ccea957d2cca4d58964a491672480","441ad2cc14cb50ae9862287208d8f92159208d4d2932caf4136e14c29131a2fcebfd3d32444453120930d2fe3dd2aff00628fb4e9d9e1383223db73d253ff7dea79f4e49ac21ce332458e12a3ea0f423412396a2d9a5f8942ceb39521bbbdc29990462548a0def91d1a659409092116f4ec9213bd823cf3adf87b6a4708b1c6c223bcd1f1124a39e1f3e20af96c69de7530ad4761f604e1f3e245920fbb1bdc73af280c2bfc98c526164d3a69f6205ffde1e9a910aa3e413cdce83f31d9afa7b145b1e101db7f726a4b1260feed1ea10e474f75362731adb36b95d34848724b10f0f48641e502e871402bbefd46cff01653067e493e7a432b6d90fa1c531d2e9f788df7382792e2ec13e999207a4d01e50dc4e169054cd438a3c480de607f91ea54af738dd743025af8ed2aadb33320cc46f84e5848c1fb9f9d4e7842279c2969a3df89408bf4b4ed184d27b048da2c18c8221ea94864eca8c5288d0bd24890fc8752513442e187d49b33b810dd99b9102a17402e5fba1df88f8d3d914110c1260fb7be4bf93c9a0b624160f1edc7fb847abd1d48c14fe030acc68a4901632f0c46fe7147d1c506a9bf4c88c74287083daa2a9a68598732c2ded127f930a81a0912da2fc227932500e944c38a095048a65c84811347294292c25dbfbe9a7f7299b0e3f09d0c815a7978839ee4173ec93a749b69ee8b3b7470b0014063f78b80bc5959349215781f296fb14d251044a524fa680140919c31df2e91eb00e21b79562290a9b7629c74a8c44e68a648db814aa7c9fc835d9c7d43f989ce739e9361219d82c8aa66816a8d9dece3dca9e52f07b7f02b6dcdda138f421493df109d92c523324ffb40a425e10710039e6f9a710c01dcafa3ca4616f9313058290cb4b6b1fc404fbb41abc4393ba7b0ff1c23dd250a4fb766855917c647230684e496753be682f9be5f4f7c30caa86b2ab24f7a4120e68624839508477b0fb80a2b3d9f4d34fa917925e343b9fcd28d5411cb997116549ea8920e7e44a51fe70ff7e36a358f5803bdda120855274247be4e1ed3fa491920122392565fb29595a920ee65e4a8443a0c9c120777cff3e71c881a4ff48b1907a21f6e439bd3f79b04751394d22a510f629b2223588888bc605daeed0c22235bb4fab57a45fc877a287464aca0863a4fce43929030a7eee31f712658886e4f71c501a98989cf22194d446ec3c258e47a235c3d49393b7f7108a8b4c17e146f908b2cee4e64d1fee50b6e01e7529a68d62a1fd4f298022ab42fa8dfa20ed4c9332d9c9cec98cefee530a889a7d4aa1d93e6516b6697d94a885e4e5c38c9222a43d4869ed9081fe14534f312f893329074af4108790f74fd04891900850f63bff941c1b34231c48b0081aad03106e190ce5833dfa876ccfee94f88a82066a46591e5a8420eb33bd4fe245e4253120a6d8be4f868d72df345bec3950b4457345fddd23a790464ade39624982b64b8a784a39855df01ba58b1f7c3a23bf97f43b8d94fc7c92644a9b1096538a5d2916e659f894b2651411d29a38adc2505c4f3e2b0d81589894074923b9bf0f31a79464dea76920a341ba8c864051e2016c08a54cc8a7cf284fbe0b77e5e0530a3028df4cd9637241884bc850926747aefba7146ecf2803cbcb377b584045baf8e12e725c07e4ebd148498f519cb047dfdca300989a65e7642830d76434982d4945536a80342bd9f603eaff7c17cd281972ef3ee50bc90451ec446a9b8cd17d5a69f894f2ec33cadccc2844a46694397bf890c4669b725a4410ea85f42971c2012db89ed3bad2643201877c3acd67934f29c7919185200ea1f86d724ed980079444a03583038ae9a0a2490f930f4aa9e5833d2203a91b22f42ef1fca76427ee13dc5c864011cd8c32eb34a7e7e408ee1315c9332606259ffd5eb6ff10997dcc02ade9932d8086a70092989c4c42b6473ddfdba580e79c72ee24cfd48c3431695f32b6538ae3692689371fce20acf71e50587e1f5e2026eb01ad04909bc39126f11b399ec46fc409444c4a4250804319606af690fcf3fbf9a744862918891c1992584a8566b40844e891a7be87c8e88026eb7e4e3ec0bd4f49d7ef4f89d0140dd3145352845c162207cbc284f43c99afe936055f34d21d7835144552d6eefcfe6c6f8f5c891970a3bcde144110a553c894eeef10936351814833dda160738f66122325e5309d2242278d44029891b6cc2080e7bb7bc4e6194512fb90d39c7c1872226979821624887b49a60f3e256d397d48511a69b507bb33e046d99c87941786e7000b38a1415280f19072323be4e6913ced9d031ae55a48f322bf9451c694c26c52af139a8ffbe46c93e1ce29a2019393c5999d433a49eb12bf1dd07c4c48bc69b8341c72452644236a461a85248f52e4645f6916281548ee0aa563c82ecf76efe784374f3d59384292acf3435287d48c049e1208bbb4ecb54f59594adb930b49cd8886a48fc880520287f86d467e01b92ba4a21f50de73ba73ef01f997d4ec3c9bd26a1ac913e5448878e4c39226a730ef9c726a9fd23aca39310a3523b770f7e1013123b961845b3e2571dea5508ad61876695229803bc72c4cc9e9002f6f3fc82914a60091586d8f064e3ed5c183e903320c394466e72179f564d6284f46a2bf4f5f6e6794742447893270b43e494915e046fe11c925c500e70f60821e5286969410890665698847ef51e0048250e66ef7202743f0e9399403119e82e23df23728bb499ee2de39c5fdd40c911531392d01932d236d89f0788732ff149d3f2037e0417eef01049026068bcbe4d06614b5535c42b89153bf7d4e717896532eea7c02a54a6b954449ca2f52b292e8466a86e494acf3e43eadd7ee921c91ab4fcd76884bcf6965943c07584038db943f254b4e0247e105d9ec3d744a9684d413a92bf2ba8891ce49df907013f1f2f37df21cf6485240b75d4ab43da44889bea494d5fe030ab61f125b6c53a8412edfec01ad4b832d69689473a48ce0c3fbf054a7b4ec41b690e09231bd4f390c8ae531a7f769f5865c4372c2298343e4a5160fa97f5a20985068749053400f3598dfa7b06c97d21bbbe4db902c10820f496752f79fee4e49694cf73857439a97b29320ef2e89174d3d253ae0c4ddcf29e74dfc963f60823c9c919a221626eb4321d6fea794207e788f7ca19cfcd09c32fde4e063ea77c9fda510ee80c84e110c5919222fe555488f1137d344d15400b707f7a6f7c94053cee101b8f7216961f253e81ff2d3ee3f20cb4e294a6a86e8825c1102f429b9bc841b4dc01e59724a817d4ae2418b16e7b032647988bc945339ff1404216712ea95b21d0f329210caacde9fa2197cc8879433a04ee14a21e571b04726339b3e24eff601cdc30138847426458bc4b814711341cec9504e281ea294d7f9bd1999354aef316ee7b34f67a4c7604f89a864f54814c9b43da47862f70179aae44051336264cac24ec9e724654d4c3e2543428c46c4a3a5cd73124ff251a91969eb29c540640d2816c5482996a18c1c850fe7b48a362305730087f6fc1e4dfe7d22fbf9bea852b2df7b2480142d90087f9a911f0b6894bed9a74c182572c9f21034b2489415dea1219011231346c10c4ffd1ec846b68c894a9f9311df23a9984d494550bae601a5b3a91949c2a7a4ebc9d1c542055919d2bd3b64b31e92cb491a8dd26d3ca7bb6469ef53b288c4994c10e95e92d37b347072904829ddff74ff1ebb2bf93965e6297e20c4c986206ac5ac935a222330a5e545b235dc292dddddbb47d9510a664900897b8025089293c3f590963558f74e68861fec50c04e11124dfd01c9cd43a458f27c8f42ab1949da0c9d92acd32c90c7758f8234e537a45e8910f7cec92ffc94a24d6a769f8275b246b3ed5db2af44378a54b37d128dfd8c966ec9fcd16c61a414fc500a9010a74435757a8f5248937d8a80762996254f90542ea74d289f4be68694ed1ea53c489c89f3c872dcdf9ed1fac403cab3523c812190d1a0b7495a3ea5f08a3a258d94dd27276e766f7f9722bd7bd37c1fdc9b53ea604acc4256063e12659609378ab828d74af29e93f3f110d0282820554c524f0b71a4062942a41890d8643225637f8fe2b79d0cb8d1e2c5c37d28f1ec21523a94c5c4744eb67767c4b9a4f069e8804646930c204514f41a092085ab240b34c5b4b43c253b431ee5017023ef9e388212d5e48610f7922f49511ba9c119997a5a40b8074b48cd2888a5156ef23e0f1003ec4f283c22454f3a36a349253a23d548cd727277c92b2063443a6a9bc217d24814fd914bb04309f5fbc45e136824e230caefa1d307e46753e6933abd47268c02220ac1c889dc3f87ff36c52217f95c648e613e0ec8244c1e92544c8952642f7629eb8139254f607a9f0477fbfe84acc1fe434aa050f44f1c4229cbfd3df29476d9efcdf727f7a719c5912414c417a486b749fc292e20a541eb13644e67e894228219b9ca6467291224634434a6408094c02c234bfae9a77b19f31b25b1f688f3b26d4a851279ef93074c43b84f0a6a3acb4848f61eec63b2eed31493d34679390a9848ea297939a1989572007ba406c87122e708cd882928be238c3e4542e23ef547fe1b651ac97b9960e1807c066a46339967e47d918a26c625578a44913866fb9c6c082144b93866245a42a229a6083d23bf647b9fc600ca5290f270e73eb132a538391f729f221eea98f8704a5edbfe2e9166724ee6634a4e38e967329af761170ef626f9837d0ad33ebd8f3832a3d882c27ff210a6e4ba7dba471ed101464a2f655332392406e4dc9145a0c150ce957235e724cc07940fdac364910a266b4dfe0985a33484dd87e4f212cb92b5a4d090d27739795dd48c16687768f103c11d59837d4a1113dd480a3f2559dc259ea4401ab8ed9013728f526bdb3bbb144053b294f41ba9baed9c38fa3ed6c7c8fc52b36936213540239dd1e41123516e889b91d5b84f06e31e297f40cbeee53475e48210b2a41c489c28aa21a3ba4352789f048dba65af8642c21da42cce79c1e53e7124e554c96ed24a01f904f776685d9a9ad122d5c114dee0a7fbc0ed3e8933891326f6de7db2c49466dac72cecd01ae939223f4af3106e39e91bcaa39fd35b64546694f899b1cda2e881bc6a48c00ef5474a878c388d777bb64301f66c97d64c24d1b17f801c2dc50b07344f147cd30b64b9b7774807525e9c72bc333012a960326034eb9f4ee11ee7b41844eb0bb4a04c8b81530a25b20719a0ed6764c2c93523ec29ed4dfe1bf1db3ed9d307a470c857f974875254d48c56bdc817a539ddbd4f667e7f4a0e2d65b1a7e40d1209c87fdfa7f5026a36a5e880d25724e6884a49d5909599113472a2285aded9fff4c11ee8f6e01ec9f87d884c4e34dedf2792650794a4a08087fef7e041b69b4300292b31232ff8e1f6fd0c74bb47fa86560569441496506a875c893dcce983fbe4b1de27b342d241fc36d923d71d99ff29b977c42e7b535a16a066fbe7e4427d4adec00e596392d3873452e20af2e4776981f23ecdd0149295efd26acf039ad39d8794a6a1389a9621884db7732200f12ebd36810e2151cca694d320850fe23d840106f128cc2682d0a20d2d13a219ad21ee925b45b881dfc815a32190a0d142dbbd29a500284d0b680fa67b64c3291e0232841b252926135299b48648f39291e53dc02c90d740ea958c3b457f2432a498896e942abc47be007d4cf3ff29248bf28c33f29fc85092b9263548747b48df42f429fad8276fe501a61e89095a99ccb7c9e327ba111fd010686989e684c2c9837be734b1d48c32d51439503c44138391124128aca505501accbdfb44fce914ba9798ea01b13d85dee798fa870492565ea7dba49d4969d23a39e55fa9d93ea560730a0b0867626161a45d58401a2e65e4731af1bd8fbeff4b7e09a991bc99d6c5aa2daae5478f3e3a2ecbf4e493e3b3f4f57a623f6fd2c5ba69d3797699a7ab3adf9ee5e7c5329f49c317af3f4feb759937e3347d9de7e9bc6d57cda3bb77b3b7d978d1dc5de66dd1547797cd45939e5775baa8ea3c9de56d56940de1b9a0df66599b7df4e8177f34adf3accd674fae090fe20e6279c40984eef63efcb687e42c6fdfdb23dd3ea160fdc1a710797de54ba0beb7434a9554f5defe9bbddd47f7f61eddbb37a6451818b89fa2a6eb15f5f37ed0f515039d56512907bbf36667f7d1ce3dfadf98dcc30352fb3ff51191315fd2e8a6f9225fb65f5464fe1e7df4343fcfd6658b2f8b19fd7d77555797c52caf9bbb5f14d3ba6aaaf376fc45b6cc2ef8adbb0bfbebe775b55e35772927496941b236c49530da94323e38208f80d2b21479dca734cdc3bd28d0e3753bafeae2071926efeeaa2a8be9f571d314174b406feebe78f5c5ebedd74f5ebcd97e7af6e2749b6670fb7267176cd35eaf80faad41d12bcb6c81575e0cc22cab29bf4d8d9a8ac015cb5981b0b1b96eda7cf15427bfcc1a10ae382f748e300d64ffc8b4ec917744c94672434882482b3da445db7b24fa0f115586efbd11fc8f572b42547a0d9b1cb7f4757f2e77c7a43848baf7682e7fc9e817d384e5cbb668098f5ffcd1aa2e96d36295956798450a9cc96d24d5c26bf99425a404dd2e05359423dfbb477e0f69750caecd97d9b2e5371eecd1b237655628570303bc4b3e2419a9c936e55ea7b31d0a1e68010b6f08eaaf992a42e27c06e6a1195ee5755be40db09915cdaaccae5f08d597f5a2d926d9da6ed61392b4df7f770cf320d344fc572c0bd080d188724a94fd2e7e16d8cf21d3dcbd470ee31ead6c1c508288024ba8d2664a637c2f24df434608fe2aab89602dc1050db3b2acaef2d973654cfeec322bd784c1f73eca895bd64d535e927a24c43c3578fa6e5aae1bfa257c8146436b78c402148e130a945ea2788256e0ceef9191229786967f30bfe415d2021a99440a3b49719327482e11f90214c067bb64941e4c1853d2f58879cec9cd65634ce98887137251294b4ccb743b94d59a4035511438b94709e1ed1927b2c9b412535146ed7c87122064cc273bf7d16c9752b0fb58b420f70c068f5c09b20033ca921c202b32a37c283c80e9bd4fcf67949b819f412c4a29646a4671f85e7e9fa283fd1d72b66165f7f669398e96f4b0464bfec48c72ff1925302969f2699e93670d8f829bd18a464639f3bd296517f633c292fc105aaba0e402057314c9df47a794993da08507caec53e6825c701aee64877252bb93d9ee1e45da9f8a9bfb2965f11e520449ce347932fb40905e23cfe2d37b1467ec90b7c0be0e65acf63224b2cff79014a0fc030d814c1f39c1e4ec3d783025254fcd76efdfbbb743c95ed2f7e445505e99dc99730a0f328a04298f727fb67f0f5edd034a92928da634dc0348392d1f50684e911ab1ed1ea597f2ddfbbc0247d9d74fc9f9a278e953722510fad32c80c6bb19adb8657be406c0ed78885c1b0514db073372edf629eb4a993672e8ef3da4709a9645686430ed9491a1e894d2e2c86fd210283344d6885c9f07b41046b49aed7d8a917e3abdbffbe994b89df27ee428504080b896c280d92e9ca28cfc2b4c16b90b392de75166e7805c145a7540144184a6d0631f91e48c1273d46c6742c3c7ec9010d12cd0a202b1252d38629cb46e4f1ede0cdc4b014846d9540a1bc8af2768e4ce904f4e29869dbd3d0240a12c8f74674a6909220f8582146710cbd3d45348053e26ec66d9396545a9d9342735ba43b9660a19886ef789c68424badfdba375dc5dca80c27322c8fb44065a8d98ee92c8ec519c4199564acdd00a15a5c6ef934f04263f278f688752ee244aa408289b0937909860f6e9eef9cef9a73b148963b226644d0e1e928b49f118359b904b9c818cb492471331fbf4534a8d53b34f69b166ba43d0b22971246534684186b886a638a389a2a08602426af6e03ca3c087d807f13a41a3942d796b94e3a315dff303c28ce844cd88bf2784dac3ed730abf694e29ce7c7840dc4499c87c9702387a0f042121a60c2fc9423ea33c2a798be4bf4ec8d745e435d9c1e2f80ed4242d6b4c1e64e42fef4cc8a3de476a96e2249a85694e2b0ea41976d92652f68df22ad4df01a14cb4271f91920d347713ca3c4f89a0f776c06fb432fd7032a1d09c188030224544b340d110c1ce2834ca49423052ca97108b12e2b4ba4b6c9993f6caf62904bb37252e7f309b914f8f91c2d522fad010c887a25938a721ec51184f4b0ac4440753020a7126df9c163b29a947a93122c87dea8f2699de221f7a6f46f2427f50338a3767c4a49473c9c9f1a6c01fe693742c2d7f5312827cdbbd1d702fa54c68399996d626b4fe4823a5fe6849807afe94fcef4f69d99032ddd48c96d028a6a0389a166b48003f25399dd0c2d5f62ea5d76890fb535af0a36684cdc37bf4c9f639a52748eaa16a76c8f920ae2527352335781fb69dd6e2294c43ae8273550f691c0fb1b476ff7c87f206b4244da11f3523c533a1ec3c25a1483d53a794adcf76c8712073f180668086b7876694bc21b7864836b94f113c3525d2d0e216a92572462982bb4fa94f6a469a9794303941941522c5754e89254a5b12973e80434469e5fbbb9085833d8ab1ee131fee520c4db8d122f2c139ad5c4f88d36898939d07193aa5441135a3b8762249817bf4db01e52af7f790653d7ff870b6070ea11893f2b464cbee93e4927e433e6846a1f2640f61377d48696a6ab6bf4728ecd19744651a29a9a16d8a4f29cd41ca85389b4cc8016681f252e4f73ca44c0456aef7f729c29950e44e7f520293fa210f8c87404af9de3d0aa6f7ced9b4ddc7d4ef51228ce4856487f2c613184af2c22804a2088756a46908a48d888f092e59a8dd1dcab8906dc09c52a84ba681b219f728a623b624ddfb90a608524f9c464ae07c8239a5f59c83ddbdbd7d9a1d10641f524feb0d94ab24aebb479a878c2f9aed4c1e3ea00eb677ef13461433d2049025dd7e40ae1f0590948fd9c764cd48fe0e1e922d23be2568bbbbe42e669451a38f8885888e841435a3c5b81c31f8f61e2ffb9d935a0219c89ee607c45b3409bb200859435a0525a54ad94c222fe952b2803429b4584cccf39078ea219ad1daef3eadfa51ea817c511a290904e5674923edef4d1e92cda19007aa86dc917ba4383edd7e40734c534f193c6a4a3a964c733ebb4f0cc0dc9bddbfb74b3853de768716cef62911433c44969c56dab29d7b94cefe7407b340c4b94f66f380d423655428d226767f80f998ec5226e2e11ea9078c34dfa755f707a49333c292e494541b51352354a79feee619c55bbc18969dd3cb944adba6b9a291524e8f38842cc41ea9c5090d99c080df28fcfe74769fc840869070a3f1802090584ab751aaf301ad5c53b319b1cd4352441432d0ac53ce85049038667b778f7c808739a526a720c8f9f9434ae9d1970f0ea07bc99da07c10199d7bfbf7f6c9a323c3b08366f70e48827649691c90206e530694cc2ef10e310c65a9f23d6ab88391d22afc03b240e408907aa5592006a53c132d0c53be3cdf252b49fc44cdc8b8d3522a1950caff13e2345eb852b49a95dda72404b1c9bd07e894f4d294b28c648ec9c3a466e4a21d80a526887e289b3fd9638d44368f648bb2323996f288bf486f921ea0a5474aaed1aa03adc983bc949822db47624e2a93540df94ea4b8c87a11179292215547a6869a111bdfa76c0bf9d4f01cf749a7d11048c77e4a89255a7098ec3df814b2f08056c2c9d61346648e69ea6979f680d26f94033d3fe7650c62146a7640cee1a758bbcd1ec0c10041b24fb14eb47bef7c7f674aabb453a89a0c8892efbabd474b42a487286348491d72aa1f503a9494cedefd7b8046ba9708491e05214f9df2ba2ba5c0b73f25d5ffe0fea7f7f676b8534af7ec1344627e220ccd29ad8891ef45e9b69d5de21b32587b9c7a26329f93a6a1a092588738843c124a98919c52b449bc7b4ef308ba91cf31d9235d86ec30cd023973d48234eb94f23884e3c37dd239d4ec80246c46abb4db3b1939ecb49a468384cf4a799d03b245347286f6f001d9195ad6dfded9a5c43925c828df4d2bd1a41cc8693938a730720fd0885bc84927972023fd41b8ed90ec4d1f922aa69427f9e0e47c7d8a913e246f8996cde9f54fe140d1ba1d09e0434aab113f64648af6483d50335229398d87a405e245534fe23c23ee9d4dcf697565b24b8e17c479072ae59cb4e52ed955d248b4be7ab00fef8c5cd3d9ce8c9655cec1bdf768e569871685299621354fca8e089251d293a683a480b4d75497d6a639a1056b40893e5aa0a10cf5a750f83b94ca2493013348cdce294c233125189064324da42648f76d93519b917e21878af308539ad187a468e1a9d210603ec8bda1f08878084b75e7b43a45cd725ae8cb21c4f9434a42ee53529726806c2185db24a5f9f401194c6a9691944def911b4b4b14046d468699bc23249028534b4b00b44e07c99a92e4ec7e4a3a99ac0931d21e3107f54e93426bc2797e6fefdefe3de096edec22490d829056db3fa7c821fb94388132a79f7e4ad3704e1e3c352387267b40cbd434f594d9dbbf0f2b43ba87a482246497d2afb4ca44cd66e4209d4f69eaf7c85fc51066e412906dba4ff9d27bb37d4a2fe6202f2d1b4f1edca7c5b77b14031379a97b12604a204e4997d332d12e519f9a9d53b444ba82566bc84d27f292a69b907626683332ab60b14f7908846a9651e88cb890989c464a7a91bce57c87566fcfef9140a1d309252629c70f5a10abd14232b98fe41f6fe7191918d2aa7b0fced129b9d81406920a9a5242923884f8ed80f4f7f6cef9bdf34fefc3d79e4087cc66e48c9292255b9f136fd21b2432b49c4ccae821e9b34f29e60534caaa50784976961c2e22ef2e2d8192f526637dbe778fa2ebf35d721ea919919a540fa5f528814b9dd2220a4d16f9483362001a1421b80f4339236376ffd387e40fef80f6b048939c102411a0f434f1e0fd4fc1e4a41a67d37dd21c0f49b752a7e48752bc4049e1ec3e29d207bbd3d9a71802a58d3fbd4789f2ed5d5abf2001a498931605293adbcb893d3fddbfff29cf023933e49791f920c469eab1883c213781dcb9e9439aef87c4d4083c91cbdd9f92f12354a9192d9510abd198c9b0919ea1b552f223a91969675a51a00886248e14570ed2dca3f4eefe7dca369370927d84d4c30dcaf7c9959ae6949726eb45a2480b81db39a5d328b2a59587fb900532af942cc624eed3741287901a9c7c4adecba793e9fd3d8a8eee73ca9ea6722f274544ca965429e1476cf9808cc37d9a74f2f0f61ee6193add2707f5010d679b56ebc8cad0b21d4d5b46643c3f9fddbf0f5e3a40b39df3c9f4de39adb6efc20cee833729b221a3faf0538a3a89723bbcbe724ea125651bc825a065691a1f3998645176b6f7c8487d3ac338cf41105a4da62524525c948fa766e7303064cfc947a23112a752dc04e540611191718f04f31ec5431465022d381219a9760af072d1e4a42576693c9f922d8369db85eefd94e25ef239cf497191d9bb87214cc945a2d57f4a9bec50069e1889b4302d1b512ef04146998d077bc49768f6f06087084751db01214e410a268b249662857b19e94a5aec8200120dc9eda43882a012dd60a7c98b26b9d92753b0b34fa1db7d08e0392d6751828770a3e09086b04bdc4b50c80f4136832c2835a666bbb450902382259785740879f7db19f9b1dbbbbbc46e0753f27dd9732026d8a3253af260a1dac86ba3a098a69c940eadb2d30b07a434a8d91ea50b3e25cf66fbfea7b45c42b126e910728911d57e9a11410ec861a5660714605018439e38b9dcdb341622ef0e3966947cb9b74796150e0b9ae514dd9185dd9e510449dc4b66694241e0367927e4009293f7600a01249e201b484ed1ee43e0b647fe14d9055a7a7cf0e90e2929e4c93059a4cc28013521e627f9a0667b14a490ff41ff1cec5032849685eff3d49fd3f20a471f14b890bb423692e69496a976688d69429246b345cd480f4f776714d2d19c915d20eb4a013bc9c2748f6486723ab4360bf2929cee92d49147718f340779b7345924e8db335ad83c9f3ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7709c5633776839f2fece3d0d522812a7659eed07b43449e3a024c584d6f188d377c87ba345eb7c1743d8ff94880b679bbc1682764ecc41e4a76877b6477178468b68f72132b484492b69942020e46908e4f29100921f72efe1f453d2593bb37b0fd0ec8098fbe103527e53921c82f690523ae42991dcec53484509c487f7c0bd148690692719b9b74f4926f206c12114123c200787683bfd74b20bb6dc2125bc47d24db92852f3fb138ab339433e2135753ec14cb05d7840d9444a9d1020329df40f09150535a4061fec3cb84fb905ca9602b77df22148e3932d2301267e23a17a484c4422f39016f048db3fdc03bf916f783e2365bfbd37c3644d893769119d5cd09d7d4a4d90aea08c0435a37cd71e5ea1a09f88b74fb6003a9de27a5ab9cec997da25f340cd604ff7f6484429e8230469e56c9b82575a80a015de3d2234b90760cb19f97efb947d227ad282ea3e7900e45b52166542a686b2afbbe434a219a5138971882f28a741dc0b1ecac80522fbb6b74f68ed9034812033e204e4c6c86850ba81b223d482f258341f149e673939919fa2d9bd4f29b625a5bd4d9e12e9de4fc91b9864e4b8d24c90bf3421729c832044ad735a3ba5f8f48058781f14a41160cce400ec12dd1f701e89621fca20511e81120da46a76c83b7f48e9ceed5db2263bf7299417ee253b3ba5a40f18899c5f32f8b4460bf791b22b144d5332fbfe2e04f080720bd38c74fdee3954cd43ca3992bf400bc3f7292f774eda85f2e0d4ecfeee2e7949348907341d8411f96419a5ac484191074f96916c04341271fc0e390294b7fc942c07059ec4040f7252f83b14d81d10db504843cd32b21da40af7b6cfc98d246814fc1c1cd08ae8fd3d9a6b9a579a580c61fffcd3e98c92ad145660ea297ca7eec93bdf9d50687a4e52439a9a9acd288ebeb7477aefd39c24607f97687cb047aa9fa22c4adc7e4adee10e3acd7769e2c89922d6ce48e1d38028994053b147e47e780f568e99fce1ee1e712f2d5d51ae86d8f29c4012ddc89522537f9fc2394a9f42b21e92aea4940a790e19c84b8e3d59670a41298d4456e51ef922f7a0910eee53fe6fff0139b494eba6219097f1902275fc431e2885dce40251b38cbc5bd28c6465663463fbb41442a694064e7890b7f9f09c16d0a16a1e9e4f2863487a8196d04037ea393b20d178307d48eaf63e39db0f90ab399f925abe47134e2964d248f43631d23d5277fb3bfb2432e4efee0137f2a2c8ab234926f62239ddc748297f40323d232ea2c1dc9b80dfee9187b027a9650a2bf7c9df27034c4ef5a7e4ae65bbf71f929f01013cdf23a79152e23493440b361ff4db8c323c94732761a68c289aed234499d15ce794efdcdeff942c2b1975a236b1c2fd1d0242f24ccd2893b3f3e93d9ac46c465a9f927ea49b6634b19415a670e42105953b0ced60676f971257db53b21584dba7c4a0534ac291cdc9328aea77739e7a5a1cd89d9103b34d534fda724a0a31233f1c8e122deadcdbdba390939ad1b889358867f7ee51084293404a870c2a8563f732e2014a8e3f4433b2a59f4e2836221794dcb1fd1d4ac264bba443f648d5cec8a3a4d42a6681c2f07bf90ea54d26f789bf494f91c2a7843fe5433232c1a4e4724ebd926626ad4e24238d4cdcfb9048439a996219ca15530c450e013b3f240ba4b1294546997ec28d42383246947fbdbf478688684a220146dabf47fa15de0065dfa9d3736250a4e7b6a7e4e7defbf4d3298935c47986042b5cc507947e2468c45234bb149f92653d476a63973b2593408c4ab1e13d32da340b085232e2cd293964077be459e7fbd096146e91834d64a7f9238264d4f3c307e4d5d2b8f37c4a81daee03cce9c387240b643fb6f758471e50f83799512a8c6cdaf453ace8dfdb43335261947ca2d97970be43537f8f62cb03a2e3f6de8434d6e4c13d5a1d829cee7e4a6c4e63db26b78b86f09024f6e10189cc03cae5904260f79d9aed3fa00ce68c7cf29c54c636fb21b438463afd1ef17b4e30cfc525d82753f28014da038adbc90292aa79489107a9c1fc20dfa354e91ea79b0ea6e4d5515a757b468681f88db09c90f123379ffa9c50244fd852b3079f12e177c9299a507a8fa05134985130449dd2d04999510a11ba9724f101b9ae6482c805a32f697627b0217b335220944ea07c3ff41b117f3a9b228241026c7f8ffc773219d496c4e2c183fb0ff768119a9a91c27f4081198d14d242069ef8ed9ca28f034a6d931e99910e056e505b34d5b410738ea5a55de26f52211034b245945f244f06ca81920907b49240b10c192982468e3285a5647b3ffdf43e65d3e127011ab9e2f41231c73d688e7df234c9d6137df6f6680180c2e0070f77a1b8723229e42a50de729f423a8a4049eac91490222163b8433edd03d621e4b6522c4561d32ee5588991c85c91ac11974295ef13b926fb98fa0793f33c27dd4622039b45d114cd0235dbdbb947d9530a7eef4fc096bb3b14873e24a9273e219b456a86e49f5641c80b220e20c73cff1402b843599f8734ec6d72a24010727969ed8398609f568377685277ef215eb8471a8a74df0ead2a928f4c0e06cd29e96cca17ed65b39cfe7e9841d5507695e49e54c2014d0c29078af00e761f5074369b7efa29f542d28b66e7b319a53a8823f732a22c493d11e49c5c29ca1feedfcf6614ab1e70a73b14a4508a8e648f3cbcfd873452324024a7a46c3f254b4bd2c1dc4b897008343918e48eefdf270e3990f41f2916522fc49e3ca7f7270ff6282aa749a414c23e4556a4061171d1b840db1d5a58a466f769f58af40bf94ef4d0484919618c949f3c276540c1cf3de65ea20cd190fc9e034a031393533e8492da889da7c4f148b466987a72f2f61e427191e922dc281f41d699dcbce9c31dca16dca32ec5b4512cb4ff290550645548bf511fa49d6952263bd93999f1dd7d4a0151b34f2934dba7ccc236ad8f12b590bc7c98515284b40729ad1d32d09f62ea29e6257126e540891ee210f2fe091a29121201ca7ee79f926383668403091641a37500c22d83a17cb047ff90edd99d125f51d040cd28cb438b10647da6f749bc88bc2406c414dbf7c9b051ee9b668b3d078ab668aea8bf7be414d248c93b472c49d07649114f29a7b00b7ea374f1834f67e4f7927ea791929f4f924c6913c2724ab12bc5c23c0b9f52b68c22425a13a755188aebc967a521100b93f2206924f7f721e69492ccfb340d64344897d110284a3c800da19409f9f419e5c977e1ae1c7c4a0106e59b297b4c2e087109194af2ecc875ff94c2ed19656079f9660f0ba848173fdc458eeb807c3d1a29e9318a13f6e89b7b140053b3ec9c0c05e69a8c06b325a9684a0d906625db7e40fd9fefa2192543eedda77c2199208a9d486d9331ba4f2b0d9f529e7d46999b198588d48c32670f1f92d86c534e8b0842bd903e254e38a005d7735a579a4c26e0904fa7f96cf229e53832b210c42114bf4dce291bf0809208b4667040311d5434e961f24129b57cb0476420754384de259eff94ecc47d829bcb1028a29951669de6f49c1cc17da22279c6c4a0e4b3dfcbf61f22b38f59a0357db205d0f0144012939349c8f6a8e77bbb14f09c53ce9de4999a912626ed4bc6764a713ccd24f1e6c31984f5de030acbefc30bc4643da09500727338d2247e23c793f88d3881884949080a7028034ccd1e927f7e3fff94c8300523912343124ba9d08c1681083df2d4f710191dd064ddcfc907b8f729e9fafd29119aa2619a624a8a90cb42e4605998909e27f335dda6e08b46ba03af86a248cada9ddf9feded912b31036e94d79b2208a2740a99d2fd1d62722c2a1069a63b146ceed14c62a4a41ca65344e8a491480033d2961904f07c778fd83ca348621f729a930f434e242d4fd08204712fc9f4c1a7a42da70f294a23adf6607706dc289bf390f2c2f01c60012734480a301e524e6687dc3c92a7bd7340a35c0b695ee49732ca9852984dea7542f3719f9c6d32dc3945346072b238b3734827695de2b7039a8f0989370d978643aec8846844cd48a390e4518a9cec2bcd02a502c95da1740cd9e5d9eefd9cf0e6a9270b474892757e48ea909a91c05302619796bdf6292b4b697b7221a919d190f41119504ae010bfcdc82f20778554f403ca7b4e77ee3d20ff929a9d67535a4d2379a29c08118f7c58d2e414e69d534eed535a47392746a166e416ee3e3c206624378c70cba724cebb144ad11ac32e4d2a0570e7988529391de0e5ed073985c2142012abedd1c0c9a73a78307d40862187c8ec3c24af9ecc1ae5c948f4f7e9cbed8c928ee42851068ed62729a902dcc83f22b9a418e0fc014cd043cad0921222d1a02c0df1e83d0a9c4010cadced1ee464083e3d877220c25350bc47fe066537c953dc3ba7b89f9a21b22226a72560b265a42d111eef50e69fa2f307e4063cc8ef3d8000d2c46071991cda8ca2768a4b083772eab7cf290ecf72ca459d4fa05469ad922849f9454a5612dd48cd909c92759edca7f5da5d922372f5a9d90e71e939ad8c92e7000b08679bf2a764c949e028bc209bbd874ec992907a2275455e1731d239e91b126e225e7ebe4f9ec31e490ae8b64b89b6871429d19794b2da7f40c1f643628b6d0a35c8e59b3da07569b0250d8d728e94117c781f9eea94963dc816125c32a6f7298741b13ce6f43eadde906b484e38657088bcd4e221f54f0b04130a8d0e720ae8a106f3fb1496ed527a63977c1b920542f021e94ceafed3dd29298de91ee76a48f3527612e4dd25f1a2a9a744079cb8fb39e5bc89dff2074c9087335253c4c2647d28c4daff9412c40fef912f94931f9a53a69f1c7c4cfd2eb9bf14c21d10d92982212b43e4a5bc0ae931e2669a289a0ae0f6e0def43e1968ca393c00f73e242d4c7e0afd437edafd0764d9294549cd105d902b42803e25979770a309d8234b4e29b04f493c68d1e21c56862c0f9197722ae79f8220e44c42bd52b6e34146124299d5fb5334830ff9907206d4295c29a43c0ef6c86466d387e4dd3ea07938008790cea468911897226e22c83919ca09c54394f23abf3723b346e93dc6ed7cf6e98cf418ec291195ac1e892299b687144fec3e204f951c286a468c4c59d829f99ca4ac89c9a7644888d18878b4b4794ee2493e2a35236d3da51888ac01c5a21829c5329491a3f0e19c56d166a4600ee0d09edfa3c9bf4f643fdf17554af67b8f0490a20512e14f33f263018dd237fb9409a3442e591e82461689b2c23b3404326264c22898e1a9df03d9c8963151e97332e27b2415b329a9084ad73ca07436352349f894743d39ba58a8202b43ba77876cd643723949a351ba8de774972ced7d4a169138930922dd4b727a8f064e0e1229a5fb9feedf6377253fa7cc3cc50f8438d91044ad9875524b6404a6b4bc48b6863ba5a5bb7bf7283b4ac12c0920710fb004417272b81ed2b206ebde09cdf0831d0ad82942a2a93f20b97988144b9eef51683523499ba15392759a05f2b8ee5190a6fc86d42b11e2de39f9859f52b449cdee53b04ed668b6bd4bf695e846916ab64fa2b19fd1d22d993f9a2d8c94821f4a0112e294a8a64eef510a69b24f11d02ec5b2e40992cae5b409e573f7ce1f90b2dda394078933711e598efbdb335a9f784079568a273004321af43649cba7145e51a7a491b2fbe4c4cdeeedef52a4776f9aef837b734a1d4c8959c8cac047a2cc32e1461117e55a49de73723e1e021a0505a48a49ea69218ed42045881403129b4ca664ecef51fcb69301375abc78b80f259e3d444a87b29898cec9f6ee8c3897143e0d1dd0c8689201a488825e2301a470956481a6989696a76467c8a33c006ee4dd134750a29adc10e25ef225296a23353823534f0b08f76009a91905b1b4c24ddee7016280fd098547a4e849c76634a94467a41aa9594eee2e7905648c48476d53f8421a89a23f72097628a17e9fd86b028d441c46f93d74fa80fc6cca7c52a7f7c88451404421183991fbe7f0dfa658e4229f8bcc31ccc7019984c943928a29518aecc52e653d30a7e4094cef93e06edf9f9035d87f4809148afe89432865b9bf479ed22efbbdf9fee4fe34a338928482f882d4f036893fc505a434687d82cce90c9d524430235799ec2c4582648c88c614089012986564493ffd742f637ea324d61e715eb64da95022ef7df2806908f749414d671909c9de837d4cd67d9a6272da282f470113493d252f2714b3520e608fd400394ee41ca1193105c57784d1a74848dca7fec87fa34c23792f132c1c90cf40cd6826f38cbc2f52d1c4b8e44a912812c76c9f930d21842817c78c444b4834c514a167e4976cefd31840590a521eeedc2756a61427e743ee53c4431d131f4ec96bdbdf25d24ccec97c4cc90927fd4c46f33eecc2c1de247fb04f61daa7f7114766145b50f84f1ec2945cb74ff7c8233ac048e9a56c4a2687c4809c3bb2083418cab952aee69c84f980f2417b982c52c164adc93fa1709486b0fb905c5e6259b296141a52fa2e27af8b9ad102ed0e2d7e20b8236bb04f2962a21b49e1a7248bbbc493144803b71d7242ee516a6d7b679702684a96927e2355b79d1347dfc7fa18995f6a36cd26a40668a4339a3c6224ca0d7133b21af7c960dc23e50f68d9bd9ca68e5c104296940389134535645477480aef93a051b7ecd55048b88394c5392fb8dc278ea49c2ad94d5a29209fe0de0ead4b53335aa43a98c21bfc741fb8dd27712671c2c4debb4f9698d24cfb98851d5a233d47e447691ec22d277d4379f4737a8b8cca8c123f33b659143d90570d09d8a1fe48e99011a7f16ecf7628c09eedd29a89243af60f90a3a578e180e689826f7a812cf7f60ee940ca8b538e77064622154c068c66fdd329dce39c1683687d8116946931704aa144f62003b4fd8c4c38b966843da5bdc97f237edb277bfa80140ef92a9fee508a8a9ad1aa17f9a234a7bbf7c9ccef4fc9a1a52cf694bc412201f9effbb45e40cda6141d50fa8ac41c5129a91ab2323382464e1445cb3bfb9f3ed803dd1edc2319bf0f91c989c6fbfb44b2ec80921414f0d0ff1e3cc876730820652566e4053fdcbe9f816ef748dfd0aa208d88c2124aed902bb187397d709f3cd6fb6456483a88df267be4ba23f33f25f78ed8656f4acb02d46cff9c5ca84fc91bd8216b4c72fa90464a5c419efc2e2d50dea7199a42b2f25d5aed794073baf390d2341447d33204b1e9764e0420dea5d726d021248ad994721aa4f041bc8730c0201e85d944105ab4a1654234a335c45d72ab0837f01bb962340412345a68bb37a51400a56901edc1748f6c38c543408670a324c564422a93d610695e32b2bc079805f21a48bd9271a7e88f44861433d18d5285f7c817a08f69fe3f8564519e7146fe13194a32d7a406896e0fe95b883e451ffbe4ad3cc0d42331412b93f93679fc4437e2031a022d2dd19c50387970ef9c26969a51a69a22078a8768623052220885b5b4004a83b9779f883f9d42f712533d20b6a7d0fb1c53ff9040d2caeb749bb433294d5a27a7fc2b35dba7146c4e6101e14c2c2c8cb40b0b48c3a58c7c4e23bef7d1f77fc92f21359237d3ba58b545b5fce8d147c765999e7c727c96be5e4fece74dba58376d3acf2ef37455e7dbb3fcbc58e63369f8e2f5e769bd2ef3669ca6aff33c9db7edaa7974f76ef6361b2f9abbcbbc2d9aeaeeb2b968d2f3aa4e17559da7b3bccd8ab2213c17f4db2c6bb38f1efde28fa6759eb5f9ecc935e141dc412c8f3881d0ddde87dff6909ce5ed7b7ba4db2714ac3ff81422afaf7c09d4f776e87b5ad9db79f866f7c1a3fd078ff61e8c1f923ff660e7fe4f51d3f58afa793fe8fa8a079db87aefcdcecea37bfb8fee13f49dbd7b7b7b9ffed44744c67c49a39be68b7cd97e5191f97bf4d1d3fc3c5b972dbe2c66f4f7dd555d5d16b3bc6eee7e514cebaaa9cedbf117d932bbe0b7ee2eecaf9fd7d57ad5dca59c24a505c9da1057c26853caf8e0803c024acb52e4719fd2340ff7a2408fd7edbcaa8b1f6498bcbbabaa2ca6d7c74d535c2c01bdb9fbe2d517afb75f3f79f166fbe9d98bd36d9ac1ed4b512cedf50aa8df1a14bdb2cc1678e5c520ccb29af2dbd4684a4324e6cb9a963e6fae9b365f3cd5c92fe943225c715ee81c611ac8fe9169d923ef88928de486900491567a488bb6f748f41f22aa0cdf7b23f81faf5684a8f41a36396ee9ebd85cdea72c3d45493497bf64f48b69c2f2655bb484c72ffe685517cb69b1caca33cce2039247724368e584d62e617529c2fa94c29e07e72481e4694f3e3d075a6dbecc96adbcb147cbde9459a15c0d0cf02ef99064a42604e0c174b643c1032d60e10d41fd355345489ccfc03c34c3abbc6e8bbc0136b3a25995d9f50ba1fab25e34db245bdbcd7a4292f6fbef8ec1b7324dc47fc5b2000d188d28a744d9efe26781fd1c32cdddc93da4dba7bbf9bd3d5a99e1047f33a531be1792ef2123047f95d544b096e0828659595657f9ecb932267f7699956bc2e07ba4fc976d4d7f34f93a5bd1abe0d675b3a77f5de54d6b5bd0dfcbaa6ee7fe0768c0bfe0bdac2930ba8cb4277d5f64dad0ff08cde86f910cf73dc3cdd7987afa4b3f2f963386f7d3d92a5bea8b6f499f7aefaddf3615919f7ed3cf2c2efc8b60078a9cd7d99232e3d288fee6d7b2f39ac486fba68f2ef29ae87d6dfea49f57d93540d11fcd55d1fe20afcb6c39a3cff9fb75969b5f19185a0e100008d8cf6c63fa903a2732e81f40d692805b0504c0d7f43b1380bfa53fd66ff553fa4807ca5f69bf4c83499dfd808c0f3ea6bfd0de80159a986ff8a750048de8132508fe5280f4218d99c882cfe80fa281fbc6a3917e2d5d3316dc277761fed036fcbb0322af70438c893e41bb7503cdda1013e784b1692b7f735bfaeba78b8a61a1bdf7a76b7e515613fae5fba4631acfda9fbe9b128af44b281714e5d15235a56f28eb44924659540a9b69a1f9fc1ef962e4b993fe841aa3e087d689c9f3a3ec0af92714f090e74f2e2fe5a9b25df2bd1e4c5820c9a541687f4e7a937d4ecaba3d9c5024468b21b41abd43c9db093419253b26f768dd637bc6eb35e44192eea4c4f1f90ee5f9c8679decdc47b35d5a69d8c7da1c4521f0ebc86326476746c9c00324ff6694f687a33bbdf7e9f98c529070a74913d34a0935a374d35e7e9f82e0fd1d8a29e14ceeedd3aa33ad5c6f7fba3325b779464b5c19e5e92937f8699e530009c7999bd1c25d464b437b534aa2ed678425b9dbb424473934ca5950c2ea3e3aa50588035a5fa3052c4ad051a449c39dec50ea757732dbdda384d2a712cd7d4ac9ea87e794ada2150b1a0210a4d7c881fef41e85d33be414b34b4f89d9bd0ceb35e77bc87d519a8d86401e1ec57a14d33c7830255f869aeddebf776f87d634c8ad216799964fc86b3fa72838a38407a50befcff6ef217879706fb647ae28659b1fd0fad03ead9251068a12127be704737a90efdee785665a64f894620c4a0b7c4a1e33325c340ba0f16e460bcbd91e79bb10d187482953dcbc7d30a308669f161728a14c71ebbd879435a2d53f1a193c584a3c521286567f90c6a7215002949c2ef2f01fd07a2fd16ab6f72946fae9f4feeea75352ea94de267f98e25ea46f28da9dedc2f7cf288cc06491579cd3aa3525300fc813a7c53504cb44688ab0f791309951fe999aed4c68f8981db215340bb476466c49ebea18e7bd8ce2534a6253338ab3335a34a0e898c25782465e3b859e9449dbd9db230094b1e191ee4c29fb46e4a18c0785d3c4f234f59439001f1376b3ec9c92ffd46c9a539a7d879654283226badd271a1392e87e6fef3ee55928d18f008120ef131968d18d6ce2f6fe1e85d3b4a04019485a88a515a0fbe4fa83c9cfc9f1dfa195251225b27794b447b4434c30fb74f77c8792939470c2644dc8693a78489114a51da8d98422bf0c64a4056b9a88d9a79fd20a1035fb94d624a73b042d9b124752e28ed61d896b688a339a288add29ef41cd1e9c6714df13fb202d45d068658282124a65cf1ed06a29614674a266c4df1342ede1f6396599684e299df2f080b88912eef92ee529e83d1084849816324816f2192d1750504461da84423a2418263b3bb4cab983c08a56ef260f320a0b77261438ee630582d201340bd39c16d64833ecb2eb4749664a1f527f078432d19e4221caa9d1dc4d6881654a04bdb7037e7b30a11871421e1b310061448a886681827e829d5106202709c148292d482c4a88dfa3c433c504a4bdb27dca34dc9b12973f98cd2874c5481f1cdc077d6808142ad02c9cd310f6285b452b67c4440753020a71a61094d6f429774d196022c87dea8f2699dea250716f46f2427f50334aabcc884929b598537c49f92d7889a463cfcfa7946ba3106e4fb2a3b4b840b936ca78d1323b8d94faa3952feaf9530a333fa5d5715ad0a166b4524ca133a58b684d9204f05392d309adcf6eef52169906b93fa5756d6a46d83cbc479f6c9f53168ea41eaa66877c6ce25a32be19a9c1fbb0860f29afff909246348984e0fe431ac743ac20df3fdfa1f4d86cfa296538a819299e092d4251ae95d433754a8b52d90e85de642e1ed00cd0f0f6d08c7294e4bd13c926f72951454d8934b4864b6a89622e4a54dca70c3f3523cd4b4a987c7d4a7e92e23aa7fc2965e7894b1fc0efa7d593fbbb9085833d4a25dc273edca55411e1f6290de1fc538ae689d36898939d07193aa57c2835a3f4cd44725ff7e8b7034ac9efef6131e1fce1c3d91e38845229b41c41b6ec3e492ee937a43d6794119aec21bb441f92634fcdf6f708853dfa92a84c232535b44d6918cae6917221ce2613728059a0f42bb9f70f29e17640da797f9f028d0925a8e84fcad3533fb4bac04320a57cef1ee58cf6ced9b4ddc7d4ef51be97e4856487","964726309494a3a6489f02f9070f0f6808a48d888f092e59a8dd1d4a2c926dc09c5246874c0325edee51ea82d89274ef439a22483d711a2981f309e694962d0f7669799a660704d987d4d3b21aa5e489ebee91e621e38b663b93870fa883edddfb8411a5466802c8926e3fb8774e62408bcf9414a2663392bf838764cb886f09daee2e6584324a1cd347c4424447428a9ad19a738e54d3f61eaf6e9f935a0219c89ee607c45b3409bb200859435aec27a54a497b222fe952b28034290ff3fbc43c0f89a71ea2d93d5a2aa0c56dcab0dd23d34d493aca6712d36f4ff7299a209b43913d540db923f748717c4ad966721a28ed49d0725a6127b29285bb4f0cc0dc9bddbfb74b38d3f2c40ead0fef53be9178882c392d28673bf768d5e6d31dcc0211e73e99cd03528f9438a48412b1fb03ccc76497126e0ff7483d60a4f9fe6cefe001e9e48cb0243925d54654cd08d5e9a7bb39c5879ff29a6f764e2f53c6789be68a464aa96be210b2107ba41627346402037ea32cd3a7b3fb44063284841b8d070481c452569932fa0f3e3d80e29a11db20a0a2c898669d528b2480c431dbbb7be4033ccc29033f0541cecf1f52e69abe7c70b04f1240ee04a53dc9e8dcdbbfb74f1e1d19861d34bb774012b44b4ae38004719b12fd64768977886128199bef51c31d8c74ef80ac11a591285b35a121d0a0c9ab21c1dea365a17c97ac24f1133523e3be7f3021034acb5c84388d17ae142dda66f729d7466c72ef013a25bd34a5643a9963f230a919b9680760a909827c5ab49aecb146229b47b245c9c71c2bd6c45fa437490fd00a3be5906971ed9cb40135a3fc2bd93e12735299a46ac87722c545d68bb890940ca93a3235d48cd8f83e2515297484e7b84f3a8d86403af653ca9fd2bada64efc1a7908507f9a7248dc088cc314dfd0ec929659929d57f7eceab75c428d4ec809cc34f73fa327b00070304c9901738d8bd77bebf339dd28c41d5506c9351aa81e69a563e490f51629c7297e4543fa0ac3f299dbdfbf7008d742f11923c0a429e3afd948c1cd9b0fbdb9f92ea7f70ffd37b7b3bdc296535f70922313f1186e694167ec9f7a2acf2ce2ef10d19ac3d5e6121329f93a6a1dc09b10e7108792494172639a5a40af1ee39cd23e8463ec7648f741916416816c899a316a459a794ae241c1fee93cea166072461b31d427c2723879d168d6990f059297d7940b68846ced01e3e203bb3438ec7ce2ead0f511e9896753e25a5faf01e392d07e7f729750668c42de4a4934b9091fe20dc7648f6a60f491553669f7c7072be3ec5481f92b7744e2108c1800345cbd324800f297b4cfc909129da23f540cd48a5e4341e921688174d3d89f38cb877363da745c4c92e395e10e71da89473d296bb645749231d901dda877746aee96c6746ab87e7e0de7bb4c0bab34b6c496c4cb84d2957f830a3dc3e4d07490169afa9ae204f73420bd680f2d9b40e490b319f42e1ef50c69e4c06cc20353ba76c048929c180249369223541ba6f9b8cda8cf40b3954bbc06d4a33fa90142d3c551a02cc07b937141e110f6145fa9c1661a9594eebd93984387f48b9f67d5abba009205b48592592d27cfa800c2635cb48caa6f7c88da59415419b916126ef88d665f668418256ba68391a923525c9d9fd947432591362a43d620eea9d2665e75e9ee7f7f6eeeddf036ed9ce2ed6624010d26afbe71439649f1227d002c1a79fd2349c93074fcdc8a1c91e3c04f7ee52027bff3eac0ce91e920a92905d5a65a0c5546a362307e97c4a53bf47fe2a86302397806cd37d5a16b837dba72c7a0ef2ee920278709fd698ef51aa87c84bdd9300539e7c4aba9c56437789fad4ec9ca225d215b428496e3a919734dd84b433419b9159058b7dca432054b38c3244880b89c969a4a417c95bce77f2ece0fc1e09143a9d50fe9d96b2400b6235ca0c92fb48fef1769e918121adbaf7e01c9d928b4d6120a9a029e5dd894388df0e487f6fef9cdf3bfff43e7ced0974c86c46ce282959b2f539f126bd41227340cb6107c446641b28e605b49c6ce6a7e42791c625bf677f9756fac97a93b13edfbb47d1f5f92e398fd48c484daa87b2d7d39cb4cc3ead15d264918f342306a0411182fb3094333266f73f7d48fef00e680f8b34c9094112015a85211ebcff29989c54e36cba4f9ae321e956ea94fc508a1768ed23bb4f8af4c1ee74f6298640ab239fdea3f5a0ed5d5aa62301a49893d6be293adbcb893d3fddbfff29cf023933e49791f920c469eacf897b27e426903b377d48f3fd90981a8127962cf6a764fc08556a462b82c46a3466326ca4677668a18b3b25ed4c0b6714c190c491e2ca419a7bb48ab17f9f16554838c93e42eae106e5fbe44a4d735a7e21eb45a248ebdddb39658d29b2a505b6fb900532afb4268249dca7e9240e213538f994bc974f27535a27261f9457a6682af7725244a46c4995127ec4960fc838dca749270f6f8f5296e8749f1cd407349c6dca069395a1d5699ab68cc8787e3ebb7f1fbc7480663be793e9bdf329697898c17df026453664541f7e4a5127516e879711cf29b4a46c03b90453ccc27d7230c9a2ec6cef9191fa7486719e8320bba403a69f92e2a265276a760e03f38056f429c2ce490ded50dc04e540611191718f04f31ec5431465022d381219a9760af072d1e4a42576693c9f922d8369db85eefd94e25ef239cf497191d9bb87214cc9459aed9256cb7768a1891889b430ad8e6e937b935166e3c11ef1259a3d3cd821c251d4764088539082c92289a558e15e46ba92d67421804443723b298e20a84437d869f2a2496ef6c914ecec53e8761f02784eabb694e021dc2838a421ec12f71214f24390cd200b4a8da9d92ead87e58860c965211d42defd76467eecf6ee2eb1dbc1947c5ff61c8809f668259a3c58a836f2da2828a62927a5f369fe805e3820a541cdf6285df0297936dbf73fa555418a354987904b8ca8f6d38c0872400e2b353ba00083c218f2c4c9e5dea6b1107977c831a3e4cbbd3db2ac7058d02ca7e88e2cecf68c2248e25e324b130a02b7c93b2107909cbc07530820f104d940728a761f02b73df2a7c82ed00afb834f774849214f86c922654609a809313fc90735dba32085fc0ffae7608792210707b3fb3cf5e7b48ac8d107052ee4ae908da439a5b58e1d5a4a9d90a4d16c5133d2c3d3dd19857434676417c8ba52c04eb230dd2399a19ccea764e8a819c929a5e9491b3cb8479a83bc5b9a2c12f4ed19addf9f4f1f7cfa706f8a914ec9f7d9d9a39924ae246f708f44719253384e8bf63bb4ea7e7fe79e06291489d36ae6f6035a81a77150926242cbd5c4e93be4bdcd682e763184fd4f89b870b6c96b2168e7c41c447e8a76677b148767b4567c1f22432bf5b4604c0902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf3fa1383ba34c1bf166969f4f30136c171e503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83ca4756ad2f60ff7c06fe41b9ecf48d96fefcd305953e2cdc90159f29d9d7d4a4d90aea08c0435a37cd71e5ea1a09f88b74fb6003a9de2fa035a7d265f6a97cc0335833ddddb2311a5a08f10bc47a13b05afb4ce36a57c0c119adc03b0e58c7cbf7dca3e113d3f2546220f807c4bcaa24cc8d450f675979c4634a37422310ef105e534887bc14319b94064dff6f609ad1d92261064469c80dc18190d4a375076845a501e8be683c2f32c2727f25334bbf729c5b6a4b4b7c95322ddfb297903938c1c579a09f29726448e731084a8759eef91e3b97b402cbc0f0ad208306672007689ee0f388f44b10f6590288f40890652353be49d3fa474e7f62e59939dfb14ca0bf7929d9d52d2078c44ce2f19fc87841bb98f945da1689a92d9f777218007945b9866a4eb77cfa16a1e52ce91fc8507dbd3fb94973b27ed4279706a767f7797bc249ac4039a0ec2887cb28c5256a4a0c88327cb4836021a89387e871c01ca5b7e4a9683024f6282073929fc1d0aec78293247b38c6c07a9c2bded737223091a053f0707b4f07f7f8fe69ae695261643d83fff743aa3642b8515987a0adfa97bf2ce7727149a9e93d490a6a666338aa3efed91defb342709d8df251a1fec91eaa7288b12b79f9277b8834ef35d9a3872a688b53352f834204a26d054ec11b91fde839563267fb8bb47dc4b2bb494ab21b63c2790443772a5c8d4dfa7708ed2a790ac87a42b29a5429e4306f292634fd699d27f944622ab728f7c917bd04807f729ffb7ff801c5aca75d310c8cb7848913afe210f94426e7281a85946de2d6946b232339ab17d5af123534a03273cc8db7c78be7b700faae6e1f9843286a41768a51874a39eb303128d07d387a46eef93b3fd00b99af329a9e57b34e19442268d446f1323dd2375b7bfb34f2243feee1e70232f8abc3a9264622f92d37d8c94f20724d333e2221accbd09f8ed1e79087b925aa6b0729ffc7d32c0e4547f4aee5ab67bff21f91910c0f33d721a29254e3349b460f341bfcd28c34339771266ca88a2d93e429419cd754ef9ceedfd4fc9b29251276a132bdcdf212024cfd48c32393b9fdea349cc66a4f529e947ba6946134b59610a471e5250b9c3d00e76f6762971b53d255b41b87d4a0c3aa5241cd99c2ca3a87e37e7a9a7c581dd193930db34f5a42da7a41033f2c3e128d1a2cebdbd3d0a39a9198d9b58837876ef1e85203409a474c8a05238762f231ea0e4f84334235bfae98462237241c91ddbdfa1244cb64b3a648f54ed8c3c4a4aad6216280cbf97ef50da64729ff89bf414297c4af8533e2423134c4a2ee7d42b6966d2ea4432d2c8c4bd0f8934a4992996a15c31c550e410b0f343b2401a9b526494e927dc2884236344f9d7fb7b648888a6241260a4fd7ba45fe10d50f69d3a3d2706457a6e7b4a7eeebd4f3f9d9258439c6748b0c2557c40e94782462c45b34bf12959d673a43676b9533209c4a8141bde23a34db380202523de9c924376b0479e75be0f6d49e11639d844769a3f2248463d3f7c405e2d8d3bcfa714a8ed3ec09c3e7c48b240f6637b8f75e401857f9319a5c2c8a64d3f9d9073706f0fcd488551f28966e7c1f90e4dfd3d8a2d0f888edb7b13d2589307f768750872bafb29b1398d6d9bdc2e1ac24392d8870724320f2897430a81dd776ab6ff80329833f2c9735219dbec87d0e218e9f47bc4ef39c13c1797609f4cc90352680f286e270b48aae621451ea406f3837c8f52a57b9c6e3a9892574769d5ed191906e237c27242c68fdc7cea7342913c614bcd1e7c4a84df25a76842e93d8246d16046c110754a432765462944e85e92c407e4ba920922178cbea4d99dc086eccd4881503a81f2fdd06f44fce96c8a080609b0fd3df2dfc964505b128b070fee3fdc9b4d305252f80f2830a391425ac8c013bf9d53f47140a96dd22333d2a1c00d6a8ba69a1662ceb1b4b44bfc4d2a048246b688f28be4c940395032e18056122896212345d0c851a6b0946cefa79fdea76c3afc244023579c5e22e6b807cdb14f9e26d97aa2cfde1e2d005018fce0e12e14574e26855c05ca5bee5348471128493d99025224640c77c8a77bc03a84dc568aa5286cdaa51c2b3112992b9235e252a8f27d22d7641f53ff60729ee7a4db486460b3289aa259a0667b3bf7287b4ac1effd09d8727787e2d08724f5c42764b348cd90fcd32a087941c401e498e79f42007728ebf39086bd4d4e1408422e2fad7d1013ecd36af00e4deaee3dc40bf7484391eedba15545f291c9c1a039259d4df9a2bd6c96d3df0f33a81acaae92dc934a38a08921e54011dec1ee038ace66d34f3fa55e487ad1ec7c36a3540771e45e469425a927829c932b45f9c3fdfbd98c62d503ee748782144ad191ec9187b7ff90464a0688e49494eda76469493a987b29110e81260783dcf1fdfbc4210792fe23c542ea85d893e7f4fee4c11e45e534899442d8a7c88ad420222e1a1768bb430b8bd4ec3ead5e917e21df891e1a2929238c91f293e7a40c28f8b9c7dc4b94211a92df734069606272ca8750521bb1f394381e89d60c534f4edede43282e325d841be523c83a939b377db843d9827bd4a598368a85f63fa5008aac0ae937ea83b4334dca64273b2733bebb4f29206af6298566fb9459d8a6f551a21692970f334a8a90f620a5b54306fa534c3dc5bc24cea41c28d1431c42de3f412345422240d9effc53726cd08c7020c12268b40e40b86530940ff6e81fb23dbb53e22b0a1aa8196579681182accff43e89179197c4809862fb3e1936ca7dd36cb1e740d116cd15f5778f9c421a2979e7882509da2e29e229e51476c16f942e7ef0e98cfc5ed2ef3452f2f34992296d42584e2976a5589867e153ca965144486be2b40a43713df9ac34046261521e248de4fe3ec49c5292799fa6818c06e9321a02458907b0219432219f3ea33cf92edc95834f29c0a07c33658fc905212e2143499e1db9ee9f52b83da30c2c2fdfec610115e9e287bbc8711d90af4723253d4671c21e7d738f02606a969d93a1c05c93d160b624154da901d2ac64db0fa8fff35d34a364c8bdfb942f241344b113a96d3246f769a5e153cab3cf287333a310919a51e6ece143129b6dca691141a817d2a7c40907b4e07a4eeb4a93c9041cf2e9349f4d3ea51c474616823884e2b7c93965031e501281d60c0e28a6838a263d4c3e28a5960ff6880ca46e88d0bbc4f39f929db84f70731902453433caacd39c9e9323b84f5424cf9818947cf67bd9fe4364f6310bb4a64fb6001a9e024862723209d91ef57c6f97029e73cab9933c5333d2c4a47dc9d84e298ea79924de7c3883b0de7b4061f97d788198ac07b412406e0e479ac46fe47812bf11271031290941010e6580a9d943f2cfefe79f1219a660247264486229159ad12210a1479efa1e22a3039aacfb39f900f73e255dbf3f254253344c534c49117259881c2c0b13d2f364bea6db147cd14877e0d550144959bbf3fbb3bd3d722566c08df27a530441944e2153babf434c8e450522cd748782cd3d9a498c9494c3748a089d3412096046da3283009eefee119b671449ec434e73f261c889a4e5095a9020ee25993ef894b4e5f4214569a4d51eecce801b65731e525e189e032ce084064901c643cac9ec909b47f2b4770e68946b21cd8bfc524619530ab349bd4e683eee93b34d863ba788064c4e1667760ee924ad4bfc7640f33121f1a6e1d270c81599108da8196914923c4a91937da559a05420b92b948e21bb3cdbbd9f13de3cf564e10849b2ce0f491d523312784a20ecd2b2d73e6565296d4f2e2435231a923e22034a091ce2b719f905e4ae908a7e4079cfe9cebd07e45f52b3f36c4aab69244f941321e2910f4b9a9cc2bc73caa97d4aeb28e7c428d48cdcc2dd8707c48ce486116ef994c4799742295a63d8a549a500ee1cb33025a703bcbcfd20a75098024462b53d1a38f954070fa60fc830e410999d87e4d59359a33c1989fe3e7db99d51d2911c25cac0d1fa242555801bf947249714039c3f80097a48195a5242241a94a5211ebd478113084299bbdd839c0cc1a7e7500e44780a8af7c8dfa0ec26798a7be714f753334456c4e4b4044cb68cb425c2e31dcafc5374fe80dc8007f9bd0710409a182c2e93439b51d44e7109e1464efdf639c5e1594eb9a8f309942aad55122529bf48c94aa21ba9199253b2ce93fbb45ebb4b7244ae3e35db212e3da79551f21c6001e16c53fe942c39091c851764b3f7d0295912524fa4aec8eb22463a277d43c24dc4cbcff7c973d8234901dd7629d1f6902225fa925256fb0f28d87e486cb14da106b97cb307b42e0db6a4a151ce9132820fefc3539dd2b207d942824bc6f43ee5302896c79cdea7d51b720dc909a70c0e91975a3ca4fe69816042a1d1414e013dd4607e9fc2b25d4a6fec926f43b240083e249d49dd7fba3b25a531dde35c0d695eca4e82bcbb245e34f594e88013773fa79c37f15bfe8009f270466a8a5898ac0f8558fb9f5282f8e13df28572f24373caf493838fa9df25f79742b803223b4530646588bc9457213d46dc4c13455301dc1edc9bde27034d398707e0de87a485c94fa17fc84fbbff802c3ba528a919a20b724508d0a7e4f2126e34017b64c92905f62989072d5a9cc3ca90e521f2524ee5fc5310849c49a857ca763cc8484228b37a7f8a66f0211f52ce803a852b8594c7c11e99cc6cfa90bcdb07340f07e010d299142d12e352c44d0439274339a17888525ee7f76664d628bdc7b89dcf3e9d911e833d25a292d5235124d3f690e289dd07e4a9920345cd8891290b3b259f93943531f9940c09311a118f9636cf493cc947a566a4ada714039135a0581423a558863272143e9cd32ada8c14cc011cdaf37b34f9f789ece7fba24ac97eef910052b44022fc69467e2ca051fa669f326194c825cb43d0c822515678878640468c4c1805333cf57b201bd932262a7d4e467c8fa46236251541e99a0794cea66624099f92ae2747170b15646548f7ee90cd7a482e2769344ab7f19cee92a5bd4fc92212673241a47b494eefd1c0c94122a574ffd3fd7becaee4e79499a7f88110271b82a815b34e6a898cc0949617c9d670a7b47477ef1e65472998250124ee019620484e0ed7435ad660dd3ba1197eb043013b454834f50724370f9162c9f33d0aad66246933744ab24eb3401ed73d0ad294df907a2542dc3b27bff0538a36a9d97d0ad6c91acdb677c9be6e53e047e4dd27d1d8cf68e996cc1fcd16464ac10fa50009714a5453a7f7288534d9a70868976259f20449e572da84f2b9646e48d9ee51ca83c499388f2cc7fded19ad4f3ca03c2bc5131802190d7a9ba4e5530aaf68b2482365f7c9899bdddbdfa548efde34df07f7e6943a9812b39095818f449965c28d222ecab592bce7e47c3c04340a0a481593d4d3421ca9418a1029062436994cc9d8dfa3f86d27036eb478f1701f4a3c7b88940e6531319d93eddd19712e297c1a3aa091d12403481105bd460248e12ac9024d312d2d4fc9ce90477900dcc8bb278ea04435b921c4bde44b52d4466a7046a69e1610eec11252330a6269859bbccf03c400fb130a8f48d1938ecd685289ce483552b39cdc5df20ac818918edaa6f0853412457fe412ec5042fd3eb1d7041a89388cf27be8f401f9d994f9a44eef9109a3808842307222f7cfe1bf4db1c8453e179963988f0332099387241553a214d98b5dca7a604ec91398de27c1ddbe3f216bb0ff90122814fd138750ca727f8f3ca55df67bf3fdc9fd694671240905f105a9e16d127f8a0b4869d0fa0499d3193aa5886046ae32d9598a04c918118d2910202530cbc8927efae95ec6fc4649ac3de2bc6c9b52a144defbe401d310ee93829ace321292bd07fb98acfb34c5e4b4515e8e0226927a4a5e4e2866a51cc01ea901729cc8394233620a8aef08a34f9190b84ffd91ff469946f25e265838209f819ad14ce619795fa4a28971c9952251248ed93e271b4208512e8e19899690688a2942cfc82fd9dea73180b214a43cdcb94fac4c294ece87dca788873a263e9c92d7b6bf4ba4999c93f99892134efa998ce67dd88583bd49fe609fc2b44fef238ecc28b6a0f09f3c8429b96e9fee9147748091d24bd9944c0e89013977641168309473a55ccd3909f301e583f63059a482c95a937f42e1280d61f721b9bcc4b2642d2934a4f45d4e5e1735a305da1d5afc407047d6609f52c4443792c24f49167789272990066e3be484dca3d4daf6ce2e05d0942c25fd46aa6e3b278ebe8ff53132bfd46c9a4d480dd048673479c448941be2666435ee93c1b847ca1fd0b27b394d1db920842c290712278a6ac8a8ee9014de2741a36ed9aba1907007298b735e70b94f1c493955b29bb452403ec1bd1d5a97a666b44875308537f8e93e70bb4fe24ce28489bd779f2c31a599f6310b3bb4467a8ec88fd23c845b4efa86f2e8e7f416199519257e666cb3287a20af1a12b043fd91d221234ee3dd9eed50803ddba535134974ec1f20474bf1c201cd1305dff40259eeed1dd2819417a71cef0c8c442a980c18cdfaa753b8c7392d06d1fa022d28d362e0944289ec410668fb19997072cd087b4a7b93ff46fcb64ff6f401291cf2553edda1141535a3552ff245694e77ef9399df9f92434b59ec2979834402f2dff769bd809a4d293aa0f4158939a2525235646566048d9c288a9677f63f7db007ba3db847327e1f2293138df7f78964d901252928e0a1ff3d7890ede61040ca4accc80b7eb87d3f03ddee91bea155411a11852594da2157620f73fae03e79acf7c9ac907410bf4df6c87547e67f4aee1db1cbde949605a8d9fe39b9509f9237b043d698e4f4218d94b8823cf95d5aa0bc4f33348564e5bbb4daf380e674e721a569288ea6650862d3ed9c0840bc4baf4da0434814b329e53448e183780f6180413c0ab38920b46843cb8468466b88bbe456116ee03772c568082468b4d0766f4a29004ad302da83e91ed9708a87800ce146498ac9845426ad21d2bc6464790f300be435907a25e34ed11f890c2966a21ba50aef912f401fd3fc7f0ac9a23ce38cfc27329464ae490d12dd1ed2b7107d8a3ef6c95b7980a94762825626f36df2f8896ec40734045a5aa239a170f2e0de394d2c35a34c35450e140fd1c460a444100a6b6901940673ef3e117f3a85ee25a67a406c4fa1f739a6fe2181a495d7e9366967529ab44e4ef9576ab64f29d89cc202c29958581869171690864b19f99c467cefa3efff925f426a246fa675b16a8b6af9d1a38f8ecb323df9e4f82c7dbd9ed8cf9b74b16eda749e5de6e9aaceb767f979b1cc67d2f0c5ebcfd37a5de6cd384d5fe7793a6fdb55f3e8eeddec6d365e347797795b34d5dd6573d1a4e7559d2eaa3a4f67799b156543782ee8b759d6661f3dfac51f4deb3c6bf3d9936bc283b883581e7102a1bbbd0fbfed2139cbdbf7f648b74f28587ff029445e5ff912a8efedd0f7b4b2b7b7ff66f7c1a3bdfb8f76f7c7947aa594edbd9fa2a6eb15f5f37ed0f5150f3a71f5ee9b9d9d47f7f61feddc1bdfa3989962c69ffa88c8982f6974d37c912fdb2f2a327f8f3e7a9a9f67ebb2c597c58cfebebbaaabcb6296d7cddd2f8a695d35d5793bfe225b6617fcd6dd85fdf5f3ba5aaf9abb9493a4b420591be24a186d4a191f1c90474069598a3cee539ae6e15e14e8f1ba9d5775f1830c9377775595c5f4fab8698a8b25a037775fbcfae2f5f6eb272fde6c3f3d7b71ba4d33b87d4979061a717bbd02eab70645af2cb3055e793108b3aca6fc3635ca888deaac2cb2a622b879d6b4f47d73ddb4f9e269840930136402c9baec918344f946f244488848313da475db7b24fd0f1158da57de08f6c7ab15a1297dda6f8f5bfa4626d16791ddf12e99f0039a434294f0a1b92bce0b00a3e6b7ec3f7c2f8a84dfc4c3c467a7bdf10e85071463103bfd92d12f269ec9976dd1121ebff8a3555d2ca7c52a2bcfc048944fa0e43305bc13327fe42450a03999911245428618e67c6fc268b5f9325bb6fa06adbc537287d245f00176c98d253b39d9a6f4ef74b643f10bada1e10d41fd354f88cc723e03ff1293adf2ba2df206d8cc8a665566d72f64e297f5a2d926f1debe2451df6ed613fad1fcfebb63d829e1171284625980128c4c9465a37270f1b320070e99e62ee5abc8664c68c18b62d87c0fccda4c69a4ef85e47b082bc15f653591ad25b8a0645696d5553e7bae12c29f5d66e59a30f8de47108f75d39497a4a709314f1f9fbe9b96eb867e095f203f9c161329c0a6bc00a140792e0a6c6829f0fc1e594bf2ad48196296c93da5953cb2cd14ff92052197947c33724a289390ed92757c30614cc9e820f83a277f9bbd02ca8b3c9c90af4ce96a5a2fdca1f4da0404a37074728f32d3db33cea8938d27d6a2d4def90e6562c8ab98ecdc47b35dca05ef63f584fc44585ef269c814cd285d7380f4cc8c12b37045a6f73e3d9f5192080e0f312ae5b2a9192504f6f2fb14a6ecef90d70f73bfb74feb82b4b688c562726c66b40891512695b2379fe639b9f8706db8192dad6494bcdf9b529a633f232cc921a24513ca725054492985fbe89452c407b402424b0c9442a15880863bd9a1e4d8ee64b6bb4721ffa7e26f7f4ae9c48714ca92574f2ed53e10a4d7c8c5f9f41e053c3be4b6b0d345a9b3bd0c19f5f33d642728114243201b4cde38799d0f1e4cc9da50b3ddfbf7eeed50d6990c0fb93394e026bfea9ce2948c42524ae8dc9feddf837bf980b2b5e42c503ef00165f0f7691d8372041432eed1da34e5b9f2ddfbbc144869e04fc90ba4c0ed53f2699083a059008d77335afacbf6c81f81fff310493f8a6cb60f66e463ee53fa97527e1459dc7b48713dadcfd0c8e063506a88c264cacf23d14a43a014159945f2c11ed08a1cd16ab6f72946fae9f4feeea753e2764a4092c7429109026c8a4766bbf0ce3272f43059e4b7e4b4ae4829265a3326c9a0b619656db72906da47483ba30c2135db99d0f0313b2444340bb4ba416c492b9f18e7bd8c22084a3352338a84324aeb52fc4201064123bf8a8203ca75ececed11008aa979a43b53ca8f10792826a58087589ea69e623bf0316137cbce293d4bcda63925427728e94db10bd1ed3ed1989044f77b7bb4a0bc4ba958b87004799fc840cb22d35d12993d0a7828e54b39225a2aa31cfd7d72cec0e4e7e49aed50ee9f44891401a555e18f1213cc3edd3ddfa1f411a504305913b229070fc9d7a5c0909a4dc837cf40465a52a489987dfa29e5e8a9d9a7b46a34dd2168d9943892522bb432445c43539cd1445174459129357b709e510446ecb34789038246b963721b29d9484bcfe7078419d1899a117f4f08b587dbe79407a039a580f7e1017113a544f35d8a24e93d1084849852cd240bf98c12bae4b692233d21a71b21e06407abf43b707d697d65f220239bb33321d77e1f39620ad86816a6392d7d9066d865134469404af0507f078432d19e9c55ca7ad0dc4d28053e2582dedb01bfd112f9c3c9847204c400841129229a050acb087646315a4e12829152e286589410a7656662cb9cb457b64fb1e0bd2971f983d98c820b8cf4c1c17dd0878640ce1ccdc2390d618ff209b4b6414c743025a010670a1268d595b28b94a32382dca7fe6892e92d72e6f766242ff40735a3c077464c4ac99f9c2200ca40c088928ea575f8c9ee2e39d97b92bfa2f42f6543c812d342288d94faa3b509eaf9530a043ea5f54b4ab953335acba3e086027a5a352201fc94e474422b68dbbb94e7a341ee4f69e5919a11360fefd127dbe7942721a987aad9211784b896bce58cd4e07d24de1f52e6f52185f5348984e0fe431ac743acf1dd3fdfa10406ad8d530c4acd48f14c689980b261a49ea9535a36c87628382273f180668086b78766944522e7864836b94fa9046a4aa4a15536524be4155328799f72b0d48c342f29617285283d458aeb9c325c943f252e7d00b788f2dbf777210b077b14ecdd273edca5609e70a3d5ec83735a429f10a7d130273b0f32744a192b6a4601f644b213f7e8b7034a9aeeef21dd7bfef0e16c0f1c42c12e258cc996dd27c925fd467e0f2d5211aa7b88ffe943ca9753b3fd3d42618fbe242ad348490d6d53a04cf916522ec4d964420e300b942023efe721a544b084bebf4f7ed8845208f4276552a91fcafff2104829dfbb4751fdde399bb6fb98fa3dcac891bc90ec50027b02434959448ac528d4a2a5711a026923e263824b166a7787523f641b30a714739369a0b4ca3d0a2e892d49f792db417f529a8e320139c927e69416960e76f7f6f6697640907d483d2d7cc0c3a37407691e32be68b63379f8803ad8debd4f1851f04a13409674fbc1bd7312035a1ea4b09d9acd48fe0e1e922d23be2568bbbb14b36794daa38f8885888e841435a355c11cc980ed3d5e7f3c27b50432903dcd0f88b76812764110b286b41c4b4a95d2aa445ed2a56401695268d59a98e721f1d44334a345e87d5a7ea41cc83d32dd9446214f95987e7bba0fcf746f87622fa81a7247ee91e2f874fb01cd314d3da512a929e95832cdf9ec3e3100736f76ffde2ee14c09e41d5ac1dba78c10f11059725af2cb76ee515efdd31dcc0211e73e99cd03528f94daa1909fd8fd01e663b24b2991877ba41e30d27c9f96ff1f904ece084b9253526d44d58c509d7eba9b6714f8f1aa5c764e2f534e6f9be68a464ac945e210b2107ba41627346402037ea33cc0a7b3fb44063284841b8d070481c452de8f72ae0f68099d9acd886d1e9222a2c081669d923f2480c431dbbb7be4033ccc29473a0541cecf1f526e91be7c7000dd4bee0425a6c8e8dcdbbfb74f1e1d19861d34bb774012b44b4ae38004719b52b1647689778861285d96ef51c31d8c74ef80ac1105fa944f98d01068d0e4d59060ef51e23edf252b49fc44cdc8b8d39a2e19505a8820c469bc70a568592dbb4fd91062937b0fd029e9a529a53bc91c938749cdc8453b004b4d1003d1b2c2648f3512d93c922d4a0fe5585324fe22bd497a80d64029cb47cb1fe7a40da81965c8c8f6919893ca245543be13292eb25ec485a46448d591a9a166c4c6f729ed433e353cc77dd2693404d2b19f52868b563e267b0f3e852c3ca02579b2f5841199639a7a5a273ea03c202563cfcf793d8518859a1d9073f8291691b30770304090ec532c58edde3bdfdf99d272f114aa2603a2e4bb6eefd1da14e9214a5d5276899cea07949725a5b377ff1ea091ee2542924741c853a7bc004cb9f8ed4f49f53fb8ff29a506b853ca3bed1344627e220ccd292dcd91ef4579bf9d5de21b32587b9c0327329f93a6a1d092588738843c12cadc919c52cc49bc7b4ef308ba91cf31d9235d863435cd023973d48234eb94124a84e3c37dd239d4ec80246c46cbc5db3b1939ec9401a141c267a504d301d9221a39437bf880ec0cc5e8db3bbb94c1a74c1d25de291626e5404ecbc1f9fdbd7b7b8046dc424e3ab90419e90fc26d87646ffa905431e55ec90727e7eb538cf421794bb47e4faf7f0a078a161049001f527e8ff8212353b447ea819a914ac9693c242d102f9a7a12e71971ef6c7a4ecb3c935d72bc20ce3b5029e7a42d77c9ae9246a285de837d7867e49ace7666b4be730eeebd474b603bb43a4db10ca979527644908cb2af341d2405a4bda6bac637cd092d5803ca38d24a11a5ca3f85c2dfa19c2a990c98416a764e611a8929c180249369223541ba6f9b8cda8cf40b3954bbc06d4a33fa90142d3c551a02cc07b937141e110f61cdf09c96c9a8594e2b8e3984387f48d9d07dca2ed304902da4a09ba4349f3e208349cd3292b2e93d726369ad84a0cdc83093774499f33d4a19d35a042d1842b2a62439bb9f924e266b428cb447cc41bdd3a4d0e2749edfdbbbb77f0fb8653bbbc8968320a4d5f6cf2972c83e254ea014eea79fd2349c93074fcdc8a1c91ed07a394d3da518f7efc3ca90ee21a92009d9a53c302d7751b3193948e7539afa3df257318419b904649bee53e2f6de6c9ff29c39c84bebd79307f76915f01ec5c0445eea9e0498329953d2e5b45eb54bd4a766e7142d91aea0652372d389bca4e926a49d09da8ccc2a58ec531e02a19a65143a232e2426a791925e246f39dfa165e4f37b2450e8744219525a6c002d88d568459bdc47f28fb7f38c0c0c69d5bd07e7e8945c6c0a0349054d29334a1c42fc7640fa7b7be7fcdef9a7f7e16b4fa0436633724649c992adcf8937e90d12195ad72665f490f4d9a714f3025a4e36f353f29348e392dfb3bf4b6bb164bdc9589fefdda3e8fa7c979c476a46a426d543f945ca2453a7b49a4393453ed28c1880064508eec350cec898ddfff421f9c33ba03d2cd22427044904284f4e3c78ff533039a9c6d9749f34c743d2add429f9a1142f50763abb4f8af4c1ee74f6298640f9eb4fef51c67e7b971652480029e6a4d5498acef67262cf4ff7ef7fcab340ce0cf965643e08719a7aac664fc84d20776efa90e6fb213135024f2495f7a764fc08556a466b36c46a3466326ca46768d196fc486a46da9996362882218923c5958334f728cfbc7f9fd2de249c641f21f57083f27d72a5a63925c8c97a9128d28ae4764e49358a6c6909e43e6481cc2b65ad3189fb349dc421a406279f92f7f2e9644a2b79e483f2da014de55e4e8a88942da952c28fd8f2011987fb34e9e4e1ed3dcc3374ba4f0eea031ace362d1b9295a1f5439ab68cc8787e3ebb7f1fbc7480663be793e9bd735af6df8519dc076f52644346f5e1a7147512e57678a1e79c424bca36904b40ebe3343e7230c9a2ec6cef9191fa7486719e8320b4ac4d6b59a4b86861809a9dc3c0903d271f89c6489c4a71139403854544c63d12cc7b140f519409b4e04864a4da29c0cb45939396d8a5f17c4ab60ca66d17baf7538a7bc9e73c27c54566ef1e8630251769b64b5a2ddfa1a5006224d2c2b47eb54dee4d46998d077bc49768f6f06087084751db01214e410a268b249662857b19e94a5a758300120dc9eda43882a03ed8264f8708b2bb4372b34fa660679f42b7fb10c0735a57a3040fe146c1210d6197b897a0901f826c0659506a4ccd7669c52247044b2e0be910f2eeb733f263b7777789dd0ea6e4fbb2e7404cb0476b85e4c142b591d74641314d39291d5aeea7170e486950b33d4a177c4a9ecdf6fd4f69dd86624dd221e41223aafd3423821c90c34acd0e28c0a030863c7172b9b7692c44de1d72cc28f9726f8f2c2b1c1634cb29ba230bbb3da30892b897ccd28482c06df24ec8012427efc11402483c4136909ca2dd87c06d8ffc29b20bb406fae0d31d5252c89361b2489951026a42cc4ff241cdf6284821ff83fe39d8a16408ad4fdfe7a93fa7751e8e3e28702177856c24cd29a5827768b16b429246b345cd480f4f776714d2d19c915d20eb4a013bc9c2748f6486723ab4480cf2929cee92d49147718f340779b7345924e8db335a613d9f3ef8f4e1de14239d92efb3b34733495c49dee01e89e224a7709c965577685df4fece3d0d522812a7f5a6ed07b4464ae3a024c584161489d377c87ba3d5f37c1743d8ff94880b679bbc1682764ecc41e4a76877b647717846ab79f72132b4964a4b7a942020e46908e4f29100921f72efe1f453d2593bb37b0fd0ec8098fbe103527e53921c82f690523ae42991dcec53484509c487f7c0bd148690692719b9b74f4926f206c12114123c200787683bfd74b20bb6dc2125bc47d24db92852f3fb138ab333cab4116f66f9f90433c176e101651329754280c874d23f245414d4901aa4059dfb945ba06c2970db271f82343ed9321260e23712aa87c44424320f692591b4fdc33df01bf986e73352f6db7b334cd694789356f3c905ddd9a7d404e90aca485033ca77ede1150afa8978fb640ba0d329aea725f49c7ca95d320fd40cf6746f8f4494823e429096f0b62978a565085a6ade2342937b00b69c91efb74fd927a227adecee930740be25655126646a28fbba4b4e239a513a911887f882721ac4bde0a18c5c20b26f7bfb84d60e49130832234e406e8c8c06a51b283b422d288f45f341e179969313f9299addfb94625b52dadbe42991eefd94bc8149468e2bcd04f94b1322c7390842d43aa7455c8a4f0f8885f741411a01c64c0ec02ed1fd01e79128f6a10c12e51128d1402a7a87bcf38794eedcde256bb2739f4279e15eb2b3534afa8091c8f925834f8bc5701f29bb42d13425b3efef42000f28b730cd48d7ef9e43d53ca49c23f90bb4427d9ff272e7a45d280f4ecdeeefee929744937840d34118914f9651ca8a141479f06419c946402311c7ef90234079cb4fc97250e0494cf0202785bf4381dd01b10d8534d42c23db41aa706ffb9cdc488246c1cfc1012dcddedfa3b9a679a589c510f6cf3f9dce28d94a6105a69ec277ea9ebcf3dd0985a6e72435a4a9a9d98ce2e87b7ba4f73ecd4902f67789c6077ba4fa29caa2c4eda7e41deea0d37c97268e9c2962ed8c143e0d88920934157b44ee87f760e598c91feeee11f7d20216e56a882dcf0924d18d5c2932f5f7299ca3f42924eb21e94a4aa990e79081bce4d89375a61094d2486455ee912f720f1ae9e03ee5fff61f90434bb96e1a0279190f2952c73fe48152c84d2e1035cbc8bb25cd4856664633b64f4b21644a69e08407799b0fcf69251faae6e1f9843286a41768210d74a39eb303128d07d387a46eef93b3fd00b99af329a9e57b34e19442268d446f1323dd2375b7bfb34f2243feee1e70232f8abc3a9264622f92d37d8c94f20724d333e2221accbd09f8ed1e79087b925aa6b0729ffc7d32c0e4547f4aee5ab67bff21f91910c0f33d721a29254e3349b460f341bfcd28c34339771266ca88a2d93e429419cd754ef9ceedfd4fc9b29251276a132bdcdf212024cfd48c32393b9fdea349cc66a4f529e947ba6946134b59610a471e5250b9c3d00e76f6762971b53d255b41b8d1b2dec19492706473b28ca2fadd9ca79e16077667e4c06cd3d493b69c9242ccc80f87a3448b3af7f6f628e4a466346e620de2d9bd7b1482d02490d221834ae1d8bd8c788092e30fd18c6ce9a7138a8dc80525776c7f879230d92ee9903d52b533f22829b58a59a030fc5ebe436993c97de26fd253a4f029e14ff9908c4c3029b99c53afa49949ab13c9482313f73e24d29066a6588672c514439143c0ce0fc902696c4a9151a69f70a3108e8c11e55fefef9121229a92488091f6ef917e853740d977eaf49c1814e9b9ed29f9b9f73efd744a620d719e21c10a57f101a51f091ab114cd2ec5a76459cf91dad8e54ec92410a3526c788f8c36cd0282948c78734a0ed9c11e79d6f93eb425855be46013d969fe882019f5fcf00179b534ee3c9f52a0b6fb0073faf021c902d98fed3dd6910714fe4d66940a239b36fd7442cec1bd3d34231546c9279a9d07e73b34f5f728b63c203a6eef4d48634d1edca3d521c8e9eea7c4e634b66d72bb68080f49621f1e90c83ca05c0e290476dfa9d9fe03ca60cec827cf49656cb31f428b63a4d3ef11bfe704f35c5c827d32250f48a13da0b89d2c20a99a871479901acc69959352a57b9c6e3a9892574769d5ed191906e237c27242c68fdc7cea7342913c614bcd1e7c4a84df25a76842e93d8246d16046c110754a432765462944e85e92c407e4ba920922178cbea4d99dc086eccd4881503a81f2fdd06f44fce96c8a080609b0fd3df2dfc964505b128b070fee3fdca3a5686a460aff0105663452480b1978e2b7738a3e0e28b54d7a64463a14b8416dd154d342cc3996967689bf498540d0c816517e913c1928074a261cd04a02c53264a4081a39ca149692edfdf4d3fb944d879f0468e48ad34bc41cf7a039f6c9d3245b4ff4d9dba305000a831f3cdc85e2cac9a490ab4079cb7d0ae9280225a92753408a848ce10ef9740f588790db4ab114854dbb94632546227345b2465c0a55be4fe49aec63ea1f4ccef39c741b890c6c164553340bd46c6fe71e654f29f8bd3f015beeee501cfa90a49ef8846c16a919927f5a05212f8838801cf3fc5308e00e657d1ed2b0b7c9890241c8e5a5b50f62827d5a0ddea149ddbd8778e11e6928d27d3bb4aa483e32391834a7a4b3295fb497cd72fafb61065543d955927b5209073431a41c28c23bd87d40d1d96cfae9a7d40b492f9a9dcf6694ea208edccb88b224f544907372a5287fb87f3f9b51ac7ac09dee509042293a923df2f0f61fd248c900919c92b2fd942c2d4907732f25c221d0e460903bbe7f9f38e440d27fa45848bd107bf29cde9f3cd8a3a89c26915208fb1459911a44c445e3026d776861919adda7d52bd22fe43bd1432325658431527ef29c9401053ff7987b89324443f27b0e280d4c4c4ef9104a6a23769e12c723d19a61eac9c9db7b08c545a68b70a37c04596772f3a60f77285b708fba14d346b1d0fea71440915521fd467d9076a64999ec64e764c677f7290544cd3ea5d06c9f320bdbb43e4ad442f2f261464911d21ea4b476c8407f8aa9a79897c4999403257a8843c8fb2768a448480428fb9d7f4a8e0d9a110e2458048dd60108b70c86f2c11efd43b667774a7c45410335a32c0f2d4290f599de27f122f2921810536cdf27c346b96f9a2df61c28daa2b9a2feee9153482325ef1cb12441db25453ca59cc22ef88dd2c50f3e9d91df4bfa9d464a7e3e4932a54d08cb29c5ae140bf32c7c4ad9328a08694d9c566128ae279f9586402c4cca83a491dcdf8798534a32efd33490d1205d4643a028f10036845226e4d3679427df85bb72f0290518946fa6ec31b920c4256428c9b323d7fd530ab7679481e5e59b3d2ca0225dfc701739ae03f2f568a4a4c7284ed8a36fee51004ccdb2733214986b321acc96a4a22935409a956cfb01f57fbe8b66940cb9779ff2856482287622b54dc6e83ead347c4a79f619656e6614225233ca9c3d7c4862b34d392d2208f542fa9438e180165ccf695d69329980433e9de6b3c9a794e3c8c842108750fc3639a76cc0034a22d09ac101c57450d1a487c907a5d4f2c11e9181d40d117a9778fe53b213f7096e2e43a088664699759ad3737204f7898ae419138392cf7e2fdb7f88cc3e6681d6f4c91640c35300494c4e2621dba39eefed52c0734e397792676a469a98b42f19db29c5f13493c49b0f6710d67b0f282cbf0f2f1093f5805602c8cde14893f88d1c4fe237e2042226252128c0a10c30357b48fef9fdfc5322c3148c448e0c492ca542335a0422f4c853df4364744093753f271fe0dea7a4ebf7a744688a86698a2929422e0b91836561427a9eccd7749b822f1ae90ebc1a8a22296b777e7fb6b747aec40cb8515e6f8a2088d229644af77788c9b1a840a499ee50b0b9473389919272984e11a193462201cc485b6610c0f3dd3d62f38c22897dc8694e3e0c3991b43c410b12c4bd24d3079f92b69c3ea4288db4da83dd1970a36cce43ca0bc37380059cd02029c0784839991d72f3489ef6ce018d722da479915fca28634a6136a9d709cdc77d72b6c970e714d180c9c9e2ccce219da47589df0e683e2624de345c1a0eb92213a21135238d4292472972b2af340b940a247785d231649767bbf773c29ba79e2c1c2149d6f921a9436a46024f09845d5af6daa7ac2ca5edc985a4664443d2476440298143fc3623bf80dc1552d10f28ef39ddb9f780fc4b6a769e4d69358de4897222443cf26149935398774e39b54f691de59c18859a915bb8fbf0809891dc30c22d9f9238ef5228456b0cbb34a914c09d6316a6e4748097b71fe4140a538048acb64703279feae0c1f40119861c22b3f390bc7a326b942723d1dfa72fb7334a3a92a34419385a9fa4a40a7023ff88e4926280f30730410f29434b4a884483b234c4a3f7287002412873b77b909321f8f41cca81084f41f11ef91b94dd244f71ef9ce27e6a86c88a989c9680c99691b64478bc43997f8ace1f901bf020bff70002481383c5657268338ada292e21dcc8a9df3ea7383ccb2917753e8152a5b54aa224e51729594974233543724ad679729fd66b77498ec8d5a7663bc4a5e7b4324a9e032c209c6dca9f92252781a3f0826cf61e3a254b42ea89d415795dc448e7a46f48b88978f9f93e790e7b2429a0db2e25da1e52a4445f52ca6aff0105db0f892db629d420976ff680d6a5c1963434ca395246f0e17d78aa535af6205b4870c998dea71c06c5f298d3fbb47a43ae2139e194c121f2528b87d43f2d104c28343ac829a0871accef5358b64be98d5df26d481608c187a433a9fb4f77a7a434a67b9cab21cd4bd949907797c48ba69e121d70e2eee794f3267ecb1f30411ece484d110b93f5a1106bff534a103fbc47be504e7e684e997e72f031f5bbe4fe5208774064a70886ac0c9197f22aa4c7889b69a2682a80db837bd3fb64a029e7f000dcfb90b430f929f40ff969f71f9065a7142535437441ae0801fa945c5ec28d26608f2c39a5c03e25f1a0458b735819b23c445ecaa99c7f0a82903309f54ad98e071949086556ef4fd10c3ee443ca1950a770a590f238d82393994d1f9277fb80e6e1001c423a93a245625c8ab88920e7642827140f51caebfcde8ccc1aa5f718b7f3d9a733d263b0a74454b27a248a64da1e523cb1fb803c5572a0a81931326561a7e47392b226269f9221214623e2d1d2e6398927f9a8d48cb4f5946220b206148b62a414cb50468ec287735a459b91823980437b7e8f26ff3e91fd7c5f5429d9ef3d12408a1648843fcdc88f05344adfec53268c12b96479081a5924ca0aefd010c8889109a36086a77e0f64235bc644a5cfc988ef9154cca6a422285df380d2d9d48c24e153d2f5e4e862a182ac0ce9de1db2590fc9e5248d46e9369ed35db2b4f7295944e24c2688742fc9e93d1a383948a494ee7fba7f8fdd95fc9c32f3143f10e2644310b562d6492d911198d2f222d91aee9496eeeedda3ec2805b32480c43dc01204c9c9e17a48cb1aac7b2734c30f762860a70889a6fe80e4e621522c79be47a1d58c246d864e49d66916c8e3ba47419af21b52af44887be7e4177e4ad12635bb4fc13a59a3d9f62ed957a21b45aad93e89c67e464bb764fe68b630520a7e2805488853a29a3abd4729a4c93e4540bb14cb9227482a97d32694cf257343ca768f521e24cec4796439ee6fcf687de201e559299ec010c868d0db242d9f5278459d9246caee931337bbb7bf4b91debd69be0feecd2975302566212b031f8932cb841b455c946b2579cfc9f97808681414902a26a9a7853852831421520c486c329992b1bf47f1db4e06dc68f1e2e13e9478f610291dca62623a27dbbb33e25c52f834744023a3490690220a7a8d0490c25592059a625a5a9e929d218ff200b891774f1c41896a7243887bc997a4a88dd4e08c4c3d2d20","dc8325a46614c4d20a37799f078801f627141e91a2271d9bd1a4129d916aa46639b9bbe4159031221db54de10b69248afec825d8a184fa7d62af0934127118e5f7d0e903f2b329f3499dde23134601118560e444ee9fc37f9b62918b7c2e32c7301f076412260f492aa64429b217bb94f5c09c922730bd4f82bb7d7f42d660ff21255028fa270ea194e5fe1e794abbecf7e6fb93fbd38ce248120ae20b52c3db24fe141790d2a0f50932a733744a11c18c5c65b2b314099231221a5320404a60969125fdf4d3bd8cf98d92587bc479d936a54289bcf7c903a621dc2705359d6524247b0ff63159f7698ac969a3bc1c054c24f594bc9c50cc4a39803d5203e43891738466c41414df11469f2221719ffa23ff8d328de4bd4cb070403e0335a399cc33f2be484513e3922b45a2481cb37d4e368410a25c1c33122d21d11453849e915fb2bd4f630065294879b8739f5899529c9c0fb94f110f754c7c3825af6d7f9748333927f33125279cf43319cdfbb00b077b93fcc13e85699fde471c99516c41e13f79085372dd3edd238fe80023a597b229991c120372eec822d06028e74ab99a7312e603ca07ed61b2480593b526ff84c2511ac2ee4372798965c95a526848e9bb9cbc2e6a460bb43bb4f881e08eacc13ea588896e24859f922cee124f52200ddc76c809b947a9b5ed9d5d0aa029594afa8d54dd764e1c7d1feb63647ea9d9349b901aa091ce68f288912837c4cdc86adc2783718f943fa065f7729a3a72410859520e244e14d59051dd2129bc4f8246ddb2574321e10e5216e7bce0729f389272aa643769a5807c827b3bb42e4dcd6891ea600a6ff0d37de0769fc499c409137bef3e59624a33ed631676688df41c911fa57908b79cf40de5d1cfe92d322a334afcccd86651f4405e35246087fa23a543469cc6bb3ddba1007bb64b6b2692e8d83f408e96e285039a270abee905b2dcdb3ba403292f4e39de191889543019309af54fa7708f735a0ca2f5055a50a6c5c0298512d9830cd0f63332e1e49a11f694f626ff8df86d9fece9035238e4ab7cba43292a6a46ab5ee48bd29ceede2733bf3f258796b2d853f2068904e4bfefd37a01359b527440e92b127344a5a46ac8cacc081a3951142defec7ffa600f747b708f64fc3e4426271aefef13c9b2034a5250c043ff7bf020dbcd21809495989117fc70fb7e06badd237d43ab8234220a4b28b543aec41ee6f4c17df258ef935921e9207e9bec91eb8eccff94dc3b6297bd292d0b50b3fd7372a13e256f6087ac31c9e9431a29710579f2bbb440799f66680ac9ca7769b5e701cde9ce434ad3501c4dcb10c4a6db39118078975e9b408790286653ca6990c207f11ec20083781466134168d1869609d18cd61077c9ad22dcc06fe48ad11048d068a1edde94520094a605b407d33db2e1140f0119c28d92149309a94c5a43a479c9c8f21e6016c86b20f54ac69da23f121952cc44374a15de235f803ea6f9ff14924579c619f94f6428c95c931a24ba3da46f21fa147dec93b7f200538fc404ad4ce6dbe4f113dd880f6808b4b4447342e1e4c1bd739a586a46996a8a1c281ea289c148892014d6d202280de6de7d22fe740add4b4cf580d89e42ef734cfd4302492bafd36dd2cea43477338ab93059fb9482cd292c209c8985859176610169b89491cf69c4f73efafe2ff925a446f2665a17abb6a8961f3dfae8b82cd3934f8ecfd2d7eb89fdbc4917eba64de7d9659eaeea7c7b969f17cb7c260d5fbcfe3cadd765de8cd3f4759ea7f3b65d358feedecdde66e345737799b74553dd5d36174d7a5ed5e9a2aaf37496b759513684e7827e9b656df6d1a35ffcd1b4ceb3369f3db9263c883b88e5112710badbfbf9c10e5949e2b87b7ba4db2714ac3ff81422afaf7c09d4f776e87b5ad9db79f866f7c1a3fd078ff63e1d1fecdca310efd39fa2a6eb15f5f37ed0f5150f3a71f5de9b9d9d47f7ee3fdadf19ef52dae0dec1bd9ffa88c8982f6974d37c912fdb2f2a327f8f3e7a9a9f67ebb2c597c58cfebebbaaabcb6296d7cddd2f8a695d35d5793bfe225b6617fcd6dd85fdf5f3ba5aaf9abb9493a4b420591be24a186d4a191f1c90474069598a3cee539ae6e15e14e8f1ba9d5775f1830c9377775595c5f4fab8698a8b25a037775fbcfae2f5f64fbe387db3fdf4ecc5e936cde0f6a52896f67a05d46f0d8a5e59660bbc320cb3aca6fc36356aae8af607795d66cbd9b2aadb397ddb5c376dbe78aa2c50660dc8579c173a53980cb2826460f6c847a2942339232447a49b1ed2d2ed3d52000f115b86efbd91511caf5684aef41d36396ee9ebde8cde3b183fa4ec36493acde82f19fd629ab67cd9162de1f18b3f5ad5c5725aacb2f20c7349e67e670a81df7f40ee0a05e7f0b8c9789e93bb4aeb24bba4a831f4365f66cb96df78b0478bdf945fa18c0dccf02e799264aa26db94819dce762884a0652cbc21a8bf66aa08a1f3195888e67995d76d9137c0665634ab32bb7e21b45fd68b669b246cfb92a46dbb594fe847f3fbef8ec1c33265c48bc5b20025189928d74459f1e26781151d32cddd4fc9cfca1f50fe646742baf41c446ba634d2f742f23de485e0afb29ac8d6125c50322bcbea2a9f3d5726e5cf2eb3724d187c8f0cc1b2ade98f265f672b7a35271e5a377bfad755deb4b605fdcd2ced7f8006fc0bdecb9a02c9928c34297d5f64dad0ff08cde8ef290d8cd2dff67b869bafc100f4977e5e2c670cefa7b355b6d417df926ef5de5bbf6d2a223ffda69f595cf817c10e1439afb32565c9a511fdcdaf65e735090ff74d1f5de435d1fbdafc493fafb26b80a23f2252bdce72f32b0343cb01020001fb996d4c1f52e74406fd03c85a1270ab8000f89a7e6702f0b7f4c7faad7e4a1fe940f92bed976930a9b31f9021c2c7f417da1bb04213f30dff148aa0117da204c15f0a903ea4311359f019fd413470df7834d2afa56bc682fbe42ecc1fda867f7740e4156e8831d12768b76e586a888973c2d8b495bfb92dfdf5d345c5b0d0defbd335bf28ab09fdf27dd2348d67f94fdf4d0945fa25940b8af868d99a523994812249a38c2a85d0b4e87c7e8ffc32f2e269c513ca8c02215a33262f90322de4ab50f0435100b9bf94b3ca76c90f7b30618124f70661fe394576ec7f5206eee184a2325a18a195e91d4ae44ea0c928f131b9476b20db335ebb216f9234282591cf7728e747feeb64e73e9aedd2aac33ed6e9282221fdbc47de33393d334a0c1e201138a3250038bdd37b9f9ecf281d09d79af431ad9a50334a3dede5f72920dedfa1f8128ee5de3ead40d32af6f6a73b5372a167b4dc9551ce9ef2849fe639059370a2b9192de265b44cb437a584da7e465892eb4dcb73944fa3fc0525afeea3535a8c38a0b5365acca2641dd90e1aee6487d2b0bb93d9ee1e25973e95c8ee534a5c3fa4a409c58fe4bcef03417a8d9ce94fef5168bd430e32bbf794a4ddcbb07673be873c18a5dc6808e4ed51dc47f1cd830753f26ba8d9eefd7bf776687d835c1c729c6929853cf8738a88334a7e50eaf0fe6cff1e029907b42e406e29659e1fd05ad13ead9851368a92137be704737a90efdee745675a70f894e20d4a117c4ade33b25d340ba0f16e468bccd91e79be10d187482f936edf3e985134b34f0b0d945ca618f6de43ca20d14a208d0cde2c25212921432b4148e9d31028194a0e1879fb0f68ed976835dbfb1423fd747a7ff7d32929754a75936f4c3130523914f9ce76110764145260b2c843ce69059b929907e495d3421b0267223445dbfb489ecc28174dcd7626347ccc0ed90a9a055a4723b6a435768cf35e46b12a25b4a919c5dc192d2050a44ca12c41230f9ec250caaaedeced1100cadef04877a6948923f250f683426b62799a7aca22808f09bb59764e0b01d46c9a53ca7d879657284a26badd271a1392e87e6fef3ee55c28e98f608120ef131968016eba4b22b347a1351947ca46d2a22cad06dda730004c7e4e41c00ead32912891bda3043e221f6282d9a7bbe73b94a8a4e413266b42aed3c1438aaa280541cd2614056620232d5ed344cc3efd945683a8d9a7e4ba4c77085a36258ea4241ead4112d7d01467345114c7530e849a3d38cf28d627f6418a8aa0d12a05052894d69e3da09553c28ce844cd88bf2784dac3ed73ca38d19c526ae5e101711325dff35dca59d07b20080931f94d240bf98c960e2840a2906d42e11d920d939d1d5af1dc4190452b7913f20fceb777261444ee6335825203340bd39c16d94833ecb2034809674a25527f078432d19ec222caafd1dc4d68b1853c35d223e0b707138a1727948d2206208c4811d12c5002806067940dc8494230524a11128b12e2f728094df10169af6c9fb20ef7a6c4e50f66330a6331d20707f7411f1a02850d340be734843dca5cd12a1a31d1c19480429c291ca5f57dca6353369808729ffaa349a6b7286cdc9b91bcd01fd48c522c3362524a33e6146b52ae0bbe22e9d8f3f329e5dd289cdb934c292d3450de8db25fb4e44e23a5fe68158c7afe9442ce4f69a59c1677a819ad1a53184da9235a9f2401fc94e474426bb5dbbb9451a641ee4f698d9b9a11360f2988d9dd3ea78c1c493d54cd0e79dac4b5647c335283f7610d1f528eff212590681209c1fd87348e87584dbe7fbe43a9b2d9f453ca765033523c135a90a2bc2ba967ea9416a8b21d0ac3c95c3ca019a0e1eda119e52bc98727924dee53d28a9a1269683d97d412c55f94b4b84fd97e6a469a97943079fc940825c5754eb954cad413973e80f74f2b29f777210b077b9456b84f7cb84b6923c2ed531ac2f9a714d913a7d130273b0f32744ab9516a46a99c89e4c1eed16f07949edfdfc3c2c2f9c387b33d7008a5556869826cd97d925cd26f4881ce283b34d943a6893ea495196ab6bf4728ecd19744651a29a9a16d4ac950668f940b7136999003cc02a562c9c97f48c9b703d2cefbfb146e4c2859457f52ce9efaa195061e0229e57bf7287fb477cea6ed3ea67e8f72bf242f243bb4543281a1a47c3545fd14d43f78784043206d447c4c70c942edee5092916c03e694b23b641a2881778fd218c496a47b1fd21441ea89d348099c4f30a7b48479b04b4bd5343b20c83ea49e96d8283d4f5c778f340f195f34db993c7c401d6cefde278cf649cc49bd12c33cb8774e62400bd19420a2663392bf838764cb886f09daee2e6587324a22d347c4424447428a9ad1fa738eb4d3f61eaf749f935a0219c89ee607c45b3409bb200859435af827a54a097c222fe952b28034290ff3fbc43c0f89a71ea2d93d5a36a0856ecab6dd23d34d093bca6d12d36f4ff7f7260fc9e650940f5543eec83d521c9f52e6999c064a8112b49c56db89ac64e1ee130330f766f7efed12ceb454b1436bc5fb947b241e224b4e8bcbd9ce3d5ac1f97407b340c4b94f66f380d423251129b944ecfe00f331d9a5e4dbc33d520f1869be3fdb3b78403a39232c494e49b51155334275fae96e9e518a81d77fb3737a99c2c96d9a2b1a29a5b18943c842ec915a9cd090090cf88d324e9fceee1319c810126e341e1004124b1966caee3ff8f4008a6b466cf3901411c5c734eb94662401248ed9dedd231fe0614ed9f82908727efe90b2d8f4e58303e85e722728054a46e7defebd7df2e8c830eca0d9bd0392a05d521a072488db94f427b34bbc430c4389d97c8f1aee60a47b07648d28a54499ab090d81064d5e0d09f6de03327dbb6425899fa81919f7fd830919505af222c469bc70a5680137bb4f793762937b0fd029e9a52925d6c91c938749cdc8453b004b4d10ead302d6648f3512d93c922d4a44e658bd26fe22bd497a8056db299f4c0b6de7a40da819e562c9f6919893ca245543be13292eb25ec485a46448d591a9a166c4c6f729c148a1233cc77dd2693404d2b19f522e95d6d8267b0f3e852c3cc83f25690446648e69ea77484e29e34c69fff3735eb92346a16607e41c7e9ad397d90338182048f629964677ef9defef4ca73463503514db64f7c977dddea35550d2439424a73c2639d50f68058094cedefd7b8046ba9708491e05214f9d7e4a468e6cd8fded4f49f53fb8ffe9bdbd1dee94329cfb0491989f0843734a8bc0e47b5186796797f8860cd61eafb61099cf49d3500685588738843c12ca11939c526a8578f79ce61174239f63b247ba0c0b22340be4cc510bd2ac534a5d128e0ff749e750b30392b0d90e21be9391c34e0bc83448f8ac94ca3c205b442367680f1f909dd921c7636797d68a28274c4b3c9f92527d788f9c9683f3fb7bf7f6008db8859c74720932d21f84db0ec9def421a962caf2930f4eced7a718e943f296ce2904211870a068a99a04f0216592891f3232457ba41ea819a9949cc643d202f1a2a927719e11f7cea6e7b4a038d925c70be2bc0395724eda7297ec2a69a403b243fbf0cec8359dedcc6825f11cdc7b8f165b7776892d898d09b729e50d1f6694e7a7e9202920ed35d5d5e4694e68c11a506e9bd6246951e65328fc1dcade93c98019a466e7948d203125189064324da42648f76d93519b917e21876a17b84d69461f92a285a74a4380f920f786c223e221ac4e9fefb32b95d3da760e21ce1f52de7d9fd6316802c816526e89a4349f3e208349cd3292b2e93d726369558ea0cdc8309377446b347bb43841ab5eb4340dc99a92e4ec7e4a3a99ac0931d21e3107f54e93b2732fcff37b7bf7f6ef01b76c6717eb32200869b5fd738a1cb24f891368b1e0d34f691acec983a766e4d0640f1e827b772999bd7f1f5686740f490549c82ead38d0c22a359b9183743ea5a9df237f154398914b40b6e93e2d11dc9bed53463d07797749013cb84febcdf728d543e4a5ee498029673e255d4e2ba3bb447d6a764ed112e90a5aa024379dc84b9a6e42da99a0cdc8ac82c53ee52110aa59461922c485c4e43452d28be42de73b7976707e8f040a9d4e28174fcb5aa005b1da3e2d64c32cdddfce333230a455f71e9ca35372b1290c241534a51c3c7108f1db01e9efed9df37be79fde87af3d810e99cdc81925254bb63e27dea43748640e6869ec80d8886c03c5bc809693cdfc94fc24d2b8e4f7ecefd2aa3f596f32d6e77bf728ba3edf25e7919a11a949f550267b9a9396d9a775439a2cf29166c400342842701f867246c6ecfea70fc91fde01ed61912639214822402b32c483f73f0593936a9c4df749733c24dd4a9d921f4af102ad8364f749913ed89dce3ec51068a5e4d37bb436b4bd4b4b7624801473d23a3845677b39b1e7a7fbf73fe559206786fc32321f84384dfd3971ef84dc0472e7a60f69be1f125323f0c4f2c5fe948c1fa14acd687590588dc64c868df4cc0e2d7a71a7a49d69118d22189238525c3948738f5634f6efd3020b0927d947483ddca07c9f5ca9694e4b3164bd481469ed7b3ba7dc3145b6b4d8761fb240e695d6473089fb349dc421a406279f92f7f2e9644a6bc6e483f22a154de55e4e8a88942da952c28fd8f2011987fb34e9e4e1ed3dcc3374ba4f0eea031ace362d509395a1956a9ab68cc8787e3ebb7f1fbc7480663be793e9bdf329697898c17df026453664541f7e4a5127516e879714cf29b4a46c03b90453ccc27d7230c9a2ec6cef9191fa748671729e749774c0f453525cb40445cdce6160c89e938f4463244ea5b809ca81c22222e31e09e63d8a8728ca045a70243252ed14e0e5a2c9494becd2783e255b06d3b60bddfb29c5bde4739e93e222b3770f4398928b34db25ad96efd0a213311269615a29dd26f726a3ccc6833de24b347b78b04384a3a8ed8010a720059345124bb1c2bd8c7425adef42008986e476521c4150896eb0d3e44593dcec9329d8d9a7d0ed3e04f09c567029c143b851704843d825ee2528e487209b4116941a53b35d5a1bcb11c192cb423a84bcfbed8cfcd8eddd5d62b78329f9beec391013ecd1aa3479b0506de4b551504c534e4ae753ca44dfdb3b20a541cdf6285df0297936dbf73fa515428a354987904b8ca8f6d38c0872400e2b353ba00083c218f2c4c9e5dea6b1107977c831a3e4cbbd3db2ac7058d02ca7e88e2cecf68c2248e25e324b130a02b7c93b2107909cbc07530820f104d940728a761f02b73df2a7c82ed06afb834f774849214f86c922654609a809313fc90735dba32085fc0ffae7608792210707b3fb3cf5e7b4a2c8d107052ee4ae908da439a5158f1d5a569d90a4d16c5133d2c3d3dd19857434676417c8ba52c04eb230dd2399a19ccea764e8a819c9e92e491d7914f7487390774b934582be3da3b5fcf3e9834f1fee4d31d229f93e3b7b3493c495e40dee91284e720ac769017f8756e0efefdcd3208522715ad9dc7e40abf1340e4a524c68e99a387d87bcb719cdc52e86b0ff291117ce36792d04ed9c9883c84fd1ee6c8fe2f08cd68def436476c9a93fbf470902429e86402e1f0920f921f71e4e3f259db533bbf700cd0e88b91f3e20e53725c921680f29a5439e12c9cd3e855494407c780fdc4b6108997692917bfb9464226f101c4221c103727088b6d34f27bb60cb1d52c27b24dd948b2235bf3fa1383ba34c1bf166969f4f30136c171e503691522704884c27fd434245410da9c1073b0fee536e81b2a5c06d9f7c08d2f864cb488089df48a81e121391c83ca4356bd2f60ff7c06fe41b9ecf48d96fefcd305953e2cdc90159f29d9d7d4a4d90aea08c0435a37cd71e5ea1a09f88b74fb6003a9de2fa035a89265f6a97cc0335833ddddb2311a5a08f10a4c5e26d0a5e69b56d4af9182234b90760cb19f97efb947d227a7e4a8c441e00f99694459990a9a1eceb2e398d6846e944621ce20bca6910f78287327281c8beeded135a3b244d20c88c3801b931321a946ea0ec08b5a03c16cd0785e7594e4ee4a76876ef538a6d49696f93a744baf753f206261939ae3413e42f4d881ce7200851eb3cdf23c773f78058781f14a41160cce400ec12dd1f701e89621fca20511e81120da46a76c83b7f48e9ceed5db2263bf7299417ee253b3ba5a40f18899c5f32f80f0937721f29bb42d13425b3efef42000f28b730cd48d7ef9e43d53ca49c23f90b0fb6a7f7292f774eda85f2e0d4ecfeee2e7949348907341d8411f96419a5ac484191074f96916c04341271fc0e390294b7fc942c07059ec4040f6835913c7bf262886d28a4a16619d90e52857bdbe7e44612340a7e0e0e3ecdb7efefd15cd3bcd2c46208fbe79f4e67946ca5b002534fe13b754fdef9ee8442d373921ad2d4d46c4671f4bd3dd27b9fe62401fbbb44e3833d52fd146551e2f653f20e77d069be4b1347ce14b176460a9f0644c9049a8a3d22f7435ab1230386c97ab8bb47dc4bebb494ab21b63c2790443772a5c8d4dfa7708ed2a790ac87a42b29a5429e4306f292634fd69942504a239155b947bec83d68a483fb94ffdb7f400e2de5ba6908e4653ca4481d2c4c1e2885dce40251b38cbc5bd28c6465663463fbb4e247a694064e7890b7f9f07cf7e01e54cdc3f309650c492fd07a31e8463d6707241a0fa60f49ddde2767fb017235e75352cbf768c229854c1a89de2646ba47ea6e7f679f4486fcdd3de0465e14797524c9c45e24a7fb1829e50f48a667c44534987b13f0db3df210f624b54c61e53ef9fb6480c9a9fe94dcb56cf7fe43f2332080e77be434524a9c669268c1e6837e9b51868772ee24cc941145b37d8428339aeb9cf29ddbfb9f926525a34ed42656b8bf4340489ea9196572763ebd479398cd48eb53d28f74d38c2696b2c2148e3ca4a07287a11dececed52e26a7b4ab68270fb9418744a4938b239594651fd6ece534f8b03bb337260b669ea495b4e492166e487c351a2459d7b7b7b147252331a37b106f1ecde3d0a41681248e99041a570ec5e463c40c9f1876846b6f4d309c546e482923bb6bf4349986c9774c81ea9da197994945ac52c50187e2fdfa1b4c9e43ef137e92952f894f0a77c48462698945ccea957d2cca4d58964a491897b1f12694833532c43b9628aa1c82160e78764813436a5c828d34fb8510847c688f2aff7f7c810114d4924c048fbf748bfc21ba0ec3b757a4e0c8af4dcf694fcdc7b9f7e3a25b18638cf906085abf880d28f048d588a6697e253b2ace7486dec72a7641288512936bc47469b6601414a46bc392587ec608f3ceb7c1fda92c22d72b089ec347f44908c7a7ef880bc5a1a779e4f2950db7d80397df8906481ecc7f61eebc8030aff26334a85914d9b7e3a21e7e0de1e9a910aa3e413cdce83f31d9afa7b145b1e101db7f726a4b1260feed1ea10e474f75362731adb36b95d34848724b10f0f48641e502e871402bbefd46cff01653067e493e7a432b6d90fa1c531d2e9f788df7382792e2ec13e999207a4d01e50dc4e169054cd438a3c480de607f91ea54af738dd743025af8ed2aadb33320cc46f84e5848c1fb9f9d4e7842279c2969a3df89408bf4b4ed184d27b048da2c18c8221ea94864eca8c5288d0bd24890fc8752513442e187d49b33b810dd99b9102a17402e5fba1df88f8d3d914110c1260fb7be4bf93c9a0b624160f1edc7fb8379b60a4a4f01f5060462385b49081277e3ba7e8e38052dba44766a443811bd4164d352dc49c63696997f89b5408048d6c11e517c9938172a064c201ad24502c43468aa091a34c6129d9de4f3fbd4fd974f8498046ae38bd44cc710f9a639f3c4db2f5449fbd3d5a00a030f8c1c35d28ae9c4c0ab90a94b7dca7908e2250927a3205a448c818ee904ff7807508b9ad144b51d8b44b395662243257246bc4a550e5fb44aec93ea6fec1e43ccf49b791c8c066513445b340cdf676ee51f69482dffb13b0e5ee0ec5a10f49ea894fc866919a21f9a75510f2828803c831cf3f8500ee50d6e7210d7b9b9c2810845c5e5afb2026d8a7d5e01d9ad4dd7b8817ee918622ddb743ab8ae423938341734a3a9bf2457bd92ca7bf1f665035945d25b9279570401343ca8122bc83dd07149dcda69f7e4abd90f4a2d9f96c46a90ee2c8bd8c284b524f043927578af287fbf7b319c5aa07dce90e052994a223d9230f6fff218d940c10c92929db4fc9d2927430f752221c024d0e06b9e3fbf789430e24fd478a85d40bb127cfe9fdc9833d8aca69122985b04f9115a941445c342ed076871616a9d97d5abd22fd42be133d345252461823e527cf491950f0738fb99728433424bfe780d2c0c4e4940fa1a43662e729713c12ad19a69e9cbcbd87505c64ba0837ca47907526376ffa7087b205f7a84b316d140bed7f4a01145915d26fd40769679a94c94e764e667c779f5240d4ec530acdf629b3b04deba3442d242f1f66941421ed414a6b870cf4a7987a8a79499c493950a2873884bc7f82468a844480b2dff9a7e4d8a019e1408245d0681d8070cb60281fecd13f647b76a7c45714345033caf2d02204599fe97d122f222f890131c5f67d326c94fba6d962cf81a22d9a2beaef1e39853452f2ce114b12b45d52c453ca29ec82df285dfce0d319f9bda4df69a4e4e7932453da84b09c52ec4ab130cfc2a7942da38890d6c4691586e27af2596908c4c2a43c481ac9fd7d8839a524f33e4d03190dd26534048a120f60432865423e7d4679f25db82b079f528041f966ca1e930b425c4286923c3b72dd3fa5707b4619585ebed9c3022ad2c50f7791e33a205f8f464a7a8ce2843dfae61e05c0d42c3b274381b926a3c16c492a9a5203a459c9b61f50ffe7bb6846c9907bf7295f482688622752db648ceed34ac3a794679f51e66646212235a3ccd9c3872436db94d32282502fa44f89130e68c1f59cd69526930938e4d3693e9b7c4a398e8c2c047108c56f9373ca063ca02402ad191c504c07154d7a987c504a2d1fec111948dd10a17789e73f253b719fe0e632048a68669459a7393d2747709fa8489e313128f9ecf7b2fd87c8ec6316684d9f6c01343c0590c4e46412b23deaf9de2e053ce794732779a666a48949fb92b19d521c4f3349bcf9700661bdf780c2f2fbf00231590f682580dc1c8e3489dfc8f1247e234e2062521282021cca0053b387e49fdfcf3f25324cc148e4c890c4522a34a34520428f3cf53d4446073459f773f201ee7d4aba7e7f4a84a66898a6989222e4b21039581626a4e7c97c4db729f8a291eec0aba12892b276e7f7677b7be44acc801be5f5a60882289d42a6747f87981c8b0a449ae90e059b7b349318292987e914113a692412c08cb46506013cdfdd2336cf2892d8879ce6e4c3901349cb13b42041dc4b327df02969cbe9438ad248ab3dd89d0137cae63ca4bc303c0758c0090d92028c879493d921378fe469ef1cd028d7429a17f9a58c32a61466937a9dd07cdc27679b0c774e110d989c2cceec1cd2495a97f8ed80e66342e24dc3a5e1902b32211a5133d2282479942227fb4ab340a9407257281d437679b67b3f27bc79eac9c21192649d1f923aa46624f09440d8a565af7dcaca52da9e5c486a4634247d4406941238c46f33f20bc85d2115fd80f29ed39d7b0fc8bfa466e7d99456d3489e282742c4231f9634398579e79453fb94d651ce8951a819b985bb0f0f8819c90d23dcf22989f32e8552b4c6b04b934a01dc3966614a4e077879fb414ea1300588c46a7b3470f2a90e1e4c1f9061c821323b0fc9ab27b346793212fd7dfa723ba3a423394a9481a3f5494aaa0037f28f482e2906387f0013f49032b4a4844834284b433c7a8f022710843277bb073919824fcfa11c88f01414ef91bf41d94df214f7ce29eea76688ac88c96909986c19694b84c73b94f9a7e8fc01b9010ff27b0f20803431585c268736a3a89de212c28d9cfaed738ac3b39c7251e71328555aab244a527e9192954437523324a7649d27f769bd7697e4885c7d6ab6435c7a4e2ba3e439c002c2d9a6fc29597212380a2fc866efa153b224a49e485d91d7458c744efa86849b88979fef93e7b0479202baed52a2ed21454af425a5acf61f50b0fd90d8629b420d72f9660f685d1a6c4943a39c2365041fde87a73aa5650fb28504978ce97dca61502c8f39bd4fab37e41a92134e191c222fb57848fdd302c18442a3839c027aa8c1fc3e8565bb94ded825df866481107c483a93baff74774a4a63bac7b91ad2bc949d04797749bc68ea29d10127ee7e4e396fe2b7fc0113e4e18cd414b130591f0ab1f63fa504f1c37be40be5e487e694e927071f53bf4bee2f85700744768a60c8ca107929af427a8cb899268aa602b83db837bd4f069a720e0fc0bd0f490b939f42ff909f76ff0159764a5152334417e48a10a04fc9e525dc6802f6c892530aec53120f5ab438879521cb43e4a59ccaf9a72008399350af94ed789091845066f5fe14cde0433ea49c01750a570a298f833d3299d9f42179b70f681e0ec021a433295a24c6a5889b08724e867242f110a5bcceefcdc8ac517a8f713b9f7d3a233d067b4a4425ab47a248a6ed21c513bb0fc85325078a9a11235316764a3e27296b62f22919126234221e2d6d9e9378928f4acd485b4f2906226b40b128464ab10c65e4287c38a755b41929980338b4e7f768f2ef13d9cff7459592fdde2301a4688144f8d38cfc5840a3f4cd3e65c228914b9687a09145a2acf00e0d818c1899300a6678eaf74036b2654c54fa9c8cf81e49c56c4a2a82d2350f289d4dcd48123e255d4f8e2e162ac8ca90eedd219bf5905c4ed268946ee339dd254b7b9f924524ce648248f7929cdea3819383444ae9fea7fbf7d85dc9cf29334ff103214e3604512b669dd4121981292d2f92ade14e69e9eede3dca8e52304b0248dc032c41909c1cae87b4acc1ba774233fc608702768a9068ea0f486e1e22c592e77b145acd48d266e894649d66813cae7b14a429bf21f54a84b8774e7ee1a7146d52b3fb14ac93359a6def927d25ba51a49aed9368ec67b4744be68f660b23a5e0875280843825aaa9d37b94429aec5304b44bb12c7982a472396d42f95c3237a46cf728e541e24c9c4796e3fef68cd6271e509e95e2090c818c06bd4dd2f2298557d42969a4ec3e3971b37bfbbb14e9dd9be6fbe0de9c5207536216b232f09128b34cb851c445b95692f79c9c8f8780464101a962927a5a882335481122c580c426932919fb7b14bfed64c08d162f1eee4389670f91d2a12c26a673b2bd3b23ce25854f430734329a640029a2a0d74800295c2559a029a6a5e529d919f2280f801b79f7c41194a8263784b8977c498ada480dcec8d4d302c23d58426a46412cad7093f7798018607f42e111297ad2b1194d2ad119a9466a9693bb4b5e011923d251db14be9046a2e88f5c821d4aa8df27f69a40231187517e0f9d3e203f9b329fd4e93d326114105108464ee4fe39fcb72916b9c8e722730cf371402661f290a4624a94227bb14b590fcc297902d3fb24b8dbf727640df61f520285a27fe2104a59eeef91a7b4cb7e6fbe3fb93fcd288e24a120be2035bc4de24f7101290d5a9f20733a43a71411ccc855263b4b91201923a2310502a404661959d24f3fddcb98df2889b5479c976d532a94c87b9f3c601ac27d5250d3594642b2f7601f93759fa6989c36cacb51c044524fc9cb09c5ac9403d82335408e13394768464c41f11d61f4291212f7a93ff2df28d348decb040b07e43350339ac93c23ef8b5434312eb952248ac431dbe764430821cac53123d112124d3145e819f925dbfb340650968294873bf7899529c5c9f990fb14f150c7c48753f2daf67789349373321f5372c2493f93d1bc0fbb70b037c91fec5398f6e97dc49119c51614fe93873025d7edd33df2880e30527a299b92c9213120e78e2c020d8672ae94ab3927613ea07cd01e268b5430596bf24f281ca521ec3e2497975896ac25858694becbc9eba266b440bb438b1f08eec81aec538a98e84652f829c9e22ef12405d2c06d879c907b945adbded9a5009a92a5a4df48d56de7c4d1f7b13e46e6979a4db309a9011ae98c268f18897243dc8cacc67d3218f748f9035a762fa7a92317849025e540e244510d19d51d92c2fb2468d42d7b351412ee206571ce0b2ef7892329a74a7693560ac827b8b743ebd2d48c16a90ea6f0063fdd076ef7499c499c30b1f7ee9325a634d33e666187d648cf11f9519a8770cb49df501efd9cde22a332a3c4cf8c6d16450fe455430276a83f523a64c469bcdbb31d0ab067bbb46622898efd03e468295e38a079a2e09b5e20cbbdbd433a90f2e294e39d819148059301a359ff740af738a7c5205a5fa005655a0c9c5228913dc8006d3f23134eae19614f696ff2df88dff6c99e3e208543becaa73b94a2a266b4ea45be28cde9ee7d32f3fb537268298b3d256f904840fefb3ead1750b329450794be223147544aaa86accc8ca0911345d1f2cefea70ff640b707f748c6ef436472a2f1fe3e912c3ba02405053cf4bf070fb2dd1c024859891979c10fb7ef67a0db3dd237b42a4823a2b084523be44aec614e1fdc278ff53e9915920ee2b7c91eb9eec8fc4fc9bd2376d99bd2b20035db3f2717ea53f20676c81a939c3ea49112579027bf4b0b94f76986a690ac7c97567b1ed09cee3ca4340dc5d1b40c416cba9d13018877e9b5097408896236a59c06297c10ef210c30884761361184166d689910cd680d7197dc2ac20dfc46ae180d81048d16daee4d290540695a407b30dd231b4ef1109021dc2849319990caa435449a978c2cef016681bc0652af64dc29fa239121c54c74a354e13df205e8639aff4f215994679c91ff448692cc35a941a2db43fa16a24fd1c73e792b0f30f5484cd0ca64be4d1e3fd18df88086404b4b3427144e1edc3ba789a56694a9a6c881e2219a188c940842612d2d80d260eedd27e24fa7d0bdc4540f88ed29f43ec7d43f2490b4f23add26ed4c4a93d6c929ff4acdf629059b53584038130b0b23edc202d27029239fd388ef7df4fd5ff24b488de4cdb42e566d512d3f7af4d17159a6279f1c9fa5afd713fb79932ed64d9bceb3cb3c5dd5f9f62c3f2f96f94c1abe78fd795aafcbbc19a7e9eb3c4fe76dbb6a1eddbd9bbdcdc68be6ee326f8ba6babb6c2e9af4bcaad34555e7e92c6fb3a26c08cf05fd36cbdaeca347bff8a3699d676d3e7b724d78107710cb234e2074b7f7e1b73d246779fbde1ee9f60905eb0f3e85c8eb2b5f02f5bd1dfa9e56f6f6f6dfec3e78b477ffd1eebdf1c37be4bd3d7cf853d474bda27ede0fbabee24127aede7db3b3f3e8defea3fdfb630aef2880daffa98f888cf9924637cd17f9b2fda222f3f7e8a3a7f979b62e5b7c59cce8efbbabbaba2c6679dddcfda298d655539db7e32fb26576c16fdd5dd85f3fafabf5aab94b39494a0b92b521ae84d1a694f1c10179049496a5c8e33ea5691eee45811eafdb7955173fc83079775755594caf8f9ba6b858027a73f7c5ab2f5e6fffe48bd337db4fcf5e9c6ed30c6e5f529e8146dc5eaf80faad41d12bcb6c8157866196d594dfa6464d45e0f2ac69b3a640e4d85c376dbe781a997f4c02593f322c7be41b51aa919c10921fd2490f69c9f61e09fe43c494f6953782f8f16a45184a77f6dbe396be91f9f3b96367bcfb80ace6ee1eb8a324a468de8af302d0a8fd2d1108df8b62e137f150f159697fbcf3f0214d2958e9978c7e31f14bbe6c8b96f0f8c51fadea62392d5659790626222781340e055c14c5104fec106e135a08df9e51eef5534a1e7ffae01eb4449b2fb365cb6f3cd8a355774aec50aa08f67f975c58b291936d4afd4e673b14bbd0fa19de10d45ff38cc80ce733f02e31d82aafdb226f80cdac68566576fd42269dfa2816597995d5395ec8da35517cdd12f742707effdd318c95300d4943b12c4012c62acab75161b8f8591086d779ebf069eee6349f7bfb7b94b5a30086b2b8847433a551bf179eef21b4047f59b5afd10511f57befdf092d5fd26a26b984b46042912a7e9bdea30cc8fd8ce6935ceee9f421c4ebbde1ee53a27fb24b113799f03d5a53255f7167879c67ca5413937dba4fde3366f4bde1deff743ac9c8f725c78ebcc6dd7b9465a4009a22015a6b9b525e8bec115c87f7864b294f5a6a864b728e881d8936ca8f9d6fefe6b45cb5f7f001bcd6af0337a3640ea5413fa5d52b8abbef931f847f28afbc931f50869752c0ec86bd375c4afd92674041c46e4e9ecfa70f29a3b937238fe1001c481ece946cfdd7814be9607a955602eeed928abbbf47f1074d20058b148d6594709cee9ec34b7a6fb89497a2e88bd257e42e91d97f486b187bf0491eee64933df2ef485cbed6bc1d501c43ce1e052114ac915ea5908f62920794d7260768428effee74fad1f749756435299a960043f7906f525de5b3e76a4f9a5d7c7899956b12d4ef91d3b66c6bfaa3c9d7d98a90829959377bfad755deb4b605fdbdacea76ee7f8006fc0bde53f39491d743df179936f43f4233fa7b4a43a3a52afb3dc3cdd7d099f4977e5e2c670cefa7b355b6d417df921fe4bdb77ecbb6917ed3cf2c2efc8b6007de38afb325ad684923fa9b5fcbce6bb237dc377d7491d744f16bf327fdbccaae018afe68ae8af607795d66cb197dcedfafb3dcfccac0d072800040c07e661bd387d4399141ff00b29604dc2a2000bea6df9900fc2dfdb17eab9fd2473a50fe4afb651a4ceaec07e434e263fa0bed0d58a189f9867f0a45d0883e5182e02f05481fd298892cf88cfe201ab86f3c1ae9d7d23563c17d7217e60f6dc3bf3b20f20a37c498e813b45b37d01bf860dd34e525fdde1047e784bd794ffee6f7e8af8bb29af0c73f5d54dc0180787f9af7229efc49b598146492e9af26adcec9852fdb625592070f1348e63c6dab94dc84097d049b9d8ad14653cfaca7d6aea7f93bf22a1a0247fd9350d27cf7ddb65b3ad6fa8ae758dfdfdeb9f7666fe7d1dedea3bd07634a44ef52620a8e9960f55ed0f5150f3aa9ad4fdfec92cf77ffd1bd7b638a9e28e4bd4fbe164dc5ff87dcf6d7a727dbc78bd7c5c557ab199c6bb092ba6db70642afa8c31e83e6b9ea8144877ebaefd0f2bc80f43fabbe72387f3b7b7b14d7117710d36ff295f3c98cd66a68b16fff9cb2d9fbb430be4deba7b40c4f4b9bfbf71f64f7f77711c6135713c3f31b3f9bbe325981f5bbec0724494d3e5dd784f12a9bbe85e4cdf255595d1759d690c70c7b2ab3468ca81e2ae3166599281ffe103ce607f7f6c819a4a5cf1df2b0285f4148ff6c7bccefe30b806d45c14614e34b0c88a6a8abff641aa0ff8e314b5f5434d8aa7e8e693bbe2074492dcee4abd73a81de77d5323dcbb2d729cd6eb526850241236c4984446654e3b1b8dc528de92b9e1a23979c94e4ee23d2933bf7c6bb9436dfd9a790d16abcf781aeaf78d029c17c0f01e9fd4f1fed930adedba5b77649c8fe3fa8245f1f6fffe417db27f40119c7edcb5d0815c91b30bf35247ac5d79431909eba74fedbcfb5aef4a7f1d3f17dca8d73866ab3aafc94f2a8f7f7269429a66c3e658a7729b74b0bc5048dd62d67b39d8c742975f9ff2e5509ad23d346eca8aa89718b324e941b7f08aa7297f2fbf70e68ed257b48cbc753f8abff6f5295ea41fe286c325182f9937e527c0050f4871712d0e7fc3d850ce65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98f9f5f61938446aeadfccd6de92f1312a1bdf7a76baeb1d4cf9947304e9fd1fa47369bb162c84a02cfab208fba4b26d90f48ed198d37ad96e7c505a14f024dbc2256455d033628b7b4f7fa4ad7deef3e7cb4b3f7e8deee78e7d3bdddfdfb07df9437414b7492dedea50cf783f1c31d4a23ed50a69d68ffff796f0276874c1230bf35247a65933701909e37217ac1b16ee853e854f2fc600a6ee14ed857a29e847edb75229437689d64ffe1fd7b0fc98b2024492869d6d8e9781f04c2f7a258f84d1c2a1d46fa94b2b2b4e04f8cb4d9a19951b272f701e515f70971724fa6b4fe496bc1db07fb9f524c48cbf7d373a8d9ff973834978b060e0d7c4ae11c9208752018b728ef4605e287e0d0ecd1a2f8c1fd7b0f76ee1f3cfc74f62912cbff6f72686036d63fecd8ef27bf78ed697ac298b02509eecbeb2df5a9bee2f4a91ffbd1cae50e89d7de0e898155bdef035d5ff1a0b3bc939021683818efdda799b847d0897effdfd4d6af5f7bca1562451207dc6f0d8b5ee9e9eb1e504f6383ebd4fb0b95b5afd5788e300d3f9b0a3398cb07c4290ff70f0e3ea5b9dcac30efdddf99eece1ed21ae2a7b4dab5fff0de6cfbe05ef6603b7b90df9fd014653bbb53eaf3ff5d0a136653a68e98521514e316659f284ffe1014e6fd4f677bfbf777f627f71eeedcdfbfc7aeecff8b14a6ba193f8a004dc063fea49f14ea0014fde14537f4397f4fd18ff99581a1e500018080fdcc36a60fa9732283fe01642d09b85540007c4dbf3301f85bfae34711a04680f49709f9d0defbd335ffe14780301ace2ff87f730448cb2a0f0f1eeedda765319a557110de07babee2a0fb8efbfece78efe1c10e7b2c44fbff1ff814b03c649480fbad61d12b9b7d0a00f57c0aab301c0787be85ce284f1366e2166e857d25ea51e8b75d67425864efe1f860778f164f99457ce7e37d1008df8b62e13771a8f8fc74ef60fcf0e0fe1e7929c44f9bfd9afb93f37b0f670ff7b6f3fbf7ef11fb524838d9d97db0fd603f3b7fb0bfff69763f7f487dfe90fc9a40b045b9acb34553902f03fd262c43c2a0be03e31365dba82cfc107c994f7767d9fe8383c934cff7771fecdd27a47fb67d9965d5be461744ceefbd7f27d964ef01b15f461c793fdb7e90d3a2c6748ffcda030a5eefed65b3e9740ab67c6fb8a42af3ecfede03e2abfd7bdb0fa67b9f6eef51767ffbfcc1eefe6c329b65f739d5ffde703f9d7c3abb77fee0def6e47cef3e2d55cf76b627b3fdfd6d7212ee7fba3bd99b4d77c07def0d778758fadee4fc60fb60f7d3fbdbb3d9c1a7dba4cacfb7771feeed5162e4d3f38733f8f7ef0df7c183ec80049ce43c9f3cdcbe373bd8dbbe77402273efe1a79f927cd18ac7c1d7a2c3747a6f677a2fa775a887bb44871d8a4c764956b77726fbbbfb3971c6bd1d7849ef0d77e7c1a7e7b3073362bafdfd87db9feeef10e6f7882c7bfb937cf629854a9383afc70ffbd3ece0606f67fbd3d98474e07e7e4ef4bdffe9f6e4feeec3c9ece1ecfebd83af356ffb9387f9dec36c7ffbdef97eb63dcd77a7dbb3fb93fbdb647b673b7bf77667f73f85d9786fb8d3fbd3ddddbd7dd2ab0734faf37d22ed837b1312be7bb3d9ecfede414693fa75e01e9054e5bb24129f4e7262315a3f247d4b44de7930b9f7e0600752f7b5e6ed606f963df894e4826463b63d7bb07fb07d6f46e49e4c1f9edf3fcfee4d0eee7d2dfa3ec81ece0e0ef283edecde43e2b3d943e2b873b214f4cb0e598bdde9a75384faef0ff7d3030aa827144f9f1f4c88be64096707f7ef6f3f38dfd9bffff0e0dec1bdf39daf03f7d34f69ce27240d7be7a439cff749694e76b31d92e37ce7209b4ec9a44129bf37dc7bd9dec39d7b44dae90199c89d5d827bf029c9f1ec1ea9fb87d3f3ecd37bc8f4bd37dc9c7c82e97d4275fae9ee0129b5fd29e9495212fb7b07f70f76ee4df60ef2afc567fbf9040bd30f29a34bffec66c4710f73f81c7bf9fd9d87d32951f86bf1d9f90151786797e8fbf0018871906f1f9cef7fba7deffeee419ee5fb0ff71ece3efa3e99ea1f45d882946087399468521bd1dffc5ac6f124f74d1f694069fea49f144a0214fde1458ff4397f4fd1a5f99581a1e500018080fdcc36a60fa9732283fe01642d09b85540007c4dbf3301f85bfae34711f6cf56847dfc030a9a5f92339c92e3599d70982b413387d5088efedf1c3befeebfd9dba3142ba2db4f292cda7f40d108cd9704c2ef035d5f09a0efed21d6b97fffd1fe2ead9eee7cfae943e470890bff3f173b7fb1fdd5f1f617afcf28c0058769dc746b28f44a103577c079f1328bade3c59f8358d9b2c4bdfdf1bd4fef113c5af2261c49ca68b238a07d1f04c2f7a258f84d02541cffec50d87eb07b6f975021b1dc142b3ff8940cdc7d0a0ac8029e6f5380bcbffd706f4a8eec83ddfbf726d9c1bd87ecb3fcd062654aab912c735acd08b4c4cc142e430f0baf10ff6b78ca28453935cafe3f84709982b5ec0191fe419e3f38201f9090fed90e977fe4982852821d482246581bd1dffc9a9861ee9b3e523b6cfea49f6481018afef08c2e7dcedf935136bf3230b41c200010b09fd9c6f421754e64d03f80ac2501b70a0880afe97726007f4b7ffcfc724cf0c19a97f50937f132d02bbc130740fe6600f497714f00c4fbd334bf9d9302a543be06b40e96018c3e4aa190d84df93c5fe69759ca297fea85448f66b56f736ee90ae82b9e2bb0cbaafcdea3fbfb94f91cefed1edc7fb047aa9ce82f5ec3fb40d7573ce894f8f8f4cdeefd47bb04fd607c6fe7de0e6917321444f0ffcf391a2fb7a95df594e78abc030804190e607e6b48f44ae06c44407a0e07188b193c74357c9bccb38309f85935f7fe2c3e2077f1e0e0c12e39a3c4e030f1a454864cec9adce9b469e660f3395955a492842834d96ac5fedf6755f71fec53def653023cd9cff6eecf08e91f59553127ee7b866b4d8a7ece0a90fe64a3a22fb251d1efe9cf1f5955f9943ed281f257da2fd3c0b353f417da1bb04213f30dff148aa0117da204c15f0a903ea4311359f019fd413470df7834d2afa56bc682fbe42ecc1fda867f7740e4156e8831d12768d7b7aa623cdd7bf237bf477f599b6bcc2880787f9af72256f5cdbc6852165e92964b9854d23a4d7a35cf09238ae997d729af9a53c4dfa414e473e04fd24336b669aeaa7ab65d2dcb6b7a8d9a53e422329792754a5fbffef6387d9de7e9bc0d720017ed5d5e94677b7ecd4d1734c964c739674068932c139b88be569bcbaafa9686545ff10ce9fef6deee9bbddd477b0f1eed1d8c4973ecd1f3b361a6ef3f1c93dda024e50129789ac1ffaf99694c3e4ff7cbab19995436391f68a66320ff5f649269c628d9bd77ef53cc184c32d18df83816814f1e4c685d67f7e1f6f9012d2deeefdda7787a428b60e7b383ece0d3c9deeec31d30c8cf65042eccf9fbdffbff4804fe70baffe9f4fcd3fce0de2c9f4d769935fe5fe42bacdf92f66705ab76772fa6414faac5a458cafb88421624dfc58aa2131e32cd5d376091494253337da44c3560a14005010b0ded672160d9d9dea1a5937b6f761f3eba47cc7f7ffcf0e1ce83fd4f1f7e639a90f4ec3d64b6f60e1edddb1bdfbf776f87f3ae44b2ffcf694293fedebedcb907be211903d6b78642aff85ab00bce0b54aca764acf4662d749fa425a76c15e91e5a20a615685ab83be0b99ad222e96e9eed92ee207c89e37eceb510b8442843b3ad52cf2845e7253ad93f042db4f720bbf7e0413edbdbfbf4e1fd83294ccbff9bb490b205f95c12a3885bf8a3880528916b0e50f487e78dd3e7fc3d79ebe65706869603040002f633db983ea4ce890cfa0790b524e0560101f035fdce04e06fe98f1f452ce63df99bdfa3bf3e2062f9ff8ebd252db0bfbd7bffcdceeea3dd4f1feded8f1feeedefeffe2c451ef7c6f7f71e1eecec90352792fd7fdade62b0644d80f5ada1d02b43f616e03c7b2b4265188c18930ddeff3b82913d0a1ff7770f1e9a6084c839687aebfc17ad0b8a9b91217c9b4b204dfcee85e194337c48fd0aad68fed5e2fdbfcf024f1f9cdfdfcb770ece77a7fbfbb30cf4fcd9b6c0cbaa7d8d2e88b0dffb3ed1e84706599012ec40a19e9ce035313fdc377da4f6c7fc493fc9f20014fde1191bfa9cbf2763647e65606839400020603fb38de943ea9cc8a07f00594b026e1510005fd3ef4c00fe96fef8914136efc9dffc1efdf50106b99b4224a8a4b0524227658348ad607c390944f94332da9a46bc9a17d3f97b2413bfa29604887e678547bd72e290ad7a4efd654b0ba819a76fc8f22f27a4f8df8ed2599592c0075d19b09ddefedf98b27c38de3ff8f4de83879ffe6c380ef7ee8f2963f9f0c1ff4757169fe6cb6be62c4d2fc2e07d98ef1083f8ff221f81e66b778702fd837d9a","2ff8084435e2de58aae09ca83ecd3e3dd8ce277b845636a354414ee03efd74efe0dea7b37be7fbf7c11e3fa454c1e5e272d134e745ddb4646ddbeb36bb704a835c95fb0458a686388ebfa9fe5fe8aadccb1f4e3e9deeeddfcb26e7d9c31c4af667db55216a11057fe49b28762089d8616d447ff36b6289b96ffa484db1f9937e92110628fac3b3bbf4397f4f76d9fccac0d072800040c07e661bd387d4399141ff00b29604dc2a2000bea6df9900fc2dfdf1f3d737b1de8738250e80fccd00e82fe38c0088f7a7697e0bdf644a125334b4c0497e0469de9c520034c094552ea50558e2e149b4e9555196267590d1afbb4d4bbe03e92df25d46f47ff82f453ba7d7539279d2c0e7446af49a926223e448628919c460a879675b714b9badaf78367b6f7be7fe9bdd8347fbfb8f761f8c7776eeef3e7c403680a68d917c2fe8fa8a07ddb330fbf7c69f7ebaf360f73e412782fe7fc923f8c92f3031cf60635e62ae28fcdf855d5183756b40f48a7a044310c9afe477a9097367206aff2f7217f6f728ebb4b77f709b8cc2c9ebd32fd32734b2b7e9777ff2694a89fd6a4d336fbd78ea5028450cc03255ddd24077e7ff366ec6ade7df21d3dc85efc6b87b287f6df37c1b2c093e05163693f0fe9d7cf1fad99beda7af5f9d6e9fbdfe72fbecf80b82f8de401e4ef37bf73e7d986ddfdfbf3fd99e9e4fb2ede93d72f9ee7d7a6f777f676772fffe1e18eabde112255fe7e5f9bc62aebedbac2756b7922794e5c4bed93e753a215573ff21116a6f97bccbf3877b3bf974767f6f0a55f3de9dde7f787fb6b37330d9dea1652e22fbf9c17676bef3707beffefefedecef9ecc1fd07bb5f07ee4959ad672f4f40f0d7fe40be0eac4ff7a7b30793870fb6ef1fe43bdb94b3bab77d706f6fb27dfffea7f71f3cb8f7703223cf90d24aa131a2d93d3e7e7afae2f3df73617b99560b4260c8583c38dfbdffe061f6e9f6f4d3fd836d723a77b7b3e96ebebd33bd47cbb9b3d9c3c901dc0b7dc5a8f39d6d9a86dd0758e7dddf7d74efd3f1bd9d83bd4f3f7dd03516b784aeaf18e8a45feed1ffdeecd13aefa78f7676c60f09f87d9822b2073f0bc6e2366218051a53169e8ebfeb341dd38f1ad160bfbea58880fb25dfff","25ff0f72830cb6fb640300"], [ + 'Cache-Control', + 'no-cache', + 'Pragma', + 'no-cache', + 'Transfer-Encoding', + 'chunked', + 'Content-Type', + 'application/json; charset=utf-8', + 'Content-Encoding', + 'gzip', + 'Expires', + '-1', + 'Vary', + 'Accept-Encoding', + 'Strict-Transport-Security', + 'max-age=31536000; includeSubDomains', + 'Server', + 'Kestrel', + 'x-ms-ratelimit-remaining-subscription-reads', + '11999', + 'x-ms-request-id', + '51f0a42b-309b-4a81-965a-9371c1cb7920', + 'x-ms-correlation-request-id', + '51f0a42b-309b-4a81-965a-9371c1cb7920', + 'x-ms-routing-request-id', + 'SOUTHEASTASIA:20211018T025537Z:51f0a42b-309b-4a81-965a-9371c1cb7920', + 'X-Content-Type-Options', + 'nosniff', + 'Date', + 'Mon, 18 Oct 2021 02:55:37 GMT' +]); diff --git a/sdk/policy/arm-policy/review/arm-policy.api.md b/sdk/policy/arm-policy/review/arm-policy.api.md index 9f161acae579..7dc6f4d35ed2 100644 --- a/sdk/policy/arm-policy/review/arm-policy.api.md +++ b/sdk/policy/arm-policy/review/arm-policy.api.md @@ -98,7 +98,6 @@ export interface DataPolicyManifestListResult { export interface DataPolicyManifests { getByPolicyMode(policyMode: string, options?: DataPolicyManifestsGetByPolicyModeOptionalParams): Promise; list(options?: DataPolicyManifestsListOptionalParams): PagedAsyncIterableIterator; - listNext(nextLink: string, options?: DataPolicyManifestsListNextOptionalParams): PagedAsyncIterableIterator; } // @public @@ -108,14 +107,6 @@ export interface DataPolicyManifestsGetByPolicyModeOptionalParams extends coreCl // @public export type DataPolicyManifestsGetByPolicyModeResponse = DataPolicyManifest; -// @public -export interface DataPolicyManifestsListNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; -} - -// @public -export type DataPolicyManifestsListNextNextResponse = DataPolicyManifestListResult; - // @public export interface DataPolicyManifestsListNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -158,6 +149,9 @@ export interface Identity { readonly principalId?: string; readonly tenantId?: string; type?: ResourceIdentityType; + userAssignedIdentities?: { + [propertyName: string]: UserAssignedIdentitiesValue; + }; } // @public @@ -280,6 +274,7 @@ export interface PolicyAssignment { }; policyDefinitionId?: string; readonly scope?: string; + readonly systemData?: SystemData; readonly type?: string; } @@ -299,12 +294,10 @@ export interface PolicyAssignments { getById(policyAssignmentId: string, options?: PolicyAssignmentsGetByIdOptionalParams): Promise; list(options?: PolicyAssignmentsListOptionalParams): PagedAsyncIterableIterator; listForManagementGroup(managementGroupId: string, options?: PolicyAssignmentsListForManagementGroupOptionalParams): PagedAsyncIterableIterator; - listForManagementGroupNext(managementGroupId: string, nextLink: string, options?: PolicyAssignmentsListForManagementGroupNextOptionalParams): PagedAsyncIterableIterator; listForResource(resourceGroupName: string, resourceProviderNamespace: string, parentResourcePath: string, resourceType: string, resourceName: string, options?: PolicyAssignmentsListForResourceOptionalParams): PagedAsyncIterableIterator; listForResourceGroup(resourceGroupName: string, options?: PolicyAssignmentsListForResourceGroupOptionalParams): PagedAsyncIterableIterator; - listForResourceGroupNext(resourceGroupName: string, nextLink: string, options?: PolicyAssignmentsListForResourceGroupNextOptionalParams): PagedAsyncIterableIterator; - listForResourceNext(resourceGroupName: string, resourceProviderNamespace: string, parentResourcePath: string, resourceType: string, resourceName: string, nextLink: string, options?: PolicyAssignmentsListForResourceNextOptionalParams): PagedAsyncIterableIterator; - listNext(nextLink: string, options?: PolicyAssignmentsListNextOptionalParams): PagedAsyncIterableIterator; + update(scope: string, policyAssignmentName: string, parameters: PolicyAssignmentUpdate, options?: PolicyAssignmentsUpdateOptionalParams): Promise; + updateById(policyAssignmentId: string, parameters: PolicyAssignmentUpdate, options?: PolicyAssignmentsUpdateByIdOptionalParams): Promise; } // @public @@ -349,15 +342,6 @@ export interface PolicyAssignmentsGetOptionalParams extends coreClient.Operation // @public export type PolicyAssignmentsGetResponse = PolicyAssignment; -// @public -export interface PolicyAssignmentsListForManagementGroupNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicyAssignmentsListForManagementGroupNextNextResponse = PolicyAssignmentListResult; - // @public export interface PolicyAssignmentsListForManagementGroupNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -376,15 +360,6 @@ export interface PolicyAssignmentsListForManagementGroupOptionalParams extends c // @public export type PolicyAssignmentsListForManagementGroupResponse = PolicyAssignmentListResult; -// @public -export interface PolicyAssignmentsListForResourceGroupNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicyAssignmentsListForResourceGroupNextNextResponse = PolicyAssignmentListResult; - // @public export interface PolicyAssignmentsListForResourceGroupNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -404,58 +379,60 @@ export interface PolicyAssignmentsListForResourceGroupOptionalParams extends cor export type PolicyAssignmentsListForResourceGroupResponse = PolicyAssignmentListResult; // @public -export interface PolicyAssignmentsListForResourceNextNextOptionalParams extends coreClient.OperationOptions { +export interface PolicyAssignmentsListForResourceNextOptionalParams extends coreClient.OperationOptions { filter?: string; top?: number; } // @public -export type PolicyAssignmentsListForResourceNextNextResponse = PolicyAssignmentListResult; +export type PolicyAssignmentsListForResourceNextResponse = PolicyAssignmentListResult; // @public -export interface PolicyAssignmentsListForResourceNextOptionalParams extends coreClient.OperationOptions { +export interface PolicyAssignmentsListForResourceOptionalParams extends coreClient.OperationOptions { filter?: string; top?: number; } // @public -export type PolicyAssignmentsListForResourceNextResponse = PolicyAssignmentListResult; +export type PolicyAssignmentsListForResourceResponse = PolicyAssignmentListResult; // @public -export interface PolicyAssignmentsListForResourceOptionalParams extends coreClient.OperationOptions { +export interface PolicyAssignmentsListNextOptionalParams extends coreClient.OperationOptions { filter?: string; top?: number; } // @public -export type PolicyAssignmentsListForResourceResponse = PolicyAssignmentListResult; +export type PolicyAssignmentsListNextResponse = PolicyAssignmentListResult; // @public -export interface PolicyAssignmentsListNextNextOptionalParams extends coreClient.OperationOptions { +export interface PolicyAssignmentsListOptionalParams extends coreClient.OperationOptions { filter?: string; top?: number; } // @public -export type PolicyAssignmentsListNextNextResponse = PolicyAssignmentListResult; +export type PolicyAssignmentsListResponse = PolicyAssignmentListResult; // @public -export interface PolicyAssignmentsListNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; +export interface PolicyAssignmentsUpdateByIdOptionalParams extends coreClient.OperationOptions { } // @public -export type PolicyAssignmentsListNextResponse = PolicyAssignmentListResult; +export type PolicyAssignmentsUpdateByIdResponse = PolicyAssignment; // @public -export interface PolicyAssignmentsListOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; +export interface PolicyAssignmentsUpdateOptionalParams extends coreClient.OperationOptions { } // @public -export type PolicyAssignmentsListResponse = PolicyAssignmentListResult; +export type PolicyAssignmentsUpdateResponse = PolicyAssignment; + +// @public (undocumented) +export interface PolicyAssignmentUpdate { + identity?: Identity; + location?: string; +} // @public (undocumented) export class PolicyClient extends PolicyClientContext { @@ -500,6 +477,7 @@ export interface PolicyDefinition { }; policyRule?: Record; policyType?: PolicyType; + readonly systemData?: SystemData; readonly type?: string; } @@ -539,10 +517,7 @@ export interface PolicyDefinitions { getBuiltIn(policyDefinitionName: string, options?: PolicyDefinitionsGetBuiltInOptionalParams): Promise; list(options?: PolicyDefinitionsListOptionalParams): PagedAsyncIterableIterator; listBuiltIn(options?: PolicyDefinitionsListBuiltInOptionalParams): PagedAsyncIterableIterator; - listBuiltInNext(nextLink: string, options?: PolicyDefinitionsListBuiltInNextOptionalParams): PagedAsyncIterableIterator; listByManagementGroup(managementGroupId: string, options?: PolicyDefinitionsListByManagementGroupOptionalParams): PagedAsyncIterableIterator; - listByManagementGroupNext(managementGroupId: string, nextLink: string, options?: PolicyDefinitionsListByManagementGroupNextOptionalParams): PagedAsyncIterableIterator; - listNext(nextLink: string, options?: PolicyDefinitionsListNextOptionalParams): PagedAsyncIterableIterator; } // @public @@ -588,15 +563,6 @@ export interface PolicyDefinitionsGetOptionalParams extends coreClient.Operation // @public export type PolicyDefinitionsGetResponse = PolicyDefinition; -// @public -export interface PolicyDefinitionsListBuiltInNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicyDefinitionsListBuiltInNextNextResponse = PolicyDefinitionListResult; - // @public export interface PolicyDefinitionsListBuiltInNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -615,15 +581,6 @@ export interface PolicyDefinitionsListBuiltInOptionalParams extends coreClient.O // @public export type PolicyDefinitionsListBuiltInResponse = PolicyDefinitionListResult; -// @public -export interface PolicyDefinitionsListByManagementGroupNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicyDefinitionsListByManagementGroupNextNextResponse = PolicyDefinitionListResult; - // @public export interface PolicyDefinitionsListByManagementGroupNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -642,15 +599,6 @@ export interface PolicyDefinitionsListByManagementGroupOptionalParams extends co // @public export type PolicyDefinitionsListByManagementGroupResponse = PolicyDefinitionListResult; -// @public -export interface PolicyDefinitionsListNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicyDefinitionsListNextNextResponse = PolicyDefinitionListResult; - // @public export interface PolicyDefinitionsListNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -697,12 +645,8 @@ export interface PolicyExemptions { get(scope: string, policyExemptionName: string, options?: PolicyExemptionsGetOptionalParams): Promise; list(options?: PolicyExemptionsListOptionalParams): PagedAsyncIterableIterator; listForManagementGroup(managementGroupId: string, options?: PolicyExemptionsListForManagementGroupOptionalParams): PagedAsyncIterableIterator; - listForManagementGroupNext(managementGroupId: string, nextLink: string, options?: PolicyExemptionsListForManagementGroupNextOptionalParams): PagedAsyncIterableIterator; listForResource(resourceGroupName: string, resourceProviderNamespace: string, parentResourcePath: string, resourceType: string, resourceName: string, options?: PolicyExemptionsListForResourceOptionalParams): PagedAsyncIterableIterator; listForResourceGroup(resourceGroupName: string, options?: PolicyExemptionsListForResourceGroupOptionalParams): PagedAsyncIterableIterator; - listForResourceGroupNext(resourceGroupName: string, nextLink: string, options?: PolicyExemptionsListForResourceGroupNextOptionalParams): PagedAsyncIterableIterator; - listForResourceNext(resourceGroupName: string, resourceProviderNamespace: string, parentResourcePath: string, resourceType: string, resourceName: string, nextLink: string, options?: PolicyExemptionsListForResourceNextOptionalParams): PagedAsyncIterableIterator; - listNext(nextLink: string, options?: PolicyExemptionsListNextOptionalParams): PagedAsyncIterableIterator; } // @public @@ -723,14 +667,6 @@ export interface PolicyExemptionsGetOptionalParams extends coreClient.OperationO // @public export type PolicyExemptionsGetResponse = PolicyExemption; -// @public -export interface PolicyExemptionsListForManagementGroupNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; -} - -// @public -export type PolicyExemptionsListForManagementGroupNextNextResponse = PolicyExemptionListResult; - // @public export interface PolicyExemptionsListForManagementGroupNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -747,14 +683,6 @@ export interface PolicyExemptionsListForManagementGroupOptionalParams extends co // @public export type PolicyExemptionsListForManagementGroupResponse = PolicyExemptionListResult; -// @public -export interface PolicyExemptionsListForResourceGroupNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; -} - -// @public -export type PolicyExemptionsListForResourceGroupNextNextResponse = PolicyExemptionListResult; - // @public export interface PolicyExemptionsListForResourceGroupNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -771,14 +699,6 @@ export interface PolicyExemptionsListForResourceGroupOptionalParams extends core // @public export type PolicyExemptionsListForResourceGroupResponse = PolicyExemptionListResult; -// @public -export interface PolicyExemptionsListForResourceNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; -} - -// @public -export type PolicyExemptionsListForResourceNextNextResponse = PolicyExemptionListResult; - // @public export interface PolicyExemptionsListForResourceNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -795,14 +715,6 @@ export interface PolicyExemptionsListForResourceOptionalParams extends coreClien // @public export type PolicyExemptionsListForResourceResponse = PolicyExemptionListResult; -// @public -export interface PolicyExemptionsListNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; -} - -// @public -export type PolicyExemptionsListNextNextResponse = PolicyExemptionListResult; - // @public export interface PolicyExemptionsListNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -832,6 +744,7 @@ export interface PolicySetDefinition { policyDefinitionGroups?: PolicyDefinitionGroup[]; policyDefinitions?: PolicyDefinitionReference[]; policyType?: PolicyType; + readonly systemData?: SystemData; readonly type?: string; } @@ -852,10 +765,7 @@ export interface PolicySetDefinitions { getBuiltIn(policySetDefinitionName: string, options?: PolicySetDefinitionsGetBuiltInOptionalParams): Promise; list(options?: PolicySetDefinitionsListOptionalParams): PagedAsyncIterableIterator; listBuiltIn(options?: PolicySetDefinitionsListBuiltInOptionalParams): PagedAsyncIterableIterator; - listBuiltInNext(nextLink: string, options?: PolicySetDefinitionsListBuiltInNextOptionalParams): PagedAsyncIterableIterator; listByManagementGroup(managementGroupId: string, options?: PolicySetDefinitionsListByManagementGroupOptionalParams): PagedAsyncIterableIterator; - listByManagementGroupNext(managementGroupId: string, nextLink: string, options?: PolicySetDefinitionsListByManagementGroupNextOptionalParams): PagedAsyncIterableIterator; - listNext(nextLink: string, options?: PolicySetDefinitionsListNextOptionalParams): PagedAsyncIterableIterator; } // @public @@ -901,15 +811,6 @@ export interface PolicySetDefinitionsGetOptionalParams extends coreClient.Operat // @public export type PolicySetDefinitionsGetResponse = PolicySetDefinition; -// @public -export interface PolicySetDefinitionsListBuiltInNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicySetDefinitionsListBuiltInNextNextResponse = PolicySetDefinitionListResult; - // @public export interface PolicySetDefinitionsListBuiltInNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -928,15 +829,6 @@ export interface PolicySetDefinitionsListBuiltInOptionalParams extends coreClien // @public export type PolicySetDefinitionsListBuiltInResponse = PolicySetDefinitionListResult; -// @public -export interface PolicySetDefinitionsListByManagementGroupNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicySetDefinitionsListByManagementGroupNextNextResponse = PolicySetDefinitionListResult; - // @public export interface PolicySetDefinitionsListByManagementGroupNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -955,15 +847,6 @@ export interface PolicySetDefinitionsListByManagementGroupOptionalParams extends // @public export type PolicySetDefinitionsListByManagementGroupResponse = PolicySetDefinitionListResult; -// @public -export interface PolicySetDefinitionsListNextNextOptionalParams extends coreClient.OperationOptions { - filter?: string; - top?: number; -} - -// @public -export type PolicySetDefinitionsListNextNextResponse = PolicySetDefinitionListResult; - // @public export interface PolicySetDefinitionsListNextOptionalParams extends coreClient.OperationOptions { filter?: string; @@ -986,7 +869,7 @@ export type PolicySetDefinitionsListResponse = PolicySetDefinitionListResult; export type PolicyType = string; // @public -export type ResourceIdentityType = "SystemAssigned" | "None"; +export type ResourceIdentityType = "SystemAssigned" | "UserAssigned" | "None"; // @public export interface ResourceTypeAliases { @@ -1004,6 +887,12 @@ export interface SystemData { lastModifiedByType?: CreatedByType; } +// @public (undocumented) +export interface UserAssignedIdentitiesValue { + readonly clientId?: string; + readonly principalId?: string; +} + // (No @packageDocumentation comment for this package) diff --git a/sdk/policy/arm-policy/src/models/index.ts b/sdk/policy/arm-policy/src/models/index.ts index 9e993435a623..98289b0fe018 100644 --- a/sdk/policy/arm-policy/src/models/index.ts +++ b/sdk/policy/arm-policy/src/models/index.ts @@ -206,6 +206,11 @@ export interface PolicyAssignment { location?: string; /** The managed identity associated with the policy assignment. */ identity?: Identity; + /** + * The system metadata relating to this resource. + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly systemData?: SystemData; /** The display name of the policy assignment. */ displayName?: string; /** The ID of the policy definition or policy set definition being assigned. */ @@ -243,20 +248,60 @@ export interface NonComplianceMessage { policyDefinitionReferenceId?: string; } -/** Identity for the resource. */ +/** Identity for the resource. Policy assignments support a maximum of one identity. That is either a system assigned identity or a single user assigned identity. */ export interface Identity { /** - * The principal ID of the resource identity. + * The principal ID of the resource identity. This property will only be provided for a system assigned identity * NOTE: This property will not be serialized. It can only be populated by the server. */ readonly principalId?: string; /** - * The tenant ID of the resource identity. + * The tenant ID of the resource identity. This property will only be provided for a system assigned identity * NOTE: This property will not be serialized. It can only be populated by the server. */ readonly tenantId?: string; - /** The identity type. This is the only required field when adding a system assigned identity to a resource. */ + /** The identity type. This is the only required field when adding a system or user assigned identity to a resource. */ type?: ResourceIdentityType; + /** The user identity associated with the policy. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. */ + userAssignedIdentities?: { + [propertyName: string]: UserAssignedIdentitiesValue; + }; +} + +export interface UserAssignedIdentitiesValue { + /** + * The principal id of user assigned identity. + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly principalId?: string; + /** + * The client id of user assigned identity. + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly clientId?: string; +} + +/** Metadata pertaining to creation and last modification of the resource. */ +export interface SystemData { + /** The identity that created the resource. */ + createdBy?: string; + /** The type of identity that created the resource. */ + createdByType?: CreatedByType; + /** The timestamp of resource creation (UTC). */ + createdAt?: Date; + /** The identity that last modified the resource. */ + lastModifiedBy?: string; + /** The type of identity that last modified the resource. */ + lastModifiedByType?: CreatedByType; + /** The timestamp of resource last modification (UTC) */ + lastModifiedAt?: Date; +} + +export interface PolicyAssignmentUpdate { + /** The location of the policy assignment. Only required when utilizing managed identity. */ + location?: string; + /** The managed identity associated with the policy assignment. */ + identity?: Identity; } /** List of policy assignments. */ @@ -284,6 +329,11 @@ export interface PolicyDefinition { * NOTE: This property will not be serialized. It can only be populated by the server. */ readonly type?: string; + /** + * The system metadata relating to this resource. + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly systemData?: SystemData; /** The type of policy definition. Possible values are NotSpecified, BuiltIn, Custom, and Static. */ policyType?: PolicyType; /** The policy definition mode. Some examples are All, Indexed, Microsoft.KeyVault.Data. */ @@ -351,6 +401,11 @@ export interface PolicySetDefinition { * NOTE: This property will not be serialized. It can only be populated by the server. */ readonly type?: string; + /** + * The system metadata relating to this resource. + * NOTE: This property will not be serialized. It can only be populated by the server. + */ + readonly systemData?: SystemData; /** The type of policy definition. Possible values are NotSpecified, BuiltIn, Custom, and Static. */ policyType?: PolicyType; /** The display name of the policy set definition. */ @@ -439,22 +494,6 @@ export interface PolicyExemption { metadata?: Record; } -/** Metadata pertaining to creation and last modification of the resource. */ -export interface SystemData { - /** The identity that created the resource. */ - createdBy?: string; - /** The type of identity that created the resource. */ - createdByType?: CreatedByType; - /** The timestamp of resource creation (UTC). */ - createdAt?: Date; - /** The identity that last modified the resource. */ - lastModifiedBy?: string; - /** The type of identity that last modified the resource. */ - lastModifiedByType?: CreatedByType; - /** The timestamp of resource last modification (UTC) */ - lastModifiedAt?: Date; -} - /** List of policy exemptions. */ export interface PolicyExemptionListResult { /** An array of policy exemptions. */ @@ -538,6 +577,26 @@ export enum KnownEnforcementMode { */ export type EnforcementMode = string; +/** Known values of {@link CreatedByType} that the service accepts. */ +export enum KnownCreatedByType { + User = "User", + Application = "Application", + ManagedIdentity = "ManagedIdentity", + Key = "Key" +} + +/** + * Defines values for CreatedByType. \ + * {@link KnownCreatedByType} can be used interchangeably with CreatedByType, + * this enum contains the known values that the service supports. + * ### Known values supported by the service + * **User** \ + * **Application** \ + * **ManagedIdentity** \ + * **Key** + */ +export type CreatedByType = string; + /** Known values of {@link PolicyType} that the service accepts. */ export enum KnownPolicyType { NotSpecified = "NotSpecified", @@ -601,32 +660,12 @@ export enum KnownExemptionCategory { * **Mitigated**: This category of exemptions usually means the mitigation actions have been applied to the scope. */ export type ExemptionCategory = string; - -/** Known values of {@link CreatedByType} that the service accepts. */ -export enum KnownCreatedByType { - User = "User", - Application = "Application", - ManagedIdentity = "ManagedIdentity", - Key = "Key" -} - -/** - * Defines values for CreatedByType. \ - * {@link KnownCreatedByType} can be used interchangeably with CreatedByType, - * this enum contains the known values that the service supports. - * ### Known values supported by the service - * **User** \ - * **Application** \ - * **ManagedIdentity** \ - * **Key** - */ -export type CreatedByType = string; /** Defines values for AliasPatternType. */ export type AliasPatternType = "NotSpecified" | "Extract"; /** Defines values for AliasType. */ export type AliasType = "NotSpecified" | "PlainText" | "Mask"; /** Defines values for ResourceIdentityType. */ -export type ResourceIdentityType = "SystemAssigned" | "None"; +export type ResourceIdentityType = "SystemAssigned" | "UserAssigned" | "None"; /** Optional parameters. */ export interface DataPolicyManifestsGetByPolicyModeOptionalParams @@ -655,16 +694,6 @@ export interface DataPolicyManifestsListNextOptionalParams /** Contains response data for the listNext operation. */ export type DataPolicyManifestsListNextResponse = DataPolicyManifestListResult; -/** Optional parameters. */ -export interface DataPolicyManifestsListNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: "namespace eq '{value}'". If $filter is not provided, no filtering is performed. If $filter=namespace eq '{value}' is provided, the returned list only includes all data policy manifests that have a namespace matching the provided value. */ - filter?: string; -} - -/** Contains response data for the listNextNext operation. */ -export type DataPolicyManifestsListNextNextResponse = DataPolicyManifestListResult; - /** Optional parameters. */ export interface PolicyAssignmentsDeleteOptionalParams extends coreClient.OperationOptions {} @@ -686,6 +715,13 @@ export interface PolicyAssignmentsGetOptionalParams /** Contains response data for the get operation. */ export type PolicyAssignmentsGetResponse = PolicyAssignment; +/** Optional parameters. */ +export interface PolicyAssignmentsUpdateOptionalParams + extends coreClient.OperationOptions {} + +/** Contains response data for the update operation. */ +export type PolicyAssignmentsUpdateResponse = PolicyAssignment; + /** Optional parameters. */ export interface PolicyAssignmentsListForResourceGroupOptionalParams extends coreClient.OperationOptions { @@ -755,6 +791,13 @@ export interface PolicyAssignmentsGetByIdOptionalParams /** Contains response data for the getById operation. */ export type PolicyAssignmentsGetByIdResponse = PolicyAssignment; +/** Optional parameters. */ +export interface PolicyAssignmentsUpdateByIdOptionalParams + extends coreClient.OperationOptions {} + +/** Contains response data for the updateById operation. */ +export type PolicyAssignmentsUpdateByIdResponse = PolicyAssignment; + /** Optional parameters. */ export interface PolicyAssignmentsListForResourceGroupNextOptionalParams extends coreClient.OperationOptions { @@ -803,54 +846,6 @@ export interface PolicyAssignmentsListNextOptionalParams /** Contains response data for the listNext operation. */ export type PolicyAssignmentsListNextResponse = PolicyAssignmentListResult; -/** Optional parameters. */ -export interface PolicyAssignmentsListForResourceGroupNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atScope() is provided, the returned list only includes all policy assignments that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy assignments that at the given scope. If $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy assignments of the policy definition whose id is {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listForResourceGroupNextNext operation. */ -export type PolicyAssignmentsListForResourceGroupNextNextResponse = PolicyAssignmentListResult; - -/** Optional parameters. */ -export interface PolicyAssignmentsListForResourceNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atScope() is provided, the returned list only includes all policy assignments that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy assignments that at the given scope. If $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy assignments of the policy definition whose id is {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listForResourceNextNext operation. */ -export type PolicyAssignmentsListForResourceNextNextResponse = PolicyAssignmentListResult; - -/** Optional parameters. */ -export interface PolicyAssignmentsListForManagementGroupNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atScope() is provided, the returned list only includes all policy assignments that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy assignments that at the given scope. If $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy assignments of the policy definition whose id is {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listForManagementGroupNextNext operation. */ -export type PolicyAssignmentsListForManagementGroupNextNextResponse = PolicyAssignmentListResult; - -/** Optional parameters. */ -export interface PolicyAssignmentsListNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()' or 'policyDefinitionId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atScope() is provided, the returned list only includes all policy assignments that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy assignments that at the given scope. If $filter=policyDefinitionId eq '{value}' is provided, the returned list includes all policy assignments of the policy definition whose id is {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listNextNext operation. */ -export type PolicyAssignmentsListNextNextResponse = PolicyAssignmentListResult; - /** Optional parameters. */ export interface PolicyDefinitionsCreateOrUpdateOptionalParams extends coreClient.OperationOptions {} @@ -966,42 +961,6 @@ export interface PolicyDefinitionsListByManagementGroupNextOptionalParams /** Contains response data for the listByManagementGroupNext operation. */ export type PolicyDefinitionsListByManagementGroupNextResponse = PolicyDefinitionListResult; -/** Optional parameters. */ -export interface PolicyDefinitionsListNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or 'category eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atExactScope() is provided, the returned list only includes all policy definitions that at the given scope. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy definitions whose category match the {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listNextNext operation. */ -export type PolicyDefinitionsListNextNextResponse = PolicyDefinitionListResult; - -/** Optional parameters. */ -export interface PolicyDefinitionsListBuiltInNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or 'category eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atExactScope() is provided, the returned list only includes all policy definitions that at the given scope. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy definitions whose category match the {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listBuiltInNextNext operation. */ -export type PolicyDefinitionsListBuiltInNextNextResponse = PolicyDefinitionListResult; - -/** Optional parameters. */ -export interface PolicyDefinitionsListByManagementGroupNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or 'category eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atExactScope() is provided, the returned list only includes all policy definitions that at the given scope. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy definitions whose category match the {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listByManagementGroupNextNext operation. */ -export type PolicyDefinitionsListByManagementGroupNextNextResponse = PolicyDefinitionListResult; - /** Optional parameters. */ export interface PolicySetDefinitionsCreateOrUpdateOptionalParams extends coreClient.OperationOptions {} @@ -1117,42 +1076,6 @@ export interface PolicySetDefinitionsListByManagementGroupNextOptionalParams /** Contains response data for the listByManagementGroupNext operation. */ export type PolicySetDefinitionsListByManagementGroupNextResponse = PolicySetDefinitionListResult; -/** Optional parameters. */ -export interface PolicySetDefinitionsListNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or 'category eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atExactScope() is provided, the returned list only includes all policy set definitions that at the given scope. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy set definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy set definitions whose category match the {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listNextNext operation. */ -export type PolicySetDefinitionsListNextNextResponse = PolicySetDefinitionListResult; - -/** Optional parameters. */ -export interface PolicySetDefinitionsListBuiltInNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or 'category eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atExactScope() is provided, the returned list only includes all policy set definitions that at the given scope. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy set definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy set definitions whose category match the {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listBuiltInNextNext operation. */ -export type PolicySetDefinitionsListBuiltInNextNextResponse = PolicySetDefinitionListResult; - -/** Optional parameters. */ -export interface PolicySetDefinitionsListByManagementGroupNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atExactScope()', 'policyType -eq {value}' or 'category eq '{value}''. If $filter is not provided, no filtering is performed. If $filter=atExactScope() is provided, the returned list only includes all policy set definitions that at the given scope. If $filter='policyType -eq {value}' is provided, the returned list only includes all policy set definitions whose type match the {value}. Possible policyType values are NotSpecified, BuiltIn, Custom, and Static. If $filter='category -eq {value}' is provided, the returned list only includes all policy set definitions whose category match the {value}. */ - filter?: string; - /** Maximum number of records to return. When the $top filter is not provided, it will return 500 records. */ - top?: number; -} - -/** Contains response data for the listByManagementGroupNextNext operation. */ -export type PolicySetDefinitionsListByManagementGroupNextNextResponse = PolicySetDefinitionListResult; - /** Optional parameters. */ export interface PolicyExemptionsDeleteOptionalParams extends coreClient.OperationOptions {} @@ -1251,46 +1174,6 @@ export interface PolicyExemptionsListForManagementGroupNextOptionalParams /** Contains response data for the listForManagementGroupNext operation. */ export type PolicyExemptionsListForManagementGroupNextResponse = PolicyExemptionListResult; -/** Optional parameters. */ -export interface PolicyExemptionsListNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter is not provided, the unfiltered list includes all policy exemptions associated with the scope, including those that apply directly or apply from containing scopes. If $filter=atScope() is provided, the returned list only includes all policy exemptions that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy exemptions that at the given scope. If $filter=excludeExpired() is provided, the returned list only includes all policy exemptions that either haven't expired or didn't set expiration date. If $filter=policyAssignmentId eq '{value}' is provided. the returned list only includes all policy exemptions that are associated with the give policyAssignmentId. */ - filter?: string; -} - -/** Contains response data for the listNextNext operation. */ -export type PolicyExemptionsListNextNextResponse = PolicyExemptionListResult; - -/** Optional parameters. */ -export interface PolicyExemptionsListForResourceGroupNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter is not provided, the unfiltered list includes all policy exemptions associated with the scope, including those that apply directly or apply from containing scopes. If $filter=atScope() is provided, the returned list only includes all policy exemptions that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy exemptions that at the given scope. If $filter=excludeExpired() is provided, the returned list only includes all policy exemptions that either haven't expired or didn't set expiration date. If $filter=policyAssignmentId eq '{value}' is provided. the returned list only includes all policy exemptions that are associated with the give policyAssignmentId. */ - filter?: string; -} - -/** Contains response data for the listForResourceGroupNextNext operation. */ -export type PolicyExemptionsListForResourceGroupNextNextResponse = PolicyExemptionListResult; - -/** Optional parameters. */ -export interface PolicyExemptionsListForResourceNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter is not provided, the unfiltered list includes all policy exemptions associated with the scope, including those that apply directly or apply from containing scopes. If $filter=atScope() is provided, the returned list only includes all policy exemptions that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy exemptions that at the given scope. If $filter=excludeExpired() is provided, the returned list only includes all policy exemptions that either haven't expired or didn't set expiration date. If $filter=policyAssignmentId eq '{value}' is provided. the returned list only includes all policy exemptions that are associated with the give policyAssignmentId. */ - filter?: string; -} - -/** Contains response data for the listForResourceNextNext operation. */ -export type PolicyExemptionsListForResourceNextNextResponse = PolicyExemptionListResult; - -/** Optional parameters. */ -export interface PolicyExemptionsListForManagementGroupNextNextOptionalParams - extends coreClient.OperationOptions { - /** The filter to apply on the operation. Valid values for $filter are: 'atScope()', 'atExactScope()', 'excludeExpired()' or 'policyAssignmentId eq '{value}''. If $filter is not provided, no filtering is performed. If $filter is not provided, the unfiltered list includes all policy exemptions associated with the scope, including those that apply directly or apply from containing scopes. If $filter=atScope() is provided, the returned list only includes all policy exemptions that apply to the scope, which is everything in the unfiltered list except those applied to sub scopes contained within the given scope. If $filter=atExactScope() is provided, the returned list only includes all policy exemptions that at the given scope. If $filter=excludeExpired() is provided, the returned list only includes all policy exemptions that either haven't expired or didn't set expiration date. If $filter=policyAssignmentId eq '{value}' is provided. the returned list only includes all policy exemptions that are associated with the give policyAssignmentId. */ - filter?: string; -} - -/** Contains response data for the listForManagementGroupNextNext operation. */ -export type PolicyExemptionsListForManagementGroupNextNextResponse = PolicyExemptionListResult; - /** Optional parameters. */ export interface PolicyClientOptionalParams extends coreClient.ServiceClientOptions { diff --git a/sdk/policy/arm-policy/src/models/mappers.ts b/sdk/policy/arm-policy/src/models/mappers.ts index 7b18bd1df124..a3af2a4232e6 100644 --- a/sdk/policy/arm-policy/src/models/mappers.ts +++ b/sdk/policy/arm-policy/src/models/mappers.ts @@ -513,6 +513,13 @@ export const PolicyAssignment: coreClient.CompositeMapper = { className: "Identity" } }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, displayName: { serializedName: "properties.displayName", type: { @@ -649,7 +656,109 @@ export const Identity: coreClient.CompositeMapper = { serializedName: "type", type: { name: "Enum", - allowedValues: ["SystemAssigned", "None"] + allowedValues: ["SystemAssigned", "UserAssigned", "None"] + } + }, + userAssignedIdentities: { + serializedName: "userAssignedIdentities", + type: { + name: "Dictionary", + value: { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue" + } + } + } + } + } + } +}; + +export const UserAssignedIdentitiesValue: coreClient.CompositeMapper = { + type: { + name: "Composite", + className: "UserAssignedIdentitiesValue", + modelProperties: { + principalId: { + serializedName: "principalId", + readOnly: true, + type: { + name: "String" + } + }, + clientId: { + serializedName: "clientId", + readOnly: true, + type: { + name: "String" + } + } + } + } +}; + +export const SystemData: coreClient.CompositeMapper = { + type: { + name: "Composite", + className: "SystemData", + modelProperties: { + createdBy: { + serializedName: "createdBy", + type: { + name: "String" + } + }, + createdByType: { + serializedName: "createdByType", + type: { + name: "String" + } + }, + createdAt: { + serializedName: "createdAt", + type: { + name: "DateTime" + } + }, + lastModifiedBy: { + serializedName: "lastModifiedBy", + type: { + name: "String" + } + }, + lastModifiedByType: { + serializedName: "lastModifiedByType", + type: { + name: "String" + } + }, + lastModifiedAt: { + serializedName: "lastModifiedAt", + type: { + name: "DateTime" + } + } + } + } +}; + +export const PolicyAssignmentUpdate: coreClient.CompositeMapper = { + type: { + name: "Composite", + className: "PolicyAssignmentUpdate", + modelProperties: { + location: { + serializedName: "location", + type: { + name: "String" + } + }, + identity: { + serializedName: "identity", + type: { + name: "Composite", + className: "Identity" } } } @@ -709,6 +818,13 @@ export const PolicyDefinition: coreClient.CompositeMapper = { name: "String" } }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, policyType: { serializedName: "properties.policyType", type: { @@ -889,6 +1005,13 @@ export const PolicySetDefinition: coreClient.CompositeMapper = { name: "String" } }, + systemData: { + serializedName: "systemData", + type: { + name: "Composite", + className: "SystemData" + } + }, policyType: { serializedName: "properties.policyType", type: { @@ -1147,51 +1270,6 @@ export const PolicyExemption: coreClient.CompositeMapper = { } }; -export const SystemData: coreClient.CompositeMapper = { - type: { - name: "Composite", - className: "SystemData", - modelProperties: { - createdBy: { - serializedName: "createdBy", - type: { - name: "String" - } - }, - createdByType: { - serializedName: "createdByType", - type: { - name: "String" - } - }, - createdAt: { - serializedName: "createdAt", - type: { - name: "DateTime" - } - }, - lastModifiedBy: { - serializedName: "lastModifiedBy", - type: { - name: "String" - } - }, - lastModifiedByType: { - serializedName: "lastModifiedByType", - type: { - name: "String" - } - }, - lastModifiedAt: { - serializedName: "lastModifiedAt", - type: { - name: "DateTime" - } - } - } - } -}; - export const PolicyExemptionListResult: coreClient.CompositeMapper = { type: { name: "Composite", diff --git a/sdk/policy/arm-policy/src/models/parameters.ts b/sdk/policy/arm-policy/src/models/parameters.ts index 348012c83fcb..89eaa4fbd9a6 100644 --- a/sdk/policy/arm-policy/src/models/parameters.ts +++ b/sdk/policy/arm-policy/src/models/parameters.ts @@ -13,6 +13,7 @@ import { } from "@azure/core-client"; import { PolicyAssignment as PolicyAssignmentMapper, + PolicyAssignmentUpdate as PolicyAssignmentUpdateMapper, PolicyDefinition as PolicyDefinitionMapper, PolicySetDefinition as PolicySetDefinitionMapper, PolicyExemption as PolicyExemptionMapper @@ -111,6 +112,18 @@ export const policyAssignmentName: OperationURLParameter = { } }; +export const apiVersion1: OperationQueryParameter = { + parameterPath: "apiVersion", + mapper: { + defaultValue: "2021-06-01", + isConstant: true, + serializedName: "api-version", + type: { + name: "String" + } + } +}; + export const contentType: OperationParameter = { parameterPath: ["options", "contentType"], mapper: { @@ -128,6 +141,11 @@ export const parameters: OperationParameter = { mapper: PolicyAssignmentMapper }; +export const parameters1: OperationParameter = { + parameterPath: "parameters", + mapper: PolicyAssignmentUpdateMapper +}; + export const resourceGroupName: OperationURLParameter = { parameterPath: "resourceGroupName", mapper: { @@ -238,7 +256,7 @@ export const policyAssignmentId: OperationURLParameter = { skipEncoding: true }; -export const parameters1: OperationParameter = { +export const parameters2: OperationParameter = { parameterPath: "parameters", mapper: PolicyDefinitionMapper }; @@ -254,7 +272,7 @@ export const policyDefinitionName: OperationURLParameter = { } }; -export const parameters2: OperationParameter = { +export const parameters3: OperationParameter = { parameterPath: "parameters", mapper: PolicySetDefinitionMapper }; @@ -281,7 +299,7 @@ export const policyExemptionName: OperationURLParameter = { } }; -export const apiVersion1: OperationQueryParameter = { +export const apiVersion2: OperationQueryParameter = { parameterPath: "apiVersion", mapper: { defaultValue: "2020-07-01-preview", @@ -293,7 +311,7 @@ export const apiVersion1: OperationQueryParameter = { } }; -export const parameters3: OperationParameter = { +export const parameters4: OperationParameter = { parameterPath: "parameters", mapper: PolicyExemptionMapper }; diff --git a/sdk/policy/arm-policy/src/operations/dataPolicyManifests.ts b/sdk/policy/arm-policy/src/operations/dataPolicyManifests.ts index 75b4b98cab58..61d8dc444520 100644 --- a/sdk/policy/arm-policy/src/operations/dataPolicyManifests.ts +++ b/sdk/policy/arm-policy/src/operations/dataPolicyManifests.ts @@ -6,7 +6,6 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { DataPolicyManifests } from "../operationsInterfaces"; import * as coreClient from "@azure/core-client"; @@ -17,16 +16,14 @@ import { DataPolicyManifest, DataPolicyManifestsListNextOptionalParams, DataPolicyManifestsListOptionalParams, - DataPolicyManifestsListNextNextOptionalParams, DataPolicyManifestsGetByPolicyModeOptionalParams, DataPolicyManifestsGetByPolicyModeResponse, DataPolicyManifestsListResponse, - DataPolicyManifestsListNextResponse, - DataPolicyManifestsListNextNextResponse + DataPolicyManifestsListNextResponse } from "../models"; /// -/** Class representing a DataPolicyManifests. */ +/** Class containing DataPolicyManifests operations. */ export class DataPolicyManifestsImpl implements DataPolicyManifests { private readonly client: PolicyClientContext; @@ -84,52 +81,6 @@ export class DataPolicyManifestsImpl implements DataPolicyManifests { } } - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - public listNext( - nextLink: string, - options?: DataPolicyManifestsListNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listNextPagingAll(nextLink, options); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listNextPagingPage(nextLink, options); - } - }; - } - - private async *listNextPagingPage( - nextLink: string, - options?: DataPolicyManifestsListNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listNext(nextLink, options); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listNextNext(continuationToken, options); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listNextPagingAll( - nextLink: string, - options?: DataPolicyManifestsListNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listNextPagingPage(nextLink, options)) { - yield* page; - } - } - /** * This operation retrieves the data policy manifest with the given policy mode. * @param policyMode The policy mode of the data policy manifest to get. @@ -173,21 +124,6 @@ export class DataPolicyManifestsImpl implements DataPolicyManifests { listNextOperationSpec ); } - - /** - * ListNextNext - * @param nextLink The nextLink from the previous successful call to the ListNext method. - * @param options The options parameters. - */ - private _listNextNext( - nextLink: string, - options?: DataPolicyManifestsListNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { nextLink, options }, - listNextNextOperationSpec - ); - } } // Operation Specifications const serializer = coreClient.createSerializer(Mappers, /* isXml */ false); @@ -240,19 +176,3 @@ const listNextOperationSpec: coreClient.OperationSpec = { headerParameters: [Parameters.accept], serializer }; -const listNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.DataPolicyManifestListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter], - urlParameters: [Parameters.$host, Parameters.nextLink], - headerParameters: [Parameters.accept], - serializer -}; diff --git a/sdk/policy/arm-policy/src/operations/policyAssignments.ts b/sdk/policy/arm-policy/src/operations/policyAssignments.ts index e8398ad50e17..3ef622363fb1 100644 --- a/sdk/policy/arm-policy/src/operations/policyAssignments.ts +++ b/sdk/policy/arm-policy/src/operations/policyAssignments.ts @@ -6,7 +6,6 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicyAssignments } from "../operationsInterfaces"; import * as coreClient from "@azure/core-client"; @@ -23,16 +22,15 @@ import { PolicyAssignmentsListForManagementGroupOptionalParams, PolicyAssignmentsListNextOptionalParams, PolicyAssignmentsListOptionalParams, - PolicyAssignmentsListForResourceGroupNextNextOptionalParams, - PolicyAssignmentsListForResourceNextNextOptionalParams, - PolicyAssignmentsListForManagementGroupNextNextOptionalParams, - PolicyAssignmentsListNextNextOptionalParams, PolicyAssignmentsDeleteOptionalParams, PolicyAssignmentsDeleteResponse, PolicyAssignmentsCreateOptionalParams, PolicyAssignmentsCreateResponse, PolicyAssignmentsGetOptionalParams, PolicyAssignmentsGetResponse, + PolicyAssignmentUpdate, + PolicyAssignmentsUpdateOptionalParams, + PolicyAssignmentsUpdateResponse, PolicyAssignmentsListForResourceGroupResponse, PolicyAssignmentsListForResourceResponse, PolicyAssignmentsListForManagementGroupResponse, @@ -43,18 +41,16 @@ import { PolicyAssignmentsCreateByIdResponse, PolicyAssignmentsGetByIdOptionalParams, PolicyAssignmentsGetByIdResponse, + PolicyAssignmentsUpdateByIdOptionalParams, + PolicyAssignmentsUpdateByIdResponse, PolicyAssignmentsListForResourceGroupNextResponse, PolicyAssignmentsListForResourceNextResponse, PolicyAssignmentsListForManagementGroupNextResponse, - PolicyAssignmentsListNextResponse, - PolicyAssignmentsListForResourceGroupNextNextResponse, - PolicyAssignmentsListForResourceNextNextResponse, - PolicyAssignmentsListForManagementGroupNextNextResponse, - PolicyAssignmentsListNextNextResponse + PolicyAssignmentsListNextResponse } from "../models"; /// -/** Class representing a PolicyAssignments. */ +/** Class containing PolicyAssignments operations. */ export class PolicyAssignmentsImpl implements PolicyAssignments { private readonly client: PolicyClientContext; @@ -368,300 +364,6 @@ export class PolicyAssignmentsImpl implements PolicyAssignments { } } - /** - * ListForResourceGroupNext - * @param resourceGroupName The name of the resource group that contains policy assignments. - * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. - * @param options The options parameters. - */ - public listForResourceGroupNext( - resourceGroupName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceGroupNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listForResourceGroupNextPagingAll( - resourceGroupName, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listForResourceGroupNextPagingPage( - resourceGroupName, - nextLink, - options - ); - } - }; - } - - private async *listForResourceGroupNextPagingPage( - resourceGroupName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceGroupNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listForResourceGroupNext( - resourceGroupName, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listForResourceGroupNextNext( - resourceGroupName, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listForResourceGroupNextPagingAll( - resourceGroupName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceGroupNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listForResourceGroupNextPagingPage( - resourceGroupName, - nextLink, - options - )) { - yield* page; - } - } - - /** - * ListForResourceNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace - * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) - * @param parentResourcePath The parent resource path. Use empty string if there is none. - * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from - * Microsoft.Web/sites). - * @param resourceName The name of the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResource method. - * @param options The options parameters. - */ - public listForResourceNext( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listForResourceNextPagingAll( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listForResourceNextPagingPage( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - ); - } - }; - } - - private async *listForResourceNextPagingPage( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listForResourceNext( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listForResourceNextNext( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listForResourceNextPagingAll( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listForResourceNextPagingPage( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - )) { - yield* page; - } - } - - /** - * ListForManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListForManagementGroup method. - * @param options The options parameters. - */ - public listForManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicyAssignmentsListForManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listForManagementGroupNextPagingAll( - managementGroupId, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listForManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - ); - } - }; - } - - private async *listForManagementGroupNextPagingPage( - managementGroupId: string, - nextLink: string, - options?: PolicyAssignmentsListForManagementGroupNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listForManagementGroupNext( - managementGroupId, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listForManagementGroupNextNext( - managementGroupId, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listForManagementGroupNextPagingAll( - managementGroupId: string, - nextLink: string, - options?: PolicyAssignmentsListForManagementGroupNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listForManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - )) { - yield* page; - } - } - - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - public listNext( - nextLink: string, - options?: PolicyAssignmentsListNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listNextPagingAll(nextLink, options); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listNextPagingPage(nextLink, options); - } - }; - } - - private async *listNextPagingPage( - nextLink: string, - options?: PolicyAssignmentsListNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listNext(nextLink, options); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listNextNext(continuationToken, options); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listNextPagingAll( - nextLink: string, - options?: PolicyAssignmentsListNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listNextPagingPage(nextLink, options)) { - yield* page; - } - } - /** * This operation deletes a policy assignment, given its name and the scope it was created in. The * scope of a policy assignment is the part of its ID preceding @@ -731,6 +433,31 @@ export class PolicyAssignmentsImpl implements PolicyAssignments { ); } + /** + * This operation updates a policy assignment with the given scope and name. Policy assignments apply + * to all resources contained within their scope. For example, when you assign a policy at resource + * group scope, that policy applies to all resources in the group. + * @param scope The scope of the policy assignment. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyAssignmentName The name of the policy assignment. + * @param parameters Parameters for policy assignment patch request. + * @param options The options parameters. + */ + update( + scope: string, + policyAssignmentName: string, + parameters: PolicyAssignmentUpdate, + options?: PolicyAssignmentsUpdateOptionalParams + ): Promise { + return this.client.sendOperationRequest( + { scope, policyAssignmentName, parameters, options }, + updateOperationSpec + ); + } + /** * This operation retrieves the list of all policy assignments associated with the given resource group * in the given subscription that match the optional given $filter. Valid values for $filter are: @@ -921,6 +648,32 @@ export class PolicyAssignmentsImpl implements PolicyAssignments { ); } + /** + * This operation updates the policy assignment with the given ID. Policy assignments made on a scope + * apply to all resources contained in that scope. For example, when you assign a policy to a resource + * group that policy applies to all resources in the group. Policy assignment IDs have this format: + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. Valid scopes + * are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}'. + * @param policyAssignmentId The ID of the policy assignment to update. Use the format + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. + * @param parameters Parameters for policy assignment patch request. + * @param options The options parameters. + */ + updateById( + policyAssignmentId: string, + parameters: PolicyAssignmentUpdate, + options?: PolicyAssignmentsUpdateByIdOptionalParams + ): Promise { + return this.client.sendOperationRequest( + { policyAssignmentId, parameters, options }, + updateByIdOperationSpec + ); + } + /** * ListForResourceGroupNext * @param resourceGroupName The name of the resource group that contains policy assignments. @@ -1004,92 +757,6 @@ export class PolicyAssignmentsImpl implements PolicyAssignments { listNextOperationSpec ); } - - /** - * ListForResourceGroupNextNext - * @param resourceGroupName The name of the resource group that contains policy assignments. - * @param nextLink The nextLink from the previous successful call to the ListForResourceGroupNext - * method. - * @param options The options parameters. - */ - private _listForResourceGroupNextNext( - resourceGroupName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceGroupNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { resourceGroupName, nextLink, options }, - listForResourceGroupNextNextOperationSpec - ); - } - - /** - * ListForResourceNextNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace - * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) - * @param parentResourcePath The parent resource path. Use empty string if there is none. - * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from - * Microsoft.Web/sites). - * @param resourceName The name of the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResourceNext method. - * @param options The options parameters. - */ - private _listForResourceNextNext( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - }, - listForResourceNextNextOperationSpec - ); - } - - /** - * ListForManagementGroupNextNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListForManagementGroupNext - * method. - * @param options The options parameters. - */ - private _listForManagementGroupNextNext( - managementGroupId: string, - nextLink: string, - options?: PolicyAssignmentsListForManagementGroupNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { managementGroupId, nextLink, options }, - listForManagementGroupNextNextOperationSpec - ); - } - - /** - * ListNextNext - * @param nextLink The nextLink from the previous successful call to the ListNext method. - * @param options The options parameters. - */ - private _listNextNext( - nextLink: string, - options?: PolicyAssignmentsListNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { nextLink, options }, - listNextNextOperationSpec - ); - } } // Operation Specifications const serializer = coreClient.createSerializer(Mappers, /* isXml */ false); @@ -1107,7 +774,7 @@ const deleteOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.scope, @@ -1129,7 +796,7 @@ const createOperationSpec: coreClient.OperationSpec = { } }, requestBody: Parameters.parameters, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.scope, @@ -1151,7 +818,7 @@ const getOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.scope, @@ -1160,6 +827,29 @@ const getOperationSpec: coreClient.OperationSpec = { headerParameters: [Parameters.accept], serializer }; +const updateOperationSpec: coreClient.OperationSpec = { + path: + "/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}", + httpMethod: "PATCH", + responses: { + 200: { + bodyMapper: Mappers.PolicyAssignment + }, + default: { + bodyMapper: Mappers.CloudError + } + }, + requestBody: Parameters.parameters1, + queryParameters: [Parameters.apiVersion1], + urlParameters: [ + Parameters.$host, + Parameters.scope, + Parameters.policyAssignmentName + ], + headerParameters: [Parameters.accept, Parameters.contentType], + mediaType: "json", + serializer +}; const listForResourceGroupOperationSpec: coreClient.OperationSpec = { path: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments", @@ -1172,7 +862,7 @@ const listForResourceGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.resourceGroupName, @@ -1193,7 +883,7 @@ const listForResourceOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.resourceGroupName, @@ -1218,7 +908,7 @@ const listForManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.managementGroupId], headerParameters: [Parameters.accept], serializer @@ -1235,7 +925,7 @@ const listOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.subscriptionId], headerParameters: [Parameters.accept], serializer @@ -1252,7 +942,7 @@ const deleteByIdOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [Parameters.$host, Parameters.policyAssignmentId], headerParameters: [Parameters.accept], serializer @@ -1269,7 +959,7 @@ const createByIdOperationSpec: coreClient.OperationSpec = { } }, requestBody: Parameters.parameters, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [Parameters.$host, Parameters.policyAssignmentId], headerParameters: [Parameters.accept, Parameters.contentType], mediaType: "json", @@ -1286,98 +976,30 @@ const getByIdOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [Parameters.$host, Parameters.policyAssignmentId], headerParameters: [Parameters.accept], serializer }; -const listForResourceGroupNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyAssignmentListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.resourceGroupName, - Parameters.subscriptionId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listForResourceNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyAssignmentListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.resourceGroupName, - Parameters.subscriptionId, - Parameters.resourceProviderNamespace, - Parameters.parentResourcePath, - Parameters.resourceType, - Parameters.resourceName - ], - headerParameters: [Parameters.accept], - serializer -}; -const listForManagementGroupNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyAssignmentListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.managementGroupId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", +const updateByIdOperationSpec: coreClient.OperationSpec = { + path: "/{policyAssignmentId}", + httpMethod: "PATCH", responses: { 200: { - bodyMapper: Mappers.PolicyAssignmentListResult + bodyMapper: Mappers.PolicyAssignment }, default: { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.subscriptionId - ], - headerParameters: [Parameters.accept], + requestBody: Parameters.parameters1, + queryParameters: [Parameters.apiVersion1], + urlParameters: [Parameters.$host, Parameters.policyAssignmentId], + headerParameters: [Parameters.accept, Parameters.contentType], + mediaType: "json", serializer }; -const listForResourceGroupNextNextOperationSpec: coreClient.OperationSpec = { +const listForResourceGroupNextOperationSpec: coreClient.OperationSpec = { path: "{nextLink}", httpMethod: "GET", responses: { @@ -1388,7 +1010,7 @@ const listForResourceGroupNextNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -1398,7 +1020,7 @@ const listForResourceGroupNextNextOperationSpec: coreClient.OperationSpec = { headerParameters: [Parameters.accept], serializer }; -const listForResourceNextNextOperationSpec: coreClient.OperationSpec = { +const listForResourceNextOperationSpec: coreClient.OperationSpec = { path: "{nextLink}", httpMethod: "GET", responses: { @@ -1409,7 +1031,7 @@ const listForResourceNextNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -1423,7 +1045,7 @@ const listForResourceNextNextOperationSpec: coreClient.OperationSpec = { headerParameters: [Parameters.accept], serializer }; -const listForManagementGroupNextNextOperationSpec: coreClient.OperationSpec = { +const listForManagementGroupNextOperationSpec: coreClient.OperationSpec = { path: "{nextLink}", httpMethod: "GET", responses: { @@ -1434,7 +1056,7 @@ const listForManagementGroupNextNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -1443,7 +1065,7 @@ const listForManagementGroupNextNextOperationSpec: coreClient.OperationSpec = { headerParameters: [Parameters.accept], serializer }; -const listNextNextOperationSpec: coreClient.OperationSpec = { +const listNextOperationSpec: coreClient.OperationSpec = { path: "{nextLink}", httpMethod: "GET", responses: { @@ -1454,7 +1076,7 @@ const listNextNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, diff --git a/sdk/policy/arm-policy/src/operations/policyDefinitions.ts b/sdk/policy/arm-policy/src/operations/policyDefinitions.ts index 01db146df73d..07fd9f9fd568 100644 --- a/sdk/policy/arm-policy/src/operations/policyDefinitions.ts +++ b/sdk/policy/arm-policy/src/operations/policyDefinitions.ts @@ -6,7 +6,6 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicyDefinitions } from "../operationsInterfaces"; import * as coreClient from "@azure/core-client"; @@ -21,9 +20,6 @@ import { PolicyDefinitionsListBuiltInOptionalParams, PolicyDefinitionsListByManagementGroupNextOptionalParams, PolicyDefinitionsListByManagementGroupOptionalParams, - PolicyDefinitionsListNextNextOptionalParams, - PolicyDefinitionsListBuiltInNextNextOptionalParams, - PolicyDefinitionsListByManagementGroupNextNextOptionalParams, PolicyDefinitionsCreateOrUpdateOptionalParams, PolicyDefinitionsCreateOrUpdateResponse, PolicyDefinitionsDeleteOptionalParams, @@ -41,14 +37,11 @@ import { PolicyDefinitionsListByManagementGroupResponse, PolicyDefinitionsListNextResponse, PolicyDefinitionsListBuiltInNextResponse, - PolicyDefinitionsListByManagementGroupNextResponse, - PolicyDefinitionsListNextNextResponse, - PolicyDefinitionsListBuiltInNextNextResponse, - PolicyDefinitionsListByManagementGroupNextNextResponse + PolicyDefinitionsListByManagementGroupNextResponse } from "../models"; /// -/** Class representing a PolicyDefinitions. */ +/** Class containing PolicyDefinitions operations. */ export class PolicyDefinitionsImpl implements PolicyDefinitions { private readonly client: PolicyClientContext; @@ -222,171 +215,6 @@ export class PolicyDefinitionsImpl implements PolicyDefinitions { } } - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - public listNext( - nextLink: string, - options?: PolicyDefinitionsListNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listNextPagingAll(nextLink, options); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listNextPagingPage(nextLink, options); - } - }; - } - - private async *listNextPagingPage( - nextLink: string, - options?: PolicyDefinitionsListNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listNext(nextLink, options); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listNextNext(continuationToken, options); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listNextPagingAll( - nextLink: string, - options?: PolicyDefinitionsListNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listNextPagingPage(nextLink, options)) { - yield* page; - } - } - - /** - * ListBuiltInNext - * @param nextLink The nextLink from the previous successful call to the ListBuiltIn method. - * @param options The options parameters. - */ - public listBuiltInNext( - nextLink: string, - options?: PolicyDefinitionsListBuiltInNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listBuiltInNextPagingAll(nextLink, options); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listBuiltInNextPagingPage(nextLink, options); - } - }; - } - - private async *listBuiltInNextPagingPage( - nextLink: string, - options?: PolicyDefinitionsListBuiltInNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listBuiltInNext(nextLink, options); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listBuiltInNextNext(continuationToken, options); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listBuiltInNextPagingAll( - nextLink: string, - options?: PolicyDefinitionsListBuiltInNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listBuiltInNextPagingPage( - nextLink, - options - )) { - yield* page; - } - } - - /** - * ListByManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListByManagementGroup method. - * @param options The options parameters. - */ - public listByManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicyDefinitionsListByManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listByManagementGroupNextPagingAll( - managementGroupId, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listByManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - ); - } - }; - } - - private async *listByManagementGroupNextPagingPage( - managementGroupId: string, - nextLink: string, - options?: PolicyDefinitionsListByManagementGroupNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listByManagementGroupNext( - managementGroupId, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listByManagementGroupNextNext( - managementGroupId, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listByManagementGroupNextPagingAll( - managementGroupId: string, - nextLink: string, - options?: PolicyDefinitionsListByManagementGroupNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listByManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - )) { - yield* page; - } - } - /** * This operation creates or updates a policy definition in the given subscription with the given name. * @param policyDefinitionName The name of the policy definition to create. @@ -609,54 +437,6 @@ export class PolicyDefinitionsImpl implements PolicyDefinitions { listByManagementGroupNextOperationSpec ); } - - /** - * ListNextNext - * @param nextLink The nextLink from the previous successful call to the ListNext method. - * @param options The options parameters. - */ - private _listNextNext( - nextLink: string, - options?: PolicyDefinitionsListNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { nextLink, options }, - listNextNextOperationSpec - ); - } - - /** - * ListBuiltInNextNext - * @param nextLink The nextLink from the previous successful call to the ListBuiltInNext method. - * @param options The options parameters. - */ - private _listBuiltInNextNext( - nextLink: string, - options?: PolicyDefinitionsListBuiltInNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { nextLink, options }, - listBuiltInNextNextOperationSpec - ); - } - - /** - * ListByManagementGroupNextNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListByManagementGroupNext - * method. - * @param options The options parameters. - */ - private _listByManagementGroupNextNext( - managementGroupId: string, - nextLink: string, - options?: PolicyDefinitionsListByManagementGroupNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { managementGroupId, nextLink, options }, - listByManagementGroupNextNextOperationSpec - ); - } } // Operation Specifications const serializer = coreClient.createSerializer(Mappers, /* isXml */ false); @@ -673,8 +453,8 @@ const createOrUpdateOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - requestBody: Parameters.parameters1, - queryParameters: [Parameters.apiVersion], + requestBody: Parameters.parameters2, + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.subscriptionId, @@ -695,7 +475,7 @@ const deleteOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.subscriptionId, @@ -716,7 +496,7 @@ const getOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.subscriptionId, @@ -737,7 +517,7 @@ const getBuiltInOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [Parameters.$host, Parameters.policyDefinitionName], headerParameters: [Parameters.accept], serializer @@ -754,8 +534,8 @@ const createOrUpdateAtManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - requestBody: Parameters.parameters1, - queryParameters: [Parameters.apiVersion], + requestBody: Parameters.parameters2, + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.managementGroupId, @@ -776,7 +556,7 @@ const deleteAtManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.managementGroupId, @@ -797,7 +577,7 @@ const getAtManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.managementGroupId, @@ -818,7 +598,7 @@ const listOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.subscriptionId], headerParameters: [Parameters.accept], serializer @@ -834,7 +614,7 @@ const listBuiltInOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host], headerParameters: [Parameters.accept], serializer @@ -851,7 +631,7 @@ const listByManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.managementGroupId], headerParameters: [Parameters.accept], serializer @@ -867,7 +647,7 @@ const listNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -887,7 +667,7 @@ const listBuiltInNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.nextLink], headerParameters: [Parameters.accept], serializer @@ -903,63 +683,7 @@ const listByManagementGroupNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.managementGroupId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyDefinitionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.subscriptionId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listBuiltInNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyDefinitionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [Parameters.$host, Parameters.nextLink], - headerParameters: [Parameters.accept], - serializer -}; -const listByManagementGroupNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyDefinitionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, diff --git a/sdk/policy/arm-policy/src/operations/policyExemptions.ts b/sdk/policy/arm-policy/src/operations/policyExemptions.ts index e48aab2fb115..825f6feb6715 100644 --- a/sdk/policy/arm-policy/src/operations/policyExemptions.ts +++ b/sdk/policy/arm-policy/src/operations/policyExemptions.ts @@ -6,7 +6,6 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicyExemptions } from "../operationsInterfaces"; import * as coreClient from "@azure/core-client"; @@ -23,10 +22,6 @@ import { PolicyExemptionsListForResourceOptionalParams, PolicyExemptionsListForManagementGroupNextOptionalParams, PolicyExemptionsListForManagementGroupOptionalParams, - PolicyExemptionsListNextNextOptionalParams, - PolicyExemptionsListForResourceGroupNextNextOptionalParams, - PolicyExemptionsListForResourceNextNextOptionalParams, - PolicyExemptionsListForManagementGroupNextNextOptionalParams, PolicyExemptionsDeleteOptionalParams, PolicyExemptionsCreateOrUpdateOptionalParams, PolicyExemptionsCreateOrUpdateResponse, @@ -39,15 +34,11 @@ import { PolicyExemptionsListNextResponse, PolicyExemptionsListForResourceGroupNextResponse, PolicyExemptionsListForResourceNextResponse, - PolicyExemptionsListForManagementGroupNextResponse, - PolicyExemptionsListNextNextResponse, - PolicyExemptionsListForResourceGroupNextNextResponse, - PolicyExemptionsListForResourceNextNextResponse, - PolicyExemptionsListForManagementGroupNextNextResponse + PolicyExemptionsListForManagementGroupNextResponse } from "../models"; /// -/** Class representing a PolicyExemptions. */ +/** Class containing PolicyExemptions operations. */ export class PolicyExemptionsImpl implements PolicyExemptions { private readonly client: PolicyClientContext; @@ -342,300 +333,6 @@ export class PolicyExemptionsImpl implements PolicyExemptions { } } - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - public listNext( - nextLink: string, - options?: PolicyExemptionsListNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listNextPagingAll(nextLink, options); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listNextPagingPage(nextLink, options); - } - }; - } - - private async *listNextPagingPage( - nextLink: string, - options?: PolicyExemptionsListNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listNext(nextLink, options); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listNextNext(continuationToken, options); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listNextPagingAll( - nextLink: string, - options?: PolicyExemptionsListNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listNextPagingPage(nextLink, options)) { - yield* page; - } - } - - /** - * ListForResourceGroupNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. - * @param options The options parameters. - */ - public listForResourceGroupNext( - resourceGroupName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceGroupNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listForResourceGroupNextPagingAll( - resourceGroupName, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listForResourceGroupNextPagingPage( - resourceGroupName, - nextLink, - options - ); - } - }; - } - - private async *listForResourceGroupNextPagingPage( - resourceGroupName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceGroupNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listForResourceGroupNext( - resourceGroupName, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listForResourceGroupNextNext( - resourceGroupName, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listForResourceGroupNextPagingAll( - resourceGroupName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceGroupNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listForResourceGroupNextPagingPage( - resourceGroupName, - nextLink, - options - )) { - yield* page; - } - } - - /** - * ListForResourceNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace - * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) - * @param parentResourcePath The parent resource path. Use empty string if there is none. - * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from - * Microsoft.Web/sites). - * @param resourceName The name of the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResource method. - * @param options The options parameters. - */ - public listForResourceNext( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listForResourceNextPagingAll( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listForResourceNextPagingPage( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - ); - } - }; - } - - private async *listForResourceNextPagingPage( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listForResourceNext( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listForResourceNextNext( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listForResourceNextPagingAll( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listForResourceNextPagingPage( - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - )) { - yield* page; - } - } - - /** - * ListForManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListForManagementGroup method. - * @param options The options parameters. - */ - public listForManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicyExemptionsListForManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listForManagementGroupNextPagingAll( - managementGroupId, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listForManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - ); - } - }; - } - - private async *listForManagementGroupNextPagingPage( - managementGroupId: string, - nextLink: string, - options?: PolicyExemptionsListForManagementGroupNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listForManagementGroupNext( - managementGroupId, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listForManagementGroupNextNext( - managementGroupId, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listForManagementGroupNextPagingAll( - managementGroupId: string, - nextLink: string, - options?: PolicyExemptionsListForManagementGroupNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listForManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - )) { - yield* page; - } - } - /** * This operation deletes a policy exemption, given its name and the scope it was created in. The scope * of a policy exemption is the part of its ID preceding @@ -890,92 +587,6 @@ export class PolicyExemptionsImpl implements PolicyExemptions { listForManagementGroupNextOperationSpec ); } - - /** - * ListNextNext - * @param nextLink The nextLink from the previous successful call to the ListNext method. - * @param options The options parameters. - */ - private _listNextNext( - nextLink: string, - options?: PolicyExemptionsListNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { nextLink, options }, - listNextNextOperationSpec - ); - } - - /** - * ListForResourceGroupNextNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResourceGroupNext - * method. - * @param options The options parameters. - */ - private _listForResourceGroupNextNext( - resourceGroupName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceGroupNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { resourceGroupName, nextLink, options }, - listForResourceGroupNextNextOperationSpec - ); - } - - /** - * ListForResourceNextNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace - * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) - * @param parentResourcePath The parent resource path. Use empty string if there is none. - * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from - * Microsoft.Web/sites). - * @param resourceName The name of the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResourceNext method. - * @param options The options parameters. - */ - private _listForResourceNextNext( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { - resourceGroupName, - resourceProviderNamespace, - parentResourcePath, - resourceType, - resourceName, - nextLink, - options - }, - listForResourceNextNextOperationSpec - ); - } - - /** - * ListForManagementGroupNextNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListForManagementGroupNext - * method. - * @param options The options parameters. - */ - private _listForManagementGroupNextNext( - managementGroupId: string, - nextLink: string, - options?: PolicyExemptionsListForManagementGroupNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { managementGroupId, nextLink, options }, - listForManagementGroupNextNextOperationSpec - ); - } } // Operation Specifications const serializer = coreClient.createSerializer(Mappers, /* isXml */ false); @@ -991,7 +602,7 @@ const deleteOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion1], + queryParameters: [Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.scope, @@ -1015,8 +626,8 @@ const createOrUpdateOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - requestBody: Parameters.parameters3, - queryParameters: [Parameters.apiVersion1], + requestBody: Parameters.parameters4, + queryParameters: [Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.scope, @@ -1038,7 +649,7 @@ const getOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion1], + queryParameters: [Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.scope, @@ -1059,7 +670,7 @@ const listOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [Parameters.$host, Parameters.subscriptionId], headerParameters: [Parameters.accept], serializer @@ -1076,7 +687,7 @@ const listForResourceGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.resourceGroupName, @@ -1097,7 +708,7 @@ const listForResourceOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.resourceGroupName, @@ -1122,7 +733,7 @@ const listForManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [Parameters.$host, Parameters.managementGroupId], headerParameters: [Parameters.accept], serializer @@ -1138,7 +749,7 @@ const listNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -1158,7 +769,7 @@ const listForResourceGroupNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -1179,7 +790,7 @@ const listForResourceNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -1204,93 +815,7 @@ const listForManagementGroupNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.managementGroupId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyExemptionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.subscriptionId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listForResourceGroupNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyExemptionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.resourceGroupName, - Parameters.subscriptionId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listForResourceNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyExemptionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.resourceGroupName, - Parameters.subscriptionId, - Parameters.resourceProviderNamespace, - Parameters.parentResourcePath, - Parameters.resourceType, - Parameters.resourceName - ], - headerParameters: [Parameters.accept], - serializer -}; -const listForManagementGroupNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicyExemptionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.filter, Parameters.apiVersion1], + queryParameters: [Parameters.filter, Parameters.apiVersion2], urlParameters: [ Parameters.$host, Parameters.nextLink, diff --git a/sdk/policy/arm-policy/src/operations/policySetDefinitions.ts b/sdk/policy/arm-policy/src/operations/policySetDefinitions.ts index 178abac75026..b97b8a3c379e 100644 --- a/sdk/policy/arm-policy/src/operations/policySetDefinitions.ts +++ b/sdk/policy/arm-policy/src/operations/policySetDefinitions.ts @@ -6,7 +6,6 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicySetDefinitions } from "../operationsInterfaces"; import * as coreClient from "@azure/core-client"; @@ -21,9 +20,6 @@ import { PolicySetDefinitionsListBuiltInOptionalParams, PolicySetDefinitionsListByManagementGroupNextOptionalParams, PolicySetDefinitionsListByManagementGroupOptionalParams, - PolicySetDefinitionsListNextNextOptionalParams, - PolicySetDefinitionsListBuiltInNextNextOptionalParams, - PolicySetDefinitionsListByManagementGroupNextNextOptionalParams, PolicySetDefinitionsCreateOrUpdateOptionalParams, PolicySetDefinitionsCreateOrUpdateResponse, PolicySetDefinitionsDeleteOptionalParams, @@ -41,14 +37,11 @@ import { PolicySetDefinitionsListByManagementGroupResponse, PolicySetDefinitionsListNextResponse, PolicySetDefinitionsListBuiltInNextResponse, - PolicySetDefinitionsListByManagementGroupNextResponse, - PolicySetDefinitionsListNextNextResponse, - PolicySetDefinitionsListBuiltInNextNextResponse, - PolicySetDefinitionsListByManagementGroupNextNextResponse + PolicySetDefinitionsListByManagementGroupNextResponse } from "../models"; /// -/** Class representing a PolicySetDefinitions. */ +/** Class containing PolicySetDefinitions operations. */ export class PolicySetDefinitionsImpl implements PolicySetDefinitions { private readonly client: PolicyClientContext; @@ -220,171 +213,6 @@ export class PolicySetDefinitionsImpl implements PolicySetDefinitions { } } - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - public listNext( - nextLink: string, - options?: PolicySetDefinitionsListNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listNextPagingAll(nextLink, options); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listNextPagingPage(nextLink, options); - } - }; - } - - private async *listNextPagingPage( - nextLink: string, - options?: PolicySetDefinitionsListNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listNext(nextLink, options); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listNextNext(continuationToken, options); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listNextPagingAll( - nextLink: string, - options?: PolicySetDefinitionsListNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listNextPagingPage(nextLink, options)) { - yield* page; - } - } - - /** - * ListBuiltInNext - * @param nextLink The nextLink from the previous successful call to the ListBuiltIn method. - * @param options The options parameters. - */ - public listBuiltInNext( - nextLink: string, - options?: PolicySetDefinitionsListBuiltInNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listBuiltInNextPagingAll(nextLink, options); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listBuiltInNextPagingPage(nextLink, options); - } - }; - } - - private async *listBuiltInNextPagingPage( - nextLink: string, - options?: PolicySetDefinitionsListBuiltInNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listBuiltInNext(nextLink, options); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listBuiltInNextNext(continuationToken, options); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listBuiltInNextPagingAll( - nextLink: string, - options?: PolicySetDefinitionsListBuiltInNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listBuiltInNextPagingPage( - nextLink, - options - )) { - yield* page; - } - } - - /** - * ListByManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListByManagementGroup method. - * @param options The options parameters. - */ - public listByManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicySetDefinitionsListByManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator { - const iter = this.listByManagementGroupNextPagingAll( - managementGroupId, - nextLink, - options - ); - return { - next() { - return iter.next(); - }, - [Symbol.asyncIterator]() { - return this; - }, - byPage: () => { - return this.listByManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - ); - } - }; - } - - private async *listByManagementGroupNextPagingPage( - managementGroupId: string, - nextLink: string, - options?: PolicySetDefinitionsListByManagementGroupNextOptionalParams - ): AsyncIterableIterator { - let result = await this._listByManagementGroupNext( - managementGroupId, - nextLink, - options - ); - yield result.value || []; - let continuationToken = result.nextLink; - while (continuationToken) { - result = await this._listByManagementGroupNextNext( - managementGroupId, - continuationToken, - options - ); - continuationToken = result.nextLink; - yield result.value || []; - } - } - - private async *listByManagementGroupNextPagingAll( - managementGroupId: string, - nextLink: string, - options?: PolicySetDefinitionsListByManagementGroupNextOptionalParams - ): AsyncIterableIterator { - for await (const page of this.listByManagementGroupNextPagingPage( - managementGroupId, - nextLink, - options - )) { - yield* page; - } - } - /** * This operation creates or updates a policy set definition in the given subscription with the given * name. @@ -607,54 +435,6 @@ export class PolicySetDefinitionsImpl implements PolicySetDefinitions { listByManagementGroupNextOperationSpec ); } - - /** - * ListNextNext - * @param nextLink The nextLink from the previous successful call to the ListNext method. - * @param options The options parameters. - */ - private _listNextNext( - nextLink: string, - options?: PolicySetDefinitionsListNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { nextLink, options }, - listNextNextOperationSpec - ); - } - - /** - * ListBuiltInNextNext - * @param nextLink The nextLink from the previous successful call to the ListBuiltInNext method. - * @param options The options parameters. - */ - private _listBuiltInNextNext( - nextLink: string, - options?: PolicySetDefinitionsListBuiltInNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { nextLink, options }, - listBuiltInNextNextOperationSpec - ); - } - - /** - * ListByManagementGroupNextNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListByManagementGroupNext - * method. - * @param options The options parameters. - */ - private _listByManagementGroupNextNext( - managementGroupId: string, - nextLink: string, - options?: PolicySetDefinitionsListByManagementGroupNextNextOptionalParams - ): Promise { - return this.client.sendOperationRequest( - { managementGroupId, nextLink, options }, - listByManagementGroupNextNextOperationSpec - ); - } } // Operation Specifications const serializer = coreClient.createSerializer(Mappers, /* isXml */ false); @@ -674,8 +454,8 @@ const createOrUpdateOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - requestBody: Parameters.parameters2, - queryParameters: [Parameters.apiVersion], + requestBody: Parameters.parameters3, + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.subscriptionId, @@ -696,7 +476,7 @@ const deleteOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.subscriptionId, @@ -717,7 +497,7 @@ const getOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.subscriptionId, @@ -738,7 +518,7 @@ const getBuiltInOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [Parameters.$host, Parameters.policySetDefinitionName], headerParameters: [Parameters.accept], serializer @@ -755,7 +535,7 @@ const listOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.subscriptionId], headerParameters: [Parameters.accept], serializer @@ -771,7 +551,7 @@ const listBuiltInOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host], headerParameters: [Parameters.accept], serializer @@ -791,8 +571,8 @@ const createOrUpdateAtManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - requestBody: Parameters.parameters2, - queryParameters: [Parameters.apiVersion], + requestBody: Parameters.parameters3, + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.managementGroupId, @@ -813,7 +593,7 @@ const deleteAtManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.managementGroupId, @@ -834,7 +614,7 @@ const getAtManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion], + queryParameters: [Parameters.apiVersion1], urlParameters: [ Parameters.$host, Parameters.managementGroupId, @@ -855,7 +635,7 @@ const listByManagementGroupOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.managementGroupId], headerParameters: [Parameters.accept], serializer @@ -871,7 +651,7 @@ const listNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, @@ -891,7 +671,7 @@ const listBuiltInNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [Parameters.$host, Parameters.nextLink], headerParameters: [Parameters.accept], serializer @@ -907,63 +687,7 @@ const listByManagementGroupNextOperationSpec: coreClient.OperationSpec = { bodyMapper: Mappers.CloudError } }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.managementGroupId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicySetDefinitionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [ - Parameters.$host, - Parameters.nextLink, - Parameters.subscriptionId - ], - headerParameters: [Parameters.accept], - serializer -}; -const listBuiltInNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicySetDefinitionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], - urlParameters: [Parameters.$host, Parameters.nextLink], - headerParameters: [Parameters.accept], - serializer -}; -const listByManagementGroupNextNextOperationSpec: coreClient.OperationSpec = { - path: "{nextLink}", - httpMethod: "GET", - responses: { - 200: { - bodyMapper: Mappers.PolicySetDefinitionListResult - }, - default: { - bodyMapper: Mappers.CloudError - } - }, - queryParameters: [Parameters.apiVersion, Parameters.filter, Parameters.top], + queryParameters: [Parameters.filter, Parameters.apiVersion1, Parameters.top], urlParameters: [ Parameters.$host, Parameters.nextLink, diff --git a/sdk/policy/arm-policy/src/operationsInterfaces/dataPolicyManifests.ts b/sdk/policy/arm-policy/src/operationsInterfaces/dataPolicyManifests.ts index aeefe270d166..f6c486278f94 100644 --- a/sdk/policy/arm-policy/src/operationsInterfaces/dataPolicyManifests.ts +++ b/sdk/policy/arm-policy/src/operationsInterfaces/dataPolicyManifests.ts @@ -6,11 +6,9 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { DataPolicyManifest, - DataPolicyManifestsListNextOptionalParams, DataPolicyManifestsListOptionalParams, DataPolicyManifestsGetByPolicyModeOptionalParams, DataPolicyManifestsGetByPolicyModeResponse @@ -30,15 +28,6 @@ export interface DataPolicyManifests { list( options?: DataPolicyManifestsListOptionalParams ): PagedAsyncIterableIterator; - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - listNext( - nextLink: string, - options?: DataPolicyManifestsListNextOptionalParams - ): PagedAsyncIterableIterator; /** * This operation retrieves the data policy manifest with the given policy mode. * @param policyMode The policy mode of the data policy manifest to get. diff --git a/sdk/policy/arm-policy/src/operationsInterfaces/policyAssignments.ts b/sdk/policy/arm-policy/src/operationsInterfaces/policyAssignments.ts index 5d0b76c36350..88b1af30048a 100644 --- a/sdk/policy/arm-policy/src/operationsInterfaces/policyAssignments.ts +++ b/sdk/policy/arm-policy/src/operationsInterfaces/policyAssignments.ts @@ -6,17 +6,12 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicyAssignment, - PolicyAssignmentsListForResourceGroupNextOptionalParams, PolicyAssignmentsListForResourceGroupOptionalParams, - PolicyAssignmentsListForResourceNextOptionalParams, PolicyAssignmentsListForResourceOptionalParams, - PolicyAssignmentsListForManagementGroupNextOptionalParams, PolicyAssignmentsListForManagementGroupOptionalParams, - PolicyAssignmentsListNextOptionalParams, PolicyAssignmentsListOptionalParams, PolicyAssignmentsDeleteOptionalParams, PolicyAssignmentsDeleteResponse, @@ -24,12 +19,17 @@ import { PolicyAssignmentsCreateResponse, PolicyAssignmentsGetOptionalParams, PolicyAssignmentsGetResponse, + PolicyAssignmentUpdate, + PolicyAssignmentsUpdateOptionalParams, + PolicyAssignmentsUpdateResponse, PolicyAssignmentsDeleteByIdOptionalParams, PolicyAssignmentsDeleteByIdResponse, PolicyAssignmentsCreateByIdOptionalParams, PolicyAssignmentsCreateByIdResponse, PolicyAssignmentsGetByIdOptionalParams, - PolicyAssignmentsGetByIdResponse + PolicyAssignmentsGetByIdResponse, + PolicyAssignmentsUpdateByIdOptionalParams, + PolicyAssignmentsUpdateByIdResponse } from "../models"; /// @@ -127,58 +127,6 @@ export interface PolicyAssignments { list( options?: PolicyAssignmentsListOptionalParams ): PagedAsyncIterableIterator; - /** - * ListForResourceGroupNext - * @param resourceGroupName The name of the resource group that contains policy assignments. - * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. - * @param options The options parameters. - */ - listForResourceGroupNext( - resourceGroupName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceGroupNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListForResourceNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace - * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) - * @param parentResourcePath The parent resource path. Use empty string if there is none. - * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from - * Microsoft.Web/sites). - * @param resourceName The name of the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResource method. - * @param options The options parameters. - */ - listForResourceNext( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyAssignmentsListForResourceNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListForManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListForManagementGroup method. - * @param options The options parameters. - */ - listForManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicyAssignmentsListForManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - listNext( - nextLink: string, - options?: PolicyAssignmentsListNextOptionalParams - ): PagedAsyncIterableIterator; /** * This operation deletes a policy assignment, given its name and the scope it was created in. The * scope of a policy assignment is the part of its ID preceding @@ -230,6 +178,25 @@ export interface PolicyAssignments { policyAssignmentName: string, options?: PolicyAssignmentsGetOptionalParams ): Promise; + /** + * This operation updates a policy assignment with the given scope and name. Policy assignments apply + * to all resources contained within their scope. For example, when you assign a policy at resource + * group scope, that policy applies to all resources in the group. + * @param scope The scope of the policy assignment. Valid scopes are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}' + * @param policyAssignmentName The name of the policy assignment. + * @param parameters Parameters for policy assignment patch request. + * @param options The options parameters. + */ + update( + scope: string, + policyAssignmentName: string, + parameters: PolicyAssignmentUpdate, + options?: PolicyAssignmentsUpdateOptionalParams + ): Promise; /** * This operation deletes the policy with the given ID. Policy assignment IDs have this format: * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. Valid formats @@ -282,4 +249,24 @@ export interface PolicyAssignments { policyAssignmentId: string, options?: PolicyAssignmentsGetByIdOptionalParams ): Promise; + /** + * This operation updates the policy assignment with the given ID. Policy assignments made on a scope + * apply to all resources contained in that scope. For example, when you assign a policy to a resource + * group that policy applies to all resources in the group. Policy assignment IDs have this format: + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. Valid scopes + * are: management group (format: + * '/providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format: + * '/subscriptions/{subscriptionId}'), resource group (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', or resource (format: + * '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}'. + * @param policyAssignmentId The ID of the policy assignment to update. Use the format + * '{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}'. + * @param parameters Parameters for policy assignment patch request. + * @param options The options parameters. + */ + updateById( + policyAssignmentId: string, + parameters: PolicyAssignmentUpdate, + options?: PolicyAssignmentsUpdateByIdOptionalParams + ): Promise; } diff --git a/sdk/policy/arm-policy/src/operationsInterfaces/policyDefinitions.ts b/sdk/policy/arm-policy/src/operationsInterfaces/policyDefinitions.ts index 2126a4e57f23..3a2ca8d77fd1 100644 --- a/sdk/policy/arm-policy/src/operationsInterfaces/policyDefinitions.ts +++ b/sdk/policy/arm-policy/src/operationsInterfaces/policyDefinitions.ts @@ -6,15 +6,11 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicyDefinition, - PolicyDefinitionsListNextOptionalParams, PolicyDefinitionsListOptionalParams, - PolicyDefinitionsListBuiltInNextOptionalParams, PolicyDefinitionsListBuiltInOptionalParams, - PolicyDefinitionsListByManagementGroupNextOptionalParams, PolicyDefinitionsListByManagementGroupOptionalParams, PolicyDefinitionsCreateOrUpdateOptionalParams, PolicyDefinitionsCreateOrUpdateResponse, @@ -78,35 +74,6 @@ export interface PolicyDefinitions { managementGroupId: string, options?: PolicyDefinitionsListByManagementGroupOptionalParams ): PagedAsyncIterableIterator; - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - listNext( - nextLink: string, - options?: PolicyDefinitionsListNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListBuiltInNext - * @param nextLink The nextLink from the previous successful call to the ListBuiltIn method. - * @param options The options parameters. - */ - listBuiltInNext( - nextLink: string, - options?: PolicyDefinitionsListBuiltInNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListByManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListByManagementGroup method. - * @param options The options parameters. - */ - listByManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicyDefinitionsListByManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator; /** * This operation creates or updates a policy definition in the given subscription with the given name. * @param policyDefinitionName The name of the policy definition to create. diff --git a/sdk/policy/arm-policy/src/operationsInterfaces/policyExemptions.ts b/sdk/policy/arm-policy/src/operationsInterfaces/policyExemptions.ts index f58691a4d3a2..7fdc61601594 100644 --- a/sdk/policy/arm-policy/src/operationsInterfaces/policyExemptions.ts +++ b/sdk/policy/arm-policy/src/operationsInterfaces/policyExemptions.ts @@ -6,17 +6,12 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicyExemption, - PolicyExemptionsListNextOptionalParams, PolicyExemptionsListOptionalParams, - PolicyExemptionsListForResourceGroupNextOptionalParams, PolicyExemptionsListForResourceGroupOptionalParams, - PolicyExemptionsListForResourceNextOptionalParams, PolicyExemptionsListForResourceOptionalParams, - PolicyExemptionsListForManagementGroupNextOptionalParams, PolicyExemptionsListForManagementGroupOptionalParams, PolicyExemptionsDeleteOptionalParams, PolicyExemptionsCreateOrUpdateOptionalParams, @@ -101,58 +96,6 @@ export interface PolicyExemptions { managementGroupId: string, options?: PolicyExemptionsListForManagementGroupOptionalParams ): PagedAsyncIterableIterator; - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - listNext( - nextLink: string, - options?: PolicyExemptionsListNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListForResourceGroupNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResourceGroup method. - * @param options The options parameters. - */ - listForResourceGroupNext( - resourceGroupName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceGroupNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListForResourceNext - * @param resourceGroupName The name of the resource group containing the resource. - * @param resourceProviderNamespace The namespace of the resource provider. For example, the namespace - * of a virtual machine is Microsoft.Compute (from Microsoft.Compute/virtualMachines) - * @param parentResourcePath The parent resource path. Use empty string if there is none. - * @param resourceType The resource type name. For example the type name of a web app is 'sites' (from - * Microsoft.Web/sites). - * @param resourceName The name of the resource. - * @param nextLink The nextLink from the previous successful call to the ListForResource method. - * @param options The options parameters. - */ - listForResourceNext( - resourceGroupName: string, - resourceProviderNamespace: string, - parentResourcePath: string, - resourceType: string, - resourceName: string, - nextLink: string, - options?: PolicyExemptionsListForResourceNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListForManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListForManagementGroup method. - * @param options The options parameters. - */ - listForManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicyExemptionsListForManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator; /** * This operation deletes a policy exemption, given its name and the scope it was created in. The scope * of a policy exemption is the part of its ID preceding diff --git a/sdk/policy/arm-policy/src/operationsInterfaces/policySetDefinitions.ts b/sdk/policy/arm-policy/src/operationsInterfaces/policySetDefinitions.ts index cad035b90660..cec9ce211322 100644 --- a/sdk/policy/arm-policy/src/operationsInterfaces/policySetDefinitions.ts +++ b/sdk/policy/arm-policy/src/operationsInterfaces/policySetDefinitions.ts @@ -6,15 +6,11 @@ * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ -import "@azure/core-paging"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { PolicySetDefinition, - PolicySetDefinitionsListNextOptionalParams, PolicySetDefinitionsListOptionalParams, - PolicySetDefinitionsListBuiltInNextOptionalParams, PolicySetDefinitionsListBuiltInOptionalParams, - PolicySetDefinitionsListByManagementGroupNextOptionalParams, PolicySetDefinitionsListByManagementGroupOptionalParams, PolicySetDefinitionsCreateOrUpdateOptionalParams, PolicySetDefinitionsCreateOrUpdateResponse, @@ -76,35 +72,6 @@ export interface PolicySetDefinitions { managementGroupId: string, options?: PolicySetDefinitionsListByManagementGroupOptionalParams ): PagedAsyncIterableIterator; - /** - * ListNext - * @param nextLink The nextLink from the previous successful call to the List method. - * @param options The options parameters. - */ - listNext( - nextLink: string, - options?: PolicySetDefinitionsListNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListBuiltInNext - * @param nextLink The nextLink from the previous successful call to the ListBuiltIn method. - * @param options The options parameters. - */ - listBuiltInNext( - nextLink: string, - options?: PolicySetDefinitionsListBuiltInNextOptionalParams - ): PagedAsyncIterableIterator; - /** - * ListByManagementGroupNext - * @param managementGroupId The ID of the management group. - * @param nextLink The nextLink from the previous successful call to the ListByManagementGroup method. - * @param options The options parameters. - */ - listByManagementGroupNext( - managementGroupId: string, - nextLink: string, - options?: PolicySetDefinitionsListByManagementGroupNextOptionalParams - ): PagedAsyncIterableIterator; /** * This operation creates or updates a policy set definition in the given subscription with the given * name. diff --git a/sdk/policy/arm-policy/src/policyClientContext.ts b/sdk/policy/arm-policy/src/policyClientContext.ts index 9aa4f53ba910..94094f2e44b9 100644 --- a/sdk/policy/arm-policy/src/policyClientContext.ts +++ b/sdk/policy/arm-policy/src/policyClientContext.ts @@ -41,7 +41,7 @@ export class PolicyClientContext extends coreClient.ServiceClient { credential: credentials }; - const packageDetails = `azsdk-js-arm-policy/5.0.0-beta.1`; + const packageDetails = `azsdk-js-arm-policy/5.0.0-beta.2`; const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` diff --git a/sdk/policy/arm-policy/test/policy_examples.ts b/sdk/policy/arm-policy/test/policy_examples.ts new file mode 100644 index 000000000000..dd8a7657b614 --- /dev/null +++ b/sdk/policy/arm-policy/test/policy_examples.ts @@ -0,0 +1,123 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * + * Code generated by Microsoft (R) AutoRest Code Generator. + * Changes may cause incorrect behavior and will be lost if the code is regenerated. + */ + +import { + env, + record, + RecorderEnvironmentSetup, + Recorder +} from "@azure-tools/test-recorder"; +import * as assert from "assert"; +import { ClientSecretCredential } from "@azure/identity"; +import { PolicyClient } from "../src/policyClient"; + +const recorderEnvSetup: RecorderEnvironmentSetup = { + replaceableVariables: { + AZURE_CLIENT_ID: "azure_client_id", + AZURE_CLIENT_SECRET: "azure_client_secret", + AZURE_TENANT_ID: "88888888-8888-8888-8888-888888888888", + SUBSCRIPTION_ID: "azure_subscription_id" + }, + customizationsOnRecordings: [ + (recording: any): any => + recording.replace( + /"access_token":"[^"]*"/g, + `"access_token":"access_token"` + ) + ], + queryParametersToSkip: [] +}; + +describe("Policy test", () => { + let recorder: Recorder; + let subscriptionId: string; + let client: PolicyClient; + let location: string; + let resourceGroupName: string; + let policyName: string; + let groupId: string; + let policyAssignmentName: string; + let scope: string; + + beforeEach(async function() { + recorder = record(this, recorderEnvSetup); + subscriptionId = env.SUBSCRIPTION_ID; + // This is an example of how the environment variables are used + const credential = new ClientSecretCredential( + env.AZURE_TENANT_ID, + env.AZURE_CLIENT_ID, + env.AZURE_CLIENT_SECRET + ); + client = new PolicyClient(credential, subscriptionId); + location = "eastus"; + resourceGroupName = "myjstest"; + policyName = "policynameaxx"; + groupId = "20000000-0001-0000-0000-000000000123"; + policyAssignmentName = "passigment"; + scope ="/providers/Microsoft.Management/managementgroups/20000000-0001-0000-0000-000000000123/"; + }); + + afterEach(async function() { + await recorder.stop(); + }); + + //policyDefinitions.createOrUpdateAtManagementGroup + async function policyDefinitions_createOrUpdateAtManagementGroup() { + const definition = await client.policyDefinitions.createOrUpdateAtManagementGroup(policyName,groupId,{ + policyType: "Custom", + description: "Don't create a VM anywhere", + policyRule: { + if: { + allof: [ + { + source: "action", + equals: "Microsoft.Compute/virtualMachines/write", + }, + { + field: "location", + in: ["eastus", "eastus2", "centralus"], + }, + ], + }, + then: { + effect: "deny", + }, + } + }); + console.log(definition); + } + + it("policyAssignments create test", async function() { + await policyDefinitions_createOrUpdateAtManagementGroup(); + const definition = await client.policyDefinitions.getAtManagementGroup(policyName,groupId); + const res = await client.policyAssignments.create(scope,policyAssignmentName,{ policyDefinitionId: definition.id }); + assert.equal(res.name,policyAssignmentName); + }); + + it("policyAssignments get test", async function() { + const res = await client.policyAssignments.get(scope,policyAssignmentName) + assert.equal(res.name,policyAssignmentName); + }); + + it("policyAssignments list test", async function() { + const resArray = new Array(); + for await (const item of client.policyAssignments.list()) { + resArray.push(item); + } + assert.notEqual(resArray.length,0); + }); + + it("policyAssignments delete test", async function() { + const res = await client.policyAssignments.delete(scope,policyAssignmentName); + const resArray = new Array(); + for await (const item of client.policyAssignments.list()) { + resArray.push(item); + } + assert.notEqual(resArray.length,0); + }); +}); diff --git a/sdk/policy/arm-policy/tsconfig.json b/sdk/policy/arm-policy/tsconfig.json index 0ec8659c8e83..6e3251194117 100644 --- a/sdk/policy/arm-policy/tsconfig.json +++ b/sdk/policy/arm-policy/tsconfig.json @@ -9,12 +9,11 @@ "esModuleInterop": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, - "preserveConstEnums": true, "lib": ["es6", "dom"], "declaration": true, - "outDir": "./esm", + "outDir": "./dist-esm", "importHelpers": true }, - "include": ["./src/**/*.ts"], + "include": ["./src/**/*.ts", "./test/**/*.ts"], "exclude": ["node_modules"] }