From c1d3781888f2bbb979abd8fbeba35739b921ed5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20Ayd=C4=B1n?= Date: Tue, 3 Feb 2026 23:15:16 +0300 Subject: [PATCH 01/19] chore: update sync.sh to use Server API v4 Update sync script to fetch v4 schema and examples. Removes deprecated v3-only mocks. Related-Task: INTER-1795 --- res/fingerprint-server-api.yaml | 3789 +++++++---------- sync.sh | 66 +- test/mocks/errors/400_visitor_id_invalid.json | 2 +- .../mocks/errors/400_visitor_id_required.json | 2 +- .../mocks/errors/403_feature_not_enabled.json | 2 +- .../errors/403_secret_api_key_not_found.json | 6 + .../errors/403_secret_api_key_required.json | 6 + test/mocks/errors/403_token_not_found.json | 6 - test/mocks/errors/403_token_required.json | 6 - test/mocks/errors/403_wrong_region.json | 2 +- test/mocks/errors/404_visitor_not_found.json | 2 +- test/mocks/errors/429_too_many_requests.json | 2 +- test/mocks/events/get_event_200.json | 282 ++ .../events/search/get_event_search_200.json | 287 ++ .../update_event_multiple_fields_request.json | 7 + .../update_event_one_field_request.json | 3 + test/mocks/get_event_200.json | 354 -- test/mocks/get_event_200_all_errors.json | 164 - .../get_event_200_botd_failed_error.json | 69 - test/mocks/get_event_200_extra_fields.json | 91 - ...event_200_identification_failed_error.json | 23 - ...get_event_200_too_many_requests_error.json | 16 - .../get_event_200_with_broken_format.json | 301 -- .../get_event_200_with_unknown_field.json | 299 -- test/mocks/get_event_search_200.json | 354 -- test/mocks/get_visitors_200_limit_1.json | 61 - test/mocks/get_visitors_200_limit_500.json | 3030 ------------- test/mocks/get_visitors_400_bad_request.json | 3 - test/mocks/get_visitors_403_forbidden.json | 3 - .../get_visitors_429_too_many_requests.json | 3 - .../get_related_visitors_200.json | 10 - .../get_related_visitors_200_empty.json | 3 - .../update_event_multiple_fields_request.json | 7 - .../mocks/update_event_one_field_request.json | 3 - test/mocks/webhook.json | 293 -- test/mocks/webhook/webhook_event.json | 282 ++ 36 files changed, 2498 insertions(+), 7341 deletions(-) create mode 100644 test/mocks/errors/403_secret_api_key_not_found.json create mode 100644 test/mocks/errors/403_secret_api_key_required.json delete mode 100644 test/mocks/errors/403_token_not_found.json delete mode 100644 test/mocks/errors/403_token_required.json create mode 100644 test/mocks/events/get_event_200.json create mode 100644 test/mocks/events/search/get_event_search_200.json create mode 100644 test/mocks/events/update_event_multiple_fields_request.json create mode 100644 test/mocks/events/update_event_one_field_request.json delete mode 100644 test/mocks/get_event_200.json delete mode 100644 test/mocks/get_event_200_all_errors.json delete mode 100644 test/mocks/get_event_200_botd_failed_error.json delete mode 100644 test/mocks/get_event_200_extra_fields.json delete mode 100644 test/mocks/get_event_200_identification_failed_error.json delete mode 100644 test/mocks/get_event_200_too_many_requests_error.json delete mode 100644 test/mocks/get_event_200_with_broken_format.json delete mode 100644 test/mocks/get_event_200_with_unknown_field.json delete mode 100644 test/mocks/get_event_search_200.json delete mode 100644 test/mocks/get_visitors_200_limit_1.json delete mode 100644 test/mocks/get_visitors_200_limit_500.json delete mode 100644 test/mocks/get_visitors_400_bad_request.json delete mode 100644 test/mocks/get_visitors_403_forbidden.json delete mode 100644 test/mocks/get_visitors_429_too_many_requests.json delete mode 100644 test/mocks/related-visitors/get_related_visitors_200.json delete mode 100644 test/mocks/related-visitors/get_related_visitors_200_empty.json delete mode 100644 test/mocks/update_event_multiple_fields_request.json delete mode 100644 test/mocks/update_event_one_field_request.json delete mode 100644 test/mocks/webhook.json create mode 100644 test/mocks/webhook/webhook_event.json diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index 71a4fa75..8da52a0c 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -1,14 +1,14 @@ -openapi: 3.0.3 +openapi: 3.1.1 info: - title: Fingerprint Server API + title: Server API description: > - Fingerprint Server API allows you to search, update, and delete - identification events in a server environment. It can be used for data - exports, decision-making, and data analysis scenarios. + Fingerprint Server API allows you to get, search, and update Events in a + server environment. It can be used for data exports, decision-making, and + data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. - version: '3' + version: '4' contact: name: Fingerprint Support email: support@fingerprint.com @@ -25,37 +25,30 @@ tags: description: API documentation url: https://dev.fingerprint.com/reference/pro-server-api servers: - - url: https://api.fpjs.io + - url: https://api.fpjs.io/v4 description: Global - - url: https://eu.api.fpjs.io + - url: https://eu.api.fpjs.io/v4 description: EU - - url: https://ap.api.fpjs.io + - url: https://ap.api.fpjs.io/v4 description: Asia (Mumbai) security: - - ApiKeyHeader: [] - - ApiKeyQuery: [] + - bearerAuth: [] paths: - /events/{request_id}: + /events/{event_id}: get: tags: - Fingerprint operationId: getEvent - summary: Get event by request ID + summary: Get an event by event ID description: > Get a detailed analysis of an individual identification event, including - Smart Signals. + Smart Signals. - Please note that the response includes mobile signals (e.g. `rootApps`) - even if the request originated from a non-mobile platform. - It is highly recommended that you **ignore** the mobile signals for such - requests. - - - Use `requestId` as the URL path parameter. This API method is scoped to - a request, i.e. all returned information is by `requestId`. + Use `event_id` as the URL path parameter. This API method is scoped to a + request, i.e. all returned information is by `event_id`. parameters: - - name: request_id + - name: event_id in: path required: true schema: @@ -63,14 +56,32 @@ paths: description: >- The unique [identifier](https://dev.fingerprint.com/reference/get-function#requestid) - of each identification request. + of each identification request (`requestId` can be used in its + place). + - name: ruleset_id + in: query + required: false + schema: + type: string + description: > + The ID of the ruleset to evaluate against the event, producing the + action to take for this event. + + The resulting action is returned in the `rule_action` attribute of + the response. responses: '200': description: OK. content: application/json: schema: - $ref: '#/components/schemas/EventsGetResponse' + $ref: '#/components/schemas/Event' + '400': + description: Bad request. The event Id provided is not valid. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden. Access to this API is denied. content: @@ -78,45 +89,64 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: >- - Not found. The request ID cannot be found in this application's - data. + description: Not found. The event Id cannot be found in this workspace's data. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + '429': + description: Too Many Requests. The request is throttled. + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + '500': + description: Workspace error. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - put: + patch: tags: - Fingerprint operationId: updateEvent - summary: Update an event with a given request ID + summary: Update an event description: > - Change information in existing events specified by `requestId` or *flag + Change information in existing events specified by `event_id` or *flag suspicious events*. - When an event is created, it is assigned `linkedId` and `tag` submitted - through the JS agent parameters. This information might not be available - on the client so the Server API allows for updating the attributes after - the fact. + When an event is created, it can be assigned `linked_id` and `tags` + submitted through the JS agent parameters. + This information might not have been available on the client initially, + so the Server API permits updating these attributes after the fact. - **Warning** It's not possible to update events older than 10 days. + + **Warning** It's not possible to update events older than one month. + + + **Warning** Trying to update an event immediately after creation may + temporarily result in an + + error (HTTP 409 Conflict. The event is not mutable yet.) as the event is + fully propagated across our systems. In such a case, simply retry the + request. parameters: - - name: request_id + - name: event_id in: path required: true schema: type: string description: >- The unique event - [identifier](https://dev.fingerprint.com/reference/get-function#requestid). + [identifier](https://dev.fingerprint.com/reference/get-function#event_id). requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/EventsUpdateRequest' + $ref: '#/components/schemas/EventUpdate' responses: '200': description: OK. @@ -133,9 +163,7 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: >- - Not found. The request ID cannot be found in this application's - data. + description: Not found. The event Id cannot be found in this workspace's data. content: application/json: schema: @@ -146,29 +174,68 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /events/search: + /events: get: tags: - Fingerprint operationId: searchEvents - summary: Get events via search + summary: Search events description: > - Search for identification events, including Smart Signals, using - multiple filtering criteria. If you don't provide `start` or `end` - parameters, the default search range is the last 7 days. + ## Search + + + The `/v4/events` endpoint provides a convenient way to search for past + events based on specific parameters. Typical use cases and queries + include: - Please note that events include mobile signals (e.g. `rootApps`) even if - the request originated from a non-mobile platform. We recommend you - **ignore** mobile signals for such requests. + - Searching for events associated with a single `visitor_id` within a + time range to get historical behavior of a visitor. + + - Searching for events associated with a single `linked_id` within a + time range to get all events associated with your internal account + identifier. + + - Excluding all bot traffic from the query (`good` and `bad` bots) + + + If you don't provide `start` or `end` parameters, the default search + range is the **last 7 days**. + + + ### Filtering events with the `suspect` flag + + + The `/v4/events` endpoint unlocks a powerful method for fraud protection + analytics. The `suspect` flag is exposed in all events where it was + previously set by the update API. + + + You can also apply the `suspect` query parameter as a filter to find all + potentially fraudulent activity that you previously marked as `suspect`. + This helps identify patterns of fraudulent behavior. + + + ### Environment scoping + + + If you use a secret key that is scoped to an environment, you will only + get events associated with the same environment. With a workspace-scoped + environment, you will get events from all environments. + + + Smart Signals not activated for your workspace or are not included in + the response. parameters: - name: limit in: query - required: true + required: false schema: type: integer format: int32 minimum: 1 + maximum: 100 + default: 10 example: 10 description: | Limit the number of events returned. @@ -177,24 +244,22 @@ paths: schema: type: string description: > - Use `pagination_key` to get the next page of results. + Use `pagination_key` to get the next page of results. - When more results are available (e.g., you requested up to 200 - results for your search using `limit`, but there are more than 200 - events total matching your request), the `paginationKey` top-level - attribute is added to the response. The key corresponds to the - `timestamp` of the last returned event. In the following request, - use that value in the `pagination_key` parameter to get the next - page of results: + When more results are available (e.g., you requested up to 100 + results for your query using `limit`, but there are more than 100 + events total matching your request), the `pagination_key` field is + added to the response. The key corresponds to the `timestamp` of the + last returned event. In the following request, use that value in the + `pagination_key` parameter to get the next page of results: 1. First request, returning most recent 200 events: `GET - api-base-url/events/search?limit=200` + api-base-url/events?limit=100` - 2. Use `response.paginationKey` to get the next page of results: - `GET - api-base-url/events/search?limit=200&pagination_key=1740815825085` + 2. Use `response.pagination_key` to get the next page of results: + `GET api-base-url/events?limit=100&pagination_key=1740815825085` - name: visitor_id in: query schema: @@ -202,7 +267,7 @@ paths: description: > Unique [visitor identifier](https://dev.fingerprint.com/reference/get-function#visitorid) - issued by Fingerprint Pro. + issued by Fingerprint Identification and all active Smart Signals. Filter for events matching this `visitor_id`. - name: bot @@ -215,39 +280,73 @@ paths: - bad - none description: > - Filter events by the Bot Detection result, specifically: + Filter events by the Bot Detection result, specifically: `all` - events where any kind of bot was detected. `good` - events where a good bot was detected. `bad` - events where a bad bot was detected. `none` - events where no bot was detected. - > Note: When using this parameter, only events with the - `products.botd.data.bot.result` property set to a valid value are - returned. Events without a `products.botd` Smart Signal result are - left out of the response. + > Note: When using this parameter, only events with the `botd.bot` + property set to a valid value are returned. Events without a `botd` + Smart Signal result are left out of the response. - name: ip_address in: query schema: type: string description: > - Filter events by IP address range. The range can be as specific as a - single IP (/32 for IPv4 or /128 for IPv6) + Filter events by IP address or IP range (if CIDR notation is used). + If CIDR notation is not used, a /32 for IPv4 or /128 for IPv6 is + assumed. + + Examples of range based queries: 10.0.0.0/24, 192.168.0.1/32 + - name: asn + in: query + schema: + type: string + description: > + Filter events by the ASN associated with the event's IP address. - All ip_address filters must use CIDR notation, for example, - 10.0.0.0/24, 192.168.0.1/32 + This corresponds to the `ip_info.(v4|v6).asn` property in the + response. - name: linked_id in: query schema: type: string description: > - Filter events by your custom identifier. + Filter events by your custom identifier. You can use [linked - IDs](https://dev.fingerprint.com/reference/get-function#linkedid) to + Ids](https://dev.fingerprint.com/reference/get-function#linkedid) to associate identification requests with your own identifier, for - example, session ID, purchase ID, or transaction ID. You can then + example, session Id, purchase Id, or transaction Id. You can then use this `linked_id` parameter to retrieve all events associated with your custom identifier. + - name: url + in: query + schema: + type: string + description: | + Filter events by the URL (`url` property) associated with the event. + - name: bundle_id + in: query + schema: + type: string + description: | + Filter events by the Bundle ID (iOS) associated with the event. + - name: package_name + in: query + schema: + type: string + description: > + Filter events by the Package Name (Android) associated with the + event. + - name: origin + in: query + schema: + type: string + description: > + Filter events by the origin field of the event. This is applicable + to web events only (e.g., https://example.com) - name: start in: query schema: @@ -276,7 +375,7 @@ paths: type: boolean description: > Filter events previously tagged as suspicious via the [Update - API](https://dev.fingerprint.com/reference/updateevent). + API](https://dev.fingerprint.com/reference/updateevent). > Note: When using this parameter, only events with the `suspect` property explicitly set to `true` or `false` are returned. Events @@ -286,143 +385,135 @@ paths: schema: type: boolean description: > - Filter events by VPN Detection result. + Filter events by VPN Detection result. - > Note: When using this parameter, only events with the - `products.vpn.data.result` property set to `true` or `false` are - returned. Events without a `products.vpn` Smart Signal result are - left out of the response. + > Note: When using this parameter, only events with the `vpn` + property set to `true` or `false` are returned. Events without a + `vpn` Smart Signal result are left out of the response. - name: virtual_machine in: query schema: type: boolean description: > - Filter events by Virtual Machine Detection result. + Filter events by Virtual Machine Detection result. > Note: When using this parameter, only events with the - `products.virtualMachine.data.result` property set to `true` or - `false` are returned. Events without a `products.virtualMachine` - Smart Signal result are left out of the response. + `virtual_machine` property set to `true` or `false` are returned. + Events without a `virtual_machine` Smart Signal result are left out + of the response. - name: tampering in: query schema: type: boolean description: > - Filter events by Tampering Detection result. + Filter events by Browser Tampering Detection result. > Note: When using this parameter, only events with the - `products.tampering.data.result` property set to `true` or `false` - are returned. Events without a `products.tampering` Smart Signal - result are left out of the response. + `tampering.result` property set to `true` or `false` are returned. + Events without a `tampering` Smart Signal result are left out of the + response. - name: anti_detect_browser in: query schema: type: boolean description: > - Filter events by Anti-detect Browser Detection result. + Filter events by Anti-detect Browser Detection result. > Note: When using this parameter, only events with the - `products.tampering.data.antiDetectBrowser` property set to `true` - or `false` are returned. Events without a `products.tampering` Smart - Signal result are left out of the response. + `tampering.anti_detect_browser` property set to `true` or `false` + are returned. Events without a `tampering` Smart Signal result are + left out of the response. - name: incognito in: query schema: type: boolean description: > - Filter events by Browser Incognito Detection result. + Filter events by Browser Incognito Detection result. - > Note: When using this parameter, only events with the - `products.incognito.data.result` property set to `true` or `false` - are returned. Events without a `products.incognito` Smart Signal - result are left out of the response. + > Note: When using this parameter, only events with the `incognito` + property set to `true` or `false` are returned. Events without an + `incognito` Smart Signal result are left out of the response. - name: privacy_settings in: query schema: type: boolean description: > - Filter events by Privacy Settings Detection result. + Filter events by Privacy Settings Detection result. > Note: When using this parameter, only events with the - `products.privacySettings.data.result` property set to `true` or - `false` are returned. Events without a `products.privacySettings` - Smart Signal result are left out of the response. + `privacy_settings` property set to `true` or `false` are returned. + Events without a `privacy_settings` Smart Signal result are left out + of the response. - name: jailbroken in: query schema: type: boolean description: > - Filter events by Jailbroken Device Detection result. + Filter events by Jailbroken Device Detection result. - > Note: When using this parameter, only events with the - `products.jailbroken.data.result` property set to `true` or `false` - are returned. Events without a `products.jailbroken` Smart Signal - result are left out of the response. + > Note: When using this parameter, only events with the `jailbroken` + property set to `true` or `false` are returned. Events without a + `jailbroken` Smart Signal result are left out of the response. - name: frida in: query schema: type: boolean description: > - Filter events by Frida Detection result. + Filter events by Frida Detection result. - > Note: When using this parameter, only events with the - `products.frida.data.result` property set to `true` or `false` are - returned. Events without a `products.frida` Smart Signal result are - left out of the response. + > Note: When using this parameter, only events with the `frida` + property set to `true` or `false` are returned. Events without a + `frida` Smart Signal result are left out of the response. - name: factory_reset in: query schema: type: boolean description: > - Filter events by Factory Reset Detection result. + Filter events by Factory Reset Detection result. - > Note: When using this parameter, only events with the - `products.factoryReset.data.result` property set to `true` or - `false` are returned. Events without a `products.factoryReset` Smart - Signal result are left out of the response. + > Note: When using this parameter, only events with a + `factory_reset` time. Events without a `factory_reset` Smart Signal + result are left out of the response. - name: cloned_app in: query schema: type: boolean description: > - Filter events by Cloned App Detection result. + Filter events by Cloned App Detection result. - > Note: When using this parameter, only events with the - `products.clonedApp.data.result` property set to `true` or `false` - are returned. Events without a `products.clonedApp` Smart Signal - result are left out of the response. + > Note: When using this parameter, only events with the `cloned_app` + property set to `true` or `false` are returned. Events without a + `cloned_app` Smart Signal result are left out of the response. - name: emulator in: query schema: type: boolean description: > - Filter events by Android Emulator Detection result. + Filter events by Android Emulator Detection result. - > Note: When using this parameter, only events with the - `products.emulator.data.result` property set to `true` or `false` - are returned. Events without a `products.emulator` Smart Signal - result are left out of the response. + > Note: When using this parameter, only events with the `emulator` + property set to `true` or `false` are returned. Events without an + `emulator` Smart Signal result are left out of the response. - name: root_apps in: query schema: type: boolean description: > - Filter events by Rooted Device Detection result. + Filter events by Rooted Device Detection result. - > Note: When using this parameter, only events with the - `products.rootApps.data.result` property set to `true` or `false` - are returned. Events without a `products.rootApps` Smart Signal - result are left out of the response. + > Note: When using this parameter, only events with the `root_apps` + property set to `true` or `false` are returned. Events without a + `root_apps` Smart Signal result are left out of the response. - name: vpn_confidence in: query schema: type: string enum: - - high + - high, - medium - low description: > - Filter events by VPN Detection result confidence level. + Filter events by VPN Detection result confidence level. `high` - events with high VPN Detection confidence. @@ -431,9 +522,8 @@ paths: `low` - events with low VPN Detection confidence. > Note: When using this parameter, only events with the - `products.vpn.data.confidence` property set to a valid value are - returned. Events without a `products.vpn` Smart Signal result are - left out of the response. + `vpn.confidence` property set to a valid value are returned. Events + without a `vpn` Smart Signal result are left out of the response. - name: min_suspect_score in: query schema: @@ -444,33 +534,9 @@ paths: threshold. > Note: When using this parameter, only events where the - `products.suspectScore.data.result` property set to a value - exceeding your threshold are returned. Events without a - `products.suspectScore` Smart Signal result are left out of the - response. - - name: ip_blocklist - in: query - schema: - type: boolean - description: > - Filter events by IP Blocklist Detection result. - - > Note: When using this parameter, only events with the - `products.ipBlocklist.data.result` property set to `true` or `false` - are returned. Events without a `products.ipBlocklist` Smart Signal - result are left out of the response. - - name: datacenter - in: query - schema: - type: boolean - description: > - Filter events by Datacenter Detection result. - - > Note: When using this parameter, only events with the - `products.ipInfo.data.v4.datacenter.result` or - `products.ipInfo.data.v6.datacenter.result` property set to `true` - or `false` are returned. Events without a `products.ipInfo` Smart - Signal result are left out of the response. + `suspect_score` property set to a value exceeding your threshold are + returned. Events without a `suspect_score` Smart Signal result are + left out of the response. - name: developer_tools in: query schema: @@ -479,9 +545,9 @@ paths: Filter events by Developer Tools detection result. > Note: When using this parameter, only events with the - `products.developerTools.data.result` property set to `true` or - `false` are returned. Events without a `products.developerTools` - Smart Signal result are left out of the response. + `developer_tools` property set to `true` or `false` are returned. + Events without a `developer_tools` Smart Signal result are left out + of the response. - name: location_spoofing in: query schema: @@ -490,9 +556,9 @@ paths: Filter events by Location Spoofing detection result. > Note: When using this parameter, only events with the - `products.locationSpoofing.data.result` property set to `true` or - `false` are returned. Events without a `products.locationSpoofing` - Smart Signal result are left out of the response. + `location_spoofing` property set to `true` or `false` are returned. + Events without a `location_spoofing` Smart Signal result are left + out of the response. - name: mitm_attack in: query schema: @@ -501,9 +567,9 @@ paths: Filter events by MITM (Man-in-the-Middle) Attack detection result. > Note: When using this parameter, only events with the - `products.mitmAttack.data.result` property set to `true` or `false` - are returned. Events without a `products.mitmAttack` Smart Signal - result are left out of the response. + `mitm_attack` property set to `true` or `false` are returned. Events + without a `mitm_attack` Smart Signal result are left out of the + response. - name: proxy in: query schema: @@ -511,17 +577,16 @@ paths: description: > Filter events by Proxy detection result. - > Note: When using this parameter, only events with the - `products.proxy.data.result` property set to `true` or `false` are - returned. Events without a `products.proxy` Smart Signal result are - left out of the response. + > Note: When using this parameter, only events with the `proxy` + property set to `true` or `false` are returned. Events without a + `proxy` Smart Signal result are left out of the response. - name: sdk_version in: query schema: type: string description: > Filter events by a specific SDK version associated with the - identification event. Example: `3.11.14` + identification event (`sdk.version` property). Example: `3.11.14` - name: sdk_platform in: query schema: @@ -532,24 +597,24 @@ paths: - ios description: > Filter events by the SDK Platform associated with the identification - event. + event (`sdk.platform` property) . - `js` - JavaScript agent (Web). + `js` - Javascript agent (Web). `ios` - Apple iOS based devices. `android` - Android based devices. - name: environment in: query - description: | - Filter for events by providing one or more environment IDs. + description: > + Filter for events by providing one or more environment IDs + (`environment_id` property). required: false schema: type: array items: type: string style: form - explode: true - name: proximity_id in: query schema: @@ -558,38 +623,36 @@ paths: Filter events by the most precise Proximity ID provided by default. > Note: When using this parameter, only events with the - `products.proximity.id` property matching the provided ID are - returned. Events without a `products.proximity` result are left out - of the response. - - name: proximity_precision_radius + `proximity.id` property matching the provided ID are returned. + Events without a `proximity` result are left out of the response. + - name: total_hits in: query schema: type: integer - format: int32 - enum: - - 10 - - 25 - - 65 - - 175 - - 450 - - 1200 - - 3300 - - 8500 - - 22500 + format: int64 + minimum: 1 + maximum: 1000 + description: > + When set, the response will include a `total_hits` property with a + count of total query matches across all pages, up to the specified + limit. + - name: tor_node + in: query + schema: + type: boolean description: > - Filter events by Proximity Radius. + Filter events by Tor Node detection result. - > Note: When using this parameter, only events with the - `products.proximity.precisionRadius` property set to a valid value - are returned. Events without a `products.proximity` result are left - out of the response. + > Note: When using this parameter, only events with the `tor_node` + property set to `true` or `false` are returned. Events without a + `tor_node` detection result are left out of the response. responses: '200': description: Events matching the filter(s). content: application/json: schema: - $ref: '#/components/schemas/SearchEventsResponse' + $ref: '#/components/schemas/EventSearch' '400': description: >- Bad request. One or more supplied search parameters are invalid, or @@ -604,162 +667,13 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /visitors/{visitor_id}: - get: - tags: - - Fingerprint - operationId: getVisits - summary: Get visits by visitor ID - description: > - Get a history of visits (identification events) for a specific - `visitorId`. Use the `visitorId` as a URL path parameter. - - Only information from the _Identification_ product is returned. - - - #### Headers - - - * `Retry-After` — Present in case of `429 Too many requests`. Indicates - how long you should wait before making a follow-up request. The value is - non-negative decimal integer indicating the seconds to delay after the - response is received. - x-flatten-optional-params: true - parameters: - - name: visitor_id - in: path - required: true - schema: - type: string - description: >- - Unique [visitor - identifier](https://dev.fingerprint.com/reference/get-function#visitorid) - issued by Fingerprint Pro. - - name: request_id - in: query - schema: - type: string - description: > - Filter visits by `requestId`. - - - Every identification request has a unique identifier associated with - it called `requestId`. This identifier is returned to the client in - the identification - [result](https://dev.fingerprint.com/reference/get-function#requestid). - When you filter visits by `requestId`, only one visit will be - returned. - x-go-skip-pointer: true - - name: linked_id - in: query - schema: - type: string - description: > - Filter visits by your custom identifier. - - - You can use - [`linkedId`](https://dev.fingerprint.com/reference/get-function#linkedid) - to associate identification requests with your own identifier, for - example: session ID, purchase ID, or transaction ID. You can then - use this `linked_id` parameter to retrieve all events associated - with your custom identifier. - x-go-skip-pointer: true - - name: limit - in: query - schema: - type: integer - format: int32 - minimum: 0 - description: > - Limit scanned results. - - - For performance reasons, the API first scans some number of events - before filtering them. Use `limit` to specify how many events are - scanned before they are filtered by `requestId` or `linkedId`. - Results are always returned sorted by the timestamp (most recent - first). - - By default, the most recent 100 visits are scanned, the maximum is - 500. - x-go-skip-pointer: true - - name: paginationKey - in: query - schema: - type: string - description: > - Use `paginationKey` to get the next page of results. - - - When more results are available (e.g., you requested 200 results - using `limit` parameter, but a total of 600 results are available), - the `paginationKey` top-level attribute is added to the response. - The key corresponds to the `requestId` of the last returned event. - In the following request, use that value in the `paginationKey` - parameter to get the next page of results: - - - 1. First request, returning most recent 200 events: `GET - api-base-url/visitors/:visitorId?limit=200` - - 2. Use `response.paginationKey` to get the next page of results: - `GET - api-base-url/visitors/:visitorId?limit=200&paginationKey=1683900801733.Ogvu1j` - - - Pagination happens during scanning and before filtering, so you can - get less visits than the `limit` you specified with more available - on the next page. When there are no more results available for - scanning, the `paginationKey` attribute is not returned. - x-go-skip-pointer: true - - name: before - in: query - deprecated: true - schema: - type: integer - format: int64 - minimum: 0 - description: > - ⚠️ Deprecated pagination method, please use `paginationKey` instead. - Timestamp (in milliseconds since epoch) used to paginate results. - x-go-skip-pointer: true - responses: - '200': - description: OK. - content: - application/json: - schema: - $ref: '#/components/schemas/VisitorsGetResponse' - '400': - description: >- - Bad request. The visitor ID or query parameters are missing or in - the wrong format. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorPlainResponse' - '403': - description: Forbidden. Access to this API is denied. + '500': + description: Workspace error. content: application/json: schema: - $ref: '#/components/schemas/ErrorPlainResponse' - '429': - description: Too Many Requests. The request is throttled. - headers: - Retry-After: - description: >- - Indicates how many seconds you should wait before attempting the - next request. - schema: - type: integer - format: int32 - minimum: 0 - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorPlainResponse' + $ref: '#/components/schemas/ErrorResponse' + /visitors/{visitor_id}: delete: tags: - Fingerprint @@ -769,6 +683,7 @@ paths: Request deleting all data associated with the specified visitor ID. This API is useful for compliance with privacy regulations. + ### Which data is deleted? - Browser (or device) properties @@ -806,16 +721,11 @@ paths: - If the same browser (or device) requests to identify, it will receive a different visitor ID. - - If you request [`/events` - API](https://dev.fingerprint.com/reference/getevent) with a `request_id` + - If you request [`/v4/events` + API](https://dev.fingerprint.com/reference/getevent) with an `event_id` that was made outside of the 10 days, you will still receive a valid response. - - If you request [`/visitors` - API](https://dev.fingerprint.com/reference/getvisits) for the deleted - visitor ID, the response will include identification requests that were - made outside of those 10 days. - ### Interested? @@ -849,9 +759,7 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' '404': - description: >- - Not found. The visitor ID cannot be found in this application's - data. + description: Not found. The visitor ID cannot be found in this workspace's data. content: application/json: schema: @@ -862,243 +770,106 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /related-visitors: - get: - tags: - - Fingerprint - operationId: getRelatedVisitors - summary: Get Related Visitors +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: string + description: >- + Add your Secret API Key to the Authorization header using the standard + Bearer format: `Authorization: Bearer ` + schemas: + EventId: + type: string description: > - Related visitors API lets you link web visits and in-app browser visits - that originated from the same mobile device. - - It searches the past 6 months of identification events to find the - visitor IDs that belong to the same mobile device as the given visitor - ID. - - - ⚠️ Please note that this API is not enabled by default and is billable - separately. ⚠️ - - - If you would like to use Related visitors API, please contact our - [support team](https://fingerprint.com/support). - - To learn more, see [Related visitors API - reference](https://dev.fingerprint.com/reference/related-visitors-api). - parameters: - - name: visitor_id - in: query - required: true - schema: - type: string - description: >- - The [visitor - ID](https://dev.fingerprint.com/reference/get-function#visitorid) - for which you want to find the other visitor IDs that originated - from the same mobile device. - responses: - '200': - description: OK. - content: - application/json: - schema: - $ref: '#/components/schemas/RelatedVisitorsResponse' - '400': - description: >- - Bad request. The visitor ID parameter is missing or in the wrong - format. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '403': - description: Forbidden. Access to this API is denied. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '404': - description: >- - Not found. The visitor ID cannot be found in this application's - data. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '429': - description: Too Many Requests. The request is throttled. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - /webhook: - trace: - summary: Dummy path to describe webhook format. - tags: - - Fingerprint + Unique identifier of the user's request. The first portion of the + event_id is a unix epoch milliseconds timestamp For example: + `1758130560902.8tRtrH` + Timestamp: + description: Timestamp of the event with millisecond precision in Unix time. + type: integer + format: int64 + LinkedId: + type: string + description: A customer-provided id that was sent with the request. + EnvironmentId: + type: string + description: | + Environment Id of the event. For example: `ae_47abaca3db2c7c43` + Suspect: + type: boolean description: >- - Fake path to describe webhook format. More information about webhooks - can be found in the - [documentation](https://dev.fingerprint.com/docs/webhooks) - x-flatten-optional-params: true - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Webhook' - responses: - default: - description: Dummy for the schema - callbacks: - webhook: - webhook: - post: - summary: Webhook example - description: >- - You can use HTTP basic authentication and set up credentials in - your [Fingerprint - account](https://dashboard.fingerprint.com/login) - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Webhook' - responses: - default: - description: The server doesn't validate the answer. -components: - securitySchemes: - ApiKeyHeader: - type: apiKey - in: header - name: Auth-API-Key - ApiKeyQuery: - type: apiKey - in: query - name: api_key - schemas: - BrowserDetails: - type: object - additionalProperties: false - required: - - browserName - - browserFullVersion - - browserMajorVersion - - os - - osVersion - - device - - userAgent - properties: - browserName: - type: string - browserMajorVersion: - type: string - browserFullVersion: - type: string - os: - type: string - osVersion: - type: string - device: - type: string - userAgent: - type: string - GeolocationCity: + Field is `true` if you have previously set the `suspect` flag for this + event using the [Server API Update event + endpoint](https://dev.fingerprint.com/reference/updateevent). + Integration: type: object additionalProperties: false - required: - - name - properties: - name: - type: string - GeolocationCountry: - type: object - additionalProperties: false - required: - - code - - name properties: - code: - type: string - minLength: 2 - maxLength: 2 name: type: string - GeolocationContinent: - type: object - additionalProperties: false - required: - - code - - name - properties: - code: - type: string - minLength: 2 - maxLength: 2 - name: + description: The name of the specific integration, e.g. "fingerprint-pro-react". + version: type: string - GeolocationSubdivision: + description: The version of the specific integration, e.g. "3.11.10". + subintegration: + type: object + additionalProperties: false + properties: + name: + type: string + description: The name of the specific subintegration, e.g. "preact". + version: + type: string + description: The version of the specific subintegration, e.g. "10.21.0". + SDK: type: object + description: Contains information about the SDK used to perform the request. additionalProperties: false required: - - isoCode - - name + - platform + - version properties: - isoCode: + platform: type: string - name: + enum: + - js + - android + - ios + - unknown + description: Platform of the SDK used for the identification request. + version: type: string - GeolocationSubdivisions: + description: > + Version string of the SDK used for the identification request. For + example: `"3.12.1"` + integrations: + type: array + items: + $ref: '#/components/schemas/Integration' + Replayed: + type: boolean + description: > + `true` if we determined that this payload was replayed, `false` + otherwise. + TriggeredBy: type: array + description: The rule(s) associated with triggering the webhook via rule engine. items: - $ref: '#/components/schemas/GeolocationSubdivision' - DeprecatedGeolocation: - deprecated: true - type: object - description: >- - This field is **deprecated** and will not return a result for - **applications created after January 23rd, 2024**. Please use the [IP - Geolocation Smart - signal](https://dev.fingerprint.com/docs/smart-signals-overview#ip-geolocation) - for geolocation information. - additionalProperties: false - properties: - accuracyRadius: - type: integer - minimum: 0 - description: >- - The IP address is likely to be within this radius (in km) of the - specified location. - latitude: - type: number - format: double - minimum: -90 - maximum: 90 - longitude: - type: number - format: double - minimum: -180 - maximum: 180 - postalCode: - type: string - timezone: - type: string - format: timezone - city: - $ref: '#/components/schemas/GeolocationCity' - country: - $ref: '#/components/schemas/GeolocationCountry' - continent: - $ref: '#/components/schemas/GeolocationContinent' - subdivisions: - $ref: '#/components/schemas/GeolocationSubdivisions' - Tag: - type: object - description: >- - A customer-provided value or an object that was sent with identification - request. - additionalProperties: true + type: object + additionalProperties: false + required: + - id + - name + - description + properties: + id: + type: string + name: + type: string + description: + type: string IdentificationConfidence: type: object additionalProperties: false @@ -1113,328 +884,301 @@ components: description: >- The confidence score is a floating-point number between 0 and 1 that represents the probability of accurate identification. - revision: + version: type: string description: >- - The revision name of the method used to calculate the Confidence + The version name of the method used to calculate the Confidence score. This field is only present for customers who opted in to an alternative calculation method. comment: type: string - IdentificationSeenAt: - type: object - additionalProperties: false - required: - - global - - subscription - properties: - global: - type: string - nullable: true - format: date-time - x-ogen-time-format: 2006-01-02T15:04:05.999Z07:00 - subscription: - type: string - nullable: true - format: date-time - x-ogen-time-format: 2006-01-02T15:04:05.999Z07:00 - RawDeviceAttributeError: - type: object - additionalProperties: false - properties: - name: - type: string - message: - type: string - RawDeviceAttribute: - type: object - additionalProperties: false - properties: - value: - title: value - error: - $ref: '#/components/schemas/RawDeviceAttributeError' - RawDeviceAttributes: - type: object - description: > - It includes 35+ raw browser identification attributes to provide - Fingerprint users with even more information than our standard visitor - ID provides. This enables Fingerprint users to not have to run our - open-source product in conjunction with Fingerprint Pro Plus and - Enterprise to get those additional attributes. - - Warning: The raw signals data can change at any moment as we improve the - product. We cannot guarantee the internal shape of raw device attributes - to be stable, so typical semantic versioning rules do not apply here. - Use this data with caution without assuming a specific structure beyond - the generic type provided here. - additionalProperties: - $ref: '#/components/schemas/RawDeviceAttribute' - SDK: - type: object - description: Contains information about the SDK used to perform the request. - additionalProperties: false - required: - - platform - - version - properties: - platform: - type: string - description: Platform of the SDK. - version: - type: string - description: SDK version string. Identification: type: object additionalProperties: false required: - - visitorId - - requestId - - browserDetails - - incognito - - ip - - timestamp - - time - - url - - tag - - visitorFound - - firstSeenAt - - lastSeenAt - - replayed + - visitor_id + - visitor_found properties: - visitorId: + visitor_id: type: string description: >- String of 20 characters that uniquely identifies the visitor's browser or mobile device. - requestId: - type: string - description: Unique identifier of the user's request. - browserDetails: - $ref: '#/components/schemas/BrowserDetails' - incognito: - description: Flag if user used incognito session. - type: boolean - ip: - type: string - description: IP address of the requesting browser or bot. - ipLocation: - $ref: '#/components/schemas/DeprecatedGeolocation' - linkedId: - type: string - description: A customer-provided id that was sent with the request. - suspect: - description: >- - Field is `true` if you have previously set the `suspect` flag for - this event using the [Server API Update event - endpoint](https://dev.fingerprint.com/reference/updateevent). - type: boolean - timestamp: - description: Timestamp of the event with millisecond precision in Unix time. - type: integer - format: int64 - time: - type: string - format: date-time - x-ogen-time-format: 2006-01-02T15:04:05Z07:00 - description: >- - Time expressed according to ISO 8601 in UTC format, when the request - from the JS agent was made. We recommend to treat requests that are - older than 2 minutes as malicious. Otherwise, request replay attacks - are possible. - url: - type: string - description: Page URL from which the request was sent. - tag: - $ref: '#/components/schemas/Tag' confidence: $ref: '#/components/schemas/IdentificationConfidence' - visitorFound: + visitor_found: type: boolean description: Attribute represents if a visitor had been identified before. - firstSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - lastSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - components: - $ref: '#/components/schemas/RawDeviceAttributes' - replayed: - type: boolean + first_seen_at: + type: integer + format: int64 description: > - `true` if we determined that this payload was replayed, `false` - otherwise. - sdk: - $ref: '#/components/schemas/SDK' - environmentId: - type: string - description: Environment ID associated with the event - ErrorCode: - type: string - enum: - - RequestCannotBeParsed - - TokenRequired - - TokenNotFound - - SubscriptionNotActive - - WrongRegion - - FeatureNotEnabled - - RequestNotFound - - VisitorNotFound - - TooManyRequests - - 429 Too Many Requests - - StateNotReady - - Failed - description: | - Error code: - * `RequestCannotBeParsed` - the query parameters or JSON payload contains some errors - that prevented us from parsing it (wrong type/surpassed limits). - * `TokenRequired` - `Auth-API-Key` header is missing or empty. - * `TokenNotFound` - no Fingerprint application found for specified secret key. - * `SubscriptionNotActive` - Fingerprint application is not active. - * `WrongRegion` - server and application region differ. - * `FeatureNotEnabled` - this feature (for example, Delete API) is not enabled for your application. - * `RequestNotFound` - the specified request ID was not found. It never existed, expired, or it has been deleted. - * `VisitorNotFound` - The specified visitor ID was not found. It never existed or it may have already been deleted. - * `TooManyRequests` - the limit on secret API key requests per second has been exceeded. - * `429 Too Many Requests` - the limit on secret API key requests per second has been exceeded. - * `StateNotReady` - The event specified with request id is - not ready for updates yet. Try again. - This error happens in rare cases when update API is called immediately - after receiving the request id on the client. In case you need to send - information right away, we recommend using the JS agent API instead. - * `Failed` - internal server error. - Error: + Unix epoch time milliseconds timestamp indicating the time at which + this visitor ID was first seen. example: `1758069706642` - + Corresponding to Wed Sep 17 2025 00:41:46 GMT+0000 + last_seen_at: + type: integer + format: int64 + description: > + Unix epoch time milliseconds timestamp indicating the time at which + this visitor ID was last seen. example: `1758069706642` - + Corresponding to Wed Sep 17 2025 00:41:46 GMT+0000 + SupplementaryIDHighRecall: type: object additionalProperties: false + description: >- + A supplementary browser identifier that prioritizes coverage over + precision. The High Recall ID algorithm matches more generously, i.e., + this identifier will remain the same even when there are subtle + differences between two requests. This algorithm does not create as many + new visitor IDs as the standard algorithms do, but there could be an + increase in false-positive identification. required: - - code - - message + - visitor_id + - visitor_found properties: - code: - $ref: '#/components/schemas/ErrorCode' - message: + visitor_id: type: string - ProductIdentification: + description: >- + String of 20 characters that uniquely identifies the visitor's + browser or mobile device. + visitor_found: + type: boolean + description: Attribute represents if a visitor had been identified before. + confidence: + $ref: '#/components/schemas/IdentificationConfidence' + first_seen_at: + type: integer + format: int64 + description: > + Unix epoch time milliseconds timestamp indicating the time at which + this ID was first seen. example: `1758069706642` - Corresponding to + Wed Sep 17 2025 00:41:46 GMT+0000 + last_seen_at: + type: integer + format: int64 + description: > + Unix epoch time milliseconds timestamp indicating the time at which + this ID was last seen. example: `1758069706642` - Corresponding to + Wed Sep 17 2025 00:41:46 GMT+0000 + Tags: type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Identification' - error: - $ref: '#/components/schemas/Error' - BotdBotResult: + description: >- + A customer-provided value or an object that was sent with the + identification request or updated later. + additionalProperties: true + Url: type: string - enum: - - notDetected - - good - - bad - description: | - Bot detection result: - * `notDetected` - the visitor is not a bot - * `good` - good bot detected, such as Google bot, Baidu Spider, AlexaBot and so on - * `bad` - bad bot detected, such as Selenium, Puppeteer, Playwright, headless browsers, and so on - BotdBot: - type: object - description: Stores bot detection result - additionalProperties: false - required: - - result - properties: - result: - $ref: '#/components/schemas/BotdBotResult' - type: - type: string - Botd: + description: > + Page URL from which the request was sent. For example + `https://example.com/` + BundleId: + type: string + description: > + Bundle Id of the iOS application integrated with the Fingerprint SDK for + the event. For example: `com.foo.app` + PackageName: + type: string + description: > + Package name of the Android application integrated with the Fingerprint + SDK for the event. For example: `com.foo.app` + IpAddress: + type: string + description: IP address of the requesting browser or bot. + UserAgent: + type: string + description: > + User Agent of the client, for example: `Mozilla/5.0 (Windows NT 6.1; + Win64; x64) ....` + ClientReferrer: + type: string + description: > + Client Referrer field corresponds to the `document.referrer` field + gathered during an identification request. The value is an empty string + if the user navigated to the page directly (not through a link, but, for + example, by using a bookmark) For example: + `https://example.com/blog/my-article` + BrowserDetails: type: object - description: Contains all the information from Bot Detection product additionalProperties: false required: - - bot - - url - - ip - - time - - userAgent - - requestId + - browser_name + - browser_full_version + - browser_major_version + - os + - os_version + - device properties: - bot: - $ref: '#/components/schemas/BotdBot' - meta: - $ref: '#/components/schemas/Tag' - linkedId: + browser_name: type: string - description: A customer-provided id that was sent with the request. - url: + browser_major_version: type: string - description: Page URL from which the request was sent. - ip: + browser_full_version: type: string - description: IP address of the requesting browser or bot. - time: + os: type: string - format: date-time - x-ogen-time-format: 2006-01-02T15:04:05.999Z07:00 - description: >- - Time in UTC when the request from the JS agent was made. We - recommend to treat requests that are older than 2 minutes as - malicious. Otherwise, request replay attacks are possible. - userAgent: + os_version: type: string - requestId: + device: type: string - description: Unique identifier of the user's request. - ProductBotd: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Botd' - error: - $ref: '#/components/schemas/Error' - RootApps: + Proximity: type: object + description: > + Proximity ID represents a fixed geographical zone in a discrete global + grid within which the device is observed. additionalProperties: false required: - - result - properties: - result: - type: boolean - description: > - Android specific root management apps detection. There are 2 - values: - * `true` - Root Management Apps detected (e.g. Magisk). - * `false` - No Root Management Apps detected or the client isn't Android. - ProductRootApps: - type: object - additionalProperties: false + - id + - precision_radius + - confidence properties: - data: - $ref: '#/components/schemas/RootApps' - error: - $ref: '#/components/schemas/Error' - Emulator: + id: + type: string + description: | + A stable privacy-preserving identifier for a given proximity zone. + precision_radius: + type: integer + format: int32 + enum: + - 10 + - 25 + - 65 + - 175 + - 450 + - 1200 + - 3300 + - 8500 + - 22500 + description: | + The radius of the proximity zone’s precision level, in meters. + confidence: + type: number + format: float + minimum: 0 + maximum: 1 + description: > + A value between `0` and `1` representing the likelihood that the + true device location lies within the mapped proximity zone. + * Scores closer to `1` indicate high confidence that the location is inside the mapped proximity zone. + * Scores closer to `0` indicate lower confidence, suggesting the true location may fall in an adjacent zone. + BotResult: + type: string + enum: + - bad + - good + - not_detected + description: | + Bot detection result: + * `bad` - bad bot detected, such as Selenium, Puppeteer, Playwright, headless browsers, and so on + * `good` - good bot detected, such as Google bot, Baidu Spider, AlexaBot and so on + * `not_detected` - the visitor is not a bot + BotType: + type: string + description: | + Additional classification of the bot type if detected. + BotInfo: type: object + description: Extended bot information. additionalProperties: false required: - - result + - category + - provider + - name + - identity + - confidence properties: - result: - type: boolean + category: + type: string + description: The type and purpose of the bot. + provider: + type: string + description: The organization or company operating the bot. + provider_url: + type: string + description: The URL of the bot provider's website. + name: + type: string + description: The specific name or identifier of the bot. + identity: + type: string + enum: + - verified + - signed + - spoofed + - unknown description: | - Android specific emulator detection. There are 2 values: - * `true` - Emulated environment detected (e.g. launch inside of AVD). - * `false` - No signs of emulated environment detected or the client is not Android. - ProductEmulator: + The verification status of the bot's identity: + * `verified` - well-known bot with publicly verifiable identity, directed by the bot provider. + * `signed` - bot that signs its platform via Web Bot Auth, directed by the bot provider’s customers. + * `spoofed` - bot that claims a public identity but fails verification. + * `unknown` - bot that does not publish a verifiable identity. + confidence: + type: string + enum: + - low + - medium + - high + description: Confidence level of the bot identification. + ClonedApp: + type: boolean + description: > + Android specific cloned application detection. There are 2 values: * + `true` - Presence of app cloners work detected (e.g. fully cloned + application found or launch of it inside of a not main working profile + detected). * `false` - No signs of cloned application detected or the + client is not Android. + DeveloperTools: + type: boolean + description: > + `true` if the browser is Chrome with DevTools open or Firefox with + Developer Tools open, `false` otherwise. + Emulator: + type: boolean + description: > + Android specific emulator detection. There are 2 values: + + * `true` - Emulated environment detected (e.g. launch inside of AVD). + + * `false` - No signs of emulated environment detected or the client is + not Android. + FactoryReset: + type: integer + format: int64 + description: > + The time of the most recent factory reset that happened on the **mobile + device** is expressed as Unix epoch time. When a factory reset cannot be + detected on the mobile device or when the request is initiated from a + browser, this field will correspond to the *epoch* time (i.e 1 Jan 1970 + UTC) as a value of 0. See [Factory Reset + Detection](https://dev.fingerprint.com/docs/smart-signals-overview#factory-reset-detection) + to learn more about this Smart Signal. + Frida: + type: boolean + description: > + [Frida](https://frida.re/docs/) detection for Android and iOS devices. + There are 2 values: + + * `true` - Frida detected + + * `false` - No signs of Frida or the client is not a mobile device. + IPBlockList: type: object additionalProperties: false properties: - data: - $ref: '#/components/schemas/Emulator' - error: - $ref: '#/components/schemas/Error' + email_spam: + type: boolean + description: IP address was part of a known email spam attack (SMTP). + attack_source: + type: boolean + description: IP address was part of a known network attack (SSH/HTTPS). + tor_node: + type: boolean + description: IP address was part of known TOR network activity. Geolocation: type: object additionalProperties: false properties: - accuracyRadius: + accuracy_radius: type: integer minimum: 0 description: >- @@ -1450,50 +1194,43 @@ components: format: double minimum: -180 maximum: 180 - postalCode: + postal_code: type: string timezone: type: string format: timezone - city: - $ref: '#/components/schemas/GeolocationCity' - country: - $ref: '#/components/schemas/GeolocationCountry' - continent: - $ref: '#/components/schemas/GeolocationContinent' - subdivisions: - $ref: '#/components/schemas/GeolocationSubdivisions' - IPInfoASN: - type: object - additionalProperties: false - required: - - asn - - name - - network - properties: - asn: + city_name: type: string - name: + country_code: type: string - network: + minLength: 2 + maxLength: 2 + country_name: type: string - IPInfoDataCenter: - type: object - additionalProperties: false - required: - - result - - name - properties: - result: - type: boolean - name: + continent_code: type: string + minLength: 2 + maxLength: 2 + continent_name: + type: string + subdivisions: + type: array + items: + type: object + additionalProperties: false + required: + - iso_code + - name + properties: + iso_code: + type: string + name: + type: string IPInfoV4: type: object additionalProperties: false required: - address - - geolocation properties: address: type: string @@ -1501,15 +1238,22 @@ components: geolocation: $ref: '#/components/schemas/Geolocation' asn: - $ref: '#/components/schemas/IPInfoASN' - datacenter: - $ref: '#/components/schemas/IPInfoDataCenter' + type: string + asn_name: + type: string + asn_network: + type: string + asn_type: + type: string + datacenter_result: + type: boolean + datacenter_name: + type: string IPInfoV6: type: object additionalProperties: false required: - address - - geolocation properties: address: type: string @@ -1517,9 +1261,17 @@ components: geolocation: $ref: '#/components/schemas/Geolocation' asn: - $ref: '#/components/schemas/IPInfoASN' - datacenter: - $ref: '#/components/schemas/IPInfoDataCenter' + type: string + asn_name: + type: string + asn_network: + type: string + asn_type: + type: string + datacenter_result: + type: boolean + datacenter_name: + type: string IPInfo: type: object description: >- @@ -1531,1464 +1283,1115 @@ components: $ref: '#/components/schemas/IPInfoV4' v6: $ref: '#/components/schemas/IPInfoV6' - ProductIPInfo: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/IPInfo' - error: - $ref: '#/components/schemas/Error' - IPBlocklistDetails: - type: object - additionalProperties: false - required: - - emailSpam - - attackSource - properties: - emailSpam: - type: boolean - description: IP address was part of a known email spam attack (SMTP). - attackSource: - type: boolean - description: IP address was part of a known network attack (SSH/HTTPS). - IPBlocklist: - type: object - additionalProperties: false - required: - - result - - details - properties: - result: - type: boolean - description: > - `true` if request IP address is part of any database that we use to - search for known malicious actors, `false` otherwise. - details: - $ref: '#/components/schemas/IPBlocklistDetails' - ProductIPBlocklist: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/IPBlocklist' - error: - $ref: '#/components/schemas/Error' - Tor: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean - description: > - `true` if the request IP address is a known tor exit node, `false` - otherwise. - ProductTor: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Tor' - error: - $ref: '#/components/schemas/Error' - VPNConfidence: + Proxy: + type: boolean + description: > + IP address was used by a public proxy provider or belonged to a known + recent residential proxy + ProxyConfidence: type: string enum: - low - medium - high - description: >- - A confidence rating for the VPN detection result — "low", "medium", or - "high". Depends on the combination of results returned from all VPN - detection methods. - VPNMethods: + description: > + Confidence level of the proxy detection. If a proxy is not detected, + confidence is "high". If it's detected, can be "low", "medium", or + "high". + ProxyDetails: type: object additionalProperties: false + description: Proxy detection details (present if `proxy` is `true`) required: - - timezoneMismatch - - publicVPN - - auxiliaryMobile - - osMismatch - - relay + - proxy_type properties: - timezoneMismatch: - type: boolean - description: >- - The browser timezone doesn't match the timezone inferred from the - request IP address. - publicVPN: - type: boolean - description: >- - Request IP address is owned and used by a public VPN service - provider. - auxiliaryMobile: - type: boolean - description: >- - This method applies to mobile devices only. Indicates the result of - additional methods used to detect a VPN in mobile devices. - osMismatch: - type: boolean - description: >- - The browser runs on a different operating system than the operating - system inferred from the request network signature. - relay: - type: boolean + proxy_type: + type: string + enum: + - residential + - data_center description: > - Request IP address belongs to a relay service provider, indicating - the use of relay services like [Apple Private - relay](https://support.apple.com/en-us/102602) or [Cloudflare - Warp](https://developers.cloudflare.com/warp-client/). + Residential proxies use real user IP addresses to appear as + legitimate traffic, + while data center proxies are public proxies hosted in data centers + last_seen_at: + type: integer + format: int64 + description: > + Unix millisecond timestamp with hourly resolution of when this IP + was last seen as a proxy + provider: + type: string + description: > + String representing the last proxy service provider detected when + this - * Like VPNs, relay services anonymize the visitor's true IP address. + IP was synced. An IP can be shared by multiple service providers. + Incognito: + type: boolean + description: > + `true` if we detected incognito mode used in the browser, `false` + otherwise. + Jailbroken: + type: boolean + description: | + iOS specific jailbreak detection. There are 2 values: + * `true` - Jailbreak detected. + * `false` - No signs of jailbreak or the client is not iOS. + LocationSpoofing: + type: boolean + description: >- + Flag indicating whether the request came from a mobile device with + location spoofing enabled. + MitMAttack: + type: boolean + description: > + * `true` - When requests made from your users' mobile devices to + Fingerprint servers have been intercepted and potentially modified. - * Unlike traditional VPNs, relay services don't let visitors spoof - their location by choosing an exit node in a different country. + * `false` - Otherwise or when the request originated from a browser. + See [MitM Attack + Detection](https://dev.fingerprint.com/docs/smart-signals-reference#mitm-attack-detection) + to learn more about this Smart Signal. + PrivacySettings: + type: boolean + description: > + `true` if the request is from a privacy aware browser (e.g. Tor) or from + a browser in which fingerprinting is blocked. Otherwise `false`. + RootApps: + type: boolean + description: > + Android specific root management apps detection. There are 2 values: - This field allows you to differentiate VPN users and relay service - users in your fraud prevention logic. - VPN: + * `true` - Root Management Apps detected (e.g. Magisk). + + * `false` - No Root Management Apps detected or the client isn't + Android. + RulesetId: + type: string + description: The ID of the evaluated ruleset. + RuleId: + type: string + description: The ID of the rule that matched the identification event. + RuleExpression: + type: string + description: The expression of the rule that matched the identification event. + RuleActionType: + type: string + description: Describes the action to take with the request. + enum: + - allow + - block + RuleActionHeaderField: type: object - additionalProperties: false required: - - result - - confidence - - originTimezone - - originCountry - - methods + - name + - value properties: - result: - type: boolean - description: >- - VPN or other anonymizing service has been used when sending the - request. - confidence: - $ref: '#/components/schemas/VPNConfidence' - originTimezone: + name: type: string - description: Local timezone which is used in timezoneMismatch method. - originCountry: + description: The header field name. + value: type: string + description: The value of the header field. + RequestHeaderModifications: + type: object + description: >- + The set of header modifications to apply, in the following order: + remove, set, append. + properties: + remove: + type: array + description: The list of headers to remove. + items: + type: string + set: + type: array description: >- - Country of the request (only for Android SDK version >= 2.4.0, ISO - 3166 format or unknown). - methods: - $ref: '#/components/schemas/VPNMethods' - ProductVPN: + The list of headers to set, overwriting any existing headers with + the same name. + items: + $ref: '#/components/schemas/RuleActionHeaderField' + append: + type: array + description: The list of headers to append. + items: + $ref: '#/components/schemas/RuleActionHeaderField' + EventRuleActionAllow: type: object - additionalProperties: false + description: >- + Informs the client that the request should be forwarded to the origin + with optional request header modifications. + required: + - type properties: - data: - $ref: '#/components/schemas/VPN' - error: - $ref: '#/components/schemas/Error' - ProxyConfidence: + type: + $ref: '#/components/schemas/RuleActionType' + const: allow + request_header_modifications: + $ref: '#/components/schemas/RequestHeaderModifications' + StatusCode: + type: integer + description: A valid HTTP status code. + RuleActionBody: type: string - enum: - - low - - medium - - high - description: | - Confidence level of the proxy detection. - If a proxy is not detected, confidence is "high". - If it's detected, can be "low", "medium", or "high". - ProxyDetails: + description: The response body to send to the client. + EventRuleActionBlock: type: object - nullable: true - additionalProperties: false - description: Proxy detection details (present if proxy is detected) + description: >- + Informs the client the request should be blocked using the response + described by this rule action. required: - - proxyType + - type properties: - proxyType: - type: string - enum: - - residential - - data_center - description: > - Residential proxies use real user IP addresses to appear as - legitimate traffic, - - while data center proxies are public proxies hosted in data centers - lastSeenAt: - type: string - format: date-time - x-ogen-time-format: 2006-01-02T15:00:00.000Z - description: | - ISO 8601 formatted timestamp in UTC with hourly resolution - of when this IP was last seen as a proxy when available. - Proxy: - type: object - additionalProperties: false - required: - - result - - confidence - properties: - result: - type: boolean - description: > - IP address was used by a public proxy provider or belonged to a - known recent residential proxy - confidence: - $ref: '#/components/schemas/ProxyConfidence' - details: - $ref: '#/components/schemas/ProxyDetails' - ProductProxy: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Proxy' - error: - $ref: '#/components/schemas/Error' - Incognito: + type: + $ref: '#/components/schemas/RuleActionType' + const: block + status_code: + $ref: '#/components/schemas/StatusCode' + headers: + type: array + description: A list of headers to send. + items: + $ref: '#/components/schemas/RuleActionHeaderField' + body: + $ref: '#/components/schemas/RuleActionBody' + EventRuleAction: type: object - additionalProperties: false + description: >- + Describes the action the client should take, according to the rule in + the ruleset that matched the event. When getting an event by event ID, + the rule_action will only be included when the ruleset_id query + parameter is specified. required: - - result - properties: - result: - type: boolean - description: > - `true` if we detected incognito mode used in the browser, `false` - otherwise. - ProductIncognito: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Incognito' - error: - $ref: '#/components/schemas/Error' + - ruleset_id + properties: + ruleset_id: + $ref: '#/components/schemas/RulesetId' + rule_id: + $ref: '#/components/schemas/RuleId' + rule_expression: + $ref: '#/components/schemas/RuleExpression' + oneOf: + - $ref: '#/components/schemas/EventRuleActionAllow' + - $ref: '#/components/schemas/EventRuleActionBlock' + discriminator: + propertyName: type + mapping: + allow: EventRuleActionAllow.yaml + block: EventRuleActionBlock.yaml + SuspectScore: + type: integer + description: > + Suspect Score is an easy way to integrate Smart Signals into your fraud + protection work flow. It is a weighted representation of all Smart + Signals present in the payload that helps identify suspicious activity. + The value range is [0; S] where S is sum of all Smart Signals weights. + See more details here: https://dev.fingerprint.com/docs/suspect-score Tampering: + type: boolean + description: > + Flag indicating browser tampering was detected. This happens when + either: + * There are inconsistencies in the browser configuration that cross internal tampering thresholds (see `tampering_details.anomaly_score`). + * The browser signature resembles an "anti-detect" browser specifically designed to evade fingerprinting (see `tampering_details.anti_detect_browser`). + TamperingDetails: type: object additionalProperties: false - required: - - result - - anomalyScore - - antiDetectBrowser properties: - result: - type: boolean - description: > - Indicates if an identification request from a browser or an Android - SDK has been tampered with. Not supported in the iOS SDK, is always - `false` for iOS requests. - * `true` - If the request meets either of the following conditions: - * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). - * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). - * `false` - If the request is considered genuine or was generated by the iOS SDK. - anomalyScore: + anomaly_score: type: number format: double minimum: 0 maximum: 1 - description: > - A score that indicates the extent of anomalous data in the request. - This field applies to requests originating from **both** browsers - and Android SDKs. - * Values above `0.5` indicate that the request has been tampered with. - * Values below `0.5` indicate that the request is genuine. - antiDetectBrowser: - type: boolean - description: > - Anti-detect browsers try to evade identification by masking or - manipulating their fingerprint to imitate legitimate browser - configurations. This field does not apply to requests originating - from mobile SDKs. - * `true` - The browser resembles a known anti-detect browser, for example, Incognition. - * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. - ProductTampering: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Tampering' - error: - $ref: '#/components/schemas/Error' - ClonedApp: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean - description: | - Android specific cloned application detection. There are 2 values: - * `true` - Presence of app cloners work detected (e.g. fully cloned application found or launch of it inside of a not main working profile detected). - * `false` - No signs of cloned application detected or the client is not Android. - ProductClonedApp: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/ClonedApp' - error: - $ref: '#/components/schemas/Error' - FactoryReset: - type: object - additionalProperties: false - required: - - time - - timestamp - properties: - time: - type: string - format: date-time - description: > - Indicates the time (in UTC) of the most recent factory reset that - happened on the **mobile device**. - - When a factory reset cannot be detected on the mobile device or when - the request is initiated from a browser, this field will correspond - to the *epoch* time (i.e 1 Jan 1970 UTC). - - See [Factory Reset - Detection](https://dev.fingerprint.com/docs/smart-signals-overview#factory-reset-detection) - to learn more about this Smart Signal. - timestamp: - type: integer - format: int64 - description: > - This field is just another representation of the value in the `time` - field. - - The time of the most recent factory reset that happened on the - **mobile device** is expressed as Unix epoch time. - ProductFactoryReset: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/FactoryReset' - error: - $ref: '#/components/schemas/Error' - Jailbroken: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean + x-platforms: + - android + - ios + - browser description: | - iOS specific jailbreak detection. There are 2 values: - * `true` - Jailbreak detected. - * `false` - No signs of jailbreak or the client is not iOS. - ProductJailbroken: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Jailbroken' - error: - $ref: '#/components/schemas/Error' - Frida: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean - description: > - [Frida](https://frida.re/docs/) detection for Android and iOS - devices. There are 2 values: - * `true` - Frida detected - * `false` - No signs of Frida or the client is not a mobile device. - ProductFrida: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Frida' - error: - $ref: '#/components/schemas/Error' - PrivacySettings: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean - description: > - `true` if the request is from a privacy aware browser (e.g. Tor) or - from a browser in which fingerprinting is blocked. Otherwise - `false`. - ProductPrivacySettings: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/PrivacySettings' - error: - $ref: '#/components/schemas/Error' - VirtualMachine: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean - description: > - `true` if the request came from a browser running inside a virtual - machine (e.g. VMWare), `false` otherwise. - ProductVirtualMachine: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/VirtualMachine' - error: - $ref: '#/components/schemas/Error' - ProductRawDeviceAttributes: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/RawDeviceAttributes' - error: - $ref: '#/components/schemas/Error' - HighActivity: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean - description: Flag indicating if the request came from a high-activity visitor. - dailyRequests: - type: integer - format: int64 - minimum: 1 - description: Number of requests from the same visitor in the previous day. - ProductHighActivity: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/HighActivity' - error: - $ref: '#/components/schemas/Error' - LocationSpoofing: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: boolean - description: >- - Flag indicating whether the request came from a mobile device with - location spoofing enabled. - ProductLocationSpoofing: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/LocationSpoofing' - error: - $ref: '#/components/schemas/Error' - SuspectScore: - type: object - additionalProperties: false - required: - - result - properties: - result: - type: integer - description: > - Suspect Score is an easy way to integrate Smart Signals into your - fraud protection work flow. It is a weighted representation of all - Smart Signals present in the payload that helps identify suspicious - activity. The value range is [0; S] where S is sum of all Smart - Signals weights. See more details here: - https://dev.fingerprint.com/docs/suspect-score - ProductSuspectScore: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/SuspectScore' - error: - $ref: '#/components/schemas/Error' - RemoteControl: - type: object - deprecated: true - description: | - This signal is deprecated. - additionalProperties: false - required: - - result - properties: - result: + Confidence score (`0.0 - 1.0`) for tampering detection: + * Values above `0.5` indicate tampering. + * Values below `0.5` indicate genuine browsers. + anti_detect_browser: type: boolean + x-platforms: + - browser description: > - `true` if the request came from a machine being remotely controlled - (e.g. TeamViewer), `false` otherwise. - ProductRemoteControl: - type: object - deprecated: true - description: | - This product is deprecated. - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/RemoteControl' - error: - $ref: '#/components/schemas/Error' - VelocityIntervals: + True if the identified browser resembles an "anti-detect" browser, + such as Incognition, which attempts to evade identification by + manipulating its fingerprint. + VelocityData: type: object description: > Is absent if the velocity data could not be generated for the visitor - ID. + Id. additionalProperties: false required: - - 5m - - 1h + - 5_minutes + - 1_hour properties: - 5m: + 5_minutes: type: integer - 1h: + description: > + Count for the last 5 minutes of velocity data, from the time of the + event. + 1_hour: type: integer - 24h: + description: > + Count for the last 1 hour of velocity data, from the time of the + event. + 24_hours: type: integer description: > - The `24h` interval of `distinctIp`, `distinctLinkedId`, - `distinctCountry`, `distinctIpByLinkedId` and - `distinctVisitorIdByLinkedId` will be omitted if the number of - `events`` for the visitor ID in the last 24 hours - (`events.intervals.['24h']`) is higher than 20.000. - VelocityData: - type: object - additionalProperties: false - properties: - intervals: - $ref: '#/components/schemas/VelocityIntervals' + The `24_hours` interval of `distinct_ip`, `distinct_linked_id`, + `distinct_country`, `distinct_ip_by_linked_id` and + `distinct_visitor_id_by_linked_id` will be omitted if the number of + `events` for the visitor Id in the last 24 hours + (`events.['24_hours']`) is higher than 20.000. Velocity: type: object description: > - Sums key data points for a specific `visitorId`, `ipAddress` and - `linkedId` at three distinct time + Sums key data points for a specific `visitor_id`, `ip_address` and + `linked_id` at three distinct time intervals: 5 minutes, 1 hour, and 24 hours as follows: - - Number of distinct IP addresses associated to the visitor ID. + - Number of distinct IP addresses associated to the visitor Id. - - Number of distinct linked IDs associated with the visitor ID. + - Number of distinct linked Ids associated with the visitor Id. - - Number of distinct countries associated with the visitor ID. + - Number of distinct countries associated with the visitor Id. - - Number of identification events associated with the visitor ID. + - Number of identification events associated with the visitor Id. - Number of identification events associated with the detected IP address. - Number of distinct IP addresses associated with the provided linked - ID. + Id. - - Number of distinct visitor IDs associated with the provided linked ID. + - Number of distinct visitor Ids associated with the provided linked Id. - The `24h` interval of `distinctIp`, `distinctLinkedId`, - `distinctCountry`, + The `24h` interval of `distinct_ip`, `distinct_linked_id`, + `distinct_country`, - `distinctIpByLinkedId` and `distinctVisitorIdByLinkedId` will be - omitted + `distinct_ip_by_linked_id` and `distinct_visitor_id_by_linked_id` will + be omitted - if the number of `events` for the visitor ID in the last 24 + if the number of `events` for the visitor Id in the last 24 - hours (`events.intervals.['24h']`) is higher than 20.000. + hours (`events.['24h']`) is higher than 20.000. + + + All will not necessarily be returned in a response, some may be omitted + if the + + associated event does not have the required data, such as a linked_id. additionalProperties: false - required: - - distinctIp - - distinctLinkedId - - distinctCountry - - events - - ipEvents - - distinctIpByLinkedId - - distinctVisitorIdByLinkedId properties: - distinctIp: + distinct_ip: $ref: '#/components/schemas/VelocityData' - distinctLinkedId: + distinct_linked_id: $ref: '#/components/schemas/VelocityData' - distinctCountry: + distinct_country: $ref: '#/components/schemas/VelocityData' events: $ref: '#/components/schemas/VelocityData' - ipEvents: + ip_events: $ref: '#/components/schemas/VelocityData' - distinctIpByLinkedId: + distinct_ip_by_linked_id: $ref: '#/components/schemas/VelocityData' - distinctVisitorIdByLinkedId: + distinct_visitor_id_by_linked_id: $ref: '#/components/schemas/VelocityData' - ProductVelocity: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Velocity' - error: - $ref: '#/components/schemas/Error' - DeveloperTools: + VirtualMachine: + type: boolean + description: > + `true` if the request came from a browser running inside a virtual + machine (e.g. VMWare), `false` otherwise. + Vpn: + type: boolean + description: | + VPN or other anonymizing service has been used when sending the request. + VpnConfidence: + type: string + enum: + - low + - medium + - high + description: >- + A confidence rating for the VPN detection result — "low", "medium", or + "high". Depends on the combination of results returned from all VPN + detection methods. + VpnOriginTimezone: + type: string + description: | + Local timezone which is used in timezone_mismatch method. + VpnOriginCountry: + type: string + description: > + Country of the request (only for Android SDK version >= 2.4.0, ISO 3166 + format or unknown). + VpnMethods: type: object additionalProperties: false - required: - - result properties: - result: + timezone_mismatch: type: boolean - description: > - `true` if the browser is Chrome with DevTools open or Firefox with - Developer Tools open, `false` otherwise. - ProductDeveloperTools: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/DeveloperTools' - error: - $ref: '#/components/schemas/Error' - MitMAttack: - type: object - additionalProperties: false - required: - - result - properties: - result: + x-platforms: + - android + - ios + - browser + description: >- + The browser timezone doesn't match the timezone inferred from the + request IP address. + public_vpn: type: boolean - description: > - * `true` - When requests made from your users' mobile devices to - Fingerprint servers have been intercepted and potentially modified. - - * `false` - Otherwise or when the request originated from a browser. - - See [MitM Attack - Detection](https://dev.fingerprint.com/docs/smart-signals-reference#mitm-attack-detection) - to learn more about this Smart Signal. - ProductMitMAttack: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/MitMAttack' - error: - $ref: '#/components/schemas/Error' - Proximity: + x-platforms: + - android + - ios + - browser + description: >- + Request IP address is owned and used by a public VPN service + provider. + auxiliary_mobile: + type: boolean + x-platforms: + - android + - ios + - browser + description: >- + This method applies to mobile devices only. Indicates the result of + additional methods used to detect a VPN in mobile devices. + os_mismatch: + type: boolean + x-platforms: + - browser + description: >- + The browser runs on a different operating system than the operating + system inferred from the request network signature. + relay: + type: boolean + x-platforms: + - android + - ios + - browser + description: > + Request IP address belongs to a relay service provider, indicating + the use of relay services like [Apple Private + relay](https://support.apple.com/en-us/102602) or [Cloudflare + Warp](https://developers.cloudflare.com/warp-client/). + + + * Like VPNs, relay services anonymize the visitor's true IP address. + + * Unlike traditional VPNs, relay services don't let visitors spoof + their location by choosing an exit node in a different country. + + + This field allows you to differentiate VPN users and relay service + users in your fraud prevention logic. + HighActivity: + type: boolean + description: Flag indicating if the request came from a high-activity visitor. + FontPreferences: type: object description: > - Proximity ID represents a fixed geographical zone in a discrete global - grid within which the device is observed. + Baseline measurement of canonical fonts rendered on the device. Numeric + width metrics, in CSS pixels, for the canonical fonts collected by the + agent. additionalProperties: false - required: - - id - - precisionRadius - - confidence properties: - id: - type: string - description: | - A stable privacy-preserving identifier for a given proximity zone. - precisionRadius: - type: integer - format: int32 - enum: - - 10 - - 25 - - 65 - - 175 - - 450 - - 1200 - - 3300 - - 8500 - - 22500 - description: | - The radius of the proximity zone’s precision level, in meters. - confidence: + default: type: number - format: float - minimum: 0 - maximum: 1 - description: > - A value between `0` and `1` representing the likelihood that the - true device location lies within the mapped proximity zone. - * Scores closer to `1` indicate high confidence that the location is inside the mapped proximity zone. - * Scores closer to `0` indicate lower confidence, suggesting the true location may fall in an adjacent zone. - ProductProximity: - type: object - additionalProperties: false - properties: - data: - $ref: '#/components/schemas/Proximity' - error: - $ref: '#/components/schemas/Error' - Products: - type: object - description: >- - Contains all information about the request identified by `requestId`, - depending on the pricing plan (Pro, Pro Plus, Enterprise) - additionalProperties: false - properties: - identification: - $ref: '#/components/schemas/ProductIdentification' - botd: - $ref: '#/components/schemas/ProductBotd' - rootApps: - $ref: '#/components/schemas/ProductRootApps' - emulator: - $ref: '#/components/schemas/ProductEmulator' - ipInfo: - $ref: '#/components/schemas/ProductIPInfo' - ipBlocklist: - $ref: '#/components/schemas/ProductIPBlocklist' - tor: - $ref: '#/components/schemas/ProductTor' - vpn: - $ref: '#/components/schemas/ProductVPN' - proxy: - $ref: '#/components/schemas/ProductProxy' - incognito: - $ref: '#/components/schemas/ProductIncognito' - tampering: - $ref: '#/components/schemas/ProductTampering' - clonedApp: - $ref: '#/components/schemas/ProductClonedApp' - factoryReset: - $ref: '#/components/schemas/ProductFactoryReset' - jailbroken: - $ref: '#/components/schemas/ProductJailbroken' - frida: - $ref: '#/components/schemas/ProductFrida' - privacySettings: - $ref: '#/components/schemas/ProductPrivacySettings' - virtualMachine: - $ref: '#/components/schemas/ProductVirtualMachine' - rawDeviceAttributes: - $ref: '#/components/schemas/ProductRawDeviceAttributes' - highActivity: - $ref: '#/components/schemas/ProductHighActivity' - locationSpoofing: - $ref: '#/components/schemas/ProductLocationSpoofing' - suspectScore: - $ref: '#/components/schemas/ProductSuspectScore' - remoteControl: - $ref: '#/components/schemas/ProductRemoteControl' - velocity: - $ref: '#/components/schemas/ProductVelocity' - developerTools: - $ref: '#/components/schemas/ProductDeveloperTools' - mitmAttack: - $ref: '#/components/schemas/ProductMitMAttack' - proximity: - $ref: '#/components/schemas/ProductProximity' - EventsGetResponse: - type: object - description: >- - Contains results from all activated products - Fingerprint Pro, Bot - Detection, and others. - additionalProperties: false - required: - - products - properties: - products: - $ref: '#/components/schemas/Products' - ErrorResponse: - type: object - additionalProperties: false - required: - - error - properties: - error: - $ref: '#/components/schemas/Error' - EventsUpdateRequest: - type: object - properties: - linkedId: - type: string - description: LinkedID value to assign to the existing event - tag: - $ref: '#/components/schemas/Tag' - suspect: - type: boolean - description: Suspect flag indicating observed suspicious or fraudulent event - x-go-force-pointer: true - SearchEventsResponse: + format: double + serif: + type: number + format: double + sans: + type: number + format: double + mono: + type: number + format: double + apple: + type: number + format: double + min: + type: number + format: double + system: + type: number + format: double + Emoji: type: object - description: >- - Contains a list of all identification events matching the specified - search criteria. + description: Bounding box metrics describing how the emoji glyph renders. additionalProperties: false properties: - events: - type: array - items: - type: object - description: Device intelligence results for the identification event. - required: - - products - properties: - products: - $ref: '#/components/schemas/Products' - paginationKey: + font: type: string - description: >- - Use this value in the `pagination_key` parameter to request the next - page of search results. - Visit: + description: Font family reported by the browser when drawing the emoji. + width: + type: number + format: double + height: + type: number + format: double + top: + type: number + format: double + bottom: + type: number + format: double + left: + type: number + format: double + right: + type: number + format: double + x: + type: number + format: double + 'y': + type: number + format: double + Fonts: + type: array + description: List of fonts detected on the device. + items: + type: string + example: + - Arial Unicode MS + - Gill Sans + - Helvetica Neue + - Menlo + DeviceMemory: + type: integer + format: int32 + minimum: 0 + example: 8 + description: Rounded amount of RAM (in gigabytes) reported by the browser. + Timezone: + type: string + description: Timezone identifier detected on the client. + Canvas: type: object + description: Canvas fingerprint containing winding flag plus geometry/text hashes. additionalProperties: false - required: - - requestId - - browserDetails - - incognito - - ip - - timestamp - - time - - url - - tag - - visitorFound - - firstSeenAt - - lastSeenAt properties: - requestId: - type: string - description: Unique identifier of the user's request. - browserDetails: - $ref: '#/components/schemas/BrowserDetails' - incognito: + winding: type: boolean - description: Flag if user used incognito session. - ip: - type: string - description: IP address of the requesting browser or bot. - ipLocation: - $ref: '#/components/schemas/DeprecatedGeolocation' - linkedId: + geometry: type: string - description: A customer-provided id that was sent with the request. - timestamp: - type: integer - format: int64 - description: Timestamp of the event with millisecond precision in Unix time. - time: + description: Hash of geometry rendering output or `unsupported` markers. + text: type: string - format: date-time - x-ogen-time-format: 2006-01-02T15:04:05Z07:00 - description: >- - Time expressed according to ISO 8601 in UTC format, when the request - from the client agent was made. We recommend to treat requests that - are older than 2 minutes as malicious. Otherwise, request replay - attacks are possible. - url: + description: Hash of text rendering output or `unsupported` markers. + Languages: + type: array + description: > + Navigator languages reported by the agent including fallbacks. Each + inner array represents ordered language preferences reported by + different APIs. + items: + type: array + items: type: string - description: Page URL from which the request was sent. - tag: - $ref: '#/components/schemas/Tag' - confidence: - $ref: '#/components/schemas/IdentificationConfidence' - visitorFound: - type: boolean - description: Attribute represents if a visitor had been identified before. - firstSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - lastSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - components: - $ref: '#/components/schemas/RawDeviceAttributes' - VisitorsGetResponse: + WebGlExtensions: type: object - description: >- - Pagination-related fields `lastTimestamp` and `paginationKey` are - included if you use a pagination parameter like `limit` or `before` and - there is more data available on the next page. + description: Hashes of WebGL context attributes and extension support. additionalProperties: false - required: - - visitorId - - visits properties: - visitorId: + context_attributes: type: string - visits: - type: array - items: - $ref: '#/components/schemas/Visit' - lastTimestamp: - deprecated: true - type: integer - format: int64 - description: > - ⚠️ Deprecated paging attribute, please use `paginationKey` instead. - Timestamp of the last visit in the current page of results. - paginationKey: + parameters: type: string - description: >- - Request ID of the last visit in the current page of results. Use - this value in the following request as the `paginationKey` parameter - to get the next page of results. - ErrorPlainResponse: - type: object - additionalProperties: false - required: - - error - properties: - error: + shader_precisions: type: string - RelatedVisitor: - type: object - additionalProperties: false - required: - - visitorId - properties: - visitorId: + extensions: type: string - description: >- - Visitor ID of a browser that originates from the same mobile device - as the input visitor ID. - RelatedVisitorsResponse: - type: object - additionalProperties: false - required: - - relatedVisitors - properties: - relatedVisitors: + extension_parameters: + type: string + unsupported_extensions: type: array items: - $ref: '#/components/schemas/RelatedVisitor' - WebhookRootApps: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - Android specific root management apps detection. There are 2 - values: - * `true` - Root Management Apps detected (e.g. Magisk). - * `false` - No Root Management Apps detected or the client isn't Android. - WebhookEmulator: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: | - Android specific emulator detection. There are 2 values: - * `true` - Emulated environment detected (e.g. launch inside of AVD). - * `false` - No signs of emulated environment detected or the client is not Android. - WebhookIPInfo: - type: object - description: >- - Details about the request IP address. Has separate fields for v4 and v6 - IP address versions. - additionalProperties: false - properties: - v4: - $ref: '#/components/schemas/IPInfoV4' - v6: - $ref: '#/components/schemas/IPInfoV6' - WebhookIPBlocklist: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - `true` if request IP address is part of any database that we use to - search for known malicious actors, `false` otherwise. - details: - $ref: '#/components/schemas/IPBlocklistDetails' - WebhookTor: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - `true` if the request IP address is a known tor exit node, `false` - otherwise. - WebhookVPN: + type: string + WebGlBasics: type: object + description: Render and vendor strings reported by the WebGL context. additionalProperties: false properties: - result: - type: boolean - description: >- - VPN or other anonymizing service has been used when sending the - request. - confidence: - $ref: '#/components/schemas/VPNConfidence' - originTimezone: + version: type: string - description: Local timezone which is used in timezoneMismatch method. - originCountry: + vendor: type: string - description: >- - Country of the request (only for Android SDK version >= 2.4.0, ISO - 3166 format or unknown). - methods: - $ref: '#/components/schemas/VPNMethods' - WebhookProxy: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - IP address was used by a public proxy provider or belonged to a - known recent residential proxy - confidence: - $ref: '#/components/schemas/ProxyConfidence' - details: - $ref: '#/components/schemas/ProxyDetails' - WebhookTampering: + vendor_unmasked: + type: string + renderer: + type: string + renderer_unmasked: + type: string + shading_language_version: + type: string + ScreenResolution: + type: array + description: Current screen resolution. + minItems: 2 + maxItems: 2 + items: + type: integer + format: int32 + TouchSupport: type: object + description: Browser-reported touch capabilities. additionalProperties: false properties: - result: - type: boolean - description: > - Indicates if an identification request from a browser or an Android - SDK has been tampered with. Not supported in the iOS SDK, is always - `false` for iOS requests. - * `true` - If the request meets either of the following conditions: - * Contains anomalous browser or device attributes that could not have been legitimately produced by the JavaScript agent or the Android SDK (see `anomalyScore`). - * Originated from an anti-detect browser like Incognition (see `antiDetectBrowser`). - * `false` - If the request is considered genuine or was generated by the iOS SDK. - anomalyScore: - type: number - format: double - minimum: 0 - maximum: 1 - description: > - A score that indicates the extent of anomalous data in the request. - This field applies to requests originating from **both** browsers - and Android SDKs. - * Values above `0.5` indicate that the request has been tampered with. - * Values below `0.5` indicate that the request is genuine. - antiDetectBrowser: + touch_event: type: boolean - description: > - Anti-detect browsers try to evade identification by masking or - manipulating their fingerprint to imitate legitimate browser - configurations. This field does not apply to requests originating - from mobile SDKs. - * `true` - The browser resembles a known anti-detect browser, for example, Incognition. - * `false` - The browser does not resemble an anti-detect browser or the request originates from a mobile SDK. - WebhookClonedApp: - type: object - additionalProperties: false - properties: - result: + touch_start: type: boolean - description: | - Android specific cloned application detection. There are 2 values: - * `true` - Presence of app cloners work detected (e.g. fully cloned application found or launch of it inside of a not main working profile detected). - * `false` - No signs of cloned application detected or the client is not Android. - WebhookFactoryReset: - type: object - additionalProperties: false - properties: - time: - type: string - format: date-time - description: > - Indicates the time (in UTC) of the most recent factory reset that - happened on the **mobile device**. - - When a factory reset cannot be detected on the mobile device or when - the request is initiated from a browser, this field will correspond - to the *epoch* time (i.e 1 Jan 1970 UTC). - - See [Factory Reset - Detection](https://dev.fingerprint.com/docs/smart-signals-overview#factory-reset-detection) - to learn more about this Smart Signal. - timestamp: + max_touch_points: type: integer format: int64 - description: > - This field is just another representation of the value in the `time` - field. - - The time of the most recent factory reset that happened on the - **mobile device** is expressed as Unix epoch time. - WebhookJailbroken: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: | - iOS specific jailbreak detection. There are 2 values: - * `true` - Jailbreak detected. - * `false` - No signs of jailbreak or the client is not iOS. - WebhookFrida: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - [Frida](https://frida.re/docs/) detection for Android and iOS - devices. There are 2 values: - * `true` - Frida detected - * `false` - No signs of Frida or the client is not a mobile device. - WebhookPrivacySettings: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - `true` if the request is from a privacy aware browser (e.g. Tor) or - from a browser in which fingerprinting is blocked. Otherwise - `false`. - WebhookVirtualMachine: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - `true` if the request came from a browser running inside a virtual - machine (e.g. VMWare), `false` otherwise. - WebhookRawDeviceAttributes: + Oscpu: + type: string + description: Navigator `oscpu` string. + Architecture: + type: integer + format: int32 + description: Integer representing the CPU architecture exposed by the browser. + CookiesEnabled: + type: boolean + description: Whether the cookies are enabled in the browser. + HardwareConcurrency: + type: integer + format: int32 + minimum: 1 + description: Number of logical CPU cores reported by the browser. + DateTimeLocale: + type: string + description: > + Locale derived from the Intl.DateTimeFormat API. Negative values + indicate known error states. The negative statuses can be: - "-1": A + permanent status for browsers that don't support Intl API. - "-2": A + permanent status for browsers that don't supportDateTimeFormat + constructor. - "-3": A permanent status for browsers in which + DateTimeFormat locale is undefined or null. + Vendor: + type: string + description: Navigator vendor string. + ColorDepth: + type: integer + format: int32 + description: Screen color depth in bits. + Platform: + type: string + description: Navigator platform string. + SessionStorage: + type: boolean + description: Whether sessionStorage is available. + LocalStorage: + type: boolean + description: Whether localStorage is available. + Audio: + type: number + format: double + description: > + AudioContext fingerprint or negative status when unavailable. The + negative statuses can be: - -1: A permanent status for those browsers + which are known to always suspend audio context - -2: A permanent status + for browsers that don't support the signal - -3: A temporary status that + means that an unexpected timeout has happened + Plugins: + type: array + description: Browser plugins reported by `navigator.plugins`. + items: + type: object + additionalProperties: false + properties: + name: + type: string + description: + type: string + mimeTypes: + type: array + items: + type: object + additionalProperties: false + properties: + type: + type: string + suffixes: + type: string + description: + type: string + required: + - name + IndexedDb: + type: boolean + description: Whether IndexedDB is available. + Math: + type: string + description: Hash of Math APIs used for entropy collection. + RawDeviceAttributes: type: object description: > - It includes 35+ raw browser identification attributes to provide - Fingerprint users with even more information than our standard visitor - ID provides. This enables Fingerprint users to not have to run our - open-source product in conjunction with Fingerprint Pro Plus and - Enterprise to get those additional attributes. - - Warning: The raw signals data can change at any moment as we improve the - product. We cannot guarantee the internal shape of raw device attributes - to be stable, so typical semantic versioning rules do not apply here. - Use this data with caution without assuming a specific structure beyond - the generic type provided here. - additionalProperties: - $ref: '#/components/schemas/RawDeviceAttribute' - WebhookHighActivity: + A curated subset of raw browser/device attributes that the API surface + exposes. Each property contains a value or object with the data for the + collected signal. + additionalProperties: false + properties: + font_preferences: + $ref: '#/components/schemas/FontPreferences' + emoji: + $ref: '#/components/schemas/Emoji' + fonts: + $ref: '#/components/schemas/Fonts' + device_memory: + $ref: '#/components/schemas/DeviceMemory' + timezone: + $ref: '#/components/schemas/Timezone' + canvas: + $ref: '#/components/schemas/Canvas' + languages: + $ref: '#/components/schemas/Languages' + webgl_extensions: + $ref: '#/components/schemas/WebGlExtensions' + webgl_basics: + $ref: '#/components/schemas/WebGlBasics' + screen_resolution: + $ref: '#/components/schemas/ScreenResolution' + touch_support: + $ref: '#/components/schemas/TouchSupport' + oscpu: + $ref: '#/components/schemas/Oscpu' + architecture: + $ref: '#/components/schemas/Architecture' + cookies_enabled: + $ref: '#/components/schemas/CookiesEnabled' + hardware_concurrency: + $ref: '#/components/schemas/HardwareConcurrency' + date_time_locale: + $ref: '#/components/schemas/DateTimeLocale' + vendor: + $ref: '#/components/schemas/Vendor' + color_depth: + $ref: '#/components/schemas/ColorDepth' + platform: + $ref: '#/components/schemas/Platform' + session_storage: + $ref: '#/components/schemas/SessionStorage' + local_storage: + $ref: '#/components/schemas/LocalStorage' + audio: + $ref: '#/components/schemas/Audio' + plugins: + $ref: '#/components/schemas/Plugins' + indexed_db: + $ref: '#/components/schemas/IndexedDb' + math: + $ref: '#/components/schemas/Math' + Event: type: object + description: >- + Contains results from Fingerprint Identification and all active Smart + Signals. additionalProperties: false required: - - result - properties: - result: - type: boolean - description: Flag indicating if the request came from a high-activity visitor. - dailyRequests: - type: integer - format: int64 - minimum: 1 - description: Number of requests from the same visitor in the previous day. - WebhookLocationSpoofing: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: >- - Flag indicating whether the request came from a mobile device with - location spoofing enabled. - WebhookSuspectScore: - type: object - additionalProperties: false - properties: - result: - type: integer - description: > - Suspect Score is an easy way to integrate Smart Signals into your - fraud protection work flow. It is a weighted representation of all - Smart Signals present in the payload that helps identify suspicious - activity. The value range is [0; S] where S is sum of all Smart - Signals weights. See more details here: - https://dev.fingerprint.com/docs/suspect-score - WebhookRemoteControl: - type: object - deprecated: true - description: | - This signal is deprecated. - additionalProperties: false + - event_id + - timestamp properties: - result: - type: boolean - description: > - `true` if the request came from a machine being remotely controlled - (e.g. TeamViewer), `false` otherwise. - WebhookVelocity: - type: object + event_id: + $ref: '#/components/schemas/EventId' + x-platforms: + - android + - ios + - browser + timestamp: + $ref: '#/components/schemas/Timestamp' + x-platforms: + - android + - ios + - browser + linked_id: + $ref: '#/components/schemas/LinkedId' + x-platforms: + - android + - ios + - browser + environment_id: + $ref: '#/components/schemas/EnvironmentId' + x-platforms: + - android + - ios + - browser + suspect: + $ref: '#/components/schemas/Suspect' + x-platforms: + - android + - ios + - browser + sdk: + $ref: '#/components/schemas/SDK' + x-platforms: + - android + - ios + - browser + replayed: + $ref: '#/components/schemas/Replayed' + x-platforms: + - android + - ios + - browser + identification: + $ref: '#/components/schemas/Identification' + x-platforms: + - android + - ios + - browser + supplementary_id_high_recall: + $ref: '#/components/schemas/SupplementaryIDHighRecall' + x-platforms: + - android + - ios + - browser + tags: + $ref: '#/components/schemas/Tags' + x-platforms: + - android + - ios + - browser + url: + $ref: '#/components/schemas/Url' + x-platforms: + - browser + bundle_id: + $ref: '#/components/schemas/BundleId' + x-platforms: + - ios + package_name: + $ref: '#/components/schemas/PackageName' + x-platforms: + - android + ip_address: + $ref: '#/components/schemas/IpAddress' + x-platforms: + - android + - ios + - browser + user_agent: + $ref: '#/components/schemas/UserAgent' + x-platforms: + - android + - ios + - browser + client_referrer: + $ref: '#/components/schemas/ClientReferrer' + x-platforms: + - browser + browser_details: + $ref: '#/components/schemas/BrowserDetails' + x-platforms: + - browser + proximity: + $ref: '#/components/schemas/Proximity' + x-platforms: + - android + - ios + bot: + $ref: '#/components/schemas/BotResult' + x-platforms: + - browser + bot_type: + $ref: '#/components/schemas/BotType' + x-platforms: + - browser + bot_info: + $ref: '#/components/schemas/BotInfo' + x-platforms: + - browser + cloned_app: + $ref: '#/components/schemas/ClonedApp' + x-platforms: + - android + developer_tools: + $ref: '#/components/schemas/DeveloperTools' + x-platforms: + - browser + emulator: + $ref: '#/components/schemas/Emulator' + x-platforms: + - android + factory_reset_timestamp: + $ref: '#/components/schemas/FactoryReset' + x-platforms: + - android + - ios + frida: + $ref: '#/components/schemas/Frida' + x-platforms: + - android + - ios + ip_blocklist: + $ref: '#/components/schemas/IPBlockList' + x-platforms: + - android + - ios + - browser + ip_info: + $ref: '#/components/schemas/IPInfo' + x-platforms: + - android + - ios + - browser + proxy: + $ref: '#/components/schemas/Proxy' + x-platforms: + - android + - ios + - browser + proxy_confidence: + $ref: '#/components/schemas/ProxyConfidence' + x-platforms: + - android + - ios + - browser + proxy_details: + $ref: '#/components/schemas/ProxyDetails' + x-platforms: + - android + - ios + - browser + incognito: + $ref: '#/components/schemas/Incognito' + x-platforms: + - browser + jailbroken: + $ref: '#/components/schemas/Jailbroken' + x-platforms: + - ios + location_spoofing: + $ref: '#/components/schemas/LocationSpoofing' + x-platforms: + - android + - ios + mitm_attack: + $ref: '#/components/schemas/MitMAttack' + x-platforms: + - android + - ios + privacy_settings: + $ref: '#/components/schemas/PrivacySettings' + x-platforms: + - browser + root_apps: + $ref: '#/components/schemas/RootApps' + x-platforms: + - android + rule_action: + $ref: '#/components/schemas/EventRuleAction' + suspect_score: + $ref: '#/components/schemas/SuspectScore' + x-platforms: + - android + - ios + - browser + tampering: + $ref: '#/components/schemas/Tampering' + x-platforms: + - android + - ios + - browser + tampering_details: + $ref: '#/components/schemas/TamperingDetails' + x-platforms: + - android + - ios + - browser + velocity: + $ref: '#/components/schemas/Velocity' + x-platforms: + - android + - ios + - browser + virtual_machine: + $ref: '#/components/schemas/VirtualMachine' + x-platforms: + - browser + vpn: + $ref: '#/components/schemas/Vpn' + x-platforms: + - android + - ios + - browser + vpn_confidence: + $ref: '#/components/schemas/VpnConfidence' + x-platforms: + - android + - ios + - browser + vpn_origin_timezone: + $ref: '#/components/schemas/VpnOriginTimezone' + x-platforms: + - android + - ios + - browser + vpn_origin_country: + $ref: '#/components/schemas/VpnOriginCountry' + x-platforms: + - android + - ios + vpn_methods: + $ref: '#/components/schemas/VpnMethods' + x-platforms: + - android + - ios + - browser + high_activity_device: + $ref: '#/components/schemas/HighActivity' + x-platforms: + - android + - ios + - browser + raw_device_attributes: + $ref: '#/components/schemas/RawDeviceAttributes' + x-platforms: + - browser + ErrorCode: + type: string + enum: + - request_cannot_be_parsed + - secret_api_key_required + - secret_api_key_not_found + - public_api_key_required + - public_api_key_not_found + - subscription_not_active + - wrong_region + - feature_not_enabled + - request_not_found + - visitor_not_found + - too_many_requests + - state_not_ready + - failed + - event_not_found + - missing_module + - payload_too_large + - service_unavailable + - ruleset_not_found description: > - Sums key data points for a specific `visitorId`, `ipAddress` and - `linkedId` at three distinct time + Error code: - intervals: 5 minutes, 1 hour, and 24 hours as follows: + * `request_cannot_be_parsed` - The query parameters or JSON payload + contains some errors + that prevented us from parsing it (wrong type/surpassed limits). + * `secret_api_key_required` - secret API key in header is missing or + empty. + * `secret_api_key_not_found` - No Fingerprint workspace found for + specified secret API key. - - Number of distinct IP addresses associated to the visitor ID. + * `public_api_key_required` - public API key in header is missing or + empty. - - Number of distinct linked IDs associated with the visitor ID. + * `public_api_key_not_found` - No Fingerprint workspace found for + specified public API key. - - Number of distinct countries associated with the visitor ID. + * `subscription_not_active` - Fingerprint workspace is not active. - - Number of identification events associated with the visitor ID. + * `wrong_region` - Server and workspace region differ. - - Number of identification events associated with the detected IP - address. + * `feature_not_enabled` - This feature (for example, Delete API) is not + enabled for your workspace. - - Number of distinct IP addresses associated with the provided linked - ID. + * `request_not_found` - The specified event ID was not found. It never + existed, expired, or it has been deleted. - - Number of distinct visitor IDs associated with the provided linked ID. + * `visitor_not_found` - The specified visitor ID was not found. It never + existed or it may have already been deleted. + * `too_many_requests` - The limit on secret API key requests per second + has been exceeded. - The `24h` interval of `distinctIp`, `distinctLinkedId`, - `distinctCountry`, + * `state_not_ready` - The event specified with event ID is + not ready for updates yet. Try again. + This error happens in rare cases when update API is called immediately + after receiving the event ID on the client. In case you need to send + information right away, we recommend using the JS agent API instead. + * `failed` - Internal server error. - `distinctIpByLinkedId` and `distinctVisitorIdByLinkedId` will be - omitted + * `event_not_found` - The specified event ID was not found. It never + existed, expired, or it has been deleted. - if the number of `events` for the visitor ID in the last 24 + * `missing_module` - The request is invalid because it is missing a + required module. - hours (`events.intervals.['24h']`) is higher than 20.000. - additionalProperties: false - properties: - distinctIp: - $ref: '#/components/schemas/VelocityData' - distinctLinkedId: - $ref: '#/components/schemas/VelocityData' - distinctCountry: - $ref: '#/components/schemas/VelocityData' - events: - $ref: '#/components/schemas/VelocityData' - ipEvents: - $ref: '#/components/schemas/VelocityData' - distinctIpByLinkedId: - $ref: '#/components/schemas/VelocityData' - distinctVisitorIdByLinkedId: - $ref: '#/components/schemas/VelocityData' - WebhookDeveloperTools: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - `true` if the browser is Chrome with DevTools open or Firefox with - Developer Tools open, `false` otherwise. - WebhookMitMAttack: - type: object - additionalProperties: false - properties: - result: - type: boolean - description: > - * `true` - When requests made from your users' mobile devices to - Fingerprint servers have been intercepted and potentially modified. + * `payload_too_large` - The request payload is too large and cannot be + processed. - * `false` - Otherwise or when the request originated from a browser. + * `service_unavailable` - The service was unable to process the request. - See [MitM Attack - Detection](https://dev.fingerprint.com/docs/smart-signals-overview#mitm-attack-detection) - to learn more about this Smart Signal. - SupplementaryID: + * `ruleset_not_found` - The specified ruleset was not found. It never + existed or it has been deleted. + Error: type: object additionalProperties: false + required: + - code + - message properties: - visitorId: + code: + $ref: '#/components/schemas/ErrorCode' + message: type: string - description: >- - String of 20 characters that uniquely identifies the visitor's - browser or mobile device. - visitorFound: - type: boolean - description: Attribute represents if a visitor had been identified before. - confidence: - $ref: '#/components/schemas/IdentificationConfidence' - firstSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - lastSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - WebhookSupplementaryIDs: + ErrorResponse: type: object - description: Other identities that have been established for a given Visitor. + additionalProperties: false required: - - standard - - highRecall + - error properties: - standard: - $ref: '#/components/schemas/SupplementaryID' - highRecall: - $ref: '#/components/schemas/SupplementaryID' - WebhookProximity: + error: + $ref: '#/components/schemas/Error' + EventUpdate: type: object - description: > - Proximity ID represents a fixed geographical zone in a discrete global - grid within which the device is observed. - additionalProperties: false - required: - - id - - precisionRadius - - confidence properties: - id: + linked_id: type: string - description: | - A stable privacy-preserving identifier for a given proximity zone. - precisionRadius: - type: integer - format: int32 - enum: - - 10 - - 25 - - 65 - - 175 - - 450 - - 1200 - - 3300 - - 8500 - - 22500 - description: | - The radius of the proximity zone’s precision level, in meters. - confidence: - type: number - format: float - minimum: 0 - maximum: 1 - description: > - A value between `0` and `1` representing the likelihood that the - true device location lies within the mapped proximity zone. - * Scores closer to `1` indicate high confidence that the location is inside the mapped proximity zone. - * Scores closer to `0` indicate lower confidence, suggesting the true location may fall in an adjacent zone. - Webhook: + description: Linked Id value to assign to the existing event + tags: + type: object + description: >- + A customer-provided value or an object that was sent with the + identification request or updated later. + additionalProperties: true + suspect: + type: boolean + description: Suspect flag indicating observed suspicious or fraudulent event + x-go-force-pointer: true + EventSearch: type: object + description: >- + Contains a list of all identification events matching the specified + search criteria. + additionalProperties: false required: - - requestId - - url - - ip - - time - - timestamp - - sdk + - events properties: - requestId: - type: string - description: Unique identifier of the user's request. - url: - type: string - description: Page URL from which the request was sent. - ip: - type: string - description: IP address of the requesting browser or bot. - environmentId: - type: string - description: Environment ID of the event. - tag: - $ref: '#/components/schemas/Tag' - time: + events: + type: array + items: + $ref: '#/components/schemas/Event' + pagination_key: type: string - format: date-time - x-ogen-time-format: 2006-01-02T15:04:05.999Z07:00 description: >- - Time expressed according to ISO 8601 in UTC format, when the request - from the JS agent was made. We recommend to treat requests that are - older than 2 minutes as malicious. Otherwise, request replay attacks - are possible. - timestamp: + Use this value in the `pagination_key` parameter to request the next + page of search results. + total_hits: type: integer format: int64 - description: Timestamp of the event with millisecond precision in Unix time. - ipLocation: - $ref: '#/components/schemas/DeprecatedGeolocation' - linkedId: - type: string - description: A customer-provided id that was sent with the request. - visitorId: - type: string description: >- - String of 20 characters that uniquely identifies the visitor's - browser or mobile device. - visitorFound: - type: boolean - description: Attribute represents if a visitor had been identified before. - confidence: - $ref: '#/components/schemas/IdentificationConfidence' - firstSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - lastSeenAt: - $ref: '#/components/schemas/IdentificationSeenAt' - browserDetails: - $ref: '#/components/schemas/BrowserDetails' - incognito: - type: boolean - description: Flag if user used incognito session. - clientReferrer: - type: string - components: - $ref: '#/components/schemas/RawDeviceAttributes' - bot: - $ref: '#/components/schemas/BotdBot' - userAgent: - type: string - rootApps: - $ref: '#/components/schemas/WebhookRootApps' - emulator: - $ref: '#/components/schemas/WebhookEmulator' - ipInfo: - $ref: '#/components/schemas/WebhookIPInfo' - ipBlocklist: - $ref: '#/components/schemas/WebhookIPBlocklist' - tor: - $ref: '#/components/schemas/WebhookTor' - vpn: - $ref: '#/components/schemas/WebhookVPN' - proxy: - $ref: '#/components/schemas/WebhookProxy' - tampering: - $ref: '#/components/schemas/WebhookTampering' - clonedApp: - $ref: '#/components/schemas/WebhookClonedApp' - factoryReset: - $ref: '#/components/schemas/WebhookFactoryReset' - jailbroken: - $ref: '#/components/schemas/WebhookJailbroken' - frida: - $ref: '#/components/schemas/WebhookFrida' - privacySettings: - $ref: '#/components/schemas/WebhookPrivacySettings' - virtualMachine: - $ref: '#/components/schemas/WebhookVirtualMachine' - rawDeviceAttributes: - $ref: '#/components/schemas/WebhookRawDeviceAttributes' - highActivity: - $ref: '#/components/schemas/WebhookHighActivity' - locationSpoofing: - $ref: '#/components/schemas/WebhookLocationSpoofing' - suspectScore: - $ref: '#/components/schemas/WebhookSuspectScore' - remoteControl: - $ref: '#/components/schemas/WebhookRemoteControl' - velocity: - $ref: '#/components/schemas/WebhookVelocity' - developerTools: - $ref: '#/components/schemas/WebhookDeveloperTools' - mitmAttack: - $ref: '#/components/schemas/WebhookMitMAttack' - replayed: - type: boolean - description: > - `true` if we determined that this payload was replayed, `false` - otherwise. - sdk: - $ref: '#/components/schemas/SDK' - supplementaryIds: - $ref: '#/components/schemas/WebhookSupplementaryIDs' - proximity: - $ref: '#/components/schemas/WebhookProximity' + This value represents the total number of events matching the search + query, up to the limit provided in the `total_hits` query parameter. + Only present if the `total_hits` query parameter was provided. diff --git a/sync.sh b/sync.sh index f2ef8ba4..6fb2a1cd 100755 --- a/sync.sh +++ b/sync.sh @@ -2,60 +2,40 @@ set -euo pipefail defaultBaseUrl="https://fingerprintjs.github.io/fingerprint-pro-server-api-openapi" -schemaUrl="${1:-$defaultBaseUrl/schemas/fingerprint-server-api-compact.yaml}" +schemaUrl="${1:-$defaultBaseUrl/schemas/fingerprint-server-api-v4.yaml}" examplesBaseUrl="${2:-$defaultBaseUrl/examples}" mkdir -p ./res curl -fSL --retry 3 -o ./res/fingerprint-server-api.yaml "$schemaUrl" -examplesList=( - 'get_visits_200_limit_1.json' - 'get_visits_200_limit_500.json' - 'get_visits_403_error.json' - 'get_visits_429_too_many_requests_error.json' - 'webhook.json' - 'get_event_200.json' - 'get_event_200_all_errors.json' - 'get_event_200_extra_fields.json' - 'get_event_403_error.json' - 'get_event_404_error.json' - 'get_event_200_botd_failed_error.json' - 'get_event_200_botd_too_many_requests_error.json' - 'get_event_200_identification_failed_error.json' - 'get_event_200_identification_too_many_requests_error.json' - 'update_event_400_error.json' - 'update_event_403_error.json' - 'update_event_404_error.json' - 'update_event_409_error.json' -) - -sharedExamplesList=( - '400_error_empty_visitor_id.json' - '400_error_incorrect_visitor_id.json' - '403_error_feature_not_enabled.json' - '403_error_token_not_found.json' - '403_error_token_required.json' - '403_error_wrong_region.json' - '404_error_visitor_not_found.json' - '429_error_too_many_requests.json' +examples=( + 'events/search/get_event_search_200.json' + 'webhook/webhook_event.json' + 'events/get_event_200.json' + 'events/update_event_multiple_fields_request.json' + 'events/update_event_one_field_request.json' + 'errors/400_visitor_id_required.json' + 'errors/400_visitor_id_invalid.json' + 'errors/403_feature_not_enabled.json' + 'errors/403_secret_api_key_not_found.json' + 'errors/403_secret_api_key_required.json' + 'errors/403_wrong_region.json' + 'errors/404_visitor_not_found.json' + 'errors/429_too_many_requests.json' ) baseDestination="./test/mocks" mkdir -p "$baseDestination" -download_example() { - local subpath="$1" - shift - local examples=("$@") - - for example in "${examples[@]}"; do - echo "Downloading $example" - curl -fSL --retry 3 -o "$baseDestination/$example" "$examplesBaseUrl/$subpath$example" - done -} +for example in "${examples[@]}"; do + destinationPath="$baseDestination/$example" + destinationDir="$(dirname "$destinationPath")" + mkdir -p "$destinationDir" -download_example "" "${examplesList[@]}" -download_example "shared/" "${sharedExamplesList[@]}" + exampleUrl="$examplesBaseUrl/$example" + echo "Downloading $exampleUrl to $destinationPath" + curl -fSL --retry 3 -o "$destinationPath" "$exampleUrl" +done ./generate.sh diff --git a/test/mocks/errors/400_visitor_id_invalid.json b/test/mocks/errors/400_visitor_id_invalid.json index c204c568..ae7a3596 100644 --- a/test/mocks/errors/400_visitor_id_invalid.json +++ b/test/mocks/errors/400_visitor_id_invalid.json @@ -1,6 +1,6 @@ { "error": { - "code": "RequestCannotBeParsed", + "code": "request_cannot_be_parsed", "message": "invalid visitor id" } } diff --git a/test/mocks/errors/400_visitor_id_required.json b/test/mocks/errors/400_visitor_id_required.json index 6c5801a0..e144a892 100644 --- a/test/mocks/errors/400_visitor_id_required.json +++ b/test/mocks/errors/400_visitor_id_required.json @@ -1,6 +1,6 @@ { "error": { - "code": "RequestCannotBeParsed", + "code": "request_cannot_be_parsed", "message": "visitor id is required" } } diff --git a/test/mocks/errors/403_feature_not_enabled.json b/test/mocks/errors/403_feature_not_enabled.json index 9820a568..1478d51d 100644 --- a/test/mocks/errors/403_feature_not_enabled.json +++ b/test/mocks/errors/403_feature_not_enabled.json @@ -1,6 +1,6 @@ { "error": { - "code": "FeatureNotEnabled", + "code": "feature_not_enabled", "message": "feature not enabled" } } diff --git a/test/mocks/errors/403_secret_api_key_not_found.json b/test/mocks/errors/403_secret_api_key_not_found.json new file mode 100644 index 00000000..7cf7953b --- /dev/null +++ b/test/mocks/errors/403_secret_api_key_not_found.json @@ -0,0 +1,6 @@ +{ + "error": { + "code": "secret_api_key_not_found", + "message": "no fingerprint workspace found for specified secret API key" + } +} diff --git a/test/mocks/errors/403_secret_api_key_required.json b/test/mocks/errors/403_secret_api_key_required.json new file mode 100644 index 00000000..9ed2f958 --- /dev/null +++ b/test/mocks/errors/403_secret_api_key_required.json @@ -0,0 +1,6 @@ +{ + "error": { + "code": "secret_api_key_required", + "message": "secret API key in header is missing or empty" + } +} diff --git a/test/mocks/errors/403_token_not_found.json b/test/mocks/errors/403_token_not_found.json deleted file mode 100644 index 3936b530..00000000 --- a/test/mocks/errors/403_token_not_found.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "error": { - "code": "TokenNotFound", - "message": "secret key is not found" - } -} diff --git a/test/mocks/errors/403_token_required.json b/test/mocks/errors/403_token_required.json deleted file mode 100644 index 544d8714..00000000 --- a/test/mocks/errors/403_token_required.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "error": { - "code": "TokenRequired", - "message": "secret key is required" - } -} diff --git a/test/mocks/errors/403_wrong_region.json b/test/mocks/errors/403_wrong_region.json index 8acc9e01..3c5fe748 100644 --- a/test/mocks/errors/403_wrong_region.json +++ b/test/mocks/errors/403_wrong_region.json @@ -1,6 +1,6 @@ { "error": { - "code": "WrongRegion", + "code": "wrong_region", "message": "wrong region" } } diff --git a/test/mocks/errors/404_visitor_not_found.json b/test/mocks/errors/404_visitor_not_found.json index 11da4f3d..e4076f4f 100644 --- a/test/mocks/errors/404_visitor_not_found.json +++ b/test/mocks/errors/404_visitor_not_found.json @@ -1,6 +1,6 @@ { "error": { - "code": "VisitorNotFound", + "code": "visitor_not_found", "message": "visitor not found" } } diff --git a/test/mocks/errors/429_too_many_requests.json b/test/mocks/errors/429_too_many_requests.json index e38639aa..bbbc7c41 100644 --- a/test/mocks/errors/429_too_many_requests.json +++ b/test/mocks/errors/429_too_many_requests.json @@ -1,6 +1,6 @@ { "error": { - "code": "TooManyRequests", + "code": "too_many_requests", "message": "too many requests" } } diff --git a/test/mocks/events/get_event_200.json b/test/mocks/events/get_event_200.json new file mode 100644 index 00000000..8985aa0e --- /dev/null +++ b/test/mocks/events/get_event_200.json @@ -0,0 +1,282 @@ +{ + "linked_id": "somelinkedId", + "tags": {}, + "timestamp": 1708102555327, + "event_id": "1708102555327.NLOjmg", + "url": "https://www.example.com/login?hope{this{works[!", + "ip_address": "61.127.217.15", + "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ....", + "client_referrer": "https://example.com/blog/my-article", + "browser_details": { + "browser_name": "Chrome", + "browser_major_version": "74", + "browser_full_version": "74.0.3729", + "os": "Windows", + "os_version": "7", + "device": "Other" + }, + "identification": { + "visitor_id": "Ibk1527CUFmcnjLwIs4A9", + "confidence": { + "score": 0.97, + "version": "1.1" + }, + "visitor_found": false, + "first_seen_at": 1708102555327, + "last_seen_at": 1708102555327 + }, + "supplementary_id_high_recall": { + "visitor_id": "3HNey93AkBW6CRbxV6xP", + "visitor_found": true, + "confidence": { + "score": 0.97, + "version": "1.1" + }, + "first_seen_at": 1708102555327, + "last_seen_at": 1708102555327 + }, + "proximity": { + "id": "w1aTfd4MCvl", + "precision_radius": 10, + "confidence": 0.95 + }, + "bot": "not_detected", + "root_apps": false, + "emulator": false, + "ip_info": { + "v4": { + "address": "94.142.239.124", + "geolocation": { + "accuracy_radius": 20, + "latitude": 50.05, + "longitude": 14.4, + "postal_code": "150 00", + "timezone": "Europe/Prague", + "city_name": "Prague", + "country_code": "CZ", + "country_name": "Czechia", + "continent_code": "EU", + "continent_name": "Europe", + "subdivisions": [ + { + "iso_code": "10", + "name": "Hlavni mesto Praha" + } + ] + }, + "asn": "7922", + "asn_name": "COMCAST-7922", + "asn_network": "73.136.0.0/13", + "asn_type": "isp", + "datacenter_result": true, + "datacenter_name": "DediPath" + }, + "v6": { + "address": "2001:db8:3333:4444:5555:6666:7777:8888", + "geolocation": { + "accuracy_radius": 5, + "latitude": 49.982, + "longitude": 36.2566, + "postal_code": "10112", + "timezone": "Europe/Berlin", + "city_name": "Berlin", + "country_code": "DE", + "country_name": "Germany", + "continent_code": "EU", + "continent_name": "Europe", + "subdivisions": [ + { + "iso_code": "BE", + "name": "Land Berlin" + } + ] + }, + "asn": "6805", + "asn_name": "Telefonica Germany", + "asn_network": "2a02:3100::/24", + "asn_type": "isp", + "datacenter_result": false, + "datacenter_name": "" + } + }, + "ip_blocklist": { + "email_spam": false, + "attack_source": false, + "tor_node": false + }, + "proxy": true, + "proxy_confidence": "low", + "proxy_details": { + "proxy_type": "residential", + "last_seen_at": 1708102555327, + "provider": "Massive" + }, + "vpn": false, + "vpn_confidence": "high", + "vpn_origin_timezone": "Europe/Berlin", + "vpn_origin_country": "unknown", + "vpn_methods": { + "timezone_mismatch": false, + "public_vpn": false, + "auxiliary_mobile": false, + "os_mismatch": false, + "relay": false + }, + "incognito": false, + "tampering": false, + "tampering_details": { + "anomaly_score": 0.1955, + "anti_detect_browser": false + }, + "cloned_app": false, + "factory_reset_timestamp": 0, + "jailbroken": false, + "frida": false, + "privacy_settings": false, + "virtual_machine": false, + "location_spoofing": false, + "velocity": { + "distinct_ip": { + "5_minutes": 1, + "1_hour": 1, + "24_hours": 1 + }, + "distinct_country": { + "5_minutes": 1, + "1_hour": 2, + "24_hours": 2 + }, + "events": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "ip_events": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "distinct_ip_by_linked_id": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "distinct_visitor_id_by_linked_id": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + } + }, + "developer_tools": false, + "mitm_attack": false, + "sdk": { + "platform": "js", + "version": "3.11.10", + "integrations": [ + { + "name": "fingerprint-pro-react", + "version": "3.11.10", + "subintegration": { + "name": "preact", + "version": "10.21.0" + } + } + ] + }, + "replayed": false, + "high_activity_device": false, + "raw_device_attributes": { + "math": "5f030fa7d2e5f9f757bfaf81642eb1a6", + "vendor": "Google Inc.", + "plugins": [ + { + "description": "Portable Document Format", + "mimeTypes": [ + { + "suffixes": "pdf", + "type": "application/pdf" + }, + { + "suffixes": "pdf", + "type": "text/pdf" + } + ], + "name": "PDF Viewer" + } + ], + "webgl_extensions": { + "context_attributes": "6b1ed336830d2bc96442a9d76373252a", + "extension_parameters": "86a8abb36f0cb30b5946dec0c761d042", + "extensions": "57233d7b10f89fcd1ff95e3837ccd72d", + "parameters": "ea118c48e308bc4b0677118bbb3019ec", + "shader_precisions": "f223dfbcd580cf142da156d93790eb83", + "unsupported_extensions": [] + }, + "cookies_enabled": true, + "webgl_basics": { + "renderer": "WebKit WebGL", + "renderer_unmasked": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)", + "shading_language_version": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)", + "vendor": "WebKit", + "vendor_unmasked": "Google Inc. (Apple)", + "version": "WebGL 1.0 (OpenGL ES 2.0 Chromium)" + }, + "canvas": { + "geometry": "db3c1462576a399a03ae93d0ab9eb5c4", + "text": "70c3d3f7eb4408dc37a6bf8af1c51029", + "winding": true + }, + "hardware_concurrency": 10, + "languages": [ + [ + "en-US" + ] + ], + "color_depth": 24, + "fonts": [ + "Arial Unicode MS", + "Gill Sans", + "Helvetica Neue", + "Menlo" + ], + "indexed_db": true, + "touch_support": { + "max_touch_points": 0, + "touch_event": false, + "touch_start": false + }, + "device_memory": 8, + "oscpu": "Windows NT 6.1; Win64; x64", + "architecture": 127, + "screen_resolution": [ + 1920, + 1080 + ], + "timezone": "America/Sao_Paulo", + "emoji": { + "bottom": 32, + "font": "Times", + "height": 18, + "left": 8, + "right": 1608, + "top": 14, + "width": 1600, + "x": 8, + "y": 14 + }, + "font_preferences": { + "apple": 147.5625, + "default": 147.5625, + "min": 9.234375, + "mono": 133.0625, + "sans": 144.015625, + "serif": 147.5625, + "system": 146.09375 + }, + "platform": "MacIntel", + "local_storage": true, + "session_storage": true, + "date_time_locale": "en-US", + "audio": 124.04347745512496 + } +} \ No newline at end of file diff --git a/test/mocks/events/search/get_event_search_200.json b/test/mocks/events/search/get_event_search_200.json new file mode 100644 index 00000000..2affda77 --- /dev/null +++ b/test/mocks/events/search/get_event_search_200.json @@ -0,0 +1,287 @@ +{ + "events": [ + { + "linked_id": "somelinkedId", + "tags": {}, + "timestamp": 1708102555327, + "event_id": "1708102555327.NLOjmg", + "url": "https://www.example.com/login?hope{this{works[!", + "ip_address": "61.127.217.15", + "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ....", + "client_referrer": "https://example.com/blog/my-article", + "browser_details": { + "browser_name": "Chrome", + "browser_major_version": "74", + "browser_full_version": "74.0.3729", + "os": "Windows", + "os_version": "7", + "device": "Other" + }, + "identification": { + "visitor_id": "Ibk1527CUFmcnjLwIs4A9", + "confidence": { + "score": 0.97, + "version": "1.1" + }, + "visitor_found": false, + "first_seen_at": 1708102555327, + "last_seen_at": 1708102555327 + }, + "supplementary_id_high_recall": { + "visitor_id": "3HNey93AkBW6CRbxV6xP", + "visitor_found": true, + "confidence": { + "score": 0.97, + "version": "1.1" + }, + "first_seen_at": 1708102555327, + "last_seen_at": 1708102555327 + }, + "proximity": { + "id": "w1aTfd4MCvl", + "precision_radius": 10, + "confidence": 0.95 + }, + "bot": "not_detected", + "root_apps": false, + "emulator": false, + "ip_info": { + "v4": { + "address": "94.142.239.124", + "geolocation": { + "accuracy_radius": 20, + "latitude": 50.05, + "longitude": 14.4, + "postal_code": "150 00", + "timezone": "Europe/Prague", + "city_name": "Prague", + "country_code": "CZ", + "country_name": "Czechia", + "continent_code": "EU", + "continent_name": "Europe", + "subdivisions": [ + { + "iso_code": "10", + "name": "Hlavni mesto Praha" + } + ] + }, + "asn": "7922", + "asn_name": "COMCAST-7922", + "asn_network": "73.136.0.0/13", + "asn_type": "isp", + "datacenter_result": true, + "datacenter_name": "DediPath" + }, + "v6": { + "address": "2001:db8:3333:4444:5555:6666:7777:8888", + "geolocation": { + "accuracy_radius": 5, + "latitude": 49.982, + "longitude": 36.2566, + "postal_code": "10112", + "timezone": "Europe/Berlin", + "city_name": "Berlin", + "country_code": "DE", + "country_name": "Germany", + "continent_code": "EU", + "continent_name": "Europe", + "subdivisions": [ + { + "iso_code": "BE", + "name": "Land Berlin" + } + ] + }, + "asn": "6805", + "asn_name": "Telefonica Germany", + "asn_network": "2a02:3100::/24", + "asn_type": "isp", + "datacenter_result": false, + "datacenter_name": "" + } + }, + "ip_blocklist": { + "email_spam": false, + "attack_source": false, + "tor_node": false + }, + "proxy": true, + "proxy_confidence": "low", + "proxy_details": { + "proxy_type": "residential", + "last_seen_at": 1708102555327, + "provider": "Massive" + }, + "vpn": false, + "vpn_confidence": "high", + "vpn_origin_timezone": "Europe/Berlin", + "vpn_origin_country": "unknown", + "vpn_methods": { + "timezone_mismatch": false, + "public_vpn": false, + "auxiliary_mobile": false, + "os_mismatch": false, + "relay": false + }, + "incognito": false, + "tampering": false, + "tampering_details": { + "anomaly_score": 0.1955, + "anti_detect_browser": false + }, + "cloned_app": false, + "factory_reset_timestamp": 0, + "jailbroken": false, + "frida": false, + "privacy_settings": false, + "virtual_machine": false, + "location_spoofing": false, + "velocity": { + "distinct_ip": { + "5_minutes": 1, + "1_hour": 1, + "24_hours": 1 + }, + "distinct_country": { + "5_minutes": 1, + "1_hour": 2, + "24_hours": 2 + }, + "events": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "ip_events": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "distinct_ip_by_linked_id": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "distinct_visitor_id_by_linked_id": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + } + }, + "developer_tools": false, + "mitm_attack": false, + "sdk": { + "platform": "js", + "version": "3.11.10", + "integrations": [ + { + "name": "fingerprint-pro-react", + "version": "3.11.10", + "subintegration": { + "name": "preact", + "version": "10.21.0" + } + } + ] + }, + "replayed": false, + "high_activity_device": false, + "raw_device_attributes": { + "math": "5f030fa7d2e5f9f757bfaf81642eb1a6", + "vendor": "Google Inc.", + "plugins": [ + { + "description": "Portable Document Format", + "mimeTypes": [ + { + "suffixes": "pdf", + "type": "application/pdf" + }, + { + "suffixes": "pdf", + "type": "text/pdf" + } + ], + "name": "PDF Viewer" + } + ], + "webgl_extensions": { + "context_attributes": "6b1ed336830d2bc96442a9d76373252a", + "extension_parameters": "86a8abb36f0cb30b5946dec0c761d042", + "extensions": "57233d7b10f89fcd1ff95e3837ccd72d", + "parameters": "ea118c48e308bc4b0677118bbb3019ec", + "shader_precisions": "f223dfbcd580cf142da156d93790eb83", + "unsupported_extensions": [] + }, + "cookies_enabled": true, + "webgl_basics": { + "renderer": "WebKit WebGL", + "renderer_unmasked": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)", + "shading_language_version": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)", + "vendor": "WebKit", + "vendor_unmasked": "Google Inc. (Apple)", + "version": "WebGL 1.0 (OpenGL ES 2.0 Chromium)" + }, + "canvas": { + "geometry": "db3c1462576a399a03ae93d0ab9eb5c4", + "text": "70c3d3f7eb4408dc37a6bf8af1c51029", + "winding": true + }, + "hardware_concurrency": 10, + "languages": [ + [ + "en-US" + ] + ], + "color_depth": 24, + "fonts": [ + "Arial Unicode MS", + "Gill Sans", + "Helvetica Neue", + "Menlo" + ], + "indexed_db": true, + "touch_support": { + "max_touch_points": 0, + "touch_event": false, + "touch_start": false + }, + "device_memory": 8, + "oscpu": "Windows NT 6.1; Win64; x64", + "architecture": 127, + "screen_resolution": [ + 1920, + 1080 + ], + "timezone": "America/Sao_Paulo", + "emoji": { + "bottom": 32, + "font": "Times", + "height": 18, + "left": 8, + "right": 1608, + "top": 14, + "width": 1600, + "x": 8, + "y": 14 + }, + "font_preferences": { + "apple": 147.5625, + "default": 147.5625, + "min": 9.234375, + "mono": 133.0625, + "sans": 144.015625, + "serif": 147.5625, + "system": 146.09375 + }, + "platform": "MacIntel", + "local_storage": true, + "session_storage": true, + "date_time_locale": "en-US", + "audio": 124.04347745512496 + } + } + ], + "pagination_key": "1708102555327" +} \ No newline at end of file diff --git a/test/mocks/events/update_event_multiple_fields_request.json b/test/mocks/events/update_event_multiple_fields_request.json new file mode 100644 index 00000000..adcdb05f --- /dev/null +++ b/test/mocks/events/update_event_multiple_fields_request.json @@ -0,0 +1,7 @@ +{ + "linked_id": "some_username", + "tags": { + "my_tag": "some_value" + }, + "suspect": true +} diff --git a/test/mocks/events/update_event_one_field_request.json b/test/mocks/events/update_event_one_field_request.json new file mode 100644 index 00000000..e42988f5 --- /dev/null +++ b/test/mocks/events/update_event_one_field_request.json @@ -0,0 +1,3 @@ +{ + "linked_id": "some_username" +} diff --git a/test/mocks/get_event_200.json b/test/mocks/get_event_200.json deleted file mode 100644 index 7560b9a6..00000000 --- a/test/mocks/get_event_200.json +++ /dev/null @@ -1,354 +0,0 @@ -{ - "products": { - "identification": { - "data": { - "visitorId": "Ibk1527CUFmcnjLwIs4A9", - "requestId": "1708102555327.NLOjmg", - "incognito": true, - "linkedId": "somelinkedId", - "tag": {}, - "time": "2019-05-21T16:40:13Z", - "timestamp": 1582299576512, - "url": "https://www.example.com/login?hope{this{works[!", - "ip": "61.127.217.15", - "ipLocation": { - "accuracyRadius": 10, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "61202", - "timezone": "Europe/Dusseldorf", - "city": { - "name": "Dusseldorf" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "63", - "name": "North Rhine-Westphalia" - } - ] - }, - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "74", - "browserFullVersion": "74.0.3729", - "os": "Windows", - "osVersion": "7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...." - }, - "confidence": { - "score": 0.97 - }, - "visitorFound": false, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": null, - "subscription": null - }, - "sdk": { - "platform": "js", - "version": "3.11.10" - }, - "replayed": false - } - }, - "botd": { - "data": { - "bot": { - "result": "notDetected" - }, - "url": "https://www.example.com/login?hope{this{works}[!", - "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36", - "requestId": "1708102555327.NLOjmg" - } - }, - "rootApps": { - "data": { - "result": false - } - }, - "emulator": { - "data": { - "result": false - } - }, - "ipInfo": { - "data": { - "v4": { - "address": "94.142.239.124", - "geolocation": { - "accuracyRadius": 20, - "latitude": 50.05, - "longitude": 14.4, - "postalCode": "150 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "asn": { - "asn": "7922", - "name": "COMCAST-7922", - "network": "73.136.0.0/13" - }, - "datacenter": { - "result": true, - "name": "DediPath" - } - }, - "v6": { - "address": "2001:db8:3333:4444:5555:6666:7777:8888", - "geolocation": { - "accuracyRadius": 5, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "10112", - "timezone": "Europe/Berlin", - "city": { - "name": "Berlin" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "BE", - "name": "Land Berlin" - } - ] - }, - "asn": { - "asn": "6805", - "name": "Telefonica Germany", - "network": "2a02:3100::/24" - }, - "datacenter": { - "result": false, - "name": "" - } - } - } - }, - "ipBlocklist": { - "data": { - "result": false, - "details": { - "emailSpam": false, - "attackSource": false - } - } - }, - "tor": { - "data": { - "result": false - } - }, - "vpn": { - "data": { - "result": false, - "confidence": "high", - "originTimezone": "Europe/Berlin", - "originCountry": "unknown", - "methods": { - "timezoneMismatch": false, - "publicVPN": false, - "auxiliaryMobile": false, - "osMismatch": false, - "relay": false - } - } - }, - "proxy": { - "data": { - "result": true, - "confidence": "high", - "details": { - "proxyType": "residential", - "lastSeenAt": "2025-08-12T13:00:00Z" - } - } - }, - "incognito": { - "data": { - "result": false - } - }, - "tampering": { - "data": { - "result": false, - "anomalyScore": 0.1955, - "antiDetectBrowser": false - } - }, - "clonedApp": { - "data": { - "result": false - } - }, - "factoryReset": { - "data": { - "time": "1970-01-01T00:00:00Z", - "timestamp": 0 - } - }, - "jailbroken": { - "data": { - "result": false - } - }, - "frida": { - "data": { - "result": false - } - }, - "privacySettings": { - "data": { - "result": false - } - }, - "virtualMachine": { - "data": { - "result": false - } - }, - "rawDeviceAttributes": { - "data": { - "architecture": { - "value": 127 - }, - "audio": { - "value": 35.73832903057337 - }, - "canvas": { - "value": { - "Winding": true, - "Geometry": "4dce9d6017c3e0c052a77252f29f2b1c", - "Text": "dd2474a56ff78c1de3e7a07070ba3b7d" - } - }, - "colorDepth": { - "value": 30 - }, - "colorGamut": { - "value": "p3" - }, - "contrast": { - "value": 0 - }, - "cookiesEnabled": { - "value": true - }, - "cpuClass": {}, - "fonts": { - "value": ["Arial Unicode MS", "Gill Sans", "Helvetica Neue", "Menlo"] - } - } - }, - "highActivity": { - "data": { - "result": false - } - }, - "locationSpoofing": { - "data": { - "result": false - } - }, - "velocity": { - "data": { - "distinctIp": { - "intervals": { - "5m": 1, - "1h": 1, - "24h": 1 - } - }, - "distinctLinkedId": {}, - "distinctCountry": { - "intervals": { - "5m": 1, - "1h": 2, - "24h": 2 - } - }, - "events": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "ipEvents": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "distinctIpByLinkedId": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "distinctVisitorIdByLinkedId": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - } - } - }, - "developerTools": { - "data": { - "result": false - } - }, - "mitmAttack": { - "data": { - "result": false - } - }, - "proximity": { - "data": { - "id": "w1aTfd4MCvl", - "precisionRadius": 10, - "confidence": 0.95 - } - } - } -} diff --git a/test/mocks/get_event_200_all_errors.json b/test/mocks/get_event_200_all_errors.json deleted file mode 100644 index 15ea2037..00000000 --- a/test/mocks/get_event_200_all_errors.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "products": { - "identification": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "botd": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "ipInfo": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "incognito": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "rootApps": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "clonedApp": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "factoryReset": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "jailbroken": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "frida": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "emulator": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "ipBlocklist": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "tor": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "vpn": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "proxy": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "privacySettings": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "virtualMachine": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "tampering": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "rawDeviceAttributes": { - "data": { - "audio": { - "error": { - "name": "Error", - "message": "internal server error" - } - }, - "canvas": { - "error": { - "name": "Error", - "message": "internal server error" - } - } - } - }, - "locationSpoofing": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "highActivity": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "suspectScore": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "velocity": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "developerTools": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "mitmAttack": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "proximity": { - "error": { - "code": "Failed", - "message": "internal server error" - } - } - } -} diff --git a/test/mocks/get_event_200_botd_failed_error.json b/test/mocks/get_event_200_botd_failed_error.json deleted file mode 100644 index 0afa5b79..00000000 --- a/test/mocks/get_event_200_botd_failed_error.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "products": { - "identification": { - "data": { - "visitorId": "Ibk1527CUFmcnjLwIs4A9", - "requestId": "0KSh65EnVoB85JBmloQK", - "incognito": true, - "linkedId": "somelinkedId", - "time": "2019-05-21T16:40:13Z", - "tag": {}, - "timestamp": 1582299576512, - "url": "https://www.example.com/login", - "ip": "61.127.217.15", - "ipLocation": { - "accuracyRadius": 10, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "61202", - "timezone": "Europe/Dusseldorf", - "city": { - "name": "Dusseldorf" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "subdivisions": [ - { - "isoCode": "63", - "name": "North Rhine-Westphalia" - } - ] - }, - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "74", - "browserFullVersion": "74.0.3729", - "os": "Windows", - "osVersion": "7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...." - }, - "confidence": { - "score": 0.97 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": "2022-03-16T11:28:34.023Z", - "subscription": null - }, - "replayed": false - } - }, - "botd": { - "error": { - "code": "Failed", - "message": "internal server error" - } - } - } -} diff --git a/test/mocks/get_event_200_extra_fields.json b/test/mocks/get_event_200_extra_fields.json deleted file mode 100644 index 5a56a1c7..00000000 --- a/test/mocks/get_event_200_extra_fields.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "products": { - "identification": { - "data": { - "visitorId": "Ibk1527CUFmcnjLwIs4A9", - "requestId": "0KSh65EnVoB85JBmloQK", - "incognito": true, - "linkedId": "somelinkedId", - "tag": {}, - "time": "2019-05-21T16:40:13Z", - "timestamp": 1582299576512, - "url": "https://www.example.com/login", - "ip": "61.127.217.15", - "ipLocation": { - "accuracyRadius": 10, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "61202", - "timezone": "Europe/Dusseldorf", - "city": { - "name": "Dusseldorf" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "subdivisions": [ - { - "isoCode": "63", - "name": "North Rhine-Westphalia" - } - ] - }, - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "74", - "browserFullVersion": "74.0.3729", - "os": "Windows", - "osVersion": "7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...." - }, - "confidence": { - "score": 0.97, - "revision": "v1.1" - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": "2022-03-16T11:28:34.023Z", - "subscription": null - }, - "replayed": false - } - }, - "botd": { - "data": { - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36", - "requestId": "1708102555327.NLOjmg", - "bot": { - "result": "notDetected" - }, - "url": "https://www.example.com/login", - "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z" - } - }, - "product3": { - "data": { - "result": false - } - }, - "product4": { - "data": { - "result": true, - "details": { - "detail1": true, - "detail2": "detail description", - "detail3": 42 - } - } - } - } -} diff --git a/test/mocks/get_event_200_identification_failed_error.json b/test/mocks/get_event_200_identification_failed_error.json deleted file mode 100644 index 4739f36e..00000000 --- a/test/mocks/get_event_200_identification_failed_error.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "products": { - "identification": { - "error": { - "code": "Failed", - "message": "internal server error" - } - }, - "botd": { - "data": { - "bot": { - "result": "bad", - "type": "headlessChrome" - }, - "url": "https://example.com/login", - "ip": "94.60.143.223", - "time": "2024-02-23T10:20:25.287Z", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/121.0.6167.57 Safari/537.36", - "requestId": "1708683625245.tuJ4nD" - } - } - } -} diff --git a/test/mocks/get_event_200_too_many_requests_error.json b/test/mocks/get_event_200_too_many_requests_error.json deleted file mode 100644 index 138aae72..00000000 --- a/test/mocks/get_event_200_too_many_requests_error.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "products": { - "identification": { - "error": { - "code": "429 Too Many Requests", - "message": "too many requests" - } - }, - "botd": { - "error": { - "code": "TooManyRequests", - "message": "too many requests" - } - } - } -} diff --git a/test/mocks/get_event_200_with_broken_format.json b/test/mocks/get_event_200_with_broken_format.json deleted file mode 100644 index 58081140..00000000 --- a/test/mocks/get_event_200_with_broken_format.json +++ /dev/null @@ -1,301 +0,0 @@ -{ - "products": { - "identification": { - "data": { - "visitorId": "Ibk1527CUFmcnjLwIs4A9", - "requestId": "1708102555327.NLOjmg", - "incognito": true, - "linkedId": { - "broken": "format" - }, - "tag": {}, - "time": "2019-05-21T16:40:13Z", - "timestamp": 1582299576512, - "url": "https://www.example.com/login?hope{this{works[!", - "ip": "61.127.217.15", - "ipLocation": { - "accuracyRadius": 10, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "61202", - "timezone": "Europe/Dusseldorf", - "city": { - "name": "Dusseldorf" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "63", - "name": "North Rhine-Westphalia" - } - ] - }, - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "74", - "browserFullVersion": "74.0.3729", - "os": "Windows", - "osVersion": "7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...." - }, - "confidence": { - "score": 0.97 - }, - "visitorFound": false, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": null, - "subscription": null - }, - "replayed": false - } - }, - "botd": { - "data": { - "bot": { - "result": "notDetected" - }, - "url": "https://www.example.com/login?hope{this{works}[!", - "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36", - "requestId": "1708102555327.NLOjmg" - } - }, - "rootApps": { - "data": { - "result": false - } - }, - "emulator": { - "data": { - "result": false - } - }, - "ipInfo": { - "data": { - "v4": { - "address": "94.142.239.124", - "geolocation": { - "accuracyRadius": 20, - "latitude": 50.05, - "longitude": 14.4, - "postalCode": "150 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "asn": { - "asn": "7922", - "name": "COMCAST-7922", - "network": "73.136.0.0/13" - }, - "datacenter": { - "result": true, - "name": "DediPath" - } - }, - "v6": { - "address": "2001:db8:3333:4444:5555:6666:7777:8888", - "geolocation": { - "accuracyRadius": 5, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "10112", - "timezone": "Europe/Berlin", - "city": { - "name": "Berlin" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "BE", - "name": "Land Berlin" - } - ] - }, - "asn": { - "asn": "6805", - "name": "Telefonica Germany", - "network": "2a02:3100::/24" - }, - "datacenter": { - "result": false, - "name": "" - } - } - } - }, - "ipBlocklist": { - "data": { - "result": false, - "details": { - "emailSpam": false, - "attackSource": false - } - } - }, - "tor": { - "data": { - "result": false - } - }, - "vpn": { - "data": { - "result": false, - "originTimezone": "Europe/Berlin", - "originCountry": "unknown", - "methods": { - "timezoneMismatch": false, - "publicVPN": false, - "auxiliaryMobile": false - } - } - }, - "proxy": { - "data": { - "result": true, - "confidence": "high", - "details": { - "proxyType": "residential", - "lastSeenAt": "2025-08-12T13:00:00Z" - } - } - }, - "incognito": { - "data": { - "result": false - } - }, - "tampering": { - "data": { - "result": false, - "anomalyScore": 0.1955 - } - }, - "clonedApp": { - "data": { - "result": false - } - }, - "factoryReset": { - "data": { - "time": "1970-01-01T00:00:00Z", - "timestamp": 0 - } - }, - "jailbroken": { - "data": { - "result": false - } - }, - "frida": { - "data": { - "result": false - } - }, - "privacySettings": { - "data": { - "result": false - } - }, - "virtualMachine": { - "data": { - "result": false - } - }, - "rawDeviceAttributes": { - "data": { - "architecture": { - "value": 127 - }, - "audio": { - "value": 35.73832903057337 - }, - "canvas": { - "value": { - "Winding": true, - "Geometry": "4dce9d6017c3e0c052a77252f29f2b1c", - "Text": "dd2474a56ff78c1de3e7a07070ba3b7d" - } - }, - "colorDepth": { - "value": 30 - }, - "colorGamut": { - "value": "p3" - }, - "contrast": { - "value": 0 - }, - "cookiesEnabled": { - "value": true - }, - "cpuClass": {}, - "fonts": { - "value": [ - "Arial Unicode MS", - "Gill Sans", - "Helvetica Neue", - "Menlo" - ] - } - } - }, - "highActivity": { - "data": { - "result": false - } - }, - "locationSpoofing": { - "data": { - "result": false - } - }, - "mitmAttack": { - "data": { - "result": false - } - }, - "proximity": { - "data": { - "id": "w1aTfd4MCvl", - "precisionRadius": 10, - "confidence": 0.95 - } - } - } -} diff --git a/test/mocks/get_event_200_with_unknown_field.json b/test/mocks/get_event_200_with_unknown_field.json deleted file mode 100644 index 6af6ad63..00000000 --- a/test/mocks/get_event_200_with_unknown_field.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "unknown": "field", - "products": { - "unknown": "field", - "identification": { - "unknown": "field", - "data": { - "unknown": "field", - "visitorId": "Ibk1527CUFmcnjLwIs4A9", - "requestId": "1708102555327.NLOjmg", - "incognito": true, - "linkedId": "somelinkedId", - "tag": {}, - "time": "2019-05-21T16:40:13Z", - "timestamp": 1582299576512, - "url": "https://www.example.com/login?hope{this{works[!", - "ip": "61.127.217.15", - "ipLocation": { - "accuracyRadius": 10, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "61202", - "timezone": "Europe/Dusseldorf", - "city": { - "name": "Dusseldorf" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "63", - "name": "North Rhine-Westphalia" - } - ] - }, - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "74", - "browserFullVersion": "74.0.3729", - "os": "Windows", - "osVersion": "7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...." - }, - "confidence": { - "score": 0.97 - }, - "visitorFound": false, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": null, - "subscription": null - }, - "replayed": false - } - }, - "botd": { - "data": { - "bot": { - "result": "notDetected" - }, - "url": "https://www.example.com/login?hope{this{works}[!", - "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36", - "requestId": "1708102555327.NLOjmg" - } - }, - "rootApps": { - "data": { - "result": false - } - }, - "emulator": { - "data": { - "result": false - } - }, - "ipInfo": { - "data": { - "v4": { - "address": "94.142.239.124", - "geolocation": { - "accuracyRadius": 20, - "latitude": 50.05, - "longitude": 14.4, - "postalCode": "150 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "asn": { - "asn": "7922", - "name": "COMCAST-7922", - "network": "73.136.0.0/13" - }, - "datacenter": { - "result": true, - "name": "DediPath" - } - }, - "v6": { - "address": "2001:db8:3333:4444:5555:6666:7777:8888", - "geolocation": { - "accuracyRadius": 5, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "10112", - "timezone": "Europe/Berlin", - "city": { - "name": "Berlin" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "BE", - "name": "Land Berlin" - } - ] - }, - "asn": { - "asn": "6805", - "name": "Telefonica Germany", - "network": "2a02:3100::/24" - }, - "datacenter": { - "result": false, - "name": "" - } - } - } - }, - "ipBlocklist": { - "data": { - "result": false, - "details": { - "emailSpam": false, - "attackSource": false - } - } - }, - "tor": { - "data": { - "result": false - } - }, - "vpn": { - "data": { - "result": false, - "originTimezone": "Europe/Berlin", - "originCountry": "unknown", - "methods": { - "timezoneMismatch": false, - "publicVPN": false, - "auxiliaryMobile": false - } - } - }, - "proxy": { - "data": { - "result": false, - "confidence": "high" - } - }, - "incognito": { - "data": { - "result": false - } - }, - "tampering": { - "data": { - "result": false, - "anomalyScore": 0.1955 - } - }, - "clonedApp": { - "data": { - "result": false - } - }, - "factoryReset": { - "data": { - "time": "1970-01-01T00:00:00Z", - "timestamp": 0 - } - }, - "jailbroken": { - "data": { - "result": false - } - }, - "frida": { - "data": { - "result": false - } - }, - "privacySettings": { - "data": { - "result": false - } - }, - "virtualMachine": { - "data": { - "result": false - } - }, - "rawDeviceAttributes": { - "data": { - "architecture": { - "value": 127 - }, - "audio": { - "value": 35.73832903057337 - }, - "canvas": { - "value": { - "Winding": true, - "Geometry": "4dce9d6017c3e0c052a77252f29f2b1c", - "Text": "dd2474a56ff78c1de3e7a07070ba3b7d" - } - }, - "colorDepth": { - "value": 30 - }, - "colorGamut": { - "value": "p3" - }, - "contrast": { - "value": 0 - }, - "cookiesEnabled": { - "value": true - }, - "cpuClass": {}, - "fonts": { - "value": [ - "Arial Unicode MS", - "Gill Sans", - "Helvetica Neue", - "Menlo" - ] - } - } - }, - "highActivity": { - "data": { - "result": false - } - }, - "locationSpoofing": { - "data": { - "result": false - } - }, - "mitmAttack": { - "data": { - "result": false - } - }, - "proximity": { - "data": { - "id": "w1aTfd4MCvl", - "precisionRadius": 10, - "confidence": 0.95 - } - } - } -} diff --git a/test/mocks/get_event_search_200.json b/test/mocks/get_event_search_200.json deleted file mode 100644 index 27b7848d..00000000 --- a/test/mocks/get_event_search_200.json +++ /dev/null @@ -1,354 +0,0 @@ -{ - "events": [ - { - "products": { - "identification": { - "data": { - "visitorId": "Ibk1527CUFmcnjLwIs4A9", - "requestId": "1708102555327.NLOjmg", - "incognito": true, - "linkedId": "somelinkedId", - "tag": {}, - "time": "2019-05-21T16:40:13Z", - "timestamp": 1582299576512, - "url": "https://www.example.com/login?hope{this{works[!", - "ip": "61.127.217.15", - "ipLocation": { - "accuracyRadius": 10, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "61202", - "timezone": "Europe/Dusseldorf", - "city": { - "name": "Dusseldorf" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "63", - "name": "North Rhine-Westphalia" - } - ] - }, - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "74", - "browserFullVersion": "74.0.3729", - "os": "Windows", - "osVersion": "7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...." - }, - "confidence": { - "score": 0.97 - }, - "visitorFound": false, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": null, - "subscription": null - }, - "replayed": false - } - }, - "botd": { - "data": { - "bot": { - "result": "notDetected" - }, - "url": "https://www.example.com/login?hope{this{works}[!", - "ip": "61.127.217.15", - "time": "2019-05-21T16:40:13Z", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36", - "requestId": "1708102555327.NLOjmg" - } - }, - "rootApps": { - "data": { - "result": false - } - }, - "emulator": { - "data": { - "result": false - } - }, - "ipInfo": { - "data": { - "v4": { - "address": "94.142.239.124", - "geolocation": { - "accuracyRadius": 20, - "latitude": 50.05, - "longitude": 14.4, - "postalCode": "150 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "asn": { - "asn": "7922", - "name": "COMCAST-7922", - "network": "73.136.0.0/13" - }, - "datacenter": { - "result": true, - "name": "DediPath" - } - }, - "v6": { - "address": "2001:db8:3333:4444:5555:6666:7777:8888", - "geolocation": { - "accuracyRadius": 5, - "latitude": 49.982, - "longitude": 36.2566, - "postalCode": "10112", - "timezone": "Europe/Berlin", - "city": { - "name": "Berlin" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "BE", - "name": "Land Berlin" - } - ] - }, - "asn": { - "asn": "6805", - "name": "Telefonica Germany", - "network": "2a02:3100::/24" - }, - "datacenter": { - "result": false, - "name": "" - } - } - } - }, - "ipBlocklist": { - "data": { - "result": false, - "details": { - "emailSpam": false, - "attackSource": false - } - } - }, - "tor": { - "data": { - "result": false - } - }, - "vpn": { - "data": { - "result": false, - "confidence": "high", - "originTimezone": "Europe/Berlin", - "originCountry": "unknown", - "methods": { - "timezoneMismatch": false, - "publicVPN": false, - "auxiliaryMobile": false, - "osMismatch": false, - "relay": false - } - } - }, - "proxy": { - "data": { - "result": false, - "confidence": "high", - "details": { - "proxyType": "residential", - "lastSeenAt": "2025-08-12T13:00:00Z" - } - } - }, - "incognito": { - "data": { - "result": false - } - }, - "tampering": { - "data": { - "result": false, - "anomalyScore": 0.1955, - "antiDetectBrowser": false - } - }, - "clonedApp": { - "data": { - "result": false - } - }, - "factoryReset": { - "data": { - "time": "1970-01-01T00:00:00Z", - "timestamp": 0 - } - }, - "jailbroken": { - "data": { - "result": false - } - }, - "frida": { - "data": { - "result": false - } - }, - "privacySettings": { - "data": { - "result": false - } - }, - "virtualMachine": { - "data": { - "result": false - } - }, - "rawDeviceAttributes": { - "data": { - "architecture": { - "value": 127 - }, - "audio": { - "value": 35.73832903057337 - }, - "canvas": { - "value": { - "Winding": true, - "Geometry": "4dce9d6017c3e0c052a77252f29f2b1c", - "Text": "dd2474a56ff78c1de3e7a07070ba3b7d" - } - }, - "colorDepth": { - "value": 30 - }, - "colorGamut": { - "value": "p3" - }, - "contrast": { - "value": 0 - }, - "cookiesEnabled": { - "value": true - }, - "cpuClass": {}, - "fonts": { - "value": ["Arial Unicode MS", "Gill Sans", "Helvetica Neue", "Menlo"] - } - } - }, - "highActivity": { - "data": { - "result": false - } - }, - "locationSpoofing": { - "data": { - "result": false - } - }, - "velocity": { - "data": { - "distinctIp": { - "intervals": { - "5m": 1, - "1h": 1, - "24h": 1 - } - }, - "distinctLinkedId": {}, - "distinctCountry": { - "intervals": { - "5m": 1, - "1h": 2, - "24h": 2 - } - }, - "events": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "ipEvents": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "distinctIpByLinkedId": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "distinctVisitorIdByLinkedId": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - } - } - }, - "developerTools": { - "data": { - "result": false - } - }, - "mitmAttack": { - "data": { - "result": false - } - }, - "proximity": { - "data": { - "id": "w1aTfd4MCvl", - "precisionRadius": 10, - "confidence": 0.95 - } - } - }} - ], - "paginationKey": "1655373953086" -} diff --git a/test/mocks/get_visitors_200_limit_1.json b/test/mocks/get_visitors_200_limit_1.json deleted file mode 100644 index f6357ea5..00000000 --- a/test/mocks/get_visitors_200_limit_1.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "visitorId": "AcxioeQKffpXF8iGQK3P", - "visits": [ - { - "requestId": "1655373953086.DDlfmP", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "82.118.30.68", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 50.0805, - "longitude": 14.467, - "postalCode": "130 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "timestamp": 1655373953094, - "time": "2022-06-16T10:05:53Z", - "url": "https://dashboard.fingerprint.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-16T10:03:00.912Z", - "subscription": "2022-06-16T10:03:00.912Z" - } - } - ], - "lastTimestamp": 1655373953086, - "paginationKey": "1655373953086.DDlfmP" -} diff --git a/test/mocks/get_visitors_200_limit_500.json b/test/mocks/get_visitors_200_limit_500.json deleted file mode 100644 index 3e3aceb0..00000000 --- a/test/mocks/get_visitors_200_limit_500.json +++ /dev/null @@ -1,3030 +0,0 @@ -{ - "visitorId": "AcxioeQKffpXF8iGQK3P", - "visits": [ - { - "requestId": "1655373780901.HhjRFX", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "188.242.36.107", - "ipLocation": { - "accuracyRadius": 5, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1655373780912, - "time": "2022-06-16T10:03:00Z", - "url": "https://fingerprint.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-16T05:27:30.578Z", - "subscription": "2022-06-16T05:27:30.578Z" - } - }, - { - "requestId": "1655357250568.vqejDF", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "82.118.30.62", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 50.0805, - "longitude": 14.467, - "postalCode": "130 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "timestamp": 1655357250578, - "time": "2022-06-16T05:27:30Z", - "url": "https://fingerprint.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-15T15:28:33.479Z", - "subscription": "2022-06-15T15:28:33.479Z" - } - }, - { - "requestId": "1655306913474.kFQsQx", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "82.118.30.68", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 50.0805, - "longitude": 14.467, - "postalCode": "130 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "timestamp": 1655306913479, - "time": "2022-06-15T15:28:33Z", - "url": "https://fingerprint.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-15T08:47:34.677Z", - "subscription": "2022-06-15T08:47:34.677Z" - } - }, - { - "requestId": "1655282854672.vz4ZlN", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "82.118.30.91", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 50.0805, - "longitude": 14.467, - "postalCode": "130 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "timestamp": 1655282854677, - "time": "2022-06-15T08:47:34Z", - "url": "https://fingerprint.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-14T14:19:42.753Z", - "subscription": "2022-06-14T14:19:42.753Z" - } - }, - { - "requestId": "1655216382743.RDRa4h", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "188.242.36.107", - "ipLocation": { - "accuracyRadius": 5, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1655216382753, - "time": "2022-06-14T14:19:42Z", - "url": "https://fingerprint.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-13T07:53:19.878Z", - "subscription": "2022-06-13T07:53:19.878Z" - } - }, - { - "requestId": "1655106799870.C8m8hR", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.137", - "timestamp": 1655106799878, - "time": "2022-06-13T07:53:19Z", - "url": "https://fingerprint.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-07T12:54:35.413Z", - "subscription": "2022-06-07T12:54:35.413Z" - } - }, - { - "requestId": "1654606475406.2uXCJx", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.157", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651 - }, - "timestamp": 1654606475413, - "time": "2022-06-07T12:54:35Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-07T09:37:57.43Z", - "subscription": "2022-06-07T09:37:57.43Z" - } - }, - { - "requestId": "1654594677423.pCHmKJ", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "188.242.36.107", - "ipLocation": { - "timezone": "Europe/Moscow" - }, - "timestamp": 1654594677430, - "time": "2022-06-07T09:37:57Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-07T09:37:50.109Z", - "subscription": "2022-06-07T09:37:50.109Z" - } - }, - { - "requestId": "1654594670097.Lmodmj", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "188.242.36.107", - "ipLocation": { - "accuracyRadius": 5, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1654594670109, - "time": "2022-06-07T09:37:50Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-07T08:31:31.9Z", - "subscription": "2022-06-07T08:31:31.9Z" - } - }, - { - "requestId": "1654590691894.aCYqYE", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "188.242.36.107", - "ipLocation": { - "accuracyRadius": 5, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1654590691900, - "time": "2022-06-07T08:31:31Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-06T09:05:25.954Z", - "subscription": "2022-06-06T09:05:25.954Z" - } - }, - { - "requestId": "1654506325946.ijIwzu", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1654506325954, - "time": "2022-06-06T09:05:25Z", - "url": "https://fingerprintcom.netlify.app/blog/name-change/", - "tag": {}, - "confidence": { - "score": 0.99 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-02T16:58:53.635Z", - "subscription": "2022-06-02T16:58:53.635Z" - } - }, - { - "requestId": "1654189133629.0V1gtF", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1654189133635, - "time": "2022-06-02T16:58:53Z", - "url": "https://fingerprintcom.netlify.app/blog/name-change/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-06-02T16:58:51.483Z", - "subscription": "2022-06-02T16:58:51.483Z" - } - }, - { - "requestId": "1654189131472.r49Bbh", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "102", - "browserFullVersion": "102.0.5005", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1654189131483, - "time": "2022-06-02T16:58:51Z", - "url": "https://fingerprintcom.netlify.app/", - "tag": {}, - "confidence": { - "score": 0.95 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-27T14:52:26.624Z", - "subscription": "2022-05-27T14:52:26.624Z" - } - }, - { - "requestId": "1653663146617.o8KpJO", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1653663146624, - "time": "2022-05-27T14:52:26Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-20T09:50:06.7Z", - "subscription": "2022-05-20T09:50:06.7Z" - } - }, - { - "requestId": "1653040206694.Q5Csig", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1653040206700, - "time": "2022-05-20T09:50:06Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-19T16:27:38.029Z", - "subscription": "2022-05-19T16:27:38.029Z" - } - }, - { - "requestId": "1652977658020.xbfYhA", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1652977658029, - "time": "2022-05-19T16:27:38Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-17T15:09:32.666Z", - "subscription": "2022-05-17T15:09:32.666Z" - } - }, - { - "requestId": "1652800172657.xA22Pd", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1652800172666, - "time": "2022-05-17T15:09:32Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-17T14:18:17.631Z", - "subscription": "2022-05-17T14:18:17.631Z" - } - }, - { - "requestId": "1652797097626.faAMJO", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1652797097631, - "time": "2022-05-17T14:18:17Z", - "url": "https://fingerprintjs.com/careers/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-17T10:16:04.809Z", - "subscription": "2022-05-17T10:16:04.809Z" - } - }, - { - "requestId": "1652782564800.MWH0GO", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1652782564809, - "time": "2022-05-17T10:16:04Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-16T06:47:01.511Z", - "subscription": "2022-05-16T06:47:01.511Z" - } - }, - { - "requestId": "1652683621505.1tOjuc", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": false, - "ip": "217.150.54.233", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1652683621511, - "time": "2022-05-16T06:47:01Z", - "url": "https://fingerprintjs.com/products/bot-detection/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-16T06:45:49.586Z", - "subscription": "2022-05-16T06:45:49.586Z" - } - }, - { - "requestId": "1652683586557.67Faeg", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": true, - "ip": "217.150.54.233", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1652683586562, - "time": "2022-05-16T06:46:26Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 0.94 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-16T06:45:49.586Z", - "subscription": "2022-05-16T06:45:49.586Z" - } - }, - { - "requestId": "1652683549513.aVRqEP", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "101", - "browserFullVersion": "101.0.4951", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36" - }, - "incognito": false, - "ip": "217.150.54.233", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1652683549586, - "time": "2022-05-16T06:45:49Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-05T10:11:25.96Z", - "subscription": "2022-05-05T10:11:25.96Z" - } - }, - { - "requestId": "1651745485951.Oj68me", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1651745485960, - "time": "2022-05-05T10:11:25Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-05T09:33:40.155Z", - "subscription": "2022-05-05T09:33:40.155Z" - } - }, - { - "requestId": "1651743220004.W02rhx", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1651743220155, - "time": "2022-05-05T09:33:40Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-05-03T15:26:32.826Z", - "subscription": "2022-05-03T15:26:32.826Z" - } - }, - { - "requestId": "1651591592822.Is9u93", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.157", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1651591592826, - "time": "2022-05-03T15:26:32Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-29T13:23:37.049Z", - "subscription": "2022-04-29T13:23:37.049Z" - } - }, - { - "requestId": "1651238617044.rMVPGS", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "89.38.224.165", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 44.804, - "longitude": 20.4651, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1651238617049, - "time": "2022-04-29T13:23:37Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-29T10:37:53.333Z", - "subscription": "2022-04-29T10:37:53.333Z" - } - }, - { - "requestId": "1651228673329.QZI2Cu", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "188.242.36.107", - "ipLocation": { - "accuracyRadius": 5, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1651228673333, - "time": "2022-04-29T10:37:53Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-28T13:58:06.323Z", - "subscription": "2022-04-28T13:58:06.323Z" - } - }, - { - "requestId": "1651154286221.YvuOCP", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "84.247.59.113", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 50.0971, - "longitude": 8.5952, - "postalCode": "65933", - "timezone": "Europe/Berlin", - "city": { - "name": "Frankfurt am Main" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "HE", - "name": "Hesse" - } - ] - }, - "timestamp": 1651154286323, - "time": "2022-04-28T13:58:06Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-28T12:16:02.564Z", - "subscription": "2022-04-28T12:16:02.564Z" - } - }, - { - "requestId": "1651148162556.dySgif", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "84.247.59.113", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 50.0971, - "longitude": 8.5952, - "postalCode": "65933", - "timezone": "Europe/Berlin", - "city": { - "name": "Frankfurt am Main" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "HE", - "name": "Hesse" - } - ] - }, - "timestamp": 1651148162564, - "time": "2022-04-28T12:16:02Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-28T11:57:13.267Z", - "subscription": "2022-04-28T11:57:13.267Z" - } - }, - { - "requestId": "1651147033260.SxmFvL", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "84.247.59.146", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 50.0971, - "longitude": 8.5952, - "postalCode": "65933", - "timezone": "Europe/Berlin", - "city": { - "name": "Frankfurt am Main" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "HE", - "name": "Hesse" - } - ] - }, - "timestamp": 1651147033267, - "time": "2022-04-28T11:57:13Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-28T11:57:06.24Z", - "subscription": "2022-04-28T11:57:06.24Z" - } - }, - { - "requestId": "1651147026139.aAZ8TO", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "84.247.59.146", - "ipLocation": { - "accuracyRadius": 20, - "latitude": 50.0971, - "longitude": 8.5952, - "postalCode": "65933", - "timezone": "Europe/Berlin", - "city": { - "name": "Frankfurt am Main" - }, - "country": { - "code": "DE", - "name": "Germany" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "HE", - "name": "Hesse" - } - ] - }, - "timestamp": 1651147026240, - "time": "2022-04-28T11:57:06Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-26T14:10:31.908Z", - "subscription": "2022-04-26T14:10:31.908Z" - } - }, - { - "requestId": "1650982231903.eG0b6v", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.105", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650982231908, - "time": "2022-04-26T14:10:31Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-26T11:43:37.373Z", - "subscription": "2022-04-26T11:43:37.373Z" - } - }, - { - "requestId": "1650973417360.xupFFD", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.99", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650973417373, - "time": "2022-04-26T11:43:37Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-26T11:43:30.111Z", - "subscription": "2022-04-26T11:43:30.111Z" - } - }, - { - "requestId": "1650973410104.AQD4qu", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.99", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650973410111, - "time": "2022-04-26T11:43:30Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-26T11:22:34.148Z", - "subscription": "2022-04-26T11:22:34.148Z" - } - }, - { - "requestId": "1650972154133.lSWE8a", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.96", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650972154148, - "time": "2022-04-26T11:22:34Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-26T11:22:03.83Z", - "subscription": "2022-04-26T11:22:03.83Z" - } - }, - { - "requestId": "1650972123824.xk8MUR", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.96", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650972123830, - "time": "2022-04-26T11:22:03Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-25T09:46:15.458Z", - "subscription": "2022-04-25T09:46:15.458Z" - } - }, - { - "requestId": "1650879975452.kfuowM", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "188.242.36.107", - "ipLocation": { - "accuracyRadius": 5, - "latitude": 59.8983, - "longitude": 30.2618, - "postalCode": "190924", - "timezone": "Europe/Moscow", - "city": { - "name": "St Petersburg" - }, - "country": { - "code": "RU", - "name": "Russia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "SPE", - "name": "St.-Petersburg" - } - ] - }, - "timestamp": 1650879975458, - "time": "2022-04-25T09:46:15Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-22T16:51:44.816Z", - "subscription": "2022-04-22T16:51:44.816Z" - } - }, - { - "requestId": "1650646304808.xQbAju", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.227", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650646304816, - "time": "2022-04-22T16:51:44Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-21T11:43:33.116Z", - "subscription": "2022-04-21T11:43:33.116Z" - } - }, - { - "requestId": "1650541413105.leAPLz", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.89", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650541413116, - "time": "2022-04-21T11:43:33Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-20T17:11:54.717Z", - "subscription": "2022-04-20T17:11:54.717Z" - } - }, - { - "requestId": "1650474714710.M1IGsl", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.111", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650474714717, - "time": "2022-04-20T17:11:54Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-20T17:11:47.217Z", - "subscription": "2022-04-20T17:11:47.217Z" - } - }, - { - "requestId": "1650474707211.CEUuZk", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.111", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650474707217, - "time": "2022-04-20T17:11:47Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-20T17:11:12.076Z", - "subscription": "2022-04-20T17:11:12.076Z" - } - }, - { - "requestId": "1650474672071.Pz4WsK", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.111", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650474672076, - "time": "2022-04-20T17:11:12Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T12:29:06.692Z", - "subscription": "2022-04-19T12:29:06.692Z" - } - }, - { - "requestId": "1650371346684.1d7sgv", - "browserDetails": { - "browserName": "Chrome Mobile", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Android", - "osVersion": "6.0", - "device": "Nexus 5", - "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.198", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650371346692, - "time": "2022-04-19T12:29:06Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T12:29:02.15Z", - "subscription": "2022-04-19T12:29:02.15Z" - } - }, - { - "requestId": "1650371342145.oWyfRx", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.198", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650371342150, - "time": "2022-04-19T12:29:02Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T11:35:14.729Z", - "subscription": "2022-04-19T11:35:14.729Z" - } - }, - { - "requestId": "1650368114723.YEXcHI", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.206", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650368114729, - "time": "2022-04-19T11:35:14Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T11:13:33.107Z", - "subscription": "2022-04-19T11:13:33.107Z" - } - }, - { - "requestId": "1650366813101.SvUZC1", - "browserDetails": { - "browserName": "Chrome Mobile", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Android", - "osVersion": "6.0", - "device": "Nexus 5", - "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.204", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650366813107, - "time": "2022-04-19T11:13:33Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T11:13:28.453Z", - "subscription": "2022-04-19T11:13:28.453Z" - } - }, - { - "requestId": "1650366808426.Hy6j7v", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.204", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650366808453, - "time": "2022-04-19T11:13:28Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T11:07:05.19Z", - "subscription": "2022-04-19T11:07:05.19Z" - } - }, - { - "requestId": "1650366425184.xvYkdr", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.204", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650366425190, - "time": "2022-04-19T11:07:05Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T11:07:00.483Z", - "subscription": "2022-04-19T11:07:00.483Z" - } - }, - { - "requestId": "1650366420377.VR5pDX", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.204", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650366420483, - "time": "2022-04-19T11:07:00Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T10:37:45.279Z", - "subscription": "2022-04-19T10:37:45.279Z" - } - }, - { - "requestId": "1650364665274.qq31O4", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.172", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650364665279, - "time": "2022-04-19T10:37:45Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T10:22:58.87Z", - "subscription": "2022-04-19T10:22:58.87Z" - } - }, - { - "requestId": "1650363778864.tsVBjO", - "browserDetails": { - "browserName": "Chrome Mobile", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Android", - "osVersion": "6.0", - "device": "Nexus 5", - "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.210", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650363778870, - "time": "2022-04-19T10:22:58Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T10:22:46.894Z", - "subscription": "2022-04-19T10:22:46.894Z" - } - }, - { - "requestId": "1650363766889.KuVDpm", - "browserDetails": { - "browserName": "Chrome Mobile", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Android", - "osVersion": "6.0", - "device": "Nexus 5", - "userAgent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.210", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650363766894, - "time": "2022-04-19T10:22:46Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T10:07:01.528Z", - "subscription": "2022-04-19T10:07:01.528Z" - } - }, - { - "requestId": "1650362821521.dXH2Ce", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.180", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650362821528, - "time": "2022-04-19T10:07:01Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-19T10:02:42.46Z", - "subscription": "2022-04-19T10:02:42.46Z" - } - }, - { - "requestId": "1650362562448.a5cPLU", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.180", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650362562460, - "time": "2022-04-19T10:02:42Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-18T17:06:30.834Z", - "subscription": "2022-04-18T17:06:30.834Z" - } - }, - { - "requestId": "1650301590829.YXGX7h", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.195", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650301590834, - "time": "2022-04-18T17:06:30Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-18T12:23:30.446Z", - "subscription": "2022-04-18T12:23:30.446Z" - } - }, - { - "requestId": "1650284610441.lJrX4M", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" - }, - "incognito": false, - "ip": "45.86.200.179", - "ipLocation": { - "accuracyRadius": 1000, - "latitude": 52.3824, - "longitude": 4.8995, - "timezone": "Europe/Amsterdam", - "country": { - "code": "NL", - "name": "Netherlands" - }, - "continent": { - "code": "EU", - "name": "Europe" - } - }, - "timestamp": 1650284610446, - "time": "2022-04-18T12:23:30Z", - "url": "https://fingerprintjs.com/blog/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-04-06T14:53:00.526Z", - "subscription": "2022-04-06T14:53:00.526Z" - } - }, - { - "requestId": "1649256780522.WAXWf2", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36" - }, - "incognito": false, - "ip": "109.245.35.200", - "ipLocation": { - "accuracyRadius": 50, - "latitude": 44.8166, - "longitude": 20.4721, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1649256780526, - "time": "2022-04-06T14:53:00Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-03-18T11:08:35.698Z", - "subscription": "2022-03-18T11:08:35.698Z" - } - }, - { - "requestId": "1649256780520.RRC4PR", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "100", - "browserFullVersion": "100.0.4896", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36" - }, - "incognito": false, - "ip": "109.245.35.200", - "ipLocation": { - "accuracyRadius": 50, - "latitude": 44.8166, - "longitude": 20.4721, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1649256780525, - "time": "2022-04-06T14:53:00Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-03-18T11:08:35.698Z", - "subscription": "2022-03-18T11:08:35.698Z" - } - }, - { - "requestId": "1647601715689.iocXfW", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "98", - "browserFullVersion": "98.0.4758", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36" - }, - "incognito": false, - "ip": "178.223.21.183", - "ipLocation": { - "accuracyRadius": 50, - "latitude": 44.8166, - "longitude": 20.4721, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1647601715698, - "time": "2022-03-18T11:08:35Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-03-16T08:21:23.62Z", - "subscription": "2022-03-16T08:21:23.62Z" - } - }, - { - "requestId": "1647418883615.Vck2NA", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "98", - "browserFullVersion": "98.0.4758", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36" - }, - "incognito": false, - "ip": "87.116.165.97", - "ipLocation": { - "accuracyRadius": 50, - "latitude": 44.8166, - "longitude": 20.4721, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1647418883620, - "time": "2022-03-16T08:21:23Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-03-16T08:21:18.398Z", - "subscription": "2022-03-16T08:21:18.398Z" - } - }, - { - "requestId": "1647418878391.NZDmht", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "98", - "browserFullVersion": "98.0.4758", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36" - }, - "incognito": false, - "ip": "87.116.165.97", - "ipLocation": { - "accuracyRadius": 50, - "latitude": 44.8166, - "longitude": 20.4721, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1647418878398, - "time": "2022-03-16T08:21:18Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-03-15T11:46:51.858Z", - "subscription": "2022-03-15T11:46:51.858Z" - } - }, - { - "requestId": "1647344811836.RvNkL5", - "browserDetails": { - "browserName": "Chrome", - "browserMajorVersion": "98", - "browserFullVersion": "98.0.4758", - "os": "Mac OS X", - "osVersion": "10.15.7", - "device": "Other", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36" - }, - "incognito": false, - "ip": "87.116.165.97", - "ipLocation": { - "accuracyRadius": 50, - "latitude": 44.8166, - "longitude": 20.4721, - "timezone": "Europe/Belgrade", - "city": { - "name": "Belgrade" - }, - "country": { - "code": "RS", - "name": "Serbia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "00", - "name": "Belgrade" - } - ] - }, - "timestamp": 1647344811858, - "time": "2022-03-15T11:46:51Z", - "url": "https://fingerprintjs.com/", - "tag": {}, - "confidence": { - "score": 1 - }, - "visitorFound": true, - "firstSeenAt": { - "global": "2022-02-04T11:31:20Z", - "subscription": "2022-02-04T11:31:20Z" - }, - "lastSeenAt": { - "global": "2022-03-08T12:33:05.677Z", - "subscription": "2022-03-08T12:33:05.677Z" - } - } - ] -} diff --git a/test/mocks/get_visitors_400_bad_request.json b/test/mocks/get_visitors_400_bad_request.json deleted file mode 100644 index c2b6e295..00000000 --- a/test/mocks/get_visitors_400_bad_request.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "error": "bad request" -} diff --git a/test/mocks/get_visitors_403_forbidden.json b/test/mocks/get_visitors_403_forbidden.json deleted file mode 100644 index 8a886d18..00000000 --- a/test/mocks/get_visitors_403_forbidden.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "error": "Forbidden (HTTP 403)" -} diff --git a/test/mocks/get_visitors_429_too_many_requests.json b/test/mocks/get_visitors_429_too_many_requests.json deleted file mode 100644 index 00d00f2e..00000000 --- a/test/mocks/get_visitors_429_too_many_requests.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "error": "too many requests" -} diff --git a/test/mocks/related-visitors/get_related_visitors_200.json b/test/mocks/related-visitors/get_related_visitors_200.json deleted file mode 100644 index 7a46a69e..00000000 --- a/test/mocks/related-visitors/get_related_visitors_200.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "relatedVisitors": [ - { - "visitorId": "NtCUJGceWX9RpvSbhvOm" - }, - { - "visitorId": "25ee02iZwGxeyT0jMNkZ" - } - ] -} diff --git a/test/mocks/related-visitors/get_related_visitors_200_empty.json b/test/mocks/related-visitors/get_related_visitors_200_empty.json deleted file mode 100644 index 6c9b02c1..00000000 --- a/test/mocks/related-visitors/get_related_visitors_200_empty.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "relatedVisitors": [] -} diff --git a/test/mocks/update_event_multiple_fields_request.json b/test/mocks/update_event_multiple_fields_request.json deleted file mode 100644 index f85d2e75..00000000 --- a/test/mocks/update_event_multiple_fields_request.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "linkedId": "myNewLinkedId", - "tag": { - "myTag": "myNewValue" - }, - "suspect": true -} diff --git a/test/mocks/update_event_one_field_request.json b/test/mocks/update_event_one_field_request.json deleted file mode 100644 index 0ebd1549..00000000 --- a/test/mocks/update_event_one_field_request.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "linkedId": "myNewLinkedId" -} diff --git a/test/mocks/webhook.json b/test/mocks/webhook.json deleted file mode 100644 index 1180fcdc..00000000 --- a/test/mocks/webhook.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "requestId": "Px6VxbRC6WBkA39yeNH3", - "url": "https://banking.example.com/signup", - "ip": "216.3.128.12", - "tag": { - "requestType": "signup", - "yourCustomId": 45321 - }, - "time": "2019-10-12T07:20:50.52Z", - "timestamp": 1554910997788, - "ipLocation": { - "accuracyRadius": 1, - "city": { - "name": "Bolingbrook" - }, - "continent": { - "code": "NA", - "name": "North America" - }, - "country": { - "code": "US", - "name": "United States" - }, - "latitude": 41.12933, - "longitude": -88.9954, - "postalCode": "60547", - "subdivisions": [ - { - "isoCode": "IL", - "name": "Illinois" - } - ], - "timezone": "America/Chicago" - }, - "linkedId": "any-string", - "visitorId": "3HNey93AkBW6CRbxV6xP", - "visitorFound": true, - "confidence": { - "score": 0.97 - }, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": "2022-03-16T11:28:34.023Z", - "subscription": null - }, - "browserDetails": { - "browserName": "Chrome", - "browserFullVersion": "73.0.3683.86", - "browserMajorVersion": "73", - "os": "Mac OS X", - "osVersion": "10.14.3", - "device": "Other", - "userAgent": "(Macintosh; Intel Mac OS X 10_14_3) Chrome/73.0.3683.86" - }, - "incognito": false, - "clientReferrer": "https://google.com?search=banking+services", - "bot": { - "result": "bad", - "type": "selenium" - }, - "userAgent": "(Macintosh; Intel Mac OS X 10_14_3) Chrome/73.0.3683.86", - "rootApps": { - "result": false - }, - "emulator": { - "result": false - }, - "ipInfo": { - "v4": { - "address": "94.142.239.124", - "geolocation": { - "accuracyRadius": 20, - "latitude": 50.05, - "longitude": 14.4, - "postalCode": "150 00", - "timezone": "Europe/Prague", - "city": { - "name": "Prague" - }, - "country": { - "code": "CZ", - "name": "Czechia" - }, - "continent": { - "code": "EU", - "name": "Europe" - }, - "subdivisions": [ - { - "isoCode": "10", - "name": "Hlavni mesto Praha" - } - ] - }, - "asn": { - "asn": "7922", - "name": "COMCAST-7922", - "network": "73.136.0.0/13" - }, - "datacenter": { - "result": true, - "name": "DediPath" - } - } - }, - "ipBlocklist": { - "result": false, - "details": { - "emailSpam": false, - "attackSource": false - } - }, - "tor": { - "result": false - }, - "vpn": { - "result": false, - "confidence": "high", - "originTimezone": "Europe/Berlin", - "originCountry": "unknown", - "methods": { - "timezoneMismatch": false, - "publicVPN": false, - "auxiliaryMobile": false, - "osMismatch": false, - "relay": false - } - }, - "proxy": { - "result": true, - "confidence": "high", - "details": { - "proxyType": "residential", - "lastSeenAt": "2025-08-12T13:00:00Z" - } - }, - "tampering": { - "result": false, - "anomalyScore": 0, - "antiDetectBrowser": false - }, - "clonedApp": { - "result": false - }, - "factoryReset": { - "time": "1970-01-01T00:00:00Z", - "timestamp": 0 - }, - "jailbroken": { - "result": false - }, - "frida": { - "result": false - }, - "privacySettings": { - "result": false - }, - "virtualMachine": { - "result": false - }, - "rawDeviceAttributes": { - "architecture": { - "value": 127 - }, - "audio": { - "value": 35.73832903057337 - }, - "canvas": { - "value": { - "Winding": true, - "Geometry": "4dce9d6017c3e0c052a77252f29f2b1c", - "Text": "dd2474a56ff78c1de3e7a07070ba3b7d" - } - }, - "colorDepth": { - "value": 30 - }, - "colorGamut": { - "value": "srgb" - }, - "contrast": { - "value": 0 - }, - "cookiesEnabled": { - "value": true - } - }, - "highActivity": { - "result": false - }, - "locationSpoofing": { - "result": true - }, - "suspectScore": { - "result": 0 - }, - "velocity": { - "distinctIp": { - "intervals": { - "5m": 1, - "1h": 1, - "24h": 1 - } - }, - "distinctLinkedId": {}, - "distinctCountry": { - "intervals": { - "5m": 1, - "1h": 2, - "24h": 2 - } - }, - "events": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "ipEvents": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "distinctIpByLinkedId": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - }, - "distinctVisitorIdByLinkedId": { - "intervals": { - "5m": 1, - "1h": 5, - "24h": 5 - } - } - }, - "developerTools": { - "result": false - }, - "mitmAttack": { - "result": false - }, - "sdk": { - "platform": "js", - "version": "3.11.10" - }, - "replayed": false, - "supplementaryIds": { - "standard": { - "visitorId": "3HNey93AkBW6CRbxV6xP", - "visitorFound": true, - "confidence": { - "score": 0.97 - }, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": "2022-03-16T11:28:34.023Z", - "subscription": "2022-03-16T11:28:34.023Z" - } - }, - "highRecall": { - "visitorId": "3HNey93AkBW6CRbxV6xP", - "visitorFound": true, - "confidence": { - "score": 0.97 - }, - "firstSeenAt": { - "global": "2022-03-16T11:26:45.362Z", - "subscription": "2022-03-16T11:31:01.101Z" - }, - "lastSeenAt": { - "global": "2022-03-16T11:28:34.023Z", - "subscription": "2022-03-16T11:28:34.023Z" - } - } - }, - "proximity": { - "id": "w1aTfd4MCvl", - "precisionRadius": 10, - "confidence": 0.95 - } -} diff --git a/test/mocks/webhook/webhook_event.json b/test/mocks/webhook/webhook_event.json new file mode 100644 index 00000000..d9e597b2 --- /dev/null +++ b/test/mocks/webhook/webhook_event.json @@ -0,0 +1,282 @@ +{ + "linked_id": "somelinkedId", + "tags": {}, + "timestamp": 1708102555327, + "event_id": "1708102555327.NLOjmg", + "url": "https://www.example.com/login?hope{this{works[!", + "ip_address": "61.127.217.15", + "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ....", + "client_referrer": "https://example.com/blog/my-article", + "browser_details": { + "browser_name": "Chrome", + "browser_major_version": "74", + "browser_full_version": "74.0.3729", + "os": "Windows", + "os_version": "7", + "device": "Other" + }, + "identification": { + "visitor_id": "Ibk1527CUFmcnjLwIs4A9", + "confidence": { + "score": 0.97, + "version": "1.1" + }, + "visitor_found": false, + "first_seen_at": 1708102555327, + "last_seen_at": 1708102555327 + }, + "supplementary_id_high_recall": { + "visitor_id": "3HNey93AkBW6CRbxV6xP", + "visitor_found": true, + "confidence": { + "score": 0.97, + "version": "1.1" + }, + "first_seen_at": 1708102555327, + "last_seen_at": 1708102555327 + }, + "proximity": { + "id": "w1aTfd4MCvl", + "precision_radius": 10, + "confidence": 0.95 + }, + "bot": "not_detected", + "root_apps": false, + "emulator": false, + "ip_info": { + "v4": { + "address": "94.142.239.124", + "geolocation": { + "accuracy_radius": 20, + "latitude": 50.05, + "longitude": 14.4, + "postal_code": "150 00", + "timezone": "Europe/Prague", + "city_name": "Prague", + "country_code": "CZ", + "country_name": "Czechia", + "continent_code": "EU", + "continent_name": "Europe", + "subdivisions": [ + { + "iso_code": "10", + "name": "Hlavni mesto Praha" + } + ] + }, + "asn": "7922", + "asn_name": "COMCAST-7922", + "asn_network": "73.136.0.0/13", + "asn_type": "isp", + "datacenter_result": true, + "datacenter_name": "DediPath" + }, + "v6": { + "address": "2001:db8:3333:4444:5555:6666:7777:8888", + "geolocation": { + "accuracy_radius": 5, + "latitude": 49.982, + "longitude": 36.2566, + "postal_code": "10112", + "timezone": "Europe/Berlin", + "city_name": "Berlin", + "country_code": "DE", + "country_name": "Germany", + "continent_code": "EU", + "continent_name": "Europe", + "subdivisions": [ + { + "iso_code": "BE", + "name": "Land Berlin" + } + ] + }, + "asn": "6805", + "asn_name": "Telefonica Germany", + "asn_network": "2a02:3100::/24", + "asn_type": "isp", + "datacenter_result": false, + "datacenter_name": "" + } + }, + "ip_blocklist": { + "email_spam": false, + "attack_source": false, + "tor_node": false + }, + "proxy": true, + "proxy_confidence": "low", + "proxy_details": { + "proxy_type": "residential", + "last_seen_at": 1708102555327, + "provider": "Massive" + }, + "vpn": false, + "vpn_confidence": "high", + "vpn_origin_timezone": "Europe/Berlin", + "vpn_origin_country": "unknown", + "vpn_methods": { + "timezone_mismatch": false, + "public_vpn": false, + "auxiliary_mobile": false, + "os_mismatch": false, + "relay": false + }, + "incognito": false, + "tampering": false, + "tampering_details": { + "anomaly_score": 0.1955, + "anti_detect_browser": false + }, + "cloned_app": false, + "factory_reset_timestamp": 0, + "jailbroken": false, + "frida": false, + "privacy_settings": false, + "virtual_machine": false, + "location_spoofing": false, + "velocity": { + "distinct_ip": { + "5_minutes": 1, + "1_hour": 1, + "24_hours": 1 + }, + "distinct_country": { + "5_minutes": 1, + "1_hour": 2, + "24_hours": 2 + }, + "events": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "ip_events": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "distinct_ip_by_linked_id": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + }, + "distinct_visitor_id_by_linked_id": { + "5_minutes": 1, + "1_hour": 5, + "24_hours": 5 + } + }, + "developer_tools": false, + "mitm_attack": false, + "sdk": { + "platform": "js", + "version": "3.11.10", + "integrations": [ + { + "name": "fingerprint-pro-react", + "version": "3.11.10", + "subintegration": { + "name": "preact", + "version": "10.21.0" + } + } + ] + }, + "replayed": false, + "high_activity_device": false, + "raw_device_attributes": { + "math": "5f030fa7d2e5f9f757bfaf81642eb1a6", + "vendor": "Google Inc.", + "plugins": [ + { + "description": "Portable Document Format", + "mimeTypes": [ + { + "suffixes": "pdf", + "type": "application/pdf" + }, + { + "suffixes": "pdf", + "type": "text/pdf" + } + ], + "name": "PDF Viewer" + } + ], + "webgl_extensions": { + "context_attributes": "6b1ed336830d2bc96442a9d76373252a", + "extension_parameters": "86a8abb36f0cb30b5946dec0c761d042", + "extensions": "57233d7b10f89fcd1ff95e3837ccd72d", + "parameters": "ea118c48e308bc4b0677118bbb3019ec", + "shader_precisions": "f223dfbcd580cf142da156d93790eb83", + "unsupported_extensions": [] + }, + "cookies_enabled": true, + "webgl_basics": { + "renderer": "WebKit WebGL", + "renderer_unmasked": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)", + "shading_language_version": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)", + "vendor": "WebKit", + "vendor_unmasked": "Google Inc. (Apple)", + "version": "WebGL 1.0 (OpenGL ES 2.0 Chromium)" + }, + "canvas": { + "geometry": "db3c1462576a399a03ae93d0ab9eb5c4", + "text": "70c3d3f7eb4408dc37a6bf8af1c51029", + "winding": true + }, + "hardware_concurrency": 10, + "languages": [ + [ + "en-US" + ] + ], + "color_depth": 24, + "fonts": [ + "Arial Unicode MS", + "Gill Sans", + "Helvetica Neue", + "Menlo" + ], + "indexed_db": true, + "touch_support": { + "max_touch_points": 0, + "touch_event": false, + "touch_start": false + }, + "device_memory": 8, + "oscpu": "Windows NT 6.1; Win64; x64", + "architecture": 127, + "screen_resolution": [ + 1920, + 1080 + ], + "timezone": "America/Sao_Paulo", + "emoji": { + "bottom": 32, + "font": "Times", + "height": 18, + "left": 8, + "right": 1608, + "top": 14, + "width": 1600, + "x": 8, + "y": 14 + }, + "font_preferences": { + "apple": 147.5625, + "default": 147.5625, + "min": 9.234375, + "mono": 133.0625, + "sans": 144.015625, + "serif": 147.5625, + "system": 146.09375 + }, + "platform": "MacIntel", + "local_storage": true, + "session_storage": true, + "date_time_locale": "en-US", + "audio": 124.04347745512496 + } +} \ No newline at end of file From f61ab2c876f538de8bca02f60cbab14ceae91801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20Ayd=C4=B1n?= Date: Sat, 7 Feb 2026 19:39:14 +0300 Subject: [PATCH 02/19] feat!: migrate to Server API v4 Update SDK to support Server API v4. Events now expose fields directly instead of the products wrapper. The `Region` parameter requires the `Region` enum instead of a string. The `get_visitors` and `get_related_visitors` endpoints have been removed. New exception classes `TooManyRequestsException`, `ConflictException`, etc. to provide better error handling. **Breaking Changes**: - Flatten event structure. Access fields directly intead of through `products` wrapper. - Remove `get_visitors` and `get_releated_visitors` endpoints (use `search_events` instead). - Remove deprecated v3 models (webhook models, product wrapper models, etc.) **Migration Guide**: - Event structure: ```diff - event.products.identification.data.visitor_id + event.identification.visitor_id ``` - Region parameter: ```diff - Configuration(api_key="key", region="us") + from fingerprint_server_sdk.configuration import Region + Configuration(api_key="key", region=Region.US) ``` Related-Task: INTER-1796 --- .changeset/plenty-clouds-tie.md | 31 + .env.example | 6 +- .openapi-generator-ignore | 7 + .openapi-generator/FILES | 111 + .openapi-generator/VERSION | 1 + .swagger-codegen-ignore | 32 - .swagger-codegen/VERSION | 1 - README.md | 300 +- bin/swagger-codegen-cli.jar | Bin 21626185 -> 0 bytes config.json | 18 +- contributing.md | 9 +- delete_visitor_example.py | 4 +- docs/BotInfo.md | 15 + docs/BotResult.md | 15 + docs/Botd.md | 18 - docs/BotdBotResult.md | 7 - docs/BrowserDetails.md | 2 - docs/Canvas.md | 12 + docs/ClonedApp.md | 9 - docs/DeprecatedGeolocation.md | 19 - docs/Emoji.md | 18 + docs/Emulator.md | 9 - docs/Error.md | 1 - docs/ErrorCode.md | 63 +- docs/ErrorPlainResponse.md | 9 - docs/ErrorResponse.md | 1 - docs/Event.md | 59 + docs/EventRuleAction.md | 17 + docs/EventRuleActionAllow.md | 11 + docs/EventRuleActionBlock.md | 13 + docs/EventSearch.md | 12 + ...{EventsUpdateRequest.md => EventUpdate.md} | 7 +- docs/FactoryReset.md | 10 - docs/FingerprintApi.md | 474 +-- docs/FontPreferences.md | 17 + docs/Frida.md | 9 - docs/Geolocation.md | 11 +- ...ion.md => GeolocationSubdivisionsInner.md} | 3 +- docs/HighActivity.md | 10 - docs/IPBlocklist.md | 8 +- docs/IPBlocklistDetails.md | 10 - docs/IPInfo.md | 1 - docs/IPInfoASN.md | 11 - docs/IPInfoDataCenter.md | 10 - docs/IPInfoV4.md | 11 +- docs/IPInfoV6.md | 11 +- docs/Identification.md | 22 +- docs/IdentificationConfidence.md | 3 +- docs/IdentificationSeenAt.md | 10 - docs/Incognito.md | 9 - docs/Integration.md | 10 + ...rTools.md => IntegrationSubintegration.md} | 6 +- docs/Jailbroken.md | 9 - docs/LocationSpoofing.md | 9 - docs/MitMAttack.md | 9 - ...eolocationContinent.md => PluginsInner.md} | 6 +- ...tdBot.md => PluginsInnerMimeTypesInner.md} | 8 +- docs/PrivacySettings.md | 9 - docs/ProductBotd.md | 10 - docs/ProductClonedApp.md | 10 - docs/ProductDeveloperTools.md | 10 - docs/ProductEmulator.md | 10 - docs/ProductFactoryReset.md | 10 - docs/ProductFrida.md | 10 - docs/ProductHighActivity.md | 10 - docs/ProductIPBlocklist.md | 10 - docs/ProductIPInfo.md | 10 - docs/ProductIdentification.md | 10 - docs/ProductIncognito.md | 10 - docs/ProductJailbroken.md | 10 - docs/ProductLocationSpoofing.md | 10 - docs/ProductMitMAttack.md | 10 - docs/ProductPrivacySettings.md | 10 - docs/ProductProximity.md | 10 - docs/ProductProxy.md | 10 - docs/ProductRawDeviceAttributes.md | 10 - docs/ProductRemoteControl.md | 13 - docs/ProductRootApps.md | 10 - docs/ProductSuspectScore.md | 10 - docs/ProductTampering.md | 10 - docs/ProductTor.md | 10 - docs/ProductVPN.md | 10 - docs/ProductVelocity.md | 10 - docs/ProductVirtualMachine.md | 10 - docs/Products.md | 36 - docs/Proximity.md | 3 +- docs/Proxy.md | 11 - docs/ProxyConfidence.md | 12 +- docs/ProxyDetails.md | 6 +- docs/RawDeviceAttribute.md | 10 - docs/RawDeviceAttributeError.md | 10 - docs/RawDeviceAttributes.md | 32 +- docs/RelatedVisitor.md | 9 - docs/RelatedVisitorsResponse.md | 9 - docs/RemoteControl.md | 12 - docs/RequestHeaderModifications.md | 12 + docs/RootApps.md | 9 - ...cationCity.md => RuleActionHeaderField.md} | 6 +- ...ationSubdivisions.md => RuleActionType.md} | 10 +- docs/SDK.md | 6 +- docs/SealedResults.md | 2 +- docs/SearchEventsResponse.md | 12 - docs/SearchEventsResponseEvents.md | 11 - docs/SupplementaryID.md | 13 - docs/SupplementaryIDHighRecall.md | 14 + docs/SuspectScore.md | 9 - docs/Tag.md | 10 - docs/Tampering.md | 11 - docs/TamperingDetails.md | 9 + docs/Tor.md | 9 - .../{EventsGetResponse.md => TouchSupport.md} | 9 +- ...locationCountry.md => TriggeredByInner.md} | 6 +- docs/VPN.md | 13 - docs/VPNConfidence.md | 10 +- docs/VPNMethods.md | 13 +- docs/Velocity.md | 38 +- docs/VelocityData.md | 6 +- docs/VelocityIntervals.md | 14 - docs/VirtualMachine.md | 9 - docs/Visit.md | 23 - docs/VisitorsGetResponse.md | 14 - docs/WebGlBasics.md | 15 + docs/WebGlExtensions.md | 15 + docs/Webhook.md | 54 - docs/WebhookClonedApp.md | 9 - docs/WebhookDeveloperTools.md | 9 - docs/WebhookEmulator.md | 9 - docs/WebhookFactoryReset.md | 10 - docs/WebhookFrida.md | 9 - docs/WebhookHighActivity.md | 10 - docs/WebhookIPBlocklist.md | 10 - docs/WebhookIPInfo.md | 12 - docs/WebhookJailbroken.md | 9 - docs/WebhookLocationSpoofing.md | 9 - docs/WebhookMitMAttack.md | 9 - docs/WebhookPrivacySettings.md | 9 - docs/WebhookProximity.md | 14 - docs/WebhookProxy.md | 11 - docs/WebhookRawDeviceAttributes.md | 12 - docs/WebhookRemoteControl.md | 12 - docs/WebhookRootApps.md | 9 - docs/WebhookSupplementaryIDs.md | 12 - docs/WebhookSuspectScore.md | 9 - docs/WebhookTampering.md | 11 - docs/WebhookTor.md | 9 - docs/WebhookVPN.md | 13 - docs/WebhookVelocity.md | 32 - docs/WebhookVirtualMachine.md | 9 - fingerprint_server_sdk/__init__.py | 239 +- fingerprint_server_sdk/api/fingerprint_api.py | 2711 +++++++++++------ fingerprint_server_sdk/api_client.py | 862 +++--- fingerprint_server_sdk/api_response.py | 21 + fingerprint_server_sdk/base_model.py | 60 - fingerprint_server_sdk/configuration.py | 320 +- fingerprint_server_sdk/dummy_pool.py | 20 - fingerprint_server_sdk/exceptions.py | 228 ++ fingerprint_server_sdk/extend_exception.py | 10 - fingerprint_server_sdk/models/__init__.py | 142 +- fingerprint_server_sdk/models/bot_info.py | 112 + fingerprint_server_sdk/models/bot_result.py | 39 + fingerprint_server_sdk/models/botd.py | 264 -- fingerprint_server_sdk/models/botd_bot.py | 97 - .../models/botd_bot_result.py | 52 - .../models/browser_details.py | 292 +- fingerprint_server_sdk/models/canvas.py | 92 + fingerprint_server_sdk/models/cloned_app.py | 70 - .../models/deprecated_geolocation.py | 278 -- .../models/developer_tools.py | 70 - fingerprint_server_sdk/models/emoji.py | 104 + fingerprint_server_sdk/models/emulator.py | 70 - fingerprint_server_sdk/models/error.py | 156 +- fingerprint_server_sdk/models/error_code.py | 79 +- .../models/error_plain_response.py | 73 - .../models/error_response.py | 115 +- fingerprint_server_sdk/models/event.py | 245 ++ .../models/event_rule_action.py | 141 + .../models/event_rule_action_allow.py | 95 + .../models/event_rule_action_block.py | 103 + fingerprint_server_sdk/models/event_search.py | 100 + fingerprint_server_sdk/models/event_update.py | 92 + .../models/events_get_response.py | 72 - .../models/events_update_request.py | 122 - .../models/factory_reset.py | 99 - .../models/font_preferences.py | 100 + fingerprint_server_sdk/models/frida.py | 70 - fingerprint_server_sdk/models/geolocation.py | 375 +-- .../models/geolocation_city.py | 68 - .../models/geolocation_continent.py | 94 - .../models/geolocation_country.py | 94 - .../models/geolocation_subdivision.py | 94 - .../models/geolocation_subdivisions.py | 42 - .../models/geolocation_subdivisions_inner.py | 90 + .../models/high_activity.py | 97 - .../models/identification.py | 660 +--- .../models/identification_confidence.py | 185 +- .../models/identification_seen_at.py | 92 - fingerprint_server_sdk/models/incognito.py | 70 - fingerprint_server_sdk/models/integration.py | 109 + .../models/integration_subintegration.py | 90 + .../models/ip_block_list.py | 92 + fingerprint_server_sdk/models/ip_blocklist.py | 97 - .../models/ip_blocklist_details.py | 98 - fingerprint_server_sdk/models/ip_info.py | 145 +- fingerprint_server_sdk/models/ip_info_asn.py | 120 - .../models/ip_info_data_center.py | 94 - fingerprint_server_sdk/models/ip_info_v4.py | 223 +- fingerprint_server_sdk/models/ip_info_v6.py | 223 +- fingerprint_server_sdk/models/jailbroken.py | 70 - .../models/location_spoofing.py | 70 - fingerprint_server_sdk/models/mit_m_attack.py | 70 - .../models/plugins_inner.py | 100 + .../models/plugins_inner_mime_types_inner.py | 92 + .../models/privacy_settings.py | 70 - fingerprint_server_sdk/models/product_botd.py | 94 - .../models/product_cloned_app.py | 94 - .../models/product_developer_tools.py | 94 - .../models/product_emulator.py | 94 - .../models/product_factory_reset.py | 94 - .../models/product_frida.py | 94 - .../models/product_high_activity.py | 94 - .../models/product_identification.py | 94 - .../models/product_incognito.py | 94 - .../models/product_ip_blocklist.py | 94 - .../models/product_ip_info.py | 94 - .../models/product_jailbroken.py | 94 - .../models/product_location_spoofing.py | 94 - .../models/product_mit_m_attack.py | 94 - .../models/product_privacy_settings.py | 94 - .../models/product_proximity.py | 94 - .../models/product_proxy.py | 94 - .../models/product_raw_device_attributes.py | 94 - .../models/product_remote_control.py | 99 - .../models/product_root_apps.py | 94 - .../models/product_suspect_score.py | 94 - .../models/product_tampering.py | 94 - fingerprint_server_sdk/models/product_tor.py | 94 - .../models/product_velocity.py | 94 - .../models/product_virtual_machine.py | 94 - fingerprint_server_sdk/models/product_vpn.py | 94 - fingerprint_server_sdk/models/products.py | 721 ----- fingerprint_server_sdk/models/proximity.py | 203 +- fingerprint_server_sdk/models/proxy.py | 123 - .../models/proxy_confidence.py | 53 +- .../models/proxy_details.py | 176 +- .../models/raw_device_attribute.py | 93 - .../models/raw_device_attribute_error.py | 92 - .../models/raw_device_attributes.py | 178 +- .../models/related_visitor.py | 70 - .../models/related_visitors_response.py | 69 - .../models/remote_control.py | 75 - .../models/request_header_modifications.py | 107 + fingerprint_server_sdk/models/root_apps.py | 70 - .../models/rule_action_header_field.py | 90 + .../models/rule_action_type.py | 38 + fingerprint_server_sdk/models/sdk.py | 176 +- .../models/search_events_response.py | 98 - .../models/search_events_response_events.py | 72 - .../models/supplementary_id.py | 174 -- .../models/supplementary_id_high_recall.py | 100 + .../models/suspect_score.py | 70 - fingerprint_server_sdk/models/tag.py | 43 - fingerprint_server_sdk/models/tampering.py | 126 - .../models/tampering_details.py | 91 + fingerprint_server_sdk/models/tor.py | 70 - .../models/touch_support.py | 92 + .../models/triggered_by_inner.py | 105 + fingerprint_server_sdk/models/velocity.py | 326 +- .../models/velocity_data.py | 130 +- .../models/velocity_intervals.py | 124 - .../models/virtual_machine.py | 70 - fingerprint_server_sdk/models/visit.py | 452 --- .../models/visitors_get_response.py | 152 - fingerprint_server_sdk/models/vpn.py | 180 -- .../models/vpn_confidence.py | 53 +- fingerprint_server_sdk/models/vpn_methods.py | 248 +- .../models/web_gl_basics.py | 98 + .../models/web_gl_extensions.py | 98 + fingerprint_server_sdk/models/webhook.py | 1254 -------- .../models/webhook_cloned_app.py | 69 - .../models/webhook_developer_tools.py | 69 - .../models/webhook_emulator.py | 69 - .../models/webhook_factory_reset.py | 97 - .../models/webhook_frida.py | 69 - .../models/webhook_high_activity.py | 97 - .../models/webhook_ip_blocklist.py | 95 - .../models/webhook_ip_info.py | 97 - .../models/webhook_jailbroken.py | 69 - .../models/webhook_location_spoofing.py | 69 - .../models/webhook_mit_m_attack.py | 69 - .../models/webhook_privacy_settings.py | 69 - .../models/webhook_proximity.py | 135 - .../models/webhook_proxy.py | 121 - .../models/webhook_raw_device_attributes.py | 43 - .../models/webhook_remote_control.py | 74 - .../models/webhook_root_apps.py | 69 - .../models/webhook_supplementary_i_ds.py | 99 - .../models/webhook_suspect_score.py | 69 - .../models/webhook_tampering.py | 123 - fingerprint_server_sdk/models/webhook_tor.py | 69 - .../models/webhook_velocity.py | 227 -- .../models/webhook_virtual_machine.py | 69 - fingerprint_server_sdk/models/webhook_vpn.py | 175 -- fingerprint_server_sdk/py.typed | 0 fingerprint_server_sdk/rest.py | 304 +- fingerprint_server_sdk/sealed.py | 11 +- fix_codegen_problems.py | 65 - generate.sh | 50 +- pyproject.toml | 77 + requirements.txt | 13 +- run_checks.py | 48 +- sealed_results_example.py | 2 +- setup.cfg | 4 +- setup.py | 75 +- sync.sh | 10 +- template/DecryptionKey.md | 12 + template/README.mustache | 266 +- template/SealedResults.md | 14 + template/__init__api.mustache | 20 +- template/__init__model.mustache | 8 - template/__init__package.mustache | 71 +- template/api.mustache | 398 +-- template/api_client.mustache | 877 +++--- template/api_doc.mustache | 59 +- template/api_doc_example.mustache | 34 + template/common_README.mustache | 201 ++ template/configuration.mustache | 366 ++- template/exceptions.mustache | 218 ++ template/exports_api.mustache | 3 + template/exports_package.mustache | 28 + template/model.mustache | 201 -- template/model_doc.mustache | 13 +- template/pyproject.mustache | 155 + template/python_doc_auth_partial.mustache | 5 + template/requirements.mustache | 25 + template/rest.mustache | 254 -- template/sealed.py.mustache | 101 + template/setup.mustache | 92 +- template/webhook_validation.py | 30 + test-requirements.txt | 11 +- test/mock_pool_manager.py | 69 + test/mocks/errors/400_bot_type_invalid.json | 6 - test/mocks/errors/400_end_time_invalid.json | 6 - ...equired.json => 400_event_id_invalid.json} | 2 +- test/mocks/errors/400_ip_address_invalid.json | 6 - test/mocks/errors/400_limit_invalid.json | 6 - test/mocks/errors/400_linked_id_invalid.json | 6 - .../errors/400_pagination_key_invalid.json | 6 - .../errors/400_request_body_invalid.json | 2 +- test/mocks/errors/400_reverse_invalid.json | 6 - test/mocks/errors/400_start_time_invalid.json | 6 - .../errors/403_secret_api_key_not_found.json | 6 - .../errors/403_subscription_not_active.json | 6 - test/mocks/errors/403_wrong_region.json | 6 - test/mocks/errors/404_event_not_found.json | 6 + test/mocks/errors/404_request_not_found.json | 6 - test/mocks/errors/409_state_not_ready.json | 2 +- .../update_event_multiple_fields_request.json | 7 - .../update_event_one_field_request.json | 3 - test/mocks/webhook/webhook_event.json | 282 -- test/test_base_model.py | 135 - test/test_fingerprint_api.py | 958 ++---- test/test_sealed.py | 260 +- update_event_example.py | 14 +- 363 files changed, 10945 insertions(+), 20352 deletions(-) create mode 100644 .changeset/plenty-clouds-tie.md create mode 100644 .openapi-generator-ignore create mode 100644 .openapi-generator/FILES create mode 100644 .openapi-generator/VERSION delete mode 100644 .swagger-codegen-ignore delete mode 100644 .swagger-codegen/VERSION delete mode 100644 bin/swagger-codegen-cli.jar create mode 100644 docs/BotInfo.md create mode 100644 docs/BotResult.md delete mode 100644 docs/Botd.md delete mode 100644 docs/BotdBotResult.md create mode 100644 docs/Canvas.md delete mode 100644 docs/ClonedApp.md delete mode 100644 docs/DeprecatedGeolocation.md create mode 100644 docs/Emoji.md delete mode 100644 docs/Emulator.md delete mode 100644 docs/ErrorPlainResponse.md create mode 100644 docs/Event.md create mode 100644 docs/EventRuleAction.md create mode 100644 docs/EventRuleActionAllow.md create mode 100644 docs/EventRuleActionBlock.md create mode 100644 docs/EventSearch.md rename docs/{EventsUpdateRequest.md => EventUpdate.md} (59%) delete mode 100644 docs/FactoryReset.md create mode 100644 docs/FontPreferences.md delete mode 100644 docs/Frida.md rename docs/{GeolocationSubdivision.md => GeolocationSubdivisionsInner.md} (91%) delete mode 100644 docs/HighActivity.md delete mode 100644 docs/IPBlocklistDetails.md delete mode 100644 docs/IPInfoASN.md delete mode 100644 docs/IPInfoDataCenter.md delete mode 100644 docs/IdentificationSeenAt.md delete mode 100644 docs/Incognito.md create mode 100644 docs/Integration.md rename docs/{DeveloperTools.md => IntegrationSubintegration.md} (53%) delete mode 100644 docs/Jailbroken.md delete mode 100644 docs/LocationSpoofing.md delete mode 100644 docs/MitMAttack.md rename docs/{GeolocationContinent.md => PluginsInner.md} (64%) rename docs/{BotdBot.md => PluginsInnerMimeTypesInner.md} (73%) delete mode 100644 docs/PrivacySettings.md delete mode 100644 docs/ProductBotd.md delete mode 100644 docs/ProductClonedApp.md delete mode 100644 docs/ProductDeveloperTools.md delete mode 100644 docs/ProductEmulator.md delete mode 100644 docs/ProductFactoryReset.md delete mode 100644 docs/ProductFrida.md delete mode 100644 docs/ProductHighActivity.md delete mode 100644 docs/ProductIPBlocklist.md delete mode 100644 docs/ProductIPInfo.md delete mode 100644 docs/ProductIdentification.md delete mode 100644 docs/ProductIncognito.md delete mode 100644 docs/ProductJailbroken.md delete mode 100644 docs/ProductLocationSpoofing.md delete mode 100644 docs/ProductMitMAttack.md delete mode 100644 docs/ProductPrivacySettings.md delete mode 100644 docs/ProductProximity.md delete mode 100644 docs/ProductProxy.md delete mode 100644 docs/ProductRawDeviceAttributes.md delete mode 100644 docs/ProductRemoteControl.md delete mode 100644 docs/ProductRootApps.md delete mode 100644 docs/ProductSuspectScore.md delete mode 100644 docs/ProductTampering.md delete mode 100644 docs/ProductTor.md delete mode 100644 docs/ProductVPN.md delete mode 100644 docs/ProductVelocity.md delete mode 100644 docs/ProductVirtualMachine.md delete mode 100644 docs/Products.md delete mode 100644 docs/Proxy.md delete mode 100644 docs/RawDeviceAttribute.md delete mode 100644 docs/RawDeviceAttributeError.md delete mode 100644 docs/RelatedVisitor.md delete mode 100644 docs/RelatedVisitorsResponse.md delete mode 100644 docs/RemoteControl.md create mode 100644 docs/RequestHeaderModifications.md delete mode 100644 docs/RootApps.md rename docs/{GeolocationCity.md => RuleActionHeaderField.md} (68%) rename docs/{GeolocationSubdivisions.md => RuleActionType.md} (55%) delete mode 100644 docs/SearchEventsResponse.md delete mode 100644 docs/SearchEventsResponseEvents.md delete mode 100644 docs/SupplementaryID.md create mode 100644 docs/SupplementaryIDHighRecall.md delete mode 100644 docs/SuspectScore.md delete mode 100644 docs/Tag.md delete mode 100644 docs/Tampering.md create mode 100644 docs/TamperingDetails.md delete mode 100644 docs/Tor.md rename docs/{EventsGetResponse.md => TouchSupport.md} (59%) rename docs/{GeolocationCountry.md => TriggeredByInner.md} (80%) delete mode 100644 docs/VPN.md delete mode 100644 docs/VelocityIntervals.md delete mode 100644 docs/VirtualMachine.md delete mode 100644 docs/Visit.md delete mode 100644 docs/VisitorsGetResponse.md create mode 100644 docs/WebGlBasics.md create mode 100644 docs/WebGlExtensions.md delete mode 100644 docs/Webhook.md delete mode 100644 docs/WebhookClonedApp.md delete mode 100644 docs/WebhookDeveloperTools.md delete mode 100644 docs/WebhookEmulator.md delete mode 100644 docs/WebhookFactoryReset.md delete mode 100644 docs/WebhookFrida.md delete mode 100644 docs/WebhookHighActivity.md delete mode 100644 docs/WebhookIPBlocklist.md delete mode 100644 docs/WebhookIPInfo.md delete mode 100644 docs/WebhookJailbroken.md delete mode 100644 docs/WebhookLocationSpoofing.md delete mode 100644 docs/WebhookMitMAttack.md delete mode 100644 docs/WebhookPrivacySettings.md delete mode 100644 docs/WebhookProximity.md delete mode 100644 docs/WebhookProxy.md delete mode 100644 docs/WebhookRawDeviceAttributes.md delete mode 100644 docs/WebhookRemoteControl.md delete mode 100644 docs/WebhookRootApps.md delete mode 100644 docs/WebhookSupplementaryIDs.md delete mode 100644 docs/WebhookSuspectScore.md delete mode 100644 docs/WebhookTampering.md delete mode 100644 docs/WebhookTor.md delete mode 100644 docs/WebhookVPN.md delete mode 100644 docs/WebhookVelocity.md delete mode 100644 docs/WebhookVirtualMachine.md create mode 100644 fingerprint_server_sdk/api_response.py delete mode 100644 fingerprint_server_sdk/base_model.py delete mode 100644 fingerprint_server_sdk/dummy_pool.py create mode 100644 fingerprint_server_sdk/exceptions.py delete mode 100644 fingerprint_server_sdk/extend_exception.py create mode 100644 fingerprint_server_sdk/models/bot_info.py create mode 100644 fingerprint_server_sdk/models/bot_result.py delete mode 100644 fingerprint_server_sdk/models/botd.py delete mode 100644 fingerprint_server_sdk/models/botd_bot.py delete mode 100644 fingerprint_server_sdk/models/botd_bot_result.py create mode 100644 fingerprint_server_sdk/models/canvas.py delete mode 100644 fingerprint_server_sdk/models/cloned_app.py delete mode 100644 fingerprint_server_sdk/models/deprecated_geolocation.py delete mode 100644 fingerprint_server_sdk/models/developer_tools.py create mode 100644 fingerprint_server_sdk/models/emoji.py delete mode 100644 fingerprint_server_sdk/models/emulator.py delete mode 100644 fingerprint_server_sdk/models/error_plain_response.py create mode 100644 fingerprint_server_sdk/models/event.py create mode 100644 fingerprint_server_sdk/models/event_rule_action.py create mode 100644 fingerprint_server_sdk/models/event_rule_action_allow.py create mode 100644 fingerprint_server_sdk/models/event_rule_action_block.py create mode 100644 fingerprint_server_sdk/models/event_search.py create mode 100644 fingerprint_server_sdk/models/event_update.py delete mode 100644 fingerprint_server_sdk/models/events_get_response.py delete mode 100644 fingerprint_server_sdk/models/events_update_request.py delete mode 100644 fingerprint_server_sdk/models/factory_reset.py create mode 100644 fingerprint_server_sdk/models/font_preferences.py delete mode 100644 fingerprint_server_sdk/models/frida.py delete mode 100644 fingerprint_server_sdk/models/geolocation_city.py delete mode 100644 fingerprint_server_sdk/models/geolocation_continent.py delete mode 100644 fingerprint_server_sdk/models/geolocation_country.py delete mode 100644 fingerprint_server_sdk/models/geolocation_subdivision.py delete mode 100644 fingerprint_server_sdk/models/geolocation_subdivisions.py create mode 100644 fingerprint_server_sdk/models/geolocation_subdivisions_inner.py delete mode 100644 fingerprint_server_sdk/models/high_activity.py delete mode 100644 fingerprint_server_sdk/models/identification_seen_at.py delete mode 100644 fingerprint_server_sdk/models/incognito.py create mode 100644 fingerprint_server_sdk/models/integration.py create mode 100644 fingerprint_server_sdk/models/integration_subintegration.py create mode 100644 fingerprint_server_sdk/models/ip_block_list.py delete mode 100644 fingerprint_server_sdk/models/ip_blocklist.py delete mode 100644 fingerprint_server_sdk/models/ip_blocklist_details.py delete mode 100644 fingerprint_server_sdk/models/ip_info_asn.py delete mode 100644 fingerprint_server_sdk/models/ip_info_data_center.py delete mode 100644 fingerprint_server_sdk/models/jailbroken.py delete mode 100644 fingerprint_server_sdk/models/location_spoofing.py delete mode 100644 fingerprint_server_sdk/models/mit_m_attack.py create mode 100644 fingerprint_server_sdk/models/plugins_inner.py create mode 100644 fingerprint_server_sdk/models/plugins_inner_mime_types_inner.py delete mode 100644 fingerprint_server_sdk/models/privacy_settings.py delete mode 100644 fingerprint_server_sdk/models/product_botd.py delete mode 100644 fingerprint_server_sdk/models/product_cloned_app.py delete mode 100644 fingerprint_server_sdk/models/product_developer_tools.py delete mode 100644 fingerprint_server_sdk/models/product_emulator.py delete mode 100644 fingerprint_server_sdk/models/product_factory_reset.py delete mode 100644 fingerprint_server_sdk/models/product_frida.py delete mode 100644 fingerprint_server_sdk/models/product_high_activity.py delete mode 100644 fingerprint_server_sdk/models/product_identification.py delete mode 100644 fingerprint_server_sdk/models/product_incognito.py delete mode 100644 fingerprint_server_sdk/models/product_ip_blocklist.py delete mode 100644 fingerprint_server_sdk/models/product_ip_info.py delete mode 100644 fingerprint_server_sdk/models/product_jailbroken.py delete mode 100644 fingerprint_server_sdk/models/product_location_spoofing.py delete mode 100644 fingerprint_server_sdk/models/product_mit_m_attack.py delete mode 100644 fingerprint_server_sdk/models/product_privacy_settings.py delete mode 100644 fingerprint_server_sdk/models/product_proximity.py delete mode 100644 fingerprint_server_sdk/models/product_proxy.py delete mode 100644 fingerprint_server_sdk/models/product_raw_device_attributes.py delete mode 100644 fingerprint_server_sdk/models/product_remote_control.py delete mode 100644 fingerprint_server_sdk/models/product_root_apps.py delete mode 100644 fingerprint_server_sdk/models/product_suspect_score.py delete mode 100644 fingerprint_server_sdk/models/product_tampering.py delete mode 100644 fingerprint_server_sdk/models/product_tor.py delete mode 100644 fingerprint_server_sdk/models/product_velocity.py delete mode 100644 fingerprint_server_sdk/models/product_virtual_machine.py delete mode 100644 fingerprint_server_sdk/models/product_vpn.py delete mode 100644 fingerprint_server_sdk/models/products.py delete mode 100644 fingerprint_server_sdk/models/proxy.py delete mode 100644 fingerprint_server_sdk/models/raw_device_attribute.py delete mode 100644 fingerprint_server_sdk/models/raw_device_attribute_error.py delete mode 100644 fingerprint_server_sdk/models/related_visitor.py delete mode 100644 fingerprint_server_sdk/models/related_visitors_response.py delete mode 100644 fingerprint_server_sdk/models/remote_control.py create mode 100644 fingerprint_server_sdk/models/request_header_modifications.py delete mode 100644 fingerprint_server_sdk/models/root_apps.py create mode 100644 fingerprint_server_sdk/models/rule_action_header_field.py create mode 100644 fingerprint_server_sdk/models/rule_action_type.py delete mode 100644 fingerprint_server_sdk/models/search_events_response.py delete mode 100644 fingerprint_server_sdk/models/search_events_response_events.py delete mode 100644 fingerprint_server_sdk/models/supplementary_id.py create mode 100644 fingerprint_server_sdk/models/supplementary_id_high_recall.py delete mode 100644 fingerprint_server_sdk/models/suspect_score.py delete mode 100644 fingerprint_server_sdk/models/tag.py delete mode 100644 fingerprint_server_sdk/models/tampering.py create mode 100644 fingerprint_server_sdk/models/tampering_details.py delete mode 100644 fingerprint_server_sdk/models/tor.py create mode 100644 fingerprint_server_sdk/models/touch_support.py create mode 100644 fingerprint_server_sdk/models/triggered_by_inner.py delete mode 100644 fingerprint_server_sdk/models/velocity_intervals.py delete mode 100644 fingerprint_server_sdk/models/virtual_machine.py delete mode 100644 fingerprint_server_sdk/models/visit.py delete mode 100644 fingerprint_server_sdk/models/visitors_get_response.py delete mode 100644 fingerprint_server_sdk/models/vpn.py create mode 100644 fingerprint_server_sdk/models/web_gl_basics.py create mode 100644 fingerprint_server_sdk/models/web_gl_extensions.py delete mode 100644 fingerprint_server_sdk/models/webhook.py delete mode 100644 fingerprint_server_sdk/models/webhook_cloned_app.py delete mode 100644 fingerprint_server_sdk/models/webhook_developer_tools.py delete mode 100644 fingerprint_server_sdk/models/webhook_emulator.py delete mode 100644 fingerprint_server_sdk/models/webhook_factory_reset.py delete mode 100644 fingerprint_server_sdk/models/webhook_frida.py delete mode 100644 fingerprint_server_sdk/models/webhook_high_activity.py delete mode 100644 fingerprint_server_sdk/models/webhook_ip_blocklist.py delete mode 100644 fingerprint_server_sdk/models/webhook_ip_info.py delete mode 100644 fingerprint_server_sdk/models/webhook_jailbroken.py delete mode 100644 fingerprint_server_sdk/models/webhook_location_spoofing.py delete mode 100644 fingerprint_server_sdk/models/webhook_mit_m_attack.py delete mode 100644 fingerprint_server_sdk/models/webhook_privacy_settings.py delete mode 100644 fingerprint_server_sdk/models/webhook_proximity.py delete mode 100644 fingerprint_server_sdk/models/webhook_proxy.py delete mode 100644 fingerprint_server_sdk/models/webhook_raw_device_attributes.py delete mode 100644 fingerprint_server_sdk/models/webhook_remote_control.py delete mode 100644 fingerprint_server_sdk/models/webhook_root_apps.py delete mode 100644 fingerprint_server_sdk/models/webhook_supplementary_i_ds.py delete mode 100644 fingerprint_server_sdk/models/webhook_suspect_score.py delete mode 100644 fingerprint_server_sdk/models/webhook_tampering.py delete mode 100644 fingerprint_server_sdk/models/webhook_tor.py delete mode 100644 fingerprint_server_sdk/models/webhook_velocity.py delete mode 100644 fingerprint_server_sdk/models/webhook_virtual_machine.py delete mode 100644 fingerprint_server_sdk/models/webhook_vpn.py create mode 100644 fingerprint_server_sdk/py.typed delete mode 100644 fix_codegen_problems.py create mode 100644 pyproject.toml create mode 100644 template/DecryptionKey.md create mode 100644 template/SealedResults.md delete mode 100644 template/__init__model.mustache create mode 100644 template/api_doc_example.mustache create mode 100644 template/common_README.mustache create mode 100644 template/exceptions.mustache create mode 100644 template/exports_api.mustache create mode 100644 template/exports_package.mustache delete mode 100644 template/model.mustache create mode 100644 template/pyproject.mustache create mode 100644 template/python_doc_auth_partial.mustache create mode 100644 template/requirements.mustache delete mode 100644 template/rest.mustache create mode 100644 template/sealed.py.mustache create mode 100644 template/webhook_validation.py create mode 100644 test/mock_pool_manager.py delete mode 100644 test/mocks/errors/400_bot_type_invalid.json delete mode 100644 test/mocks/errors/400_end_time_invalid.json rename test/mocks/errors/{400_visitor_id_required.json => 400_event_id_invalid.json} (60%) delete mode 100644 test/mocks/errors/400_ip_address_invalid.json delete mode 100644 test/mocks/errors/400_limit_invalid.json delete mode 100644 test/mocks/errors/400_linked_id_invalid.json delete mode 100644 test/mocks/errors/400_pagination_key_invalid.json delete mode 100644 test/mocks/errors/400_reverse_invalid.json delete mode 100644 test/mocks/errors/400_start_time_invalid.json delete mode 100644 test/mocks/errors/403_secret_api_key_not_found.json delete mode 100644 test/mocks/errors/403_subscription_not_active.json delete mode 100644 test/mocks/errors/403_wrong_region.json create mode 100644 test/mocks/errors/404_event_not_found.json delete mode 100644 test/mocks/errors/404_request_not_found.json delete mode 100644 test/mocks/events/update_event_multiple_fields_request.json delete mode 100644 test/mocks/events/update_event_one_field_request.json delete mode 100644 test/mocks/webhook/webhook_event.json delete mode 100644 test/test_base_model.py diff --git a/.changeset/plenty-clouds-tie.md b/.changeset/plenty-clouds-tie.md new file mode 100644 index 00000000..adce2f35 --- /dev/null +++ b/.changeset/plenty-clouds-tie.md @@ -0,0 +1,31 @@ +--- +"@fingerprint/python-sdk": major +--- + +Migrate to Server API v4. + +### Breaking Changes + +- Flatten event structure. Access fields directly intead of through `products` wrapper. +- Remove `get_visitors` and `get_releated_visitors` endpoints (use `search_events` instead). +- Remove deprecated v3 models (webhook models, product wrapper models, etc.) + +### Migration Guide + +**Event structure:** +```diff +- event.products.identification.data.visitor_id ++ event.identification.visitor_id +``` + +**Region parameter:** +```diff +- Configuration(api_key="key", region="us") ++ from fingerprint_server_sdk.configuration import Region ++ Configuration(api_key="key", region=Region.US) +``` + +**New Features:** + +- New exception classes: `TooManyRequestsException`, `ConflictException`, `UnprocessableEntityException`, ... +- New v4 models: `BotInfo`, `Canvas`, `Emoji`, `EventRuleAction`, `FontPreferences`, ... diff --git a/.env.example b/.env.example index 706fa91d..b299a925 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,9 @@ PRIVATE_KEY= VISITOR_ID_TO_DELETE= # for delete visitor example -REQUEST_ID_TO_UPDATE= # for update event example +EVENT_ID_TO_UPDATE= # for update event example # put 'eu' or 'ap' if necessary, 'us' is default REGION= + +# Sealed Results Example +BASE64_SEALED_RESULT= +BASE64_KEY= \ No newline at end of file diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore new file mode 100644 index 00000000..d9101c42 --- /dev/null +++ b/.openapi-generator-ignore @@ -0,0 +1,7 @@ +.gitignore +.gitlab-ci.yml +.travis.yml +git_push.sh +tox.ini +test/*.py +.github/workflows/python.yml \ No newline at end of file diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES new file mode 100644 index 00000000..23eeec0b --- /dev/null +++ b/.openapi-generator/FILES @@ -0,0 +1,111 @@ +README.md +docs/BotInfo.md +docs/BotResult.md +docs/BrowserDetails.md +docs/Canvas.md +docs/DecryptionKey.md +docs/Emoji.md +docs/Error.md +docs/ErrorCode.md +docs/ErrorResponse.md +docs/Event.md +docs/EventRuleAction.md +docs/EventRuleActionAllow.md +docs/EventRuleActionBlock.md +docs/EventSearch.md +docs/EventUpdate.md +docs/FingerprintApi.md +docs/FontPreferences.md +docs/Geolocation.md +docs/GeolocationSubdivisionsInner.md +docs/IPBlockList.md +docs/IPInfo.md +docs/IPInfoV4.md +docs/IPInfoV6.md +docs/Identification.md +docs/IdentificationConfidence.md +docs/Integration.md +docs/IntegrationSubintegration.md +docs/PluginsInner.md +docs/PluginsInnerMimeTypesInner.md +docs/Proximity.md +docs/ProxyConfidence.md +docs/ProxyDetails.md +docs/RawDeviceAttributes.md +docs/RequestHeaderModifications.md +docs/RuleActionHeaderField.md +docs/RuleActionType.md +docs/SDK.md +docs/SealedResults.md +docs/SupplementaryIDHighRecall.md +docs/TamperingDetails.md +docs/TouchSupport.md +docs/TriggeredByInner.md +docs/Velocity.md +docs/VelocityData.md +docs/VpnConfidence.md +docs/VpnMethods.md +docs/WebGlBasics.md +docs/WebGlExtensions.md +fingerprint_server_sdk/__init__.py +fingerprint_server_sdk/api/__init__.py +fingerprint_server_sdk/api/fingerprint_api.py +fingerprint_server_sdk/api_client.py +fingerprint_server_sdk/api_response.py +fingerprint_server_sdk/configuration.py +fingerprint_server_sdk/exceptions.py +fingerprint_server_sdk/models/__init__.py +fingerprint_server_sdk/models/bot_info.py +fingerprint_server_sdk/models/bot_result.py +fingerprint_server_sdk/models/browser_details.py +fingerprint_server_sdk/models/canvas.py +fingerprint_server_sdk/models/emoji.py +fingerprint_server_sdk/models/error.py +fingerprint_server_sdk/models/error_code.py +fingerprint_server_sdk/models/error_response.py +fingerprint_server_sdk/models/event.py +fingerprint_server_sdk/models/event_rule_action.py +fingerprint_server_sdk/models/event_rule_action_allow.py +fingerprint_server_sdk/models/event_rule_action_block.py +fingerprint_server_sdk/models/event_search.py +fingerprint_server_sdk/models/event_update.py +fingerprint_server_sdk/models/font_preferences.py +fingerprint_server_sdk/models/geolocation.py +fingerprint_server_sdk/models/geolocation_subdivisions_inner.py +fingerprint_server_sdk/models/identification.py +fingerprint_server_sdk/models/identification_confidence.py +fingerprint_server_sdk/models/integration.py +fingerprint_server_sdk/models/integration_subintegration.py +fingerprint_server_sdk/models/ip_block_list.py +fingerprint_server_sdk/models/ip_info.py +fingerprint_server_sdk/models/ip_info_v4.py +fingerprint_server_sdk/models/ip_info_v6.py +fingerprint_server_sdk/models/plugins_inner.py +fingerprint_server_sdk/models/plugins_inner_mime_types_inner.py +fingerprint_server_sdk/models/proximity.py +fingerprint_server_sdk/models/proxy_confidence.py +fingerprint_server_sdk/models/proxy_details.py +fingerprint_server_sdk/models/raw_device_attributes.py +fingerprint_server_sdk/models/request_header_modifications.py +fingerprint_server_sdk/models/rule_action_header_field.py +fingerprint_server_sdk/models/rule_action_type.py +fingerprint_server_sdk/models/sdk.py +fingerprint_server_sdk/models/supplementary_id_high_recall.py +fingerprint_server_sdk/models/tampering_details.py +fingerprint_server_sdk/models/touch_support.py +fingerprint_server_sdk/models/triggered_by_inner.py +fingerprint_server_sdk/models/velocity.py +fingerprint_server_sdk/models/velocity_data.py +fingerprint_server_sdk/models/vpn_confidence.py +fingerprint_server_sdk/models/vpn_methods.py +fingerprint_server_sdk/models/web_gl_basics.py +fingerprint_server_sdk/models/web_gl_extensions.py +fingerprint_server_sdk/py.typed +fingerprint_server_sdk/rest.py +fingerprint_server_sdk/sealed.py +fingerprint_server_sdk/webhook_validation.py +pyproject.toml +requirements.txt +setup.cfg +setup.py +test-requirements.txt diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION new file mode 100644 index 00000000..3821090f --- /dev/null +++ b/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.19.0 diff --git a/.swagger-codegen-ignore b/.swagger-codegen-ignore deleted file mode 100644 index 41427e89..00000000 --- a/.swagger-codegen-ignore +++ /dev/null @@ -1,32 +0,0 @@ -# Swagger Codegen Ignore -# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen - -# Use this file to prevent files from being overwritten by the generator. -# The patterns follow closely to .gitignore or .dockerignore. - -# As an example, the C# client generator defines ApiClient.cs. -# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: -#ApiClient.cs - -# You can match any string of characters against a directory, file or extension with a single asterisk (*): -#foo/*/qux -# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux - -# You can recursively match patterns against a directory, file or extension with a double asterisk (**): -#foo/**/qux -# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux - -# You can also negate patterns with an exclamation (!). -# For example, you can ignore all files in a docs folder with the file extension .md: -#docs/*.md -# Then explicitly reverse the ignore rule for a single file: -#!docs/README.md - -.gitignore -.travis.yml -git_push.sh -tox.ini -test/*.py -fingerprint_server_sdk/models/error_plain_response.py -requirements.txt -test-requirements.txt diff --git a/.swagger-codegen/VERSION b/.swagger-codegen/VERSION deleted file mode 100644 index 10bbf276..00000000 --- a/.swagger-codegen/VERSION +++ /dev/null @@ -1 +0,0 @@ -3.0.34 \ No newline at end of file diff --git a/README.md b/README.md index 9bff4e4f..da6ec0e7 100644 --- a/README.md +++ b/README.md @@ -23,17 +23,18 @@ The Fingerprint Server Python SDK is an easy way to interact with the Fingerprint [Server API](https://dev.fingerprint.com/reference/pro-server-api) from your Python application. You can retrieve visitor history or individual identification events. -This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project: +This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 3 +- API version: 4 - Package version: 8.11.0 -- Build package: io.swagger.codegen.v3.generators.python.PythonClientCodegen +- Generator version: 7.19.0 +- Build package: org.openapitools.codegen.languages.PythonClientCodegen ## Requirements The following Python versions are supported: -- Python >= 3.9 +- Python 3.9+ ## Installation & Usage ### pip install @@ -74,132 +75,126 @@ import fingerprint_server_sdk Please follow the [installation procedure](#installation--usage) and then run the following: ```python +import os + import fingerprint_server_sdk +from fingerprint_server_sdk.configuration import Region # Configure API key authorization and region -configuration = fingerprint_server_sdk.Configuration(api_key="SECRET_API_KEY") -# configuration = fingerprint_server_sdk.Configuration(api_key="SECRET_API_KEY", region="eu") - +configuration = fingerprint_server_sdk.Configuration( + api_key = os.environ["SECRET_API_KEY"], + region = Region.US +) # create an instance of the API class api_instance = fingerprint_server_sdk.FingerprintApi(configuration) ``` ## Examples -Fetching visits using visitorId: +Delete visitor data using `visitorId`: ```python -import fingerprint_server_sdk -from fingerprint_server_sdk.rest import ApiException, KnownApiException - -configuration = fingerprint_server_sdk.Configuration(api_key="SECRET_API_KEY") -api_instance = fingerprint_server_sdk.FingerprintApi(configuration) - -visitor_id = 'visitor_id_example' # str | Unique [visitor identifier](https://dev.fingerprint.com/docs/js-agent#visitorid) issued by Fingerprint Pro. -#request_id = 'request_id_example' # str | The unique event [identifier](https://dev.fingerprint.com/docs/js-agent#requestid). -#linked_id = 'linked_id_example' # str | Filter visits by your custom identifier. You can use [`linkedId`](https://dev.fingerprint.com/docs/js-agent#linkedid) to associate identification requests with your own identifier, for example: session ID, purchase ID, or transaction ID. You can then use this `linked_id` parameter to retrieve all events associated with your custom identifier. (optional) -limit = 10 # int | Limit scanned results. For performance reasons, the API first scans some number of events before filtering them. Use `limit` to specify how many events are scanned before they are filtered by `requestId` or `linkedId`. Results are always returned sorted by the timestamp (most recent first). By default, the most recent 100 visits are scanned, the maximum is 500. (optional) -#pagination_key = 'pagination_key_example' # str | Use `paginationKey` to get the next page of results. When more results are available (e.g., you requested 200 results using `limit` parameter, but a total of 600 results are available), the `paginationKey` top-level attribute is added to the response. The key corresponds to the `requestId` of the last returned event. In the following request, use that value in the `paginationKey` parameter to get the next page of results: 1. First request, returning most recent 200 events: `GET api-base-url/visitors/:visitorId?limit=200` 2. Use `response.paginationKey` to get the next page of results: `GET api-base-url/visitors/:visitorId?limit=200&paginationKey=1683900801733.Ogvu1j` Pagination happens during scanning and before filtering, so you can get less visits than the `limit` you specified with more available on the next page. When there are no more results available for scanning, the `paginationKey` attribute is not returned. (optional) - -try: - api_response = api_instance.get_visits(visitor_id, limit=2) - print(api_response) -except KnownApiException as e: - structured_error = e.structured_error - print("Error: %s\n" % structured_error.error) -except ApiException as e: - print("Exception when calling FingerprintApi->visitors_visitor_id_get: %s\n" % e) -``` +import os -Delete visits using visitorId: -```python import fingerprint_server_sdk -from fingerprint_server_sdk.rest import ApiException, KnownApiException +from fingerprint_server_sdk.rest import ApiException +from fingerprint_server_sdk.configuration import Region -configuration = fingerprint_server_sdk.Configuration(api_key="SECRET_API_KEY") +# Configure API key authorization and region +configuration = fingerprint_server_sdk.Configuration( + api_key = os.environ["SECRET_API_KEY"], + region = Region.US +) api_instance = fingerprint_server_sdk.FingerprintApi(configuration) -visitor_id = 'visitor_id_example' # str | Unique [visitor identifier](https://dev.fingerprint.com/docs/js-agent#visitorid) issued by Fingerprint Pro. +visitor_id = 'visitor_id_example' try: api_instance.delete_visitor_data(visitor_id) -except KnownApiException as e: - structured_error = e.structured_error - print("Error: %s\n" % structured_error.error) except ApiException as e: print("Exception when calling FingerprintApi->delete_visitor_data: %s\n" % e) ``` -Fetching events for requestId: +Fetching event details for `eventId`: ```python +import os + import fingerprint_server_sdk -from fingerprint_server_sdk.rest import ApiException, KnownApiException +from fingerprint_server_sdk.rest import ApiException +from fingerprint_server_sdk.configuration import Region -configuration = fingerprint_server_sdk.Configuration(api_key="SECRET_API_KEY") +# Configure API key authorization and region +configuration = fingerprint_server_sdk.Configuration( + api_key = os.environ["SECRET_API_KEY"], + region = Region.US +) api_instance = fingerprint_server_sdk.FingerprintApi(configuration) -request_id = 'request_id_example' # str | The unique event [identifier](https://dev.fingerprint.com/docs/js-agent#requestid). +event_id = 'event_id_example' try: - events_response = api_instance.get_event(request_id) - -except KnownApiException as e: - structured_error = e.structured_error - print("Error code: %s. Error message: %s\n" % (structured_error.error.code, structured_error.error.message)) + events_response = api_instance.get_event(event_id) except ApiException as e: print("Exception when calling FingerprintApi->get_event: %s\n" % e) ``` Search events with custom filters: ```python +import os + import fingerprint_server_sdk -from fingerprint_server_sdk.rest import ApiException, KnownApiException +from fingerprint_server_sdk.rest import ApiException +from fingerprint_server_sdk.configuration import Region -configuration = fingerprint_server_sdk.Configuration(api_key="SECRET_API_KEY") +# Configure API key authorization and region +configuration = fingerprint_server_sdk.Configuration( + api_key = os.environ["SECRET_API_KEY"], + region = Region.US +) api_instance = fingerprint_server_sdk.FingerprintApi(configuration) -limit = 20 # int | Limit the number of events returned. -pagination_key = 'key_example' # str | Use `pagination_key` to get the next page of results. When more results are available (e.g., you requested up to 200 results for your search using `limit`, but there are more than 200 events total matching your request), the `paginationKey` top-level attribute is added to the response. The key corresponds to the `timestamp` of the last returned event. In the following request, use that value in the `pagination_key` parameter to get the next page of results: 1. First request, returning most recent 200 events: `GET api-base-url/events/search?limit=200` 2. Use `response.paginationKey` to get the next page of results: `GET api-base-url/events/search?limit=200&pagination_key=1740815825085` (optional) -visitor_id = 'VISITOR_ID' # str | Unique [visitor identifier](https://dev.fingerprint.com/reference/get-function#visitorid) issued by Fingerprint Pro. Filter for events matching this `visitor_id`. (optional) -bot = 'good' # str | Filter events by the bot detection result, specifically: events where <'any'|'good'|'bad'|'none'> kind of bot was detected. (optional) -ip_address = '192.168.0.1/32' # str | Filter events by IP address range. The range can be as specific as a single IP (/32 for IPv4 or /128 for IPv6) All ip_address filters must use CIDR notation, for example, 10.0.0.0/24, 192.168.0.1/32 (optional) -linked_id = 'linked_id_example' # str | Filter events by your custom identifier. You can use [linked IDs](https://dev.fingerprint.com/reference/get-function#linkedid) to associate identification requests with your own identifier, for example, session ID, purchase ID, or transaction ID. You can then use this `linked_id` parameter to retrieve all events associated with your custom identifier. (optional) -start = 1738687200000 # int | Filter events with a timestamp greater than the start time, in Unix time (milliseconds). (optional) -end = 1738773600000 # int | Filter events with a timestamp smaller than the end time, in Unix time (milliseconds). (optional) -reverse = True # bool | Sort events in reverse timestamp order. (optional) -suspect = False # bool | Filter events previously tagged as suspicious via the [Update API](https://dev.fingerprint.com/reference/updateevent). (optional) +limit = 20 +pagination_key = 'key_example' +visitor_id = 'VISITOR_ID' +bot = 'good' +ip_address = '192.168.0.1/32' +linked_id = 'linked_id_example' +start = 1738687200000 +end = 1738773600000 +reverse = True +suspect = False try: # Get events via search api_response = api_instance.search_events(limit, pagination_key=pagination_key, visitor_id=visitor_id, bot=bot, ip_address=ip_address, linked_id=linked_id, start=start, end=end, reverse=reverse, suspect=suspect) print(api_response) - -except KnownApiException as e: - structured_error = e.structured_error - print("Error code: %s. Error message: %s\n" % (structured_error.error.code, structured_error.error.message)) except ApiException as e: print("Exception when calling FingerprintApi->get_event: %s\n" % e) ``` -Update event for requestId: +Update event for `eventId`: ```python +import os + import fingerprint_server_sdk -from fingerprint_server_sdk import EventsUpdateRequest -from fingerprint_server_sdk.rest import ApiException, KnownApiException +from fingerprint_server_sdk import EventUpdate +from fingerprint_server_sdk.rest import ApiException +from fingerprint_server_sdk.configuration import Region -configuration = fingerprint_server_sdk.Configuration(api_key="SECRET_API_KEY") +# Configure API key authorization and region +configuration = fingerprint_server_sdk.Configuration( + api_key = os.environ["SECRET_API_KEY"], + region = Region.US +) api_instance = fingerprint_server_sdk.FingerprintApi(configuration) -request_id = 'request_id_example' # str | The unique event [identifier](https://dev.fingerprint.com/docs/js-agent#requestid). -body = EventsUpdateRequest(linked_id='foo') # EventsUpdateRequest | -# body = EventsUpdateRequest(tag={'bar': 123}) -# body = EventsUpdateRequest(suspect=True) -# body = EventsUpdateRequest(linked_id='foo', tag={'bar': 123}, suspect=False) +event_id = 'event_id_example' +body = EventUpdate(linked_id='foo') +# body = EventUpdate(tags={'bar': 123}) +# body = EventUpdate(suspect=True) +# body = EventUpdate(linked_id='foo', tags={'bar': 123}, suspect=False) try: - api_instance.update_event(body, request_id) -except KnownApiException as e: - structured_error = e.structured_error - print("Error code: %s. Error message: %s\n" % (structured_error.error.code, structured_error.error.message)) + api_instance.update_event(event_id, body) except ApiException as e: print("Exception when calling FingerprintApi->update_event: %s\n" % e) ``` @@ -279,152 +274,63 @@ To learn more, refer to example located in [webhook_signature_example.py](webhoo ## Documentation for API Endpoints -All URIs are relative to *https://api.fpjs.io* +All URIs are relative to *https://api.fpjs.io/v4* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- *FingerprintApi* | [**delete_visitor_data**](docs/FingerprintApi.md#delete_visitor_data) | **DELETE** /visitors/{visitor_id} | Delete data by visitor ID -*FingerprintApi* | [**get_event**](docs/FingerprintApi.md#get_event) | **GET** /events/{request_id} | Get event by request ID -*FingerprintApi* | [**get_related_visitors**](docs/FingerprintApi.md#get_related_visitors) | **GET** /related-visitors | Get Related Visitors -*FingerprintApi* | [**get_visits**](docs/FingerprintApi.md#get_visits) | **GET** /visitors/{visitor_id} | Get visits by visitor ID -*FingerprintApi* | [**search_events**](docs/FingerprintApi.md#search_events) | **GET** /events/search | Get events via search -*FingerprintApi* | [**update_event**](docs/FingerprintApi.md#update_event) | **PUT** /events/{request_id} | Update an event with a given request ID +*FingerprintApi* | [**get_event**](docs/FingerprintApi.md#get_event) | **GET** /events/{event_id} | Get an event by event ID +*FingerprintApi* | [**search_events**](docs/FingerprintApi.md#search_events) | **GET** /events | Search events +*FingerprintApi* | [**update_event**](docs/FingerprintApi.md#update_event) | **PATCH** /events/{event_id} | Update an event + ## Documentation For Models - - [Botd](docs/Botd.md) - - [BotdBot](docs/BotdBot.md) - - [BotdBotResult](docs/BotdBotResult.md) + - [BotInfo](docs/BotInfo.md) + - [BotResult](docs/BotResult.md) - [BrowserDetails](docs/BrowserDetails.md) - - [ClonedApp](docs/ClonedApp.md) - - [DeprecatedGeolocation](docs/DeprecatedGeolocation.md) - - [DeveloperTools](docs/DeveloperTools.md) - - [Emulator](docs/Emulator.md) + - [Canvas](docs/Canvas.md) + - [Emoji](docs/Emoji.md) - [Error](docs/Error.md) - [ErrorCode](docs/ErrorCode.md) - - [ErrorPlainResponse](docs/ErrorPlainResponse.md) - [ErrorResponse](docs/ErrorResponse.md) - - [EventsGetResponse](docs/EventsGetResponse.md) - - [EventsUpdateRequest](docs/EventsUpdateRequest.md) - - [FactoryReset](docs/FactoryReset.md) - - [Frida](docs/Frida.md) + - [Event](docs/Event.md) + - [EventRuleAction](docs/EventRuleAction.md) + - [EventRuleActionAllow](docs/EventRuleActionAllow.md) + - [EventRuleActionBlock](docs/EventRuleActionBlock.md) + - [EventSearch](docs/EventSearch.md) + - [EventUpdate](docs/EventUpdate.md) + - [FontPreferences](docs/FontPreferences.md) - [Geolocation](docs/Geolocation.md) - - [GeolocationCity](docs/GeolocationCity.md) - - [GeolocationContinent](docs/GeolocationContinent.md) - - [GeolocationCountry](docs/GeolocationCountry.md) - - [GeolocationSubdivision](docs/GeolocationSubdivision.md) - - [GeolocationSubdivisions](docs/GeolocationSubdivisions.md) - - [HighActivity](docs/HighActivity.md) - - [IPBlocklist](docs/IPBlocklist.md) - - [IPBlocklistDetails](docs/IPBlocklistDetails.md) + - [GeolocationSubdivisionsInner](docs/GeolocationSubdivisionsInner.md) + - [IPBlockList](docs/IPBlockList.md) - [IPInfo](docs/IPInfo.md) - - [IPInfoASN](docs/IPInfoASN.md) - - [IPInfoDataCenter](docs/IPInfoDataCenter.md) - [IPInfoV4](docs/IPInfoV4.md) - [IPInfoV6](docs/IPInfoV6.md) - [Identification](docs/Identification.md) - [IdentificationConfidence](docs/IdentificationConfidence.md) - - [IdentificationSeenAt](docs/IdentificationSeenAt.md) - - [Incognito](docs/Incognito.md) - - [Jailbroken](docs/Jailbroken.md) - - [LocationSpoofing](docs/LocationSpoofing.md) - - [MitMAttack](docs/MitMAttack.md) - - [PrivacySettings](docs/PrivacySettings.md) - - [ProductBotd](docs/ProductBotd.md) - - [ProductClonedApp](docs/ProductClonedApp.md) - - [ProductDeveloperTools](docs/ProductDeveloperTools.md) - - [ProductEmulator](docs/ProductEmulator.md) - - [ProductFactoryReset](docs/ProductFactoryReset.md) - - [ProductFrida](docs/ProductFrida.md) - - [ProductHighActivity](docs/ProductHighActivity.md) - - [ProductIPBlocklist](docs/ProductIPBlocklist.md) - - [ProductIPInfo](docs/ProductIPInfo.md) - - [ProductIdentification](docs/ProductIdentification.md) - - [ProductIncognito](docs/ProductIncognito.md) - - [ProductJailbroken](docs/ProductJailbroken.md) - - [ProductLocationSpoofing](docs/ProductLocationSpoofing.md) - - [ProductMitMAttack](docs/ProductMitMAttack.md) - - [ProductPrivacySettings](docs/ProductPrivacySettings.md) - - [ProductProximity](docs/ProductProximity.md) - - [ProductProxy](docs/ProductProxy.md) - - [ProductRawDeviceAttributes](docs/ProductRawDeviceAttributes.md) - - [ProductRemoteControl](docs/ProductRemoteControl.md) - - [ProductRootApps](docs/ProductRootApps.md) - - [ProductSuspectScore](docs/ProductSuspectScore.md) - - [ProductTampering](docs/ProductTampering.md) - - [ProductTor](docs/ProductTor.md) - - [ProductVPN](docs/ProductVPN.md) - - [ProductVelocity](docs/ProductVelocity.md) - - [ProductVirtualMachine](docs/ProductVirtualMachine.md) - - [Products](docs/Products.md) + - [Integration](docs/Integration.md) + - [IntegrationSubintegration](docs/IntegrationSubintegration.md) + - [PluginsInner](docs/PluginsInner.md) + - [PluginsInnerMimeTypesInner](docs/PluginsInnerMimeTypesInner.md) - [Proximity](docs/Proximity.md) - - [Proxy](docs/Proxy.md) - [ProxyConfidence](docs/ProxyConfidence.md) - [ProxyDetails](docs/ProxyDetails.md) - - [RawDeviceAttribute](docs/RawDeviceAttribute.md) - - [RawDeviceAttributeError](docs/RawDeviceAttributeError.md) - [RawDeviceAttributes](docs/RawDeviceAttributes.md) - - [RelatedVisitor](docs/RelatedVisitor.md) - - [RelatedVisitorsResponse](docs/RelatedVisitorsResponse.md) - - [RemoteControl](docs/RemoteControl.md) - - [RootApps](docs/RootApps.md) + - [RequestHeaderModifications](docs/RequestHeaderModifications.md) + - [RuleActionHeaderField](docs/RuleActionHeaderField.md) + - [RuleActionType](docs/RuleActionType.md) - [SDK](docs/SDK.md) - - [SearchEventsResponse](docs/SearchEventsResponse.md) - - [SearchEventsResponseEvents](docs/SearchEventsResponseEvents.md) - - [SupplementaryID](docs/SupplementaryID.md) - - [SuspectScore](docs/SuspectScore.md) - - [Tag](docs/Tag.md) - - [Tampering](docs/Tampering.md) - - [Tor](docs/Tor.md) - - [VPN](docs/VPN.md) - - [VPNConfidence](docs/VPNConfidence.md) - - [VPNMethods](docs/VPNMethods.md) + - [SupplementaryIDHighRecall](docs/SupplementaryIDHighRecall.md) + - [TamperingDetails](docs/TamperingDetails.md) + - [TouchSupport](docs/TouchSupport.md) + - [TriggeredByInner](docs/TriggeredByInner.md) - [Velocity](docs/Velocity.md) - [VelocityData](docs/VelocityData.md) - - [VelocityIntervals](docs/VelocityIntervals.md) - - [VirtualMachine](docs/VirtualMachine.md) - - [Visit](docs/Visit.md) - - [VisitorsGetResponse](docs/VisitorsGetResponse.md) - - [Webhook](docs/Webhook.md) - - [WebhookClonedApp](docs/WebhookClonedApp.md) - - [WebhookDeveloperTools](docs/WebhookDeveloperTools.md) - - [WebhookEmulator](docs/WebhookEmulator.md) - - [WebhookFactoryReset](docs/WebhookFactoryReset.md) - - [WebhookFrida](docs/WebhookFrida.md) - - [WebhookHighActivity](docs/WebhookHighActivity.md) - - [WebhookIPBlocklist](docs/WebhookIPBlocklist.md) - - [WebhookIPInfo](docs/WebhookIPInfo.md) - - [WebhookJailbroken](docs/WebhookJailbroken.md) - - [WebhookLocationSpoofing](docs/WebhookLocationSpoofing.md) - - [WebhookMitMAttack](docs/WebhookMitMAttack.md) - - [WebhookPrivacySettings](docs/WebhookPrivacySettings.md) - - [WebhookProximity](docs/WebhookProximity.md) - - [WebhookProxy](docs/WebhookProxy.md) - - [WebhookRawDeviceAttributes](docs/WebhookRawDeviceAttributes.md) - - [WebhookRemoteControl](docs/WebhookRemoteControl.md) - - [WebhookRootApps](docs/WebhookRootApps.md) - - [WebhookSupplementaryIDs](docs/WebhookSupplementaryIDs.md) - - [WebhookSuspectScore](docs/WebhookSuspectScore.md) - - [WebhookTampering](docs/WebhookTampering.md) - - [WebhookTor](docs/WebhookTor.md) - - [WebhookVPN](docs/WebhookVPN.md) - - [WebhookVelocity](docs/WebhookVelocity.md) - - [WebhookVirtualMachine](docs/WebhookVirtualMachine.md) - -## Documentation For Authorization - - -## ApiKeyHeader - -- **Type**: API key -- **API key parameter name**: Auth-API-Key -- **Location**: HTTP header - -## ApiKeyQuery - -- **Type**: API key -- **API key parameter name**: api_key -- **Location**: URL query string + - [VpnConfidence](docs/VpnConfidence.md) + - [VpnMethods](docs/VpnMethods.md) + - [WebGlBasics](docs/WebGlBasics.md) + - [WebGlExtensions](docs/WebGlExtensions.md) ## Documentation for sealed results diff --git a/bin/swagger-codegen-cli.jar b/bin/swagger-codegen-cli.jar deleted file mode 100644 index 204e76f75a970b67f3b7ddbeae4038978887826a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21626185 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%0D?EMJEMIi90qB!*HGTIPJJRjbP{!# z;5AN-R~C-VR(^1+%E|x_p|l;%tx(<<0j+Nh+8||xr4Y_*>7-(jAGv`xf_pEt9JZgm zjCPg#6nE!Z@ts)~oTWSEG=m=5tp6;3r&!F1T4?%MO>|S*Flo;&tw(bDS#(6-SEnkz zNvzU~ur`)4A)cP@$0fWNcY2md=2fc8_+A^Tq@m(bgfmr`j%m~Mt&BSs_T(p&t8J@a zSB#3v?1Q3@yNd&3xJX2}%E9f<^cL1Gbgr99+i9YJ;Y(xCssrG|)wK^cYgqOaUCPq7 zI8Qnx)X91e+I4DiRp-flHh&~?lbp#%Qun_+c`-Kwh?czwm>Hlea!|c>!#Cuv+t3rg zlavy{=IPI0OE(IswG}k+!iGIdo)GR0jfg#)s5_5&I_3Es9^PZfEA6vB8rIq7gUg&T z)Ym6h!C$~~15Vfu5U;Ruu0ook$+8P9qlQPns$yndRqT-Z&BGXN)L!X0s+VtM_G{Fq zt+B3Mb@N`MX34VZUFe#6)VU;POx%jzJkm=juc>x63&g_)^26{oGvEBh>7rAr<{W+B zX;vj@%*;!zc#7U>$t)`2eL?Dei-0?QW2rlwy(G0V6xy(z8cRFisy`OC-yF6RN?qU1 zCAXj%i%FjT@Qo)}w3C%}W?;|YJu=5We=3@<%rB2G;`v4E@$wO)+q#zgY2w-86KMAR zduZ$7Tp!1mNsK5bMhE$bN$bYXdZNQX5uynX_eq^H`MA1!_?pwZ8ZwiK?5>v)ZpPCV zJ-Nh(c6+DkG>>2DY@6-_n+o9Kxj&as*}XcRdVV9I1TV!uw-3RRSp(u+%S-*ABJ4dj z<09_O7N(9+=(qPxZA+hjFEH>s{$7G4G(4(sTiX!onX{nUGY&1pT*uAj z_-sEG6t<$~Cj-LJjwb5J6#PS}b0oHT{&y91zw^^r^z=_ISb?4h@2$qQw;AsxjJP^o z`<6=vPo;RLjn2y!{Su$-l?NQ0I?3Ck_%%akNSEA7c_tRFtX__NrPQ?#8lVIcrn2<( zVTw)nB9P7UL7s^nC(}Jt-Qm7n5)86Ob=V#6eRw%|>|!??bU0_YJ436{Z`p!&Id5w_ z{Bj<+iQl+EwitX$y1}bLmcn}i|Khp0{}#Wwzy^45$%h+ilW{rkv}d`35$Fh3o$V2` zO|9EZ<1LQ=RMxn~{?d0p4pnK~O<5lrbL}42&z~<=;i(|ze)s99a=F4_q-Lj1pnjyy zi0#Vz2hZl8<%XnCO*|vj<+H71H>aGU%WCUp|4-t9>YWNe%}Ifs<{z0~JaRBEs-$i= zVRRw__UsjLqAMI+Rr!l~_w`2zZ!(8`?4qkGqj!ZJ-FFV)M*u&m2h5AU&m4O{IL}{9 z%CG+@)-p>}9f~IN=x|61&_L-GTeE53P@;aKZKBNDdJ7D*aj<5HSAUP6%cLLgPc6_O z5FH@@*|DF0lM27n49kBX=y0W!LG~hGf)pIQCcL2Rqx^GiE%R|Spks@Od^bKD%wkT} zunWH`HgVD{cWgsEGfCs4D~i*z28-h;tftI*Q7N0pQ)ZLb#%3UGsgVYnR3E)+_Htl3 z^=zIc3 zp*Auw&o52cjq4%k*V72>xp;QaR(U-Jcb21f+s+^6D~J}3IrrL7V=O=rlo^5;20ik8 zF*8%9)AxX8iKO6;HJpG9k2+ZjVCS8ddwySgGqMO*h?R}O5Ca2!5Th0t?0u9D5@Goj z8NCwdTaN;LPjl0B8RoJKWXFeMOg#n$R3s}53Lsm;2R6)7yVy*kiLu8jkWDz58%rfI z`aoz>v9C${!NHK~^{V>RJ;KoovlE{n%l-9S*{oF7bLFxYo;Zy#FH=3=4*eEF)-aB^ z+|IUXkSvpiwc{;^Rh7;|UMzG16EZQ-EEMy|v%2W|%zghPOd=ZeLr6&v0M4H|y9jh( z%-!wPX*oU~`y5KIQ!nI>wz{XGKZq&>Ws6sb)6lA}flj2fc=P;-^ogz;T-xW0 zgroe6RC?jDe0sy^!MIzCf#BH@93*#<&YVBaTOSJ1WE-`k(T%^W>PwIWdaw?`BQr%z z!{Ko=(7z(nRMe0ptVg_x`I@-RM#-@MF!!3R?Yg}j)X_0<`_;5rlt-vIUe7-rrhi}t z^wnEoGl;$nJC|tfrN~uI<+L)BoQPx)S{m1?4k;Dl6KFms?ULepysgJRJ6e}XdGWE5 z0zuMjnCNwh@-$}JJsZ(FF?6xN+m{R0kRV_vJ=zXOt<#qEl{?_K5nrn3&?{3P`UJ&r z?Gf(JzZ|6-$EPa`jcWx^5uiY>rxkA==YCL<{ilWdPz*EjB;sQX(KRcsKJgtz9W?C$ zYa~$m88!F$;fZPY<+2zv!te7z4RjuXam|w3B=84#PJbOttFGjEHB_a`GKoAbjhL|Y z10LBv3M?eM+zAT5-b^`o$K&pE4uDtmXFh+oziXU%fMk)sUV(FZ%=6J z2)k=+P&m2}oLbj+7n$}B>Z^8Hwqu8m&+J(nGP|x7r-@ZiC@ZPYmWi#K75tKyM3L~{al`Mtu|p^j@^4TSnG@@ z>m;LGkL6a6LN= z+cQoB6a7bM27fAA-3D|`1U=qgv5ZDt%%Y;7J=FJ!+KIsr-q%B}O-vRnWi8&t5^Q?T zfd-I#w(M)!^S3h<-bT+h!`%cS8JQXOs~!c9#BBaYRHh3-Zx?7fA2Lp2;T3^r75io6 z9pZIK9B2~8zvC3C^e#BB{Rwul(sIRmsg75~+%}JhZJJ>iH2uVQnDV|Iuini(0Dmkz z8L61+t@|Nd!kX^kWHKO@E3!~Chh-Z(o5Eke?k68C69xp@KeQmj&GWATO}&eMkh7I_ zILW$X)k7gqqlx*8i6Q}y{tma=BICP7VViWV#31$`W>i!0u>76QMGLjoaEA-I*df;A zun#bDH89`Wk`GMBeqfj1w`|Yv51Zpd!urzY)z8o_xn{70bk2y+{50IV?fPo(#T+9^ z9;i6jRWJ^#ZY>r6&4bl4Jmx!T7c(Y;QcfnL=4OV7s@}VXY$XJpOWoKvujgOg$Hb>k z&H<^G_0$%uY-Vd>(spB*;_X07)x9w@h$$wNCAlBG8)@`Zu4@Pha%Bai@LesTYqUMd z$x3gKiu_VIA?fUfWBaNutq(+H@Cnw;3m$3ELW%pYr(-oiSBNMO~mmt-ORO>yfo1{4s`vE=IZv$OdJNbC^HcONs{ws> zhFS_@$+sc}J6+TFS)RkmLa}t4WHVsa?7bUUvRD39`0FZRq;}E_5ssWUPV_P;dGU-0 z!}~aA(hgCqEY9bhq_sZbVc`qCCyt7m+?umph~>H__2F8S_Uhr0a}Vy z#zW{TrJ&T>$(58r)A!wJFZvG6-;})SQGm9`T1>acXzR;ZoD|+&=9>zIvaF$qR@{Con!K(4tM>RIoNGT)AUTTUaPsvi`* zqC0h4)}P7j5xF;o#aD8RkHweg3JcK?&KC>h@ufR`8}W)Aq`gH5!oETTHT1e5uJw8t zJ>qZigP^y_K$Kgopd|=R+-is=+-k^6i^oq_!a$VIhC^5S0hfbU8v&QU9U&jH5&3#= z5xD|%5j%Pj5SbvDSk68hPF)#oae|1p7(s%LG1~2oa116oLn{0ELjja6lnAFfC9B35*96LICpsg;2oI zz#dpIC9nq(j0Nn02Xg>>kikg69yl-qum=fD1nfZo3jljiz>q*cSTH%z4-t$3^n(Yp z0sWA{2tYqLFdfhj2}}U=Ljdyu{ZPO#z;{?MHSiq~j01d!2Xg`6k-;dycQ`N;@EysQ z4fM|99vk=r5AFf;cD&oAm*q>0|+BD#oO0H12Wqx56LCF;@4*L;XRDyb1^31r2 z6Ob%OFrY1my(=+vWBpf`m<8uHQk@E>K0rY z(9*HSW2b2=X%6PyS+BPbhfJR`JhKNWh|OXpSfU_gwCRm$f0-pBsj)U{awxIY8gH?P z0!~_utfKPP-HWh(?nRSBj3rC

?}88+Bn0bsma41TjGnkK_uotW{r1@F6zU{Q|%s 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�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 z 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%0DbZm2JwlBS0tt-<5l0m3x@K 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

2SP zJv1w#3YxE;`ZWx4JRE)GVM}z~Qb+Xn#xZoZ%wJrA)k_IrCPRc=6WhZ^w@hW9U|g^T zoyd^~Q5V5{8>T302qjfDY5TtnD?En1~UZSIslq+l;;EHey0!H1~9g)7uT=f{Pfqo zcf@j(@!mtM9o#$Uk5BM3mBIH4@_L79Q_U^Fxx+y(z;QzNf`Hq>o75vIl7xn|{7eAP zKQd)l)E;!UM8AbzVsGroN@NK=UP6rG8Yo9Xslf{=1PyyZ1E7)0_jZ3L9r4Bf#R&{- zJ>Tmbo0jan$L=v7*&?0$LGD6%eTG55;q-oq2c}y#-}*%!m6A!xmYU-Pfk~PS7uXVS z&vdIH5}R#rvAz68BwnixYn#{vIa9L5&&B&CDeln6!KFkc?}$d#96_>KMg^PFO`Oe+>v)W$G+E;OXy+`2qucza&WC$)RaeQojW4#}ii4V6!!9gZ zRIr-7Oj0~;<##9Qj{p?*JoTk23J&P9PxtXJrRAJ!;qA3+pTG(M#ky$T8DwDZAV+U; z?nYp;%HKK2?OwAg;&OXQvT zwSjJwaL5X4{7bNy2tuKU9Abehso`>t-_4Jq=)qlt+{h*83a03XObN)S;9u_xD3jsI zLHz0dFq$b*$x;+rV=&5GM+%nc!p;qbqH%Er|)KE?J3g8h9Z~CzgM!P1w zgKm6xV}(3tsN_bNK9p$G@kNO~R-?|#2S0Oa+K}zJ^{)`qsaZY)y(o*=WjM^9e#>5t ztUt)A!F4`>dhaN|Dft>crdBJD;ln zJ54uTVCp19ONp}S7o+Hs1?z_Oyum(R2=-@LirXCR5m=V(1b0pBZA?$f4oJxD#B2=-f99wYf3{WBv^o=VK! zSP-I-f*f9Ik9X=O)TBVyZZ!S1D{}-W-qjvVi8a&M!%-{2QLApUY9eR|$9ZEn&b3b4 z)hjkJmESr1Vt$Zr_H55@B~Xrd`l0;0qWMBgVXc#mN3;7sv!KYsU%1V z#M`7Q{R+J23U0&QCZaZdxB|Kb^e)7S#q)mrI+W!fKm#c7*hM3)&Nh@<`&SUO&Z2xM zJiHQ#euToTbCB@IFxb0V`nN|K+T`@u?4@v`wa|mzUUNf{XTk|^AfYZR&BRZJ5?X@< zEsJ0eVD@9H2bGwxOz2ZE$1(<jQwK9@xWcftcl?)%sTk&;cN{$7z+gRC~Su;sR@M zo$V}VUCIOPR%Wl!cp*QHtqhQOV+Ly;sDon7XwJdWN2&6m1=0~rOY^AtlL-dpjUrc0 zthsp;D~*q8j1<9h$EM7d>JiRSfFPbRIwQI!SoO`z#pi55oVN&_DIep^Wj$*)&gJ9| zy!MDEQ;oaNb6g+r_LNvd&g960N*$<^!+VNY;mAkwJWdr}%HI*4P`bL#>!Cmjg?KZgvX*^bO_Kxs$642jWc8 z2c$uGtt!s02pg@9p^2+>WX_(cj(r{DD9v$zyTsZdhxj$mNiAl#qwx4|p*E~X7&$@x zZ7=p`DH?*-nBD=_sW||{S97@5Fb*}=3SwJQQ+uqwmK~F(E=I4Y&|rRB%ZH^KoJ0p= zdS#aRGp3LbwZS7T;A0h#9_)R8qx^_(W+3Bfnp!|+*zb(<2c^APq`DdWJQ{uMW@fWF zm3{0+(}{iyj;eL1fOTygJMdSbr-~yJeWOcMZ|X$|<7#7O#7ldAb}!Qw+=;C|Orv~A zFXso$r{E~tePdBH#~q!u%>YlLQzSD+JvyTDz5*F) zu0Q!BeS@fPH=QS;M{Vkipf3(VkA^;vC&ppTl0M5@Y7@^PS(($!c$cyk0d&KWD!P@a zA&(1rLh9K+wGL%oqQQ*xB6$=xnhBk#bH{KX4eZOpNLy1?EL3YKsYhyIo5JY~PCR>r zp3$2MJ&I?Z(owr%QlFgwx|9X^hRd^DWSdfwV^Mo7dh?OLvv@m(4l?TKp0#N5BQv~4 zm;k1&T*%0ZfgRah7nsAjj+F70D9_su*5y#C(bECA$nKhGKt99f^c?rmN%ua1E zf?DKmL^JWVm^*&@$>D>a(nc0t?H$YqVqAGYQZ=g3S}0s6rnqsOV(K;)H_(3px-vnN zWrjFfyO+pPLhkUaLn1y1htHw&HXA4LLI8Ce?3J)@$V9n!DPy7?!xsEEJL|m{QDgH8_P>%R6rnUvyqkMV%gR~4*pz45l<5a01(6`S zYI;BC8ewYYx~0c?k`eu)W#&g+((zvZOcFi#MAtnO&4pJ651%mqUW$f-EBL*fgWPuIx1q4+$?V^x&Ka?IXiANy?iNAU^^Ex(aR3PG92X z!c=ap`|`}tfY88e>%L`uC~YJH{LDBP((elq2we}u+j3xxMvAPXt?meUfg3d$_b`z= zpq%}%(h^9Z-V#laV^B;{YfG-#u&~a8UCP;;7@$s#Z3bty*y;b!Bk$S9Hoxd}1qGze-vS$^O{Ksa><5?w_~-2P~aL^7Vf6Fz4UNb?>Et+RV(euT38xs9_f zvPK#P6r#K)$s+M8|2?157%WIRlKru`0j_f(#xy=Vnv6-2@4pdRc9yTK4< zpkACmxlY%x+(CS!r}v3&f4^%9U?D7u7+kxP=1gM|ynx1!VHJe8OUdp=iW4%S!nxN1 zMrFhy^k`3?SshsQNI0&OcMWwJtM)1e7&?A^2Vs#=?v2ZXRs)gm<~NvnWSd7;gJxdY z&*4OLK6}H`Q%mF6J_)k>RO6rT=-dIhv`#M;j)a0bjC*Ed81L5Z@Pd+r)6089)_IaJr&v|}k2?o&!u9t;ehrW;<_vJ4fta_w5YSYMaHxZWLYbkVw zq!3($G$>73y}f;(SXALody=V63%cq2Lgdd0>k$bhKzBsRAb4VM6btMA9mD|hlYj(D&7 z0zt{Cpm2B64%;!*)0;sGnzpc{wR>XnDwsxihrxJhs4|S`4KlomI@km zz7V;OfA9_Gy2?ul1fCmhUyYD+(2M4itw2pC?Pz`#ToulV>8-{~yYy#tL2?ujx(qLt z)a_F;u>?P&q0C1VhK}S0tA66&A2GRY%F}xAqC*lBnH3%FMg99EnlC4aiDjGP&Jv-~ z1VQyA{IgW-=!I7sY9E_OOIUg% z-QRqpDY-c?3FcSj%Ma}io%)2LP7#C`wW;GYW{qI<95J>VF`mwDR2=9m zRv49cP?)JvsfBW`*h#n!WSe`KM!)zenU&{%TSjF*!JO-(Dn%3vb0?j+EcUb?g1BFI z`G_(Xln0Aj^`wDxvlD8K%LM(0a!U}b6zN^X>kZ!P-6?EOPYCvl6Mjdp*ZlLR?B13T z#uw)4v#UMo7YIWckpb8j4en?nNaKODO|SLUC%ro>EVPDtiXomRP?LRRDAdlZ`y ztplQa6o|Nc+p?d8r^MkEH{jl&BJOV#z~2EH9K*lmbb620WOj>HBReTPds4{Yo{4xE z4{9FYq|%X|Lpijb+ew@t96n?3Hy~;+TP=%}@ws_^Bh&=ixIB3qiCP#JDXd0>yzgIU z(V*MtFt!B?;lRgyQ6mp4QgTF>SuPSVd1>Ee#`Xr;qO#N_6K0@yigbrrh^Gv z0IGMuwRx!EK`-tGS5>t+sOVF+TU;`d#`_JScarGgVhPMGm4!1Qn?Pr+-OY3G2r-2I zTn0&_<8sqS)rj)-0jc^<^}p3Vt-w0gd(&6dAH}XZ>g|M-bLv4^Kg9D@= zAM*~AA)9EEauzwU>!a1!x&6y=Mtk?OYx<%AMc|1rBS3Vs8KIcsBrx*V7Xy^8?|-10 z4dT2a}(8`4x) zA&m!Smh2}C$y;GVNFox`8+w*Z1q`R>ctgUBN68!1Z?*G<;0}5E-LpYdpA_oDqexVr za==hE*0_5o^`2{l<7XaVkVxFswG=R^hqmx8r_?WqJbcYG+xVvb_rN#8r9%myjwgIi z%(Ye*9+fJrc9)z*H;b|)e16c`A%q&!Eb^B_41jJ5gDT=~@V8-Mi>fwt6*5*h-r(S_ zgG0C*jFSLnYUI^`=?z)RJ4IEJwl^0(@YWSK- z@-pe!0Ku)XLn)u+Is+5((+J&Q=Pji}cZVeV2!UZcP`^4zz#7!~AEc=k07~yJ_IbE0 zY})VXg{sW*qXy-3RIr$B#U8EAFV`Rk!c`cIr;)Qz(;K&HH@EN%2kENs_dA>{MGsQh z`PG7LMZn;@jOvjMz;)ywqT!E|ExGpb$B?c_BU}JGUuM{J7xda80 zmuixK`j~SGPvraV2wTb_IEkawzukRSfcoJT5|bS3LeMwvDoVR}>s1G`igibzKfupC zwC!ttRVDPqg1a#ReC-)yyx6~(L)@CbOmut{Qn&yz)=oF(1-%Axpjq5Yq{*s1viS=- z?>b>omACyS5HXkCSSz=6m=7F20+#kL@mfW7_laDBlXppQ*maZ^(uW>FQLClz^ox z1?}mDq=bt@_7OUhY_3Kxw%(rpvy$G~^}(@*aBz4`jhB)SM-soIR!A8aBk&-!}7RS_kZz>N-QlDxTfnBg<5)xQv z6e&vyho_{tx_i>TiYdSKLMp#it8!|-e-N5ky z!JS_>JnOWZehj;E>|mQA8iTyoZEi@L=vV!cyI_<9q4err13VG2zd3Jc&L{-TNNynT zs6Qt|BC40oZy4~XxLCoBh;tUI5P)~J00W_EOCQtcg?d6x3%f?LjqgFU4g$U9c4AQH%EKLt2}y>JRR-h3w31$B&EE8 zwFuK_5xa$(7QP5*xHc?PWvK>ZgyZ~70EAwCW})#ah(+CF8|Xlbc+MQJ?f$PHjj6^r zc9-GNU1?1e`&VHk73opu_f*;JV&g3P;R~iB53WJk^QE2HWCYc#eejpWp&U9z7NUAr zU3v?*vqy>ju>!oqIho-_Cz_-dOI&ii-K&$Qk`??wUfzEGZUx8P2{~kixxEQUAm;0x zw+&O))NuNKVz%5F#GNAni`rI8)rr@;o78|Y@~$xy^hnH%Ffah6jx8!xN5AbH*2$Rm z^r2tBoDY90VMD+0946C*sRgz&Q_BRpN$O4B1%q_~KP@lT^EDq@0{UBcq;~m>wV^NW zMIT%>9N?W)1g1?*?`@4SduS2C%WlM+?TD1TzEcBTyorg99Uf>k8-smR0}XL=zIjYc zQ`--IeL?YYfRAqzq)gRjnfv_PJj|_{`CJ)t6>^9Ox#DXkK3k!ac=7w|(Ky5}bgB($ zb%Kk%PsALyuz+Z|!V-<`?OPViwLq|ArW&%lFZ>8a1LdcH7y#}Lo*^%)ABGQGc)*-S z8CuA~0s6}rl0K0vUo$3zhkGbeX%a#PE!a?1lwFBh;-}_+Oe;R+zc=4o2lfK)lRkD* ztE-bDN7T*bVcc%>xX;7bIv%%<&c7&KU+>&a`E?4{EpT#bF_Pr+LOIhS z;PL^sj;!~ID*9;?3nRFJU{9j)&7xXuH1=ucg@b6Id->GkqDm>D1@w60m;5Nkrmy>* zWK?b3@yikH-nWZbZVq&(0W8@k4<6LAXb9GUUD~~jJto;*aPQLAMz;J>J-N;VLT5y7 zC|hre$#9*tSO)5_pUZ0WIuLJD{Azg&jw;I(3FXf4nuIVRSs*^#X!P80RDyUsc% zQ^5jt$dDuMaU`)KfxaNJ@o*%Pi~*pn*q9@v)F~9y;HJW@+LythyrNC!6-sDGaN>18 zI#ucT$kmQNctggW!#jENl+eKEyP<--olcqe1A>GCQYv9lQbd)oxXIu(~Rj54pTnexZ1VgGZgvDGaqY$)!K}s|X+Pvm}f2HXj#G zVJiiNfosttJGFr3O%%&>$ARmT59r3dC(q`e;l^p7grKYOnP()NK~m@p1oyVUMwi?l zpBOyU#&Im}2U)K}druU-G%a2V;y7+RV?Au~=w^lRd{8Fat<1l3LTS%HlRWWuSlvmq zshC3W4vI6tWt3u;gxfaDqlMo_n0Ugc(l~K{iD60Nrg$2cKaD6~#TRdq$#ha7FiD1U zs>yUjPmUNKos)s3wzAr%(SgV#1R2EC)p=fujmJ9XtPNE;RsF0vQ&K^&#w{Ui zo9Ff=3;4syelem5hJP<{l>v@0AKK?sm#SC@HC%g6s z-x9J{U5f9W3be@C1|IDrx~T|&UyVv`8#!nC4sCTSF2KBi%Ook(8NZ<8(Yw~cztE2- zP1g?Ix;Ke*^~9ty)j93UoIAe2wu^NAY5nqGzh@LfqE@?7t_*SCWuCnAHQ3xKn>Je3 zKf({rWdMR|INLs3x)SJ*{f0_&Tm&h}a_Qm7b32VX%Ol|J=iZAOF0o?jgBr9Z_XSx? zXs%Up?oS#;-SP6qB?~d(3GM#KS+MKBuYj5#hgKM-ze^FOVpQSNBMZq4 zVO99A+~IFLur-EBHHO=?JLQ}nz#72$s$yKmGo2okJH?-w_D?zEDz-$beDJtm2~<6= z@{6wp{&XOb$oPP_-lC;335uU>vz5i^_0-@2y&ZBOI zUhC0$MCgvVl=ey&G#>}9`&9H>vE(FmE$mcaPiia&R-@RK(rp@`u%b9F%M{^|cAhw) z?!b$GfyNc;R2MLl0)eUHifi%tghjk&Oh5NZ3B(RVGvZ$iLMN2ohagaV3UMS%(MGM? zjD3m-A=gFq66{CTEA4`eeI`;SgxM-jx-Ne1BoPIs6@wisUkZz9jmCo^DnaO>0j3aP`OiQ@|3^RuG8$(s!y;2=1W^9$oEqyC|8U#NR?G8 z8B}0_5M~SHwLFGd)g@%*4;(5VMvO*i@5vwDtWpo+T2GO{Q;6w5o7W+yVBO{H&ngcO z*!nWqVCOg3`mw`5JozA(_gH#dJ!XHApUEJCWi=y#Wnl$_aIl;CHDKcSeI~07cQVyn zwf46ywmnIPX!Wg5*|fd33RXNqJOO^Sv~Rh2ay`DChz5h9yagh^NfJMX3Ps>TivF`7 zQ6Vx8WZzqcPe1~(BGfin%cz3OMdg*+@(4o?3(NEb_gjU zb_~i0>qrUi;J`6dDX_q#)xQj z4C}f-#&D__TKVerMyd!}r7^SbUIGJ!+yrDXGsCt^!g?%X@ZwWbftDKqj2!t;%|SQ;Sov3W62DM3y8&QVEVvR>u@Pd ziJpL-0`^Du;;3RJUtCFx$`iMtU082-Y2qs7gUJ?76pN?)8c$`Hi>5?AdGUZ{PTM#x zj2*>Op$ZES*THSbKB`!~OsA;J6^tgbI#upxs?L90xm>N$^cnu56yBFcaP(?>t1%%? z&LrZavE$h;)mo#)1mRgHqQv-_xg&P};ATS5bz*vFIk`y@+nmGtWInh}xi32N?PGk8 zPc(}4#fhxXhGkyd0YF;(_N+H5hSMD$#`?GRJ?;y3^}Vm1Ab z!M7S^3&fe9YMsazCAH*^MFh)0#~(v^ZC)Xe*|k6FvmE?niQC%sUJ!otUI_d75^pBx zg?|8hM)0O>pw>(l(?lF|DTZ$&j=vGj)dmH-&}rVj5xUsV0Vr?s3~hrW5jKvv$taZc z1i-;dPQb*BS-I zDeu#CeFNOhaD8vg%V1vj+)&?;{;()<2w476j%k;g?zFuOpr$d81Tcz2E+uPT;Qx(yVITfboTKbNg=4wS@}m(@&VIKb##chc7Yt7oouGB%2Ol&gIJi zy^>xDZ}t&C6UEY4NR&dK?f4h4Y5MmbvO6fmbcl|M-$mgQkI+>xTre}j+F+kjYrHa% z>Ef3#$@Xv^Cwq}{jnW>saDzpri1+H56t)|^T@oqJlu;BJiCv`s=I+gLpqTtd}M|08M?+hapMk_fG2?^Ixmcx=wt;8OY$ z#{Yumr8~bBCb9#1ugB&Yj%Dk7oBR&Ie*9WAQL_pjvKq?1bcPZh`_KJz zO1XN$_H83$$rU{v?9KBExK5k$zY6F!65}DivW?EUumoW(fQ$~R^Rm{nYtWDh16QKL z$9r-6Xfv}^`I*yDVBV0%uZH>&OpAr|0lSm78BhGd7MqJt>{p(!^Bq?-vQAy4`aNR% zew(X>WB)v@AAg5&wf&x#t2o`A63F^ukKd!Gxt!?M-+GC);`jnF(6nH4{#Wde%J2P` zz~1u3rk@QI=~V`;3w%J7bT=Pim&DIaN`$XLoUe$OaJAQ5&vQT=xz0OVzpYvZTL6~N z3*GIR`ubXFd#A9cU(!D`79WXdWz~8Oib$Lvny8g@x>qtPFcxCAdw``JM?PdVcTHc= zQf>nX^;WLvOJRWbmM)Mq6SF?rGWj|O!!pi9P5G<8yEk9Qb8Cm#YXg~W1BH%1FT0w` z`Qafzw@ZL|04qSci+$v-xSvn2oB1#ObxmDQ{}?C|9UR~Pao$dc_y)!>qmu)u^)~Xz zf~0j4kQrVK+v;T>xy;jNgD|luj570!e8GPm7owaC&e}UDIcvj9F+?UoNi0E0%25}`OG)A? zD{(m@ahV3Y=RL3ghY8B`?Y56u`PiUnre7*QG+qRWESOLNmOpAj;<81?h+GiXm9MgU zG@&T?gFcjZ%)U5&F&wVA*tH~$!pg65a?1bJ)GdWe{k|vi?*Cd&J%t8lyeSWgUQ|x{ zG_VYrs3j#q7AmCOI21z(-l4~~Mlw}c^Ns75q8YCy-!(=H7@`c2bELWRHudc)$j4G! z+sOKwNz*NB@^O6facy!Lk^~dNgac~wanR!{t*~8d7TJ4@UivLmz%gBj;g&KJV<@uc zo!;rBZ#m~z@#cG~$G0;}uQ(eaTQXU51eOb09&XJvUqBsO*R|yqXi) zLXUojFLyz2g90YzAGs3x%mR}=ie5wD65I1cBZFqv`aA-aLLdTrp!GL6MAY=AWPD*=IdJ0~f%MC{-?&IYJjWinRKA#Bhgz9jI{=jNb>a3JvmAt>n5 zvX;zUGx}bYz0dN2H-(UUSO`N`xKZ8L>B!5G(*xu~*QIi(k-fP>s8H|Hzjl*WIKm11 z1xKYP`f`(c&YrDP2Lhhw1;XWqa`jOQ(}7Zkch{vxsF}fn*$Du=_mixFPlXNB>Nz2F zv7Oe$$z18EOIsh7aMD#6SPo#9pE~KXIZYF$fL}D=cUS~5G-&}U40J%UVFo&8WZd%0 zkHs!O*Qt%p-{2KJo2{YTW&)5RbzLqEaFXRSvpGS3JQX}ng?VpPp;8DNDHQluWTqWy zenyQTkb~jnzoy(d^YvMn>xw!pE^Z7t2QXWfpRGhZEi(rQ_PZss4QCN7mzpsrMH8MK z#uT+0;mni^Ig;FccS5H6?ZeLhuKTerl&?=}fEn%*-+~q1BxM~Y28HSrmxe@P+(U@fBGU7Gt zkSRmG308nxc$u!=65|$nJZf48YTP-~!!JgY9Hk3T`rtt@I8i~^@x7p#endV8)Eq98 zE8o#vwS{Xro!bY_P1FmO-<3+@1j=d~N^;(cIv>XiN<}a^`H*%hiS7S>ozEEW29?}T zEe{+n8@{xbRxQbd%x5iFu~!N@B^_~^CAW_^>ivgh8kdp~YpeR>N8`l*#4_dn|Fca0 zpICB*|1GNN^j}p?H60Z^HEbVDP`o)CKRK!K)ce3#=bZ0(hRM-9)_%_^cfqN*tRwG)_m?HR zZm_fbM@yIlKm?+eNKfuMS zZ?bf~9%TqxkFy{9;4G1O$k=P~b#inRM$nf~BB5GuO}6mU~))bKQfQVF1od-J>*nx+PeEIj)S61 zzF51-I<@_1LS(eATtKr}r9_h%P%;4Pi3<5n=@e4MJ@LEdJjw+7@Ahem^h@|3EVjR9 z6@L|L2|oPzjn!Zq6wXR6r+%5s#Z=2coBXw*%x5djJXbRDja;!>O%W#iX@$qZ9Xe^hwf+OmL|2bBkWm}wWrWqe5mHKlnzj*gl!Xsx^z4S?7$?d@C zmb?FxL2PiaqXOeGrJ-&qbc9k&{E#u5q@9YJv8a6>#*{K4KAu+VwWT{Yf!?WUH7L4}`*5#d3zz`E`a86vuID zyhYoJ0#&JcOBp?KzcNBcAC3o0w%YufnRhDQR#iHcv$q}3i*12nG}oM$DdOoqB7TK(zc zi#KWAuiu?G{@wTsTc9+Y=?gJ%aUL^L`z11~=nAH;4YIh-BA&61KY!QEZLW-A)12FVJH&?`!11DI~9PjHg5R?O@x z6i?g1k|4=xb_@!S$QsKk5=rSldj>*DsMyfX=U_7G;TE?r^IsSDyN+R!yq)GtC~Zjj zCI0|A)aqCfrT=o;6cu!+^hsTHxP8!kj8$T_#$i?Q9FJ3VPa9M6*Tsl z)Gt*@zAJ=3ttT6CWhO72*901Pc3x0dFn(fzLYwHI?nJKQLIuLaiK=W1;LxeOc6`w| zAjl6#KjL^ri0hy8K%@ju*rAOxEKM_h?BsH8KIb4y@j>tBAdh5We;dX*mW1peth->X zOyCL7pf6I;+7BVnlVv0YrnLngGq8gBoIw)m`;B+ZwpJr47{@rl?=j6i!UnNZh|MBA(?teP@ z{s)S)w5_#;t%;nSv5ED!bd=qOftyE@x?_9YT(Ir z)Nfr%(`EJCdw;JcjsBsy zcWwSEdn}NU=On0`#wBi1ngo|$Ts0o)(&2NY2 z@A#MKF=`(I-^o^n^e~y{qnalCG0G$wFFaVMZ8-CT$+3(*aH>coaO##c7ZTUGNjR|M zSSk>KXE<`oxeAY}W2E42-z4mu{*JXc|CUGgN9gz&bl}ue0hSIi9hr$q5;OB^9*gdM zVJ&3zU4bA%yg`~5AyYqiAf*S35b&W?nl+PtMkOe@{Cl*lu4Nt}V`q^2-+~<0m{SS- zL7k^MB<8Gfps6QIR@<0;ymgwTn|(TxgA#p$GlQ+i2b{2I1N5dzx!l&-Ql5DD( z9*tRdem`3#?w5F}kvB~pw=YK4Boi%$*BG&{f#%}vOVJn8fcWz#0Hx1DMPx_$t+Ihq8|QCKN{UvsC=AZ5Nq$?oKVUFHKS}5g zrix~MIF^VvF^-c0znnH&or$oa!TA>#2vONLB3)k19C}411yUXIm&Sm|La_>%%ln23 z;h#SU1L|S{K?ZW&tJMqstAFNh0pzM$KiLtiU>{~sqG+pW0eDg1hP`9xS%C^M^@9<_ zP6%)dA%J63<8rkfoJnztN*6VCnxL(&p2FE?_~BlDIcx5!6zUq%?6Q zZ?p-Kk0A|?46IrX6>{a`M1@pn(5m4?R)Ez4YEtYy4DdLRfqa%Wnt2iqGa^3@c{+5cG2muPrdlWB1$ zPpho5Bm!pJ>}`@dORR8{*eu`0Zc|iE*w{Zxn%Hbq0M#w%h_*kNP zX_jA3{?zU%50{j>$?5Epr~X9q0C-k1u>c+Z}g{ zs-(*S%~FOzF~;3;mGgv`aGd!y$h5=kUkqkqx$dx?1JwfTBMw1>#-Wl0h8W365S!SWD5U;bMQ_yMyEF&VbG?sIEwgh#kU4}$hdNb6>e%pDG z4%?GkC70fZ;mZ^{a>-7G(EuQe_Wr7MBt-l*+R;(M)9fNO4`1R$NVxA)4bu2G^sFdn zES9{ZxtVEInvFvv`PbE;UMw4uzdk|5Ah&MFTxGRMG{&|`m`_4L(k$3)Nv%$Ti{^K` zX|SZax}%af0PyVV3OhF*U-1|f8DxbEk)Fy?(~Ma*U*7$YbqrfUKU}8{S%?v@n2o`q z!q%D$75Zn@`coQUk;0}BjpglvkXtQpL43HV%JwlC1VNR*)mK(J)SH!uiI;gXls1JIe*+G0 z)9=w%dly7sz0Bvbov}*!Y|B@vLuK1CFL$9gyV?S*dLK3ZP;Q7ml@#YpWKmuey~(!a z5;C8Z7DRY>%nW>Or%5A?hK9QLT-{LQ%d{z*)QSwimP*R5ipOR=vwa%Q89l>kq}e2& zQ}WBV!-$t6FUjIlZ440IU|?-rT&T*fk{x;m@MJcmKBhP1HZ_n&ssX?2p|$dpa{QL! zWo^p$xoFC^&CE)#jO;Y>P_iD%{|-o)%gRfn?HPFg*3Aifj1`IAn}18m zBsj{K1SOSO%*{8f6`7e6k#ygvQadX{M||X%q-))vp>_A#aRccaJpW!&l{d+G$gfXf zG)|8gtlG|@u=GzKyEF28q~C*j;&gYKD}!|!@7g`LhvU_(90WhV)v^sgs7)Yk^O5XV8_FAG`xDdrOfmj6ZAI|gYI zMp?q$W!vs@mu=g&ZQC~9vejkVwr$(CwKX%}MtrfcGn;=i^U27_IC-CY&$;JbtndBE zk$=0V0MZ}uKKlxuPk|GDn*8x+he^E&`H2(iVBQ)^|H#h0Vn0YG_z35uwIFJygQT6h zB*m^0PdH@FyztPI>Jv|>j9O@HI4W+Pp#tR!u31fsv9U)%(j?ni2ET0deNk6g5zDdu z9<$V;E~}X=FhvxaxnTf0-?MGy-ueli38#|}LV#=zX z*&Z;i3Q~Z384K8dWw}gb*hGY_gf07EpH+CFDpy97P&vAet)h>GE-)in)?Pm`#9&Hz zPZDv|bXq}Umg@G^aGysP#_X^rg~o^wTTVcf_I4CaApg9i4hv#d+?CSdZvk?4)+#8O zs`z;X?%ZM1AGD_A79**R8t@>S*O9g5^A&IzHsDuPkrZ_CW$Ij z4wNGB8xh6WVrONOA_8Ibh*j~jSLa3H0DApHqfiEM>U=^iZ0I11{DeahiE2$m%caTn zjCJ>+&Nw}7=YNE3b!{44ywO3?Hu}Q-iC~ivUVouqVP@+}rX!owNFFTT!3c$&X++BM zYH2TTDJzScz0WO$0!O=giWW$+Vxa$^{>qcimswYDa6j+a+W0W_xBpS89wYP?sV>5*!@k9RkWo3g7?qW6ZxFnX41ZSf&nr#PWg!Hi5;F$b3Y}MA!Qm>^osw0zGauu>IN(A@6888^E9p~f7a*RRK)jE826M?9V?hZO}HwpqCT2)(NdLAz@{AwFz};C5Z~pXes_Md@|=Opa?|a%>ubc$9O`tN86G4OvdJ-vro`$`DU&93>6~TL zH5XjsF@T|6pi8kw#D>I9U>6l)>Y*yoa(OZJjZ1e&tzlL_z}aTY-5v%pJaj;wRNy$w z!BNNzjaM~j>i&@VUl22a1TF;!0*EQz03B@CgdoP0o5;)EJ{vCp`b?fw!xFrpQcETH z=aq}$gWluTZwl>r=k|OO)ucxsifBcR#!&T=Pis8Z7%r77NTX8ML)_e(KqJQQKKsPO zF-m_2epr=h>9++|2TEBL)qCUaVQh|gx(JNL<;6VNBAj@URCv@4`;hbjRzq|nYYeIM zhe?CIJ4yrAV{QWn20B|p1q{+j=T zhS&e-Ksww9r|X5%LNd)nDpSh*o0N8WR)v%^{`3%z)TpF(ddNszQDV2)II;iiPTWvS zxB*UAisy?|Y25^~xVDx;sdm{)&YjNZTwJgZVxg zhtWuPpR@=~ZAoIN9gN2=cln&Jik?ykIt_-((@|)*9tzpnomBCdHa)rf+3^}mVR@i&H)=g2`k5$T_JjMZa+T~hKQj}tqVc~XPiX7fL>Hn7D)146c zqms+Jln=qnNAHpc0&n>1>0ctzR9eMh{S5=yo^<9U^#_4hVDCW>yON({Df-k;L*EP^ zO#Uv0j3HeB={^v}uvmJGJj#%nMkKux_t0D=hA1ap_SGQBT5veZFtG<%LO4m@GF{S^ zAv;g6(;KYGOb%V>SA@G0%>Aiui`qE=R0EP`7HnU^8UxM3&@PPy^Y?SQiY*M%7xWchIuN?R=4UN{dEcgVw4)d7cQ1jx_?;QAr-I z6?5SFjXpd}Cn*M5T_7pv&MgAE{*P~9Rx`dq(QhhRrQ4z94>^0_Z#G($ywUh)(}oE? zD9a}~I~t#?E&Sh(u;a?98{{+l)_@?u^(Jhe`@+G?ZxbL}GklAh zZRb(DybAfAxmmltiVmJh;x@;Q0iGpzo9KuG$6mZ=eoV!+ujOZ&h3YodiWQpGydQS2 z^D*&?knPG7g3hMYapHvrJEeLPf3Mwf@iTXjjd!qoiuN}BzWc`UnAL6kuxGsrrel9> zxV`F%?d&Y{S=+~p+&EHY{E4RLv<3Uw?(aP*g&pm?EZRCN`tz<2N{zASTK##gSnpvS z*~B35%U}Fk+|=L6=&u*lnzsaa0&wp$ffv3pbjhPp*64V~6QQLTF}DDzi`-l{oc7fW z*E!;+S+dw(wCf=zJYk;owt;Nx9t&aWQ15(|%SmH+^@@_i+UpC2g}T+Y&P4#6)ja>x zg+djav2FH?{~l9L=bxe{w3_OUlBc6OaPO$jm0>jpJ0<({ewE9@gUg;K9J6WCeG6#( zb>GV1m`(zNT|<2Lts&Q_#x{KWAy=GhJ7OcRHM&bQuF-m`N}=`9i?9BY(U^&

_Y_)%0s9)iP~{Y%9)*-G@CY!g}Qi#t~Oai-P=>AQLg*$O;ICgCjYTrA$# zb*#@zqWCul?5RH8dY~{LbBiW0Xje$lgnhbk=6qG=;^SKKn*0B>U?okKfqW)yO=$6x>p7hRZ6j)TEC=R*|HNf!51%_$~*FN!h zQh}~B(%rc!p8*hgk<^iAAZk#_1^8i*Ps)-m`)Wa7GIMn8Hr|;-=&+H~;#yx68XLJW zs?gi#u3tJV`xN#P@1^n(Mlp?C*hi<0{kHE}BtwEfNEr@LIzeJ`!lyScY2)d|*Us{~ z_wql<;5>ZAQD2|+w^-QBU1t+gd6Tv? zH)M6Gv^}dn^U9_wHXGX0puRE!=XiH|>5tBHtm>*;|GlvU7aO_lrv>pFwAf6z2av%t zO}n1ZkdnPVjvrZ(+Nu!#y_-;)<)@mVhE_{~)G1uPW*5yi69)B_F5`o+E_PZ6hzlD7s$6r+wV%+$7dxgFG3tWhWM*&80i*a^} zw*e^UpUQ&vbo7m$5upp7Y3sD0UU`k=GAC+}7%rZ@#+~cOaZi2aZ?Q<`-`F$FwOMrD zMS5{Q{_ljXzzE=_!{nfQ=C}jLJAhux$wGI%3-5v0r3Twh7k`L8@8|NqOR@5EjHHXS zC#K6Zm!c;rUX_lqTJBEq=R}o(23(~*4iaxkrZzm_b+Zx?vUC~}z+&j)yaS?X6!jE_ zWM=I*?EvO-6Wjh=ct1`Z8|r$E_CRTkcWE7W7YbJzEw#;+c`;#l~y&WlP}}4=`nmoC<2s@>yFM$>+f2dGNUn*b#fxuR z8u``vjc>3GGTQ>GC!Xe=UkuhWyoJ$krcQ+*))Bez%}lsTiu!xNiw2_=0KsM^1RI)x z={3eA4i9 z#q8GA5c_iG*)pV;25CsIwG|K^YY(6t7BYX?`Gl9RiI)Oy$9Z0)7bl64qGyp@=K1U) zX)Rzc*ybn71+_YJ-<>73(W1{RbMjR>8Q0RKsU8Gw-9oyQF2HNOiRW&!Nqj0&DZrGr zEa#7ri;yyW+MB#retJIO%~H#8V*>9>BM(9D#+I%F^ic%q3@v1DL99OR_ycbR>5_Uu&B!U`;Z`q7 zaEOir2(w>U$a(28EkLW=UwP!?J+NyD*Z$DpFCVitcSH3f$@oval)b{x^4%2Dc86L#4|--)ecu0=#AF?VYq>fMd)2;(H@u7CaYY; zx>j{zgtL=2rLUiGhKZxaXfx0$^ic_Jv6$;vnqCEtQ)bOe@g4WXEkc>`sesw@U0LQB zlVEfH!Hk>%M|S$<|*> za-@b{Mfs{fP#eLoqIsm2WdJy!HMWAYox{QGAQL1w1jjK3FdM+R0zYH&G%sMn^r*X3 zPSK>DKeeV@I^wS%`!r1hTjh8(O$VMx!sn*q_3Et!-=E4y6%Nw{tgFwxuu^kj zi5Q#+QPZ60=w-MMami_e9aU@|;&7gv+R$%0MQl2~x0**^DWa{D)-}lJ3ix`Um?~Os zp?YPf`M2E4 zRNs{b?5I(8XdC~1D?Cz$vsIhzHWvPdi#&Z+`*{Ie@4`gR1k}bAl`72x2?|&4gR1BSs@x4` z@xv-9ismVmD@+%KK-USD(fS+jI?|~s z@mJGOGx@7IsEI4S>IlQ|=dxb$R88zQ>}le#VCafIlm7QiWFZz+Myl7Qjz;5`4RTU< z98nIbf(rFoV}?4g0PELLPrYy)i(se=9$rbC4XBEV59(pOJh+9~F{p;5l_y5G>G5+@o1~FSl zCw^xqGg}994}B+dTN@R9D`(^X(k>J#S<52xBlt9RKJAbf4hG!qK?kg%?|Aj1Qwb!R zF`*gqi65*huq-n!b2_*RKd`cOcgGq3hz?!8p()qpm%%y@=?GOE8Xer%K27ux=V}dO|=Xmh94E0+`zrd85 zR#AQ^hl2Y<4oA(rZtGZSe<||H*W^fTU>(Z%Cgw}+)4Y{T( zkhP)1z}D%njv#BI8WVbdIVyzjcW@Q|+?@S;V5bU~QtICx$YJkFJiyIPRYVuX$Z=IH zH>3as&&SQZjLIOGJJ=-ydjUd9##o&ekeB~f{A*2$?y_~IIFd3a#n02wy=ipg8 z97*M^SP9E7Z3L;z6r$BNa|Iw-pj`N~KrO}369n>O16~2oorX2a9yP-zK?x1{=4W*a zzLGKb+o0ajaP9YAju>XYIu>j?KLRGqUZ#g*67Ucm9Jx7A0ti{*J@H_olYc==JWafl zm`5pWDXBOzt{CHkF=xEYXNpn+EMDA_843N|pkSR*?E~l=y`hHt(Tu1mqZrnJb5g0$VbZEZMPxD)gIw28hvb;-;lR5?d-kDn8yKq*h;suy|f5%_bi2*%v|HKhDp8j+`n0?MqyLz zpuMppX-#USiOs>yz0K5h#EvrAni(66g+2yRU?lUVV#iX$H_vXh^smb)F z_S>%RavCVflpW$BiHA3R0p{VL(|^Am8DR zQ&f(5kAksN0n$8+gi&`iyDTHtjMmLau@r8vQc3A)d3)!-r@M8JY{V3LnWU5WHC-um zbi__zHjl%i$0g_s?1EFZY|x-|25yiT=_d?iddo46==1gdgerjGwtL-Z6S_ju*d@S_7D) zJB7$>)=m!>*G$aFpLe!(Qr_`%2fpQ!S@`erkynuiFz<%WXWh!~GkkA{Lc=e~p!ONC zuThUSvuby9IMcNH!Qv(g3NP`#`jhK|%wM|+2exzRB8hDMO~GBS=9%R5P|N!VCWC4K z`^+8-tJ)geUR47PW0<1xm2g}zaOKqRu?l8y_!JD{rCH%RD_$A-Vegt=ztc8 z6g_J6fSxp*g7^{{*wK=npkuD-m2Z+P_J4B6Uz&~r;f7F=kqM3Vpqb?jzaTwfu!}i{M$L4%> zSayC@h8A35e_#X)hmg#YdHncrppeW2!RgNlXEs~-e}SK}NY%`PctNrXGH@Ignq#qw z#fY64VG@+;W$f9?f36oa61`#n1$A8z1{DN0!i5t}_=5fqD0#jNmE8V7sR8tVf)eR} z4<)%D6e&BITm669w`gTwS7c$7&IG1ar+Vr227UyPiZFAi3PK8&u;iJyKxs{^wY_ zO7Yj>WrZtsL12_}=RX*NcPl3;XdgG05>y4vZJ$u~Od_>U+BK6bF{Tj~)rK#)Q6|Qx zv8Dy#kZ!%$+~;**J;+L4mt#0-D4P#26-;aXJ5rEGby@|32{oN1&{|H3mu8JSf3t2d z%;!yl4NN3@>SyRPjowZX#&IwnJRm(CKHJ34#QyRS7qa*D$+6A+LG4z+Rw{nXnpgE8 zEKqzC@C2GQ*o)0J7Q41Vj8YZIfriPzaaj>aLdDqhmJa7-rH%mC#9WZf<6+>Z1-GVl zCD^#oA$mx>s+$xQ6lcJC(3J{ZYLx=M@H#X0oI+boNb5mh6g}L=b?DFUQqiJx>+w&P z2G)Xt@DRrgw@hm(C4h2_{SjX}6-4!0z95F^(KlTqV^^w`_bnEVro^lYQ&e9yTquv| zP>`@37{R*ZN!lH<%tksO9o3V+!pxzT%WOTwRZSK1QskSv1MMz#4kfHD%>!{8DSlT? z*Bq_|Lc#oBV1%T&ijY;+j3tVI?n|KZLsZGVr^E;xJUU@(Ki$WkwV*ZseOs8}7Lprw z{)50`H%e+(>I0VuWr~Q1VbLARMYw&p_;dw5+&&w37V$5#o8;Q8fl?zzPJgD5k)l-9 zzeN$Jcp)|@jE@rVs|H2j=ZK^f?<1FnFPK(f*Yrb_r@C?5p$Ql!X3TXleX?xIIG6fS zE&$r>>)h0fJCkhvfZgL^jH;aT+y)-QCK8dp*gjmQ)97rLR8x66GexGOaGT$TM);zj z$Pf19xgtOd;cwQ2zA0=>;W4sSYs6Fb_p_t1-C^?$GV@m%sePP@lVtCh9g>U&5%os% z6yhDB4Em`>i^L4Rc?PH76C?O+o|Ap8Ft1Y?BhbFU{{ijMUZsRk;9tKM!Tu*`ll@~(6YHIAjKqsf~;P}4-WTTq9m(n8Ymkk4>?cJRpot21??f}UsF$@qPv0oi_7RUsU zFp8VFPQ1VRUIuGwOEXl1#b)VRS*2to^qQYFgu;T&+M0J`#?sY$*IM2~yR8msf<7T+ zx9)f9`&Iim`*HR)=W#Y`b;sw%{jZ~Na|(-E!Co0u(3L+K+E82NeUZ369n&!x%2ET= zb*+mr&*R6|6gI=SJ{zTbG#izBco!-+zh664d%Y>HhQT9m|8VUL2U6hmg(`c2z>i1A zyxf*V4ByD3;`igBO5V0uWy{?Z1QaWsC>-j%dacEn9^CKG0eC>)KUS*u)V=b;&UsHo zed*!!_-uGih8-#3b`>e6hVweI zP<4k?QM{Db?wEPIXh?hnds&septn_SaDVH%O`a`MVuJ$h1}$Prh;SZR!v-T~Wfdup zuL{Sx4d@Wcsp-_p^we|B+CWJ`i0+yESe;mCOo~`8II%Qi&N_#n#$8|i8@`Gl1~myG z3YWW+5R8Cv##V`sDS9~1T(!({wV0!tH`B$hZ9m(?h4iOB+-(w~TF@u9o<9p07SxPx zvK|%UTCiCWu_WHYYYVf5Wh!nWjQL2!4Tqyp*LNT`5F%2=bRkBxWlAV5k&e!8aZHVn zr_4hq7yoCm0F{+sO%89%+=QK5f_M$XysARHrJjLj&k{@|{ys2GP?>neD*}An2HP&F z=iosj1Bx40f~hesKUH>DSXwzAH4EOAI=e|7qvFkFT4BCv(X{$F~4x~e5>>9^S(prT? z&O%M8Un#!2`B!si1KDYFVK?#e60hKL4<|aZ4t2n7$&7(G8k*WTp+>9qJj!gWLR+AB zKi$eBn#SRPev;0X{Dmg}XRiX)bxa)K4J0fbH`StFOm(*5?gfaNj6x<^2zvT+XG3Qo z-$oQ;ZWxZq3~Z;+`wUv)CCZIxIBXCkYJ%>6Ka3Som7~o`PX6W#dWPXlVjceCGGCX0 ze3i;aPK$RfWz1a24^0WrZM`;}_9ege*ETWO_kw6y7`+ww5TU zU~yCy0^2#rT-Q(Lst!?Bqn2ZTTPWWJH$zDE1lm9%Z@FM7YKRTN-xI~s=|4Y^OR;vf ze4*cxyFrHK9h^QvP7}67`Oxa8y^#d%p1ZO92x&PK_!(M8X*YMHHR0*Bjzz|T@*&fI zeG5(s1?xMIL*7>CuKWlD>brD<{-NBv&Gdo$J#!;#9@(PN+s$Ov(~a6uy34y`Ud<;V z*vWM_A#bGbZ{Es6BPpDB8E;Tn+9IXhmNjF%aT2JmzMZ$*%|>WJ1IDySkcz&QP zTEJ*rsLFooo?NxO>OoxUN)|sFMpQXovzp3*D}z?V8Xp}8fEdhhuqN)x5^GSk7jMYt z82vE2Bhf$A7Exf`^PsTN{5w~rt()CA8%^2nnjF%6(-zWfucW7tO&J1M&!dA2itWm zmkuk=nyu1>6kZz%OU(#{r;5FZz;M7Whxze&5B+(QYfIr-!J{_|G(KYpFfEJ>xQn3J zZ1OmC;_#|_Vso=Jh`)hI#BCl^959lWLR17D6V=MlX{{S(*%t?|>8V|e?0MP6RNc9d zH!0xPkki^sr_w+%)%KhaNnXWeUYjVC-|~ePnRw}Ew9AI7Sdj@rR!v`W5ImY3J#A;0P5J~2D@WpZX_Ua`M9 zJM>ax{(0(NopmwT7&wIsh9=q4CzF7XCC}sKEd15hz!H-kO;kR$nq}zMA#3J0eX;Al znx>d-yFPRyroMXHIW1FgT^P^*t5pslw{3oxF?zzHCK@W%ixHXGyNdRvzEsW7J@Wj= z>L}@_lS_gnix~(!Sv1;6Vd)J$UA{Oh2T8g>xynFdd_tjT1mVbwy#|>`zaE7n-3VnA z=%6J@bxKvh4rct26_lHF{*N|o=pNNZnW%A_r~l|&-;|qXc-m;ethl-JaCzpC92vOi zN^<=ciT}Ml<@o7Ct%O5&!|7ev{b~m5*D`E1na8PUp5jD_h9$`fLwky|C+qUsRElW* z-~tI9B|LMXUu*7CLxwSvLv4lU%cj_! z9pg3W6O;-j9n`vdwp>qMs6>}&Y_vI?bt>aCcum{d{d=>ey=wc14Ax1rCS+6^+Cnif z@z)b~TnaI-tPsX(5gHIw$Ja*c+`r{kP4%aq1iFG>P`o@S;rT8Mi+?#=c~9;9Z3(MP z*71u(JW?D9SlsMLE{A@_@r3}zhWl63MX>@et1A-mu?)x57c-A5?%~l$DgLx12bP=L zB{?&)sNjK|lc+N@wFsr!X%C?z@x163@S9}kT2wyOVu8<|x8Xe(v>c4CN*|sEDysUH z19?9y9J2Sf6b7Gov@QG)C^Wp`-Y+2LE(QGd1TeZ+A1R7Q+yN9cDn)R*Xrzw~dj&yf zUI}0_PQn(ewvFCgMT-v4f66K;9&hydLz?Pmm&2vr%v%c6e@+^zsO&s=O%y&SdN8ft z>`i#5G<45Ky9>Nlkg}V_zBt3@GmrH%VPp2YrBjERGV_xl2*MQQ2V2!ICWqYFLTjc9 zyQdCC2fc)9e%Vv?DXT@D*MhX$@z@N3wqTEwyMy8pyiCtlhlUS83+*r)5YV^6Bin&- zZ$_atq2DyaorjBxnox;xUmHwIY8zi&JPud^(-_;Lt6C99=vXLh=w!MSJ@fS7rtCTZ zI(HseYDI+@VcdW-T4mTesp)WJJ0esXW`Qp;uSVGu9C0sL|D8~C@be!dN~z8`g9t+r z&c`?es`jb?$XAXUvU(nfZYaa>3bO%=`2$S)1?Q2`0Hhq;mVU3K_^D zTyTyb+_O#G%5UPq>_5KE$| z$60mYF^2a3`e1MJ?4tyyKz*VRO~n~j286@v#PupLoPo=+rC_Ua;&vY-WBmAA>6sbC z1eV|d2_CT4Keq9ToH-l>nS#G z*O0h&Z4tOzJ6AM#bV2nOv}wA`fNU!$AkoqqyD&Fm?GFeh@%BH&^B@Ct*+Hs&?I6%6M_>SOovL+dh^=@*H3>|sZ z6m;GA$IMEcv^IBD24_{bBOguwhR&fXCy?4=6(l-e3zI$GgASbZRo2c9F{?-ymh~8_ z4lf;XP3WvA20T;cY>Wch!r{8(Y8w)+wuH@Wj=D5Q?ln(u)*&8oA4ao+&S^FTNAPzY z;eWfuLrMm0kAN_x@x+Ul#Lmr&m-xM-DU?g$bEgV!E+hG;CFW#r3S}+VlKt7v@b{|5 zHbqh~NyZd4stZ%`#4X9Q)yG5*2{?~Y;N!=VqM3jj#0K-$6LG8jq^A3i|DJim59?f83-lT*nL&UyC-Lv165gx0`bmwOf}(-#39 zrDsq{XZTJ)Q*IvB=!8F?WL_@G=_kZ2R_~WjiEhW_>Q0U%#|*{-=Zl_y3xZ z*g4o58aq1LIylk-|J3}zA%3p<^;5U_&*Q(Z0W$rZH@BsA{I7I|*6u&E8QTBfVn2;6 zcD6Q-#&Z9A{r@V1Cnc>rAd4b|e8(AqRWAEQ#nqC~@x+eATiK8O79!Z$K`_8Hz(jUv zMl-A>u+(m67==Cnbr?3310_vTD(sV{xswu)@D&jijqG8qUuWF(^_`!ue}DGv{`|dz zgr_04gB&hPEp(%fGknuJU<@rNy&n-wSS8`5Kig8|U8NbeFUh@8V}~rc_DC77i8Kx* z+SDmp<}&?EK>@*~tEWHs2-O=S(^&S=2iOOHo7I7XD)hb*_NRYT6nu3qZYpZ>FrtA= zZbd~Bsufh-Y+G+3wc|!c>MjDRev*2XlsT-Wc;ZNv1_^eUr<$^b7)WL#vvV4(EMMHb zls>HH%wV31s&YduZrXjRYSK)o9WrD^U}H^9|HY}pE!R0Bh$>A)_o<`zdsPEn4E7(H z6QwCu8U2{zJG2(1*GRW4{avQL>F^y0V*!t6bQkg=c0vqLt;SS;sw zwkXiL+x}=Fzt=Rt3Z$~S{zz%Dx@ekx!8s+2Yep2#3DgSwGkbu+#t>x~bPB)a+B#}C zXrP%zMGlFLxrTwoVPsuxP#gRCCM%jbkz~nwV>l!l{6$CaR*##?u0pfAJwsM0_z}-{ zSR6XjeVhMc-f~HoAbpmMJ1x6u{bMmloiH~~Ki*~Tt^%kjoKpkBY@8#wjb|NU$$-?_Sc zzH0qaigyVd;u%~&-8Ty4n;y}H!86S^zm54dO5g1^WY$)+{d$^XGF;^0fzm9D)KnDhp1mE06dHXH>!bu9%DaBjW}db0u2L^neX5Q z{crevJkZB;dY`Vxf0ZK%APAg(Y8DJX`2O!vP5=Kw^?&xL{U4AnR5kZRUdH5JPUdp zVF9y7@yF#kZ zt-Aiq9~Zdm6m*sDYGQR&B203&b{w{(6lZFUQJ^>g`Zo7nY-;RgGc)Qldpk~13Mg&S z!HQLKFjQ8|v>m9)EQ@5-k1cH4ns22=f#GiJk`XyA+w-B|A3!sCjZqy=p_3U+ijFFG zHTI$Kq3^^9s&p2(Ie-`9V+TV@@Rwa4aV(sIgwAmy(f9 zbjZ4RSB4moPVcWTFA%YH}1@2<^Q&Yy(0x(oSxjfp` z9sjl0av9FJRKiH!GQuG1>SKoWH4!+YX6oRvq3$MEILCP^DB9fBga`v=Oi{D_Jx`_f zZ_4fRx=0`byBc~nuUMyScR0fX23{$*o3>t72Y#n3sWGo`rZYrFyWOFl zdSDs=zAw+yq;6YROQkEQ{tMwCDov-R?37*E-F=V$6jO;k*d}9!85hamm%{2AZNUjn zMzN?Qi^Ni5lNv5%cT2dJLRpxA@6KRvb#AZWM6Dq^nPHnkMXzC9|AS+t!z~{YRJJDDD z?eNekS%m&#KaD>-5xsJWEk&9iM`Pi}kE4K(@Ikl-zO@04#0gpwzR5xdnG z<7&-87^-XNh;d0z#v6YSGPuLu5%k-W5ZXtpLccX#5N>3qJZ59Gjk+`Bo_6To>@r=D zUNR)?C~jnT2t**Cegl|;`e)4=vIxDXy}-T?DuO@N^1>dGfdvfpK;?r`2T(|#tMmf< z2wfa&g*RFsrg%ZzM+Cb9ed9rVQ!&<0h_Y7p@QQ$i z9PkmhuX8tL!+{goqUZs8AImNv*UvbND*ALGp|Qj(bnZB0IiykVT#|RliL{r}4$^KS zvtGb$AqlJqvviNPU~&muxjg&b_Gl)&SY(G&giT_;=$f?^E3>3EV%H@aN{MaBEEoiBHIH2*2@&N&a9LfB3Au5fpJpR>_pn<3eR^~pL&GJy5$eLDZT*^(n(UnOX=4I{<@ zA|u&mL(nKDh zC_PiCzZf2=fe?$(@3BaBq@2etO$OabEkFvsSF|%)H;?+lsa=T`8y($44pQ5-aiOy1 zZz}k*F2l2DoY+ui$rQR)Is<5v0W}@F;Nj-!w^yK@Iy!KDA+UZ$lFuyDB5%G=rz(vj{!H0>It%;XsOtf?kL=| zE`5jFQohZu=!|hk#orN3QhmXt;E8XHxrIzn94!73>mO5e^`uNFq3Z5hqHgQ)>siX2 z{@c^^G9?LO?Z%E^Pty?HFy%UDbitFISMu~z&l5guxtr)fCAW&t5Xf4{p9txSWv`T9 zSy{*=$#t*MWJg}!qgiRmTuV>m7*-!soCtFQpO0tK*RyQOYB%~iV(icyT{IhOFG?3v zx5)@u2xdW(z~CszNuq_rI|urdX2<21v^H&YzSqA4IcVZpSZAeUqGO@sBCa__Qz_se zt2j6V3$Q;ze8NO`Z?)L1!ON_<>NJKKuf2FUG$NUm(<0U-hOAyR$_Tox%0IlKQqAFW zT$(ZU)lL-qdT~}BvUp=k3b!lN#u}{G&=YZ~8a=sy1O<}Piywhz&&W)UG6GvRfsrw4 z@(PtUkNeZ5S(#~a#TKAK#Av^lF=%oP2NH6~NNOl@9yDyili7T`Ii=$sUsqH!6_}(8 zuUY&uKx3qS2;gt2&fRG!CJE`w*=-Rp|E=*t9b?(k%j!;2RvTC;-82D>uea!8fPS3V zxM_AM_6HtoeGIk+)AL1u=mwj|iL@zmj}{HY$|3VTI|&VMr)67_l_FzOUS$}@8%KpP3o3j+Wr zM+L$KoMI^`YEKdbUm~pmcunrkCiHDzM2*CBKf$i%xk9D+?k8yw2JE|s7(d$ z8s<)cOlxxvsIWk)weosq!^&1jsiL@)8K6~$lI{JSOZ;WQ-(QJ(fCdPs+x8qiaEw5k zw}XG6$3-%X5%xg@NZrigs}d9KR8q8H_K5_7iDlxWHLz0?ui(s3A}AZ5=m|A^I_E53 z@GM;^FU{f~mjkvFDIF=>Jn{G@dCv(R1mat%B3IJ!p5icy6yXJq3qVa<&H04i91E%R+uCtRagi)ngE^Bj3^V;) zBx#YX_o?J}Kv#o!LJ>2XN7t&cIt{-V)(GqI`;qI^Yu0_1qlxZ>&pSxZAFl#EWQ~uK z0ZkxVO1oTTn=M4P;-1LlUu!dXeBe{#g^D}c{xqNzZHIIDJKPTv6T!cLT1x)Gr+~bn zChpZSxd?Z)Q`~g*Fb9wo4Tr$=O*IKo7;G+qgTpe$FG)w@YlkFB05DDJgM=WlLly0b zR?UkHLW~Qg1U8{0PG6T*3cL|BVcjy2h#=qDc7<*lukL;WbSdYuRz)m5Ag@e#h){kM z3sHdC-QWEev*7Vw3UkR3r=vQXQX}3^GuH4VRDEBIuP$drKh~)sY18UPw?Spf~iW=V#)p|xeWTD$E4!gKRJxolxWL+ZXR8DSShJC8kScv;}@>$9v3F< z*)CC#CqTeyqz6TNBW=imL~Yy_bvd<#pfzx!l9I;SI7wFvC76sFNDOOZhryk)Ybv#< z^r%=Y_n%ey358oMsLCq>`qOJK$QDal78Eu+ zMG?dypdv~Iu`2e^URJwBew79&R@E+-o4E!s&B`0SEfMfHfBw`>h4&ht8xfbrz=%x2 zZ_pXAz)uabjtW}r{!40f)}&|)aHx4jY7LCg^MRcJK9s_mtAyJJT%Oo5wu)v-uX6EB zw+g{yxiGs9DeyI0lZt>Dmoxg+uf;R83PUbNX=Ky0>>Tg}8dP3Zr|n#@rOoYY&)MtR zwQeuJkIb9PoF$`b({rWZ9j7VaX?@8QiGXeQx;C8XFu=GWU^R<862n9B=C{=g)>;hS zI2zJ>zE5R?&q*k91}3GP*1^b}Z0Vgt9VFxHlldO8-rD*BC5}`Xl?u6}ISSOBx@}Hz z;^KY90w*=b@HOU!l9zbHsOpk`KwO31Y`CJhu$|fHjJr{X;-h}3j>`00<2YaRVfzt@ zyB>%wu3WaP2X=lKxmInf@&1~T%{{)E=^Va!;tnvI=HV2Wzqu82w!AWbfkZ}0iWhK; z;L8`ipWw^tp`5%&vB+3LH29LyN< zna*p7@u)C{rNU&4HTW|!K0S$Pm#avQ;dgiY7AxfS!AAYex4sZEBY9Sji8PmRX#;a` zok+0Zt=SmL*tj<`c|}4QoO{VGC_6Fo&WT4smFkf85;=}`Z=3#PLh#ho0`(~I+dboH z*|P~FVSzjN3_&4PPw^|mA2&1sa<~-F!>&G())(H}xr2?E1V`PV>s#&iEUZ^J+dGZH zcIuCF2Tqndb5PZxKULABRUsx-p*~f?mL>c^ja*jeZZlW?#bG;)OP@&KH_UK*JZHDR zU|%prZzutK@Itp_nlI2~H}En@yC|=A=}@y$8FtA{dBGMl65w_Kxcn?YZs61oSC$~z zmDOY~AO75A(=cMVMNJ_%DXX|v2EM7ZQHhOJn8P4H}lMNzq!A_`Q3Y;v-eup3WTFf6BKqRA@8=* zS42A8Qd5M&arla!&ePfn=n>ccK74sOIgv!^@E?&_5BmzL)?Jr;u^+Bq={1G)3It0! zN+}iHS?G{6L)T@K;jGV3ea)~dsQ(7~kERh<5xhS4BW_IoSv>r|CyM`L(~$jn*8Hbd z{{LtiiOSn5*up4ZLByN{fItu|EOOw)r5nb|O7-7`lwnIj_;FAIpN#<|0OHk__8I-f zC3P=_ZLZ>v-#i{s1;y@B;5x21ymJl}TR&w?U`bbp)WM|debb{mwRM#@>*EgFSMr6_ zm!@MYM5d#c9@Q7z25O%=$^uACc>nTO6%oNx(V(RWOg+%VZYJpj(P{v;s|pM>PPqOn zcN9sK(XJ1puX6`&5Ipb;0)FUaG&@QZYS3S8`h*Je(xHspV#WCd*dS;~>FCtv1V?pd zeGs}qS-16w$;FlkdJx#fiF0;^${lu{Y?H4N@Yxr633Dx@69+qzj;vMXNO2&73Z|+< zCJX;v^9NN&l0W6uWtfaffHZ^O&@fx#>ISCbrtD6}RPA|KtOtcZ5~Bd}AkvGu zyk+&}2?L|F$?_n5Gxw@G9_>Cx$3^kb+(w~;7`g`$Ev^i&_6SlzEvoXdnSK9kUXT!S z5xIgz!Q%NUnW*4x+ZcN{^#z)QmA_4isv@I>2IAv0_GbR9XTh&7%hK6|$r8#c@QGC0 zO!DoGBi%-3sj32u)V&2o?@=^785P z5?iGEVs;hwGlsES_=0~*Z7?aEB#`|$%xMQoAgK3YmJA>Aq6wZ7;ALNUsP>uKFh#Pj zYDZncxN*!d&u0uRbrnRw)G*mk6ayo;cy|A!K!!`i)dpH&Hru90?VX5^uk;qfWPW>r zIPy8s=0|Y8NDUpo2n=a$?7zqld3loT19kDpB&lna%V%h<{#8Kh4?S}zLRUQ=n(^WZ z(5V;t#eW_eW^%NrdMlGYU#8?{Cphc3R*nrg)Pdwe<_>ePvt%h>T{q7p??*V?S&&D| z2}UaY7Auf;A}d8=QcYx}4joZ~UVvf}O|nJp03@5boQJXJZ#7vSCY3rIS>|^}RI~jN z@R;*|)@*Q|M%|L1tI6AMZ4@i^fYf6PJSnDeV*)QW7;Un*P-u%)B2V>JnGEUa>J&zC zd&If_7W89m6R=7GrWLl>$HUL>GhxV2DQYLq`amP`S{3g7E~I!nQOFPHk>G*|EfT1Y zF-3l&WhQ^K`i0CLJmg&m^8x|=0M7%Ajk6}$zf*k!fQ9AtcY)_&AYR|`xcN5p$S$Op z($2X?q?O5wt)SxwxkZ_pHMfa{pC*7>VMI(`tp|cxyA7t(jF`Sc5+%C4g!_Wo{tFZd z3Q`mt1Z_$vn1#vS^BD`AhQANO>~1sgjzJ9rAB$SA9OMPE-xV8D?K{J>wkI#d(IX}F zhI~6!ljFs5l^=caN9PVgNrmgnW{Yf>wwj;VW>G3^+Mmc@-533?lRQhKKL1(&FtT*uGJmLl zQ&9h1{rev`D*qw#cKAPPU!f|btLCE9SG2L)+==*-{y5(19U5(&GR(@#9q<<7NL_3M z`US|)+zMU{(?4TF+c{z<0muR3021*;CO-uKQDx<5L~Eo!{KN?~2?f&f8AX9jW@%T{ zutSpH4%_qTv5x_R%h&TR+gek1+x44_?ynd1+n~0k8@ju%5FoTdHOSl1y6D>Edl%pw z9VPuWfyspA1Mp6_M9{RNe=h)EZ2l@YWP>jXA8PbpIMrzTv^QyRyiGUAn_rU9K81BY zSiLA8Qo-5i`_;E)fy>kx5xQ;Wl|w&h^*jv5TUJEHy=0De4U%_G+^v~iX`@dM=x>Bx z;E#N`?y#Ngn{$DW`nnI1-0yJzR~67V8;Q?rv@b!wui~uFWb@Z+h%ay()O{bNZyTrg zONgYsgsH7sTMmD;j9Ob3|HKz1#3@Ke5i3q%ws_!8=o1E0adQ7hq$SQSqtL?iz$6sm z8A?RSFzQ+&(|9CF2_jRKnoG(OEhs=L3V*P6yWp53`7vmLK(K@)sRo0vZlO)+)RG-#j-=^Ik&qW`!Bt!caq{bk;z{|?6$Bxxhb+ur5x zPLKW1b$t(y7KPcQi?Bz_=tnZgOKUJja3m(({Xm**_L!+*kNI!tBaho8?NR4k3=Dt1 zO6#Oy8|i|?q5FuOCDGF3b1wWlFl8HnV9F+NtIXdsIV;Jk)1#vTob+~uC1-;R-3qrq z@h4{1`NmG)7!X1#2ZI4QL*UWJK2Ra94Tcc~cLl1Sw_fgA-->6pa1^~)E`X&=1lfB6 zXNpRcZo>sWI@Z(B$4i^5i3j9v0rr^D0+wM$@VJh1DSUbr_u~S%qKLNADg&IySLK?{ zbgQUBCM<`c{UHb(a~G4KGIPfOJc&plvvId39dY}0}NV?;UJRGb1**E$FwSE6R zpr}?wkHw$g%-GRqr+Ld&U zYeWnx1FO3CzurKmck``ky!+&k4;FVX*!tQ1V)67uCm$08y#l;kQ)YxyoUH+A(xF?5 z(LRlI_8M*#6lpV}(-#nV`+3FeZSK<^np*x&qg#q`t7nL1?VoX8(mp;HGZ0E6mUX?l z&pq1wHFL{aJSz9BhMVmU7IxT(Jv;%io5Cx1SvCgQPisSoPcPq`{O_ryf zPZl0u42uPi3vR_RZ)}fQCxWfo%b-Z>nkdC}1})>7tQC18M(R|fam&>HJ^gV_w`}Tr zLmvFjdur2hV6_p6OC43qQl%wfc@xRbg<6i=Pxs_IvGya0{7`o48GlgZaQv3zRj zIm>Zj4vmWX@IxdGnnaQ&K;n1``94o}6F{Npa87>|N<(>!k|XOzW&DuE8~-1Rbv%`& z8j*#S8X05C`}GstN}VGXDtS7fb1b|Lm43&z{RvGTm}%wLky&8L-ks zlJhE8lw&cWTHRn$rF~?i37w&2u;W^tbTS#;!8um-){1?lw%b<#l2$H0@3F3@e{?o@2Hdf@v$W-~oawH8y+G}JZ< z?*Opl7eTXfgn*?f6f)jancM-gDvX7ap)^`=-zyOEsUWzs1XHJ`6ds};#=^t@b9v-v4An(q0}fDK;AV~lke zzL@q5p%16h9RvL*0fH164+d-VF%ja?QreH>!pX`4FTrUv3-8VXyo69 zTUd!{nhBG|B;p`))cZ>Uaf0Zs7LiW^`5JC9Z1(i{IX(i*J+9XJe&+JdgP*p9D0=wg z>B&W(Jo8K(;Yk1=H{ALCRd;@1CS_}J8l}~TI>Cb%)nO@%b7{>W-&o#zA?1PELHKZR z+p>FzZ26)bnJVHuV=W7>6sF!2_awIRhI(*|KL4l8nDCL!i-3A+C(w6%KAFXEab?2z zYdd4ld+kOvcnBY0Q0^UJ$>Ce2@33eEvteiKBQ**7|-%$T@9SRSaA7wm<0g)=eL7O4Zt=rW(OX5~?+C-RC&kYL#l250q?KLj}# z4;VErdgkIx2Xe_HliErTl2z>dT>zGgQ2$WckAnb^W;&K* zKeZfb%xpYG7z~BDT>~gbFPmH+e^0bL>RTUr;qHdY55CJWR9}XIltbdkE?Si^>kG+!iib z5~vCR+M)pG+>l{uT*@*A%reeclUj0yro2XY$)NnAm!%bvlQ=Zf9=a+%TCaH{3j4tO zOZ%PB$Avqf1;!xz1LOUW7;c0%Hii{rAL|f?=S<5V#d?T1Zzb5fAoNRai?W|PoxIx* z2*)sMBeZ%CZHiFn8^!uib>#g62me4jh4llLXFx3^Woggl=10Ix7tZ4!O(^Bbc+<`X z6HXomV}nR9UHA~KFvj49(i}@8HevO`O>{_5F?9I?Lc%&S-}0{mXp)i@ANtT~?-j)1 zDqd4-)YI7(@75NNKn8qM3$KkR;oOvM&+G+77S}AhsG*(03c;vYPJfrNSk7`c%fXPQ z!IqY_rOq}x@SWOo>0|S^dl}@D>o6KmvZyL|0j<{B@QoxxfV@;zdMcY4sRS73$_P zh6#q_w!ung51)H%Z_#dN@a|txah*RtBg9AOqnI;%Ode>hfDfRq0XuNP^KqDon6(9} z_kL2k!3ic`=#X6n*B-Iinex3TqGt$~jQV!Ac|LQIT}&zGj&By@%vrYCSIkF--}_k# zDNa~QQ>P&w_>S8x*yKXn1NLp^t8^C}pL5zpCm<1p60p6)p+Ak9z4@5C;1KW2-hq>z z5&U~INM|gfsk&v2r;pm}+WahAbo@`zB5!cg(-1(p#P~C6Nz%w&>kK6 z!}@x+A@rD_C|AGqwq^k%Jv=qCkD*`JZ3Xs%wH4}qhq$%^XFx(fVSh% z0+D?zNEbq7+9>^?kNvq~M)&}ve$D^(N$~bj9?=p!`pKMhAbJCc+T#RlP4Aw&hJxOr zCOs_QPi5_M}d4KM@B!gXcWb@p$>-^-QOBX%DL%bV>?_ zlY`10=o(fLgvLqjs`OA3gHiYThF(F42fp1wAe1?GARH?$PDqn1M`uldDzA-mwtkT< zmpl1}xp@_FnBYk_l3H9Ar=0+@FSzFAN-J`UDgF1ew4MGEOgYpN$gP;cD6YuIXb~>jEGN>O!zsRzn4PK=>602vU1?h>=Z5Ar`6^8kZ`eXd;!@+k`7C|6t`PQ#D0a zHkoT!H8xgOT3r@dRbG;z?Y?KfZ%L8rsjgkWd-L8Mb$Lv4KW8{h-|@=ou)Q>z{E~|G z0kKVmA@4!MEQ#g^!UXV32Ay30&1CP5(*t@j^3@4CzlP{eIK3VbV3(7D8X?ED8cq2n zVaUffB;l4D5g(&NnPA+ZLz!slPol)(W1lOPARfq|R&=tDB3T4RCnfVZZYJUF&R1rX zmc^y@IyEyZ)jc7f#t4i7sDBJ#=SaiOF}-(W>gGcm5s*X!{Y$|dXkR2X*H{lw(}c(d z%qFk>A{~?WN?A5a%BZAu0xC^DVdgRO%FO_GNd6;J9_QE%u)kR+jqj}2&L^W_Ld6{~Lmc?kih z6I6e+3qAXJZ^)B`pZ=g{%T4-6EHN1gF7CawImHez`Bf8a)bJ2uw6bAUOK4*) zot7=x5{_oKi80`uonMxKkRk~Rb*K&2RpwW*p1sG8Eg_d-+$8RmXnab0#50_Skx(X7fMv%oR z-Ln=Fh9=oo(9AUexFt)2+lhblfU@%w;Y_78v##N~a<6-^yOFzPsx3xZN?w$RR%*$T zA3_Bb;w0&41IUxR3k`O`HhDSJyTZ(_4I)UTrU5SOEW<}vk7Y(v zw)JBuGQ@r9=ckI3dRxX(UiFE8D*c-&%r%V_1uB(d#B@@21`Kp41Equ>;BYnG({Sfe zS&TPGN@doql1O%yt+B+3Nb@ZW(vOEU()4G8P;5HZ`^_U|RZ9nqO%zd9g$&{bI#c|( zwY(iH)-I{sSAE_PZ9GT=Q??W;PKOT{HrKGI8C(J4^8|<2E zqR6PV+6m_Pic|i23zg$|#~4>}?W??sFXM-64w-!eEa94qGF1>b+LCEciwbc+PJIt+ znEUghJ@{DXPg{kiP&r#sA=+T(Yr6qdlvHE&5!|eJ;j7>$U0`Vne9AC+Y{ZpPUKP0VhSzsE-^8BF_E?Im1qN(;|_vX6uUl}CrN zg!^tqsMoRkYgyF)T<<}&qH~OzRw;~ij-?RaYothkI7>@HmswghuY8^1U(x`xJqMaFkc|G;wEcUnw|#N%7UZNa0MP>hg}a z-p9v;HJZTTAsE`A&HnRI7(>HcvTS)uK}dPnMDhmgt-f)Uk?->`u&KJ*Yg* zC7}kh)M@^!Gllm>yKFuRf(46}dat9d8hQMFQVN6}Q?XC>Pr4Z?TL=!=xgGZV29H4t zcG0?3EQbDBdixR-jkT!Rb$0AkH3!NX*8TjwIYb-z)Xn3#EML&s#L_mM#|^>;k!$sl z))sOD%1L3#gL}I}4E?zgD%g6DrXdN;Bzu!a=&N_^X6S$pQvo$K>9Pv;j@Am2EJ_V* z3ZiY(3EL2|G5K>MHI4kyq}tLtTg-5IrpXl`o~8{77qvS#jjJRNz^gyCP6BOVp(BvR z_+adi@a}=TF^l9?;~@_YaZbabx0~-4%le^cGOfZcUcq=`ph2iui=9I%zn{1U#{ph% z4AF2bHT-CQ5|{oDMp{llNu!HUr}2<}m7jcdUBBrfVc6}|;-N(=iA!%he$H&%devZD z`!$VP_S7ybzRdEqjmv7B@eWoaE77Zoi_B%U1#Wr$PFl$&oqD_P(;sp8q{Q;I$q|uZ zJ&sJ|M)F)KHdU{6*(Bc4Y%4dFt@;Dn zrVpjBq$b_zh*AG%8=s8Y122s)8vKWlMMneWh5a;Dr1ou#kujheOl!mMnGrfp+!W6RetH+s@~$cICtUkLId8EiRs5|#5n8)f0nZ_ zDD!#$sJejgKd7mB8^5E%<3z`8=YzPW8hSyR*VfN~yR`gLdWmYLjWRe5VL_IALYQ5{ zd%?yIf6y~S15no>5S?A!ZGtP5F@UWv|L4c~U!@G-HslTfi2Hb+kdR(bdU z7cBy^&OFT<;!b0`t-tnG$1Rj6j$_8(m=o&@xp9U+v&u?I+d~1fD`&5@`Z0B;mP}0~ zDAR;^$qIuTI&zY2(JYCirI2K&h6A&Q$N2O?b%9DoCpVL$4YiEfmv6?MMco0glN4HS zj8@;8)FhD@(o;6pi~dK^rg|*1$+A~N6pFs6Q{YIA?;lA`#=SR0+wtC#MlciU-8n@~ z#%_~y>dF!Mn&ok_4hf}ZcAWTC!mR9XOQNCkgrqECjHrFon1xY5d$lZ!{h1T2_ztF7 zz1&q@!^L%c45%^%aa8$hdWRE3j&)s|>6z=|Pf#$=Q}!ltAF2gLnRO=GW%NN-j?)T6 z9G#hm-pP6F;~q`Y`|d7sps8?S+DhIl_TImd$1S(gk|8av;cIdz$Tni;u=E)(^efN% zEr?1@{|QQpgFjX&K#SomM{9v5Fln`kBp;KP1b>pzNe!TBg8hLPYzW*dQS_j_AAbt( z_FDDQ4lRG_NV6&5A)uZiYrsY-b4ALUc_E8!j#t3bG-z^r^H!3aVzK9 zEy5dTN#Uk?Ez*CEj|@s&Th;u2HZ-r3{3%DE`Oqm(*2$ah+igWQH(`W!ePcFSxa>X6fptxrd-NT?Z3*Rlh zxP?!Pf;wdP7nIyM?9@N;GJag_ZEk5{W0Uh7^j`SJ4f#IgpKkzT@>Qwii;D+ObhMOQ zhYd#qU;g0BGrm+cWwR$eWzIMG925F-WD~ZycV{})4lG0YFgKiN17D>ahfb*<0R84WUhAwoEXhYjBU-wjOJ0?yCJO z=aOz&bD*!fwd^zD`r%JZd$si5gYcZY;jwyX_fcoD)=b{hSU-CDu5*FgdT9U3W)(m3 zf+?a=u={NtAU&zPPwI&VbUJI^XzapuiYw64@P$1Ra9QK3OL>btK)}`4`lY$*gaVs zO1hzyIvrZRYjCc%gIh00mXT%{^WEF&Qc|_%PdjK(0w;3xS&vKt3C?D+r{CQm;pt%T z4Ka8I=suvv%w8lea)_?-6u3eeYtwgIf~OkM(@UPoZeYr{Sx+$DPja>k?!Cg{o~+si zT_UhqXR(@V;&@DHQk+K>C&A}s24c^J9C?>RTb|Ed)9S1WJvd|(r{caM?D9@mb~t8J zTYOD;rOD)%Yey$@-IttFFmE{E91siu5+mu~821xS*PKFApxl`TI!O)}jC4EfWd}Kd z-SQQlUsX8QXnAW;@t;S^rccjha>L5+{yYjm3nTk32K?Y6Me$yRTWQZXnmPz&B^!}} zoUpdD=@6LTuXvTWNd0d{Z!c6BLHGzhA2Fr3N=4212AJOds8SB*yQwG^e`J{Tu1O9@ zJN(|wXv5NKA0@U%tcI4TA{Q5z8cA#JBQoE5JrI;+FlI2`=_mGyh7_}a1S?Us zOzlvb1;lE)`JMx&+?Q^|#;|!MsEf zE~mcN1X10X3evf1X!5Jarx|XV6g@7f=%^Eo#!`!6=$Z-05eS;_>Ya&Jlz>N|5KKkoe3T_FcN8B&(r;+9+y!X5 z&G8>pboRxbX+xkD2^bGVN8p#0@g8hPpM;A%bU?dt(TZAQY=e4yXanR@J2~0Qqz%NX zfzcO*^EepB0E@P(<4BdRbpp8s3nv4seLLkAqW|9S0B20n&UszX;gi+B#{trDLp%yj z2Yd3ozpaNTSx@kW?_@Iek0fE+H&x|Ie;xi+0pFUy5jnZHKdQmZR8`BYeyvA7<_I>- zsnMCOV84Uru#YCbgGFn3b;r0h;|nCF+d80AJEWmBKFd=M1Z&E~2Pm$H1T2K!E7E^n zMzR(g-yGGP?QMji;uo#tF5-eWyKss^2bB%yimePu;E{%*J3xddN$}{!2#@R!FUtD{ zllY1b4lNf#&`Qv2C-S`fl_1u6yHleynv)fg^eIgMVh{!!bHpS@AJc6W@V9S-NwzR5 z(4-~9EN&0&oLdaAWlaJ0;rV^XY+UKtI+ID2M3M2%0u(}R6hfEYDN_?WZTTGpgpGgq zs_=zMx0Yqh(;n;hNSW0$o$^g>UK1C(lYI7IFSwS;{??%&%hs0eh{tGezmadv#=*5U zcJq=rzHj}p2J6^YN+=Q~?ZO-KV=B~mfgOIQ-*iBTpL^6>CVyTd}Qi+ zsqBSr_Z6&A2Nhk-LBV@*m-F?zurs)F`S1uHofJpU&SOc_4x-aqK}}7Whw;S&=xcb5f&3;2CIQiUZ%jw%xIyVnJc|~gWDON3x-2a< zO{Q7|jZ*BKTg5$fbS^srMfN5s3QnQlVuGj0)ZC2HJDm!YEa$Y#WuYxo13yd1DXS;1 z0Cn65Utz6CE^QHz8FaG8x=NV0t5)2nPmLNj5+Oa0B5Gz$y=6YX8pCiyhdnji)C$H_ zTmCx0Vh;g!8t`=Q1xnC(xgUxB7b4L9xvTZn8Qk5{c!G+T53bcCgvEk!5O9lAWdyIT zfmpVnHt)mYsH=_@7va)HS1~C<+=$xAC{jikbXIW^AO)k9`D8`ezXsx z#`mm|K+*IWLeiWL!Szq=q}o^rlX0lUH}KUf{|)rTqiAKWTZSWXAAW9aRwr|>g*#u% zOQb!*{!FScGBac&lrSodjj*fa?~HJzC{9rdO-tHmHpbvDRyC>og*kFb`V8(vVs`BL z0z9fioTp4GTZ;K97PUkm>(7;bb}+0d9u?Sw!9um7wJiF@r-;%flhiU=PyBW>vtS?I zAom69?;c*QcG$v2lm_cU5d#Yj2U~?r#R2(C0CzXl`>sI-YLdY?T7uw5ok2(VaC_|cNe6R|lnM?$P z=PNeV!y>D`vJwCTva*=k0cCal^q=oC5|1UpTWhw-LXBMOvTALV)p&4`o$EwFPsi^R zNz?S&B;mAAscM;*0T}c-iXtUP38i81&WCDTOiPstRzkb6tucKk@uAT~5A`Pbk8$DX zLKtn)Cc@v7_a&`H5~;~Xmj*bFvfc?ySS^XU$D?kdBaZ0dM&er&dZ^PI;ryumq)vPK z+vs|B4F_dhr)&?wx10=MxcOR%4YiwFBX4b?;uehQ-_#hy**#*dF!}6NF_ozW3(2XP zyu>9AN?3LwFshJnX1j)a*fI$-mzrB2|15I`1wF*Oqe~?HzM^5P9K6CWQowH9w<7+U zO$=n>Qd+U-9p6v6LQ$6sv?EqChgZ7jn+uf<(ik!w0Z(pYzGY?jZYD@3SAwu1BC7>RnH<6c>aLL{p}6n~yiHl>*{3Z8^x z+^QvR5F`MRT(?-6i1_@;MT_7Gj>J5mbUiSCNVcH+TQvyL3deZhUet{}OUb(H-ip~g z%CbS-yyxAD+kObw0l0LPzUqq}d>v8{wH5k9%_D#hFXvvY3S!{)ki%HuOGN88`XeP5 z<#B%&g0xML{c{*A0L+|t<>cRp9eLa-Gvb`D!6`7p%h!AG%R}o_!6_z-)+@s&cw}r} z=vO-jgHQC?`~9x}i={W3qH|>N(u&66&F> zDH*#BHS3!)oF&x8og`tl)xkZ@doPQE%=;h_ICRl3@A&-$Ym?{Pf#R>~f&IMKK-9r5 z^O(7~+0EHaCT4-DEB_T%sIggaH2vI;_}nI(LEW_{Tzc9HURDe9G$z{?p-b(dUkt*8 z6{^;j7}%_*Qc6$jw8UUj6)1Nh%j0Ut8fmaj&Poo|Qq_0dbI=Ag&?fYG5-B*H>2+kW zsGY9)_pHmfOQ)PsQAZOdFF9vzq9GJ2t#R_rkj>Z$_MWKXL42ck&EArUQ z4n-;?%jm{aZqj6?@|hBGIBn1;{o$+@mh`N(QnDK;s{$rvW~6g2FgbOY#^>RV^J`Va z-o8i5kl;-u=4F;R%*zRd&o>jTpyql=iD5bdoxqk1{_*WGy9-%uS?UsPC1J4A0ZG&w zhqBVX2PAS@w;4#q2{YEf##dzc5lVpVtr+M+CBw4)HOC}3SnGkQf~auk(fX|-NALzE z4qc&j^;1;ldzdv@Z%Df0Uen_s8q-V{S z+N#x)m&nGF43bb~90!a4*{E(&E;HSosXo^=RW?pOTl6$mtF>Lr)>KbwUfJ?*ex0Q+ z>rkSMq_uQzqJv;v2#eq{`$9`C&T|^K^)D^ffgNS>$3oochCCbSC(n8TPVSncdz=c5h?Q8dj^-=ftUfc z?ZN-q3w^&CjDOyZ<`vlSBz*nV`wp?0za31C!--KD1N_lwEyS5-b~=F7A$cC;hBGh& zdy>kbbCRmRv(FV3;BqA>QvQIw6jITl;Pt$lskaa2kc;qBzAU-j&Wmp-ScFqNTbhWTAVSM-mGUTngHS|(Vz!s@yX`$y!uEoI0wKi5ejG>O1ZQ?a*Kn? z&?`cJg{Pe!fLe)$g4-e8>X&7c`uhFjR%u8hQY;mae%8k~aWikoPEiD9f0#ofUZZ<1 zLL~e$`Z3Kg9IADox!A^(L31l4s?ParH9O2U_s{##3dqio+MVb;h&_no92H+vfISFQ zX8V2PkZh6tObB9ocsDkxuP=WAMW3wBe*Y&Y>b5092=2%KG5X)?pa1Wv=l_d>`@h4^ zi4}|-9nGvw{uk;xQBGR6j}O61Lmeu_KV(~5ii^+SV(?$62)qz7GNDM!@2sRcKaxU{ zb$_3+f23H*@L#`t671Ax5NOVfOtvoGQw(`{wzq(A^r?R14l*IBGS^z`|I-V0;aJwZ z^@9k6!un!&ac|81%azbI+@lUNihMeHlRzLx$%^?9wv7nWTJ|uoXgY&d*1Jw44W+cb z`=dw1+&%pZ@4=uewkV7tQ7vipG%sC_BT&nbyO{4HEI);eOpkBr%%5`#2Kiwxp3H@6fIUQzc`x5gm*6-53+G2Ul zYc~LPs_Ql zAT1mh_Mn)CW$|RXCM%cw1A};fcQaxo1(8;E&}1OWU& zQPh-tAPp5TNZIzs4n6kkKeI0$=Xn)ufqwl;{6T;HzZ)pc|5Xw2zfSYNh{pe+39xqf z>7f6``)d5zGy&5iWbTbY<>ldg0(Go}H#1`)6ZBdRw1f_&8#Mz4=i-{m2jFk=xn6+0 z6YQKxKQWHM^(avN)tvw$gZ!QQ@76y$S5S#Myc4dj2R6S zt2QYUuC{gd3fk86e)HXDG}x4@u_arngPv&)8u(8TBR)zkie2q{+p0^5rxODmRKz^< z-l00ELC(feRN>UPM;s6h$<*JkTz*G=;a|EF2BJAid}6cbK58l?d^y0cH(bCLJ9;tI z=OHSHmA=vMuqAqm)3O9zYCnlq#?Z0CK|Ri~>#rdH;k|;(VFH)`IW4UpqSOETwEkNH z_5c3&{_B`JRm>D{gfYC`;lYAJ2@d{7h>z&i0b(A<^knEs5kZj%kP!1_MhsVLE~*#> znZlmE2HwM-Bb#r34Y&@}Q7XT#+IZjTsHP!hU#)7PrSLTYDl5~jn%~{7o42n%53g;y zz-#7-dc+9RmI4~j(v<%5H?#S54UoK8l>_DEryqA+cVcg;`c<#sP| z7HsRIR`Kk@qXb(Tahh|xahms|>^DN&500&2pGOWom^X@dy>X#$`7rSY1Uc}Ah~mCy z?YV;bk?va*9|9CV3s9aDf{LAlZX!T7a(C5A-`HWNEnN9?8Yb;Gg($BeFd|D6jBLcy zq6}geGSVkqH|ju-SV`t;0jTHF*Y$BS6_Z5E&;jieRo0Tab_A3LYjDBJ?N;qX$iyD>8YRTp1q@PipVTr2*+;#Tmf#Khb_i4EUr_>6ufi zP3&?@uL|R9vHO^0p=|Zb_SEeV;+zg#fpHR-C1!))ab@mmijUwMTRBivCSkgbp|~7e^Lv? z6@1q|M`7JYqdv!)^o!Jslco-nRawT2`DJ{K)#%JPdOC*KXl!@9?m88xX_wT{fRF{L zO-Usp#2W|Wis6VxIJHT0ZsD|hPtklze8kry;jS3VL12^D9>ev-PBFp)U0B*%IK-Lt zIWOmA5{uYMSO0M;qZAm+A*H+fI=+X8d_!F#7ECsLbO=D&5nAkAI;>_$_=;Y*^?Teq z>Tio0<(#IFcG0^|b6r$r=z*|~KQNjRPV=?WU9d0}!(eEwe#<||V^)}s&}OC%s~y~q z@dON4_}^e#!{CdAka~vv*5^reQt(Xkk4A z`Ljeyokx1;x>)G^lVLrHc!zH|)?0ltF<;QOZ$s&YYq4JNcyGMut+*q@`=dI+D`-@5 z&JvELcOq`R{34w!b7vFJ4!Q9nMg%+987|+A(>$7wb;QZrbcU!|vzfMP>Q~%{It=g= zr)z&a&w>xC!Q_U7DU$oWPzq@yqNZDHu0O!-**59o!L~sq{*EMRvceE{c2EAI5V)bj zjl4j zG)E;73DnfJ ze`xxZ`6dg11VYz`xGAjR2SK^*oZResf$bzItW%LxE`i8GrNM_4sAQOJZgE{CIIRBRTC4=QS#L}bruS2{8>(=xV;QRh?_vgPt!tY1$ zPaLQV!!cSQBo>$)pRoT+q56cS@X3Ezxxd4i5TZWHfnx@wFauIALvoRibAx%dMXH-i zcyGp@Jh|TPZ%?L&^Ler1+2cV`C_|)tSQsiZs`+&j29cI#iu96$%9$H1R$zMr?Ulc{Le&eWqhHb)z5qe`iNAud~l$HYfhjQyMxnkLiRUiTvTTeD{S7e!h>sw z+58KEBy`XQuKZ@3AyU`_9M~}gRj+C*+5DuOj||2Zk)_pQ8A;~kc>~gr*<|5}LZB+3 zl>+N5?+>MJ7ptJ-YwIYv0^0m$x4}iWlkKC9B-=sjU$q9=DvkZLrOa_X3n`Hu8UJ=9BGTX5y^(ra}yRCXgeA*qDWRiPA`q8$Rv)!@=G?nTB<2b>n_l2TXu z7r;ZP`yX5U2JfgOk3>>7K0_Iv%e0IsH25mF^r$#PU$NT0`m%Tt*+Q|VzK19iAH6cZ z{RTCUr{zPpr_&P15~b4;u>@Cn|D%&81yAZc{-7_kkp8<)O7cJ7d;V7+{c-LoE<1fy zGcnpQxyR`a4o%!x~HfF-27V|84+~M@=ty`{}Og}oX zYRK{7VZ}v8{BB2ww_L+ZTo5gIjZgtiuZrPeIpMd(-J27p_RLM>FG2x?-feSNIYZCM zXdAE_YEMpI5zk@}+TC^_xb66RAM~E*+uw4p!3-ar_}@Fj(S~pPzr6jk!EP8k00H0R z{@z!^v>z{IZa%_W-)hF+g#F!PH#T)o*Y=0s2(1~PWM7g&j96b9{omv-OCtMn7M%ii z(wEwx)6}7O3b}dISgf3LURuWX&9kWc5;fGbRs&C1qa_{f;dtkNnF?*aG?-=++~a50 zElAVfA`Qc$wWiMD-YbRqWz$5ayGoo&n7!$8XVm7MgY8yK!!U2RinNp&u&%A_l;@P0 zmKM;Y)u=NY_iq}TwT{xItArv|A87i+NcT7=6*-LMltbMH81^Y>C>FHDo2k{*@f17e zFSrJqa86m?saImPApG-3c$PqODv;T=TA7ESl-Do}_l; z6y&|^=@VyNBVH@DmRvXpQWZmbb8l2kUiZ0b2{T(Y#9qBVz~ zI@0VrAhiT-*Tk)GPwTt3$|ywkR0(mcT3JV~=|JQ| zU?iQ7g48b%b2C|aI56R7@>HI-1>(p<}kB;Jg zsf?0rkwULD)tr)_VD(NWFAO6!h@pP%2&Y`q+o`MK8XNakP~j=8-Cs!5Nj#yKQxGF-@OvzSVE2>tFTSROv;i|F=ET={5pw7)=C`bro3sX zGA>DNgDR8Inv}11`eCc6as}SZEaEV$oJ5b^LxB3Frq?a7jo^)}Sj1aZyJcJ|;4Wdk9BSXaZYxE-U zxbU-{I8^k90}Nb02Yg}RAwx01(H)z#wo2``P-pvN1`&NYr-B6DPGgOCqozQmhdR7oFF4ERY*;6-`I5jA@^wj?UW57`z3pVvgT=OqFD2 zD7n`O2$%Hn>MnKNIf~eubVYXNx!l-Fy-AVh%8dO{$wrq8~88D)I(zXz&!nCl3FO^F{ZD zY&BF>03|u{F^)0Pf%=iD_G}B?ks#F2KZ#f_9VRr%L^jjlagt5lDX@{s{Z>^mk+%L3 zCSdfv6iv?&ensIL-uT|Qk<?=oUdQ&E>ITUFJ10 zDm=PZkR!3yIx;(a4OTcvg#Qqx>-ssvEsMu=Z_6K)Mw1)NS9Wsq=cOFcvfuOGU_d;Q zgin~KQ`@mGILm>Zn2A{f_j+yI6S+SFFo7XxarnrDXc%8ME}r5PAxz}b`YK~x$PO`w zt%6Lb3tFrv+YQ)D!|LD_^NwBH0R)Lh`;=pw5QoAKMi$z zy!4zL{!aCCh(Rj^;>EV#z-kc5N|<@ux9D_#8gVh+kb64@jLT1iOB5w@D9ROx^7f}} zXJFDRqD^t-irl(Ir$6&6ae5LuwFTO8IkQ^HI@^x;^!L~Rh}e~>)sU3|*>id^u#}nNNfkWC;ewQgwRVHlQu72fa9rD7@6bErumA$d-rTE-pNh zB!_zhS&m2fc}^vl*z>4D4L^n*;zi3)^V5S@3Kn$jKwZK2pDbo#?_lnB3BleUKmE^@ zHvxWt>&CvELKAW|8^=mw({peiZ6P-XH7+HDADWlHXY9@DSq~@M^6Vry^ZXAE504to zVUiIPm!`5~P4&SfFMd7|0CY$)Bdn*70D_GSwas${Eo(?B9HtIP<@GFwlT8Gs(Xf)P z=XBdbZe4A=Re-Cb&AZU5HF?%h)mYX53{q%+Hd;PQAx$u|0rt(+SpKVT6jx@CMuK%~ z14kSl?EQjINLGNV;8;_$*tT9vQ;?d$l)-Y@{K4p@B?bq>Bt)vZ^+C0!p|{I{J`*3i zH}g$bxX2?I6&M|!ir`Xr&;~iuJ`b3ifdWqs0(%64=#97L0Gf4kMQS2C+aF9RNXf8V z4biciQozj%fgR?JULYEz`i{OO9cGP&Ad4N4Mc@!cArPUWbE47*uRoAnTPc*tKvuHFch-TYKBe?4FqPHDTCyG4VwZR+!Zkr?1UN0K-08KEr@+1Cs7 z9m&KE2K{j&YHetw$fnKr7K9W1IYFxpr-uQNHL!J^%8WlRF)Jrqf?KbmG#Cl7C`bMdT%2Jka!4?0rV4jXi3Rq>?++6@UYQZWY zie%Y@9cPdZO4c1J99hB@KorGRA zaq*Mp8@f?#QS1(>mA8Hf!${5M5h>%yO#fS4*-}+ikkiFNC2Rqvcsmykr6CTV8-(PO4W`xF(Ijgx!#637^!#0oTvr2Z4dTedv8CD-Du z5Hzv;s7e2D;yIb{$wHaG3roZ@ZbReOrJ~`)5_^l*mB}w#qouAGGz{(P;J0TcuSXc$ z4=QqASu$=>J8!>R_iTC3WIpy7>DQkfezbGdy2dIVew*FXsUKkM-J=knBn|^D7*{)_ zFE?}sy7^7r5%9ai8e z+t#u2QYYs9%|`}y9FvCo`H3}mt)ANar0QOhG+Sgx;!dGSPlmyTk6rK8fqO8nH~G9t9r`p(8SwC1)n|E0z8 zpU8NS|E;BeS)~4#y2pQF_%Gb&e{bTy8Md>vrg62l8d8z8-KRt7exQ_Fw6tp9NOF!7 zr>#g*v1m$q&ePEz0TDD1ZC;R5{Zb=EvwFr`36_C(YU zP-iO23{AYVLj3r6ApFGIB0*M?s4Etdg-x$`Q>hbfoNvz*R9j&#8h*pM;FcT$;}Bok;}NG5~IHhVQxFgH28AAYFJitWKr8IFUi9r0!^VUZ5XT zDU!j^#GyMOt4qm4k{oxc@4z%xP&%4n(*ItHWr~>u(OeG~RAeG4)rjb>WW`l>JW&MI zhgaC}P$nZ)+?Qet(R>0&U~aSTRSd6IgY@mkH;C&o9NSgWXsEdP_na4FLm@j^7WS!M zsa4`IYrB(={Pn~2ZPnZy%p;)O0E3`yt#IOrvUA~M;jBRk^>njx$I8f?%%7w4z`cq? z_rPfmDXPIS9LtZ51LFf)t;=#rg_0!Zmr^0nu7|-8-A3xf)-llsRLjkA66<0gca752 zhr_!)*akw-Z}F+lZ1GVG0YL9k_M-7i7I0!eUFDDiE>@gf9-YaGh>yzL)K+x_F9*R9 z1E+F@;T)L||WKSkc})==(6-u1Mi~Rreva7 z7VCOe)@kECzwVu>sd81e!=Wo|fVqW@vs{(mA5C!-#=}lm&g4%5Q<}rlJb3y>o+&?p zG?Lv0S5uS;P^e@`uSBZLxl+G!BWiGO#dlgcr*HBCGMJvSkq}rRx%|W z|6#n9@pWKGrB_WyG~f>6P#()3q_OOn$Y3Q&d;iDN*`30@`M)HxssEPt?ypLd|7iN# z{gdC@+}J_US$0a2T7pVkT3)PN=~kLba_T_gd1^+{j*3iyj!vGAsfB^AnSn(a0@hxI zj)9J0pF)zFVtR6>fq9W}ma*wjf_9vi`c|rLYI22=MpjBzmU>@;iegMkQi=vBTp-91 z8Yv>&kKrE}?j%pTqS;qdZN9#Lk0bq`J7Z`IF#eAug#Mxi{J%8&SAh8cJVZU(1=UZ7 z@NJh{)_!(vHdrBVmcKAGAmNL(wQZPhG{|y)W@Dr8>cEmFQLHvL;0T&Z$57-qQI`S? ze%IpR&m%Q2vGO*1e?>GikJD(wl^D+HhYz4)W|1zj=3evj$6WBEAj|G{^4jg~Q|>SU za(!XV=Z}@X`q*Fp;QbP>GnH}wYI@+``s^>H^grm_SM-}wo3J@xLD@Q?)GEk8Lo^@Z zM=KMlAP)yJiOr=B|E>*#5uSXOCze!b1uFcfi|8reNIb4YhE7K~n>39s!9ccF z2Zj9Lyj$*Z3sBTU@ z$KEv(B72Kg*=ym}RO(|A;c;~7iGpEH@e1=XgwYS_KX7%jbb?Bz)ET)cqaRGP$6?V7 zi%fohDTpHvw1`Ly8AniQObsP2-2!1rSSiPUl#AeQS=H|+W*m)B)rZ>(t^cw1ok;&U z7W_W+k>>li?+E?Tm50z?{rVIJ{hy^)?BId5gdJFh5kW*HN>QA*=!tUKLbB{Jn03FG z;*t8~CEQgqOSQbl$sb~>glOp9WQ*=1V`t*xR|EY4t)k#4{hxpej0EcOv`^t5Xl+ae zRDs>IFIwgzP4&^8lr&X2NEVf;)-rEQ>4m*iF~2>YQV2=nNe|fc?s)>6ZWpm|SkU_w zud613L(<7UE=J!zn$W%U`WQVC`t>Wc+h*tt+s3kaS`;{X%W0Su8=T&3APa{05Lq~M z&{B+bj&0;@7_?%e0NPfO|?m9<{s54N1rIy5@OhC!*E zFf41jxU0}-h~v>LKPUfSWD;vz%%elmV46{V|inc94+f>=Dtrt1E9X*brzr5n9Qxkal{_a&`YAZHD zQgJ+tctr}gk(WUa@tBNnaOaHWJD@h{GOueLPRcVRa^04_gHIQhvbE^+P)yRMMXnLJ zN7c2Xp%>T3KnI`QVhltAM3KHkF0=*cX)3LfF0vQCZQkY8Nw$~exUZUIa@@5ha#gWF zCSv5_x<-~r_k4y(KERRSJEt|$Ek2N0{H>t6-r4Jgh34rQaRZ~77eNFGJ@#)J(aS$% zO>QgvY&Uf`lOn#|>0sBnV9@yyw3~W0 ztZ1(=2|<@;eiUUEyJ1!JZjE|&o%!Il;)ks|@GWKEf~WLwyl-3R+P zz8GiWYJdD=-^$ccd)EA-E6hXtyHNjyf_$k4{lBtqhPE~)=BEEqRR1@qj2)Mw#0ldsv z(VhOEW*5#k8pS{}WD?bQh=O5i33b$c_8oI&!*Dd+MHG7n7{fs+SGY#o9=;r|Mg&F? z9hh1DFM4*zxYrx*8;O~}4)M6R;-t%8j->jk(D>hX)&JR1BIZ_KoErblQAzR>5(9iF z+zZ9#$OTnT)ZvaRXv`5b)HZ|u2q;!(-dH8}5>iCcsDH*s1nl;}U*-3u86N8tAU8dZ zji%XO7<6~=bG~V;GUw?p@Zo6+TcOttO_Pw76sb}09X;^W8ggv%4JRgJu`%9nW$w$Er3Zm zO&FNq`Gy8xIF|!D_k5fIWcy)yoMr4km~$92g`!VAlnGvsc}U6Y)io^49eYFo&@G8) z4U9+ELHyRBpAu+LvzTz+Yms^JVpcie*TkgOt6I>H6224d0>=7D1g<@}@>90fXN z-2q()qkV>Q#Ws4N#>Cr_e`1d)0W;>KQkJu-edXBF4_tP%8O0anZm zSuy3s3CXoASq{3wsHqI8GZN?S7VUTcP;zfIkpou!8l}Ildcyx77lopszKzX)DY$D# zO-TUrBLr3?Fk5;@x<5j0KJDTFq(+H%$@TR51Z@sx;gFNnQ`4kxmjI){uW|-8P=1d^ zZ{_V3-Q6*y-xxQKTgT{$4~v)S0YsbVNA4vr8ckzM<@-#eFqEcUGS+(i2Sq)v0~#I` zD%#`w=IpxTD~o`25ScRvZ+RQxXmo&z)dXvQsl~e9>(J6XLs{f=_JBi*w5wfI zIJh-6xG~nBy~)uABm+Qn3ipOpS#7|$W@ zl_85P<`Kg!_w{u4dtXi(Hm44Uws$xNbf^89>GbLB1~N0)@{cw~Ca%O#W3CmUbFWIU zd3nsNos*Bt*o53ksk;!~OS<36CheCS4hbBOgHm>vB4dx@;kOk|iI=-7m2(zl1;*43 zYsG3F7!5Vs@GJ0d6P7kCmpxpwr%t)iuO8;0 zGhQ>6G!e&^{G!VjlW7Ly&p$q=?tMk;dw?T~{7{NEknske%ggUUCN$gthRjTbV)USS zjJX~YIfO`+|8Or}=6;yKx2mUdXN88}&5MjkEsa``I-bdR`}5hl z{jHMj8SxbYlE3=gkU*0f;)0AC#gax#B5zF`S7@oW5})-h2Uq`R&>C72B1f6)0>ZI; zX7c-_`jF)qLqUXw2F;{Wg@eBQ1*^vnX$`~#94S?|)i0|{a6&0wAD7<>hr@&jIF3iH zfk0Zl&jef*2=6i@r;va3pE&c0yy|PRy?=fG_n?aU|C^4^U#dyQfd6O<`|DEVzi)#7 zGV%}g!!IxX^XESuIrJ5szgGTbG`;0M@;eBvyFDD9CZDsC+mlf7;Z2nasEJ&+DtIsHzW2iI*g`#%r4$jI#KLBAPbbUOTm@3!b@vZQ;O-BxhvMHtegx{4 zEj>;uGXLiNlXM{~qa1PptF@=du@ZdK@LSnkP5tL3vmO8H+oh`$=YBXYNFbV0&60?k zAIrm1IDd%ScT4DP~1!Fa#c8;^w2Y{u0GgNB z+%Hk}x^#cKth#BD8cQ7PslU%)ciat=Zuy}y7mtaV=-IfU5d|4SVkB3!ggiMq?z^L) zpk^(WYAdM=$;n{kRHxvW-F$~OIcRRar-M`>R_v0ef*XbmW-9dX==&lh=708M*K4m! zp1mtGi0d3~Ve1juY8%I^Oh7XxGK7^OS6s$>CmIf|q!|%*WY;mk?HCt^f_K8l^=jeT z0S3e9hkGVf0QKniL3_?{m}k;SiNx6 zsY76f5C)L3iEv-!)`aGXn3#6r8HLtn$=A}7XUWZH@z=3~V1fy;G=gS~HC*n!JiG>SPwU%E`Kvp^ zmln(}_Wn!8{vGw5tIXwFbNCGi;*g87Cv9lcYd6FxIE6RHps<$0U8jF~cNeFN%}z~j z_e?!_feawmkZs)*77oj~#9wbyB8TC!QlAs*_!0J^tb+DXl-%B=!=rkcfUE9sToSTWD8a8+vPXm~TGRw4i^mDr;(dRb|r- zhmgQAYyV&n257x}KP}ulu&uY&un0bF*c`OV%bpSycNVwbnItI^?&2;%EAsrTF=?rR zB&37O*rxJ~;Y${jaR!@QdZSzr%5y7H4aBrK>N9Q;a)2i{M+_?-%%0m#tVNo@Bcb~; zcC4T>O-6)$6w9=}t4u0hpNfiQ#L$g|H7S@`yFK)jFwUGDdTD*L-2d48NhSjtyRzLtXl*kFRF_$a6>r(N2Q_XrDCwJ~?MJB_W< z6}vb!HqZFTSX0RyJuRy)O7S|XCc=2kScg3Z+adH1OPG|vFB7O^G=i(`wW%TpMrxP_ z>w&uXl1Q)SBz*-D)Iq|e?>s8Ca&`yJhrwADb;LgG0YO`_zi43r}4`p($Qok2U{BR5R%cs{eSgZQXaS?8r262?>` zl=N7ifxMKhS7=Pjx9Ivd;LhNZasD*=we-k{PY zJL5J-7 zZp^U*77+>e&Bg2zxHFj^q7YhYpJUN+4zFed=A1sxO{R36wq~Xe5w%!b72fzHAY&)R zTt#j&5{pNvVKGu6RkDFpaz!2WQ>wWdv9V6?AC}S#T^MsXE?Iw|^B0CJ>wCZkD^3v# zP&zx4@+E{{tjqHr({E-E90yu5G|r{A-;aMLlRAy)<0y82dxKr;gEs)Z*>yQFn6rFM z(xSz}JK65#Ccpos!qs z7@b#sgjF7+6>JOR4QI)wG=i{On>?_KA&^q46Sd_@W8&Hic&+uvKbB67F`*igXxx=~ zv^UPP#PXPhAC2<}?832pcQS1U@Lwn7ZB3LwP#*^^^X*`Ht!NKdCZo$Qarmt%vw4c! zAnH%%|2$<9a)6#w*=;8{X$SgkF1N?qEPr!}s{rQTe-3g?_Rf{ls7|PwKc9?kG23ty z>>lb6VxNP4Zu4pk(?nfm9nKKl_O|QK5DN!VtAl0fi0a_Cv=0$20p7$G{JV@AhIbd! zJHYQ16m6!!`}+fmR__(g^2|$5AgE}$rlF{(bseP|n_n=+Eym|^GbB~{@Luf=R6jbM z=46l;vYOQ3x@~SWAh*jJrv-Pq#GX9>7#Yz3ke(XNe7FS0V1cc^D2R4N>hbH4z=*7E z*6{12b87JTMbID`xyP;b#D9`{%0yjNa1J@heS34?3m*zmv-_-Y>H(DtkHVj`o9PDx zpVz__=zNT*L4?pga6*tMXo@5GYlE~_sg&wCSH91QYU2?4w}$3A8STqK{?Go~F}h^F zBL{f-Gt>F!xb+tU=DO9<1Z&a|62!I9AD}IsKSOa?IEmrHabOKX^;wZmqUge=h(5N` z^ruf5K9r+u3&e-SX^7(hGbNFCp8LsLL^1>lKEkM*jbIuhbB?%E=v_fclXj3`F3AIW zG4nged9~ftG2fqR2>LCX%d<7A^mo|A5}ezle=_+k@jNC7a?iVU?8#Mc{-VLUSpJ7&*+C9?NOr^_OhoB0uS61#Wh6>EFSqT?69YA<3^8luiM4LCG8 zWk8c(F<72X*uw;<7+smrSh99iKJDA5QSy&EG`jonFK;&KSD)2SzYb9U=|?M;4*Fn8 zzI&5R=5wYo;tm(#F8>|Y*RGJwtJLezgC6RSn0e1)Tio2L#+=VqLs>-`V>eR(3R*+r zl8B{#y*6%_F4x+eEKXaf;WdI<=>znXQrO^0r_Uo=6!G%Ur^-u1{0{FB-@avjgPy&Q+?xWzwZ<|5*$889G_S%E;8Mqy#Y*LHKep=y_ls( z6cu{~YV<}T4)vK=PU9nw*?J>!N}s($qj>^L*Gw7a%p-X-GZnXbM-^Z^CRE{?e{BINK$=A3(2}N$_N^df)K-Lx9Qp zMEzgMqQ{P6#@4C;udWC=cFQ)3w`1QZ>=$EX$97~V_FNIZUh{lwxlyuH{l?s?31A*;x!$o8?Tr3cIsPqknO}CCsa3fuZX8C96b4JHxcmz{%(l(yI5Zg z@GGP@Mab`u*R())rR>)>{2sYmNx%5(=<4U`D{jsX5EUn^Fgt+I#m&l;9T6gLX$G1p zCz3q(a`LAX3-l|8OLL3u4z=7`8r|=KF}0oGK08x^d3)Aa0%@p37dQ*>CcAM4gFP8S zb7sk85g)Avg<={z{cYz7DIqf(VhQzoUwW=eQ5W+#V2vIb6=QX^t@cAln`?=P2h4^2 zk3E|Sru`2Vg|di6w1s$a$U{r|{oo~v-Lk3+)Z6B`j=(SKBvlKuo-di(--hi~UP2L1 z7R3ZTTf#NWdI*H8HJZ40g+)VzT9s8*8D-YW)L2tgV&j(21$p! zANAU7@izJbp-QW%qnhnB{c3C?CnlcrDGWEJj3AR_#6u_FlcU)8I`cM15hTGq9%}KW z8tm{O@G@5hM0m?P*Zz5`fQ5;-Ez48F282=G(|HJ{Nq;|I0a^85PRYIPX|FX?>|69q zI0+`P&8VfE0m7sW`XMY*@!M(H)UoWKmHLvVB}y}YhIilY(Jt&Kj22OBUA&i~T{BI@ zPOdt&{869D%~cd-NesX-37Hopq-)l83MZCa^Ws=zW9|3Wf6pC@eW+6eHHkZiLXXWo7$-kCOKzoje$G@3{4bBJc$O!0C z0SB|xbP6mhw-88m9+|W}o0$b&r<`OVd60p*yMcW;}XgL5KrYTUq;&Oh|=-`ZF zApBJn9JyNF$!S_OsA^B_nxiUp-!3HycRQ_A2dquu?DxUHbx4yYqEI~M3DZIxEb21+ zk{VoOOD}D$q;o*QVb{h-COPS-wzlcQ3HgQOb%pcp#>9W*puDRO>E5=6U$rVtf0pmt zx@z_9C^sH3_<_F7H8UFzT7k1qeNz=^ZV;sS^z$iyMbDPIwMCUR$O$I{16iJ~u9RrY zR=8vOEZ9fMmZuNgBUdr_S?UU^Q}#2+R5{Zm^MGC%LcS0x=9b~Nl021Xxm=*Go{gV- zUN}-)lV19!ys)ndBLALh5XEsR8&%P2>d8oKhE^Wp02V}%A`4TRSso7~J&`n_gtC0F zS2&rfa8Rkzkd}N=s9Sj|EgBuBl00=$RUh&t*u8Xhc#uI{Z+My`W4KynII#h_gIs@Q z5}nn!3Ez0H@(=@}!TFPUi=Iz-W5XfrvA|Vnd>SnyU3Y0ap_q9d*N`!HuL&CBGn+hvId}ngCkz z7Z=UCHzA%A>ZU$&EugX@3)S!PRKlUdUWFBlr3T0`^iqMVr@5dP%-&N*GtH0$4cSIa z$6kO1?VP-XstuCH)|7IOYEGd^5&mAt?Nc$3dM?ytKG?zX0iQr&SWlsaR!;3Kb{iqH6HW>%OpwPq$)rcYt3Z9SkL=w;k z`zt6frEXe5@Th!2Yfzzm<{bv|{6`ZA)5)A#lhQlaNyH%DRr3g98a1FGj-;GLC z7h^4-mv8CtgqrLsgN4S$Ka&;X*Qa-{8gg}II9@&)+=E54OfPJ#2dh*Z95Rz_O8vp` z?S^CZF&PF>71*Yfeakac0Pr*SsnP#=l`s@ss?EunC8 zx{WE9r5W`N*jeI^JhU%N=`=_P88*rU0ft!wgwf zs{>LPbIU$Kgg!vRpR;{WY+Ol8hBAM#DPIToeA2v<%GJLReJ4f03DF4TZrNz%#zF5N zu_s4F&x470>w=*~%s-sC^jTd z1cPt;l9Spu#}F+8Pe1~>?9u>{H+9Io$#h~LUt4koiUZL}4N_wY6YH(V$-)_A7P8`k z-jArQ`Ies&dIXBFf_T?yj!@%gLU=v%Lqw}eb;mCpQfVIBfwE$luEx)2gzoE!Ryd!@ zkYZ|5Ji;nph?cMNYU+@kQ}CWeKPODVtak7ejbKqXe`MY-SFqW;v0|zp#K48Q@E`*n0^=Zdw$eB5ze zj@f=~x9-GtEuzLFC5jCIWfps=|P<>ML1*GK`89|funA314s!P;e)swQ(D6IByzkJiBA7TTQ1HiSaCEav@Q_$1gcO z5=|FKoy6#Wz>RnBL4EX8cG=G{p=UQ7)*d*RL>FZ!O8Uyoa2>jLz*np)sQCGCm%vaG@y(ia+(x!Ym^Bglj{m= zqHbW+G@B|>8K%jvFz_3Q++tDa48*@`WIN=`OkH+OH?1>}mBYoh_(?mOEo7xCww)2B-w1));$zj-50&L7q2~x)pgtL{Zm#WO zm6r51%?xoab44Dh`#C@Yn@V%oHKXids31jAYBs<%8RHu`;&OUjT)CN41;68`N|d7- z%vbfp!enD(s<6&EvKmqz9hPe;C6+^g8Y$mG3J4HUh_?+=z;{cx2x4wt z+nBTy14iYP7UkTwOYkkPgIg$~QWs#V`QS7d%!b{5Uu;{acc66&{&BAV?{xP?oOwV~{?`l{bJu}lT z$b5-_9t$vq8F?h~Dn>lt_}vG5=AMQ{%G`HkGFWDkC%RISXXS!71>;kN8nct1eO(40 z$@N^38fH`nF})8g+{_vV-hj^2xl$?&g5@B*={8n}>MSj}%T^g8k+T*s{5am zzWQY$&nn7RGIPY}Ex|u#SqKRl{uuMBHsgW0wT?UQUo?D@Xj&!>KDBcGW+y3R_nR}+ zMta?{>7>j!@qWJ+^3)a$;h4ygS#^rQs!lz)vQ*`6^5uEBb0q5t0U_Cll*sL{X!P4r zc<)&s-Ze!d(7&RF^gGZ>k*&Utbd|KY z2ly@69|%_hG8db}m=ZM?x>`S`2xLW`lI1h9z{tuFSKo439Zq86XuP~WvIy@q=>qJL zpSQV=$#=at(I(eO{ES2b5<|dEs|vQab{T6}!)Zkz%3ONT<)kObEZj6Tt{+GHcH^k3^e89Jp4<_p0H``bdzf8)sbM-k({*6Y77u&w{nG)XyPVCszQx>^ttw6ObZkbZT#rodHL|(+jhA5hn@-dhSz{%2%a}gFNmc-zRPG` zGtNnh0;a|{$>23WC%zk?l4YO?GjB>vQ{-(gg#kBmxmYU$%9^4HvtUZiy1WsyWD0UU za>c}-1-Xe`K0|z6s`-eB7px;w22M<@7{sVt3VPHrEpLjvd2;bgy?L_PI2xbuP%UTj z$*?uE{NcfqK^Gj_6OjH~^4loyIl{AE?Kd%xdilqfme-1R5DV9(gr>@yeS9U{C>Hy` zj9|@D65~fI6`^uqgQIJ6xKlLT%+m3tZzk!275h#MJJNER6NO=u4E7?H^-l@wE&=Su zwNh!N4C!^N=Az{o<9gw`^G68N4WtLdq>2FdtT!>f{c+O0k+k{T(5Uw2rDSNUw%M2m zqYMd`I2L^6Fy7;omJQ>(X1e5Y}{G|%be zncs)dKyUe4#qF(HbJcR>)kyZn` zmS3JL7SFh7N-Ld$U6-0a7P0QGo|3lE87aqLt&pKzYSU~CvuF^{(6nxwim^O$*6iLJ zaRP);yZo9Xnril3h`~N|?%5=EsgO=uyQk*0N%r_+?8k38uiCj7xe9m7`Qft{@Ahy^ zgPuqgImD_&Y_TG{snkT*tS?B!6I7vC;4~L}=AT(VR{`4AV91Qff7frOZDfCt>=gGp ze%rntx~7F&t&JNk>U1f6%wiQu0y07yIb4o}9++gL>_mlErh#8&{i8FVN5QKcC@F!H zytSMP*#{bPnWS8$b%0zu9&o}yMze{sja6-76}qfK4Yh)=&(@Be>>hm^9GKniwGb{A zK(i=>wB(-`a#fwKj-NHq4Hv{zXPeK&FPcC5LWf7AYzu^3K{nAYbub`uKsrzvVSc z5hdC@*eqf)WSBwdG(mWAChN2m$DWoAP;e=~%x<5VjHTiaPIR9y2*FJ-o&ne@8}4!p z_l{Gsk&p?wQiqkR*QHxaDhggB+KiEy3@1xHX10biwbI0!g)SD#YA@`qe(bNEfUhvv zF$uM=GB;ITpyaRRaw;=8M2|ZMyGGg<_{rB=ltJ4pv`!G^3Jwbj|F~F)9zLi?RQ=OY zdC4nU1rGECVUZ@kT=n$ASLbFTgK)`k4xxe*H!(N5y#Y&uTY2bT|3@JRpw>6fJ_Y?z zqdQD~tfPi2j*1VAgl!nr#0-62Zi#KlVDQZ)YbKgtI5cmW%2UPTlTD zOU2D(J=+Y32iS|9SKp_{AF(EByOYv1)$GhHcn{iw9BXOjM9noB6vo9zXNus!G z6%{+Gr{GZBMY9V~A9By^_k?eCgujn4MZJH{Fg&+7q~Xh06>{LX$z+Bi)qOPiq_|+T7f?b)P37dSCMvs1bb)aB-r7`4iF1+!?kss zy&HEWGN`VPqM}kW&`j2oTLJAcJW^|meoXR?P9mLw5P7D8S!nS16tJuGWFYtu#hq9l zHbq@c-s#(T4KV~gl=zlWPBqUqeMgHoQeJ(w9BgNb#@AY{&lYVViQ~_0HriO0?Zg zYj$T>v8@=a`=#cEdzqw)Q-Lqte?D{30%pb-+iU<@#UIVAmS>29l|Ne-XjJ2b^P!$m zvbO6T z{OZ*(I&ubLJDOMJ`F72Xts8MbE8SX|eVOedkP2^|e3Wz96*gYoHaU4GsIKM(ASUvz zQE#JI*q(R5-d;td7T_W_iaQ+aG`6Rkn5x4`VjjNz27O)jc&U~dIpkl z4NHn7rK{fkvA)@mYvUCOPCJo&<|N%CB?9}Uu^wN*fA%Tq53ujKOiFb6gc&;0J9cn# zu53Vujy}^oi3U!E)g)*u(oT>sa~mC(ws~j%h4pqHf1X_cn|Kw z>j*d7q0pN(wZSbq>A$Ikak~j{nDGf4*06%cTv#n;#fC``Yzm9WzQ#R_iD;IakM zW52$5mZ`7!Xg62+;iBe{$q#<3=THgf*!x$@JmqbbtDfM@oX8O2t@NsIdj+bs(c^XS z`BdBYc!(gEeW#*6DcTxcYe4sD+4dD2%ywAb_*x3e&?DZPk(JFN?&&V{ zlT4u?j)IYMDtxHaO88;L=tmUogujE3_I&Ol`@-_$65gNv2j0xINPgqNxOkytHTiVu zU(a%RG=*vDM`7MoI9bf~Mt{uBzO_tMmeCXZ)XFel!_rbsO(}fqU8-0J!Ha6y3;ZpH zA@8h`5+rJJRK;*Fl3Y0=r`8JWd%KfmW}?aWn$a3@wS^;n)LxC6bQ74Eq6SZJ!hg6u zg9*K3aA67$BS;f`fF}?g5oLRzBlyH)MG8iK#4R@N)mr6^e!qMzL&)Wec4r7EaWiXqrjUlx^ z5_pM{I~dZqtHuu{RlxmT+df_kQ31UFI`V(6rngcrTA2YI&ViYp@qPkMeU?cCQ)U!vDR4OM*R=Mu0CwZ*c zj4~FdvK7eXO6@_WTpVs*fOCkd>h?umi_XVQo6xwOwIVxAgE@2K>Y9m zz;;r}MCFV!I6%ebWlgZs1%t~Qp8V(^t^kh{tYmrom{o%7wGjL&*V!?-<>5<<(giqv zJ0b?BPhfjZf_$pE+qrNZkcMiDQLF-zsgb|260UQmW-{Qg(HVNyRvY4Lc1JW_X*5W7 zre+faUf1Z`r`O>k!#@BGU=(aS>f0omUJq*!bnEL>VN1el-n@OFYROp$H(oc+0|3Iu z+wwN`uJJNg0uKV(I_!1GYP1Z8-y{d6a`K50RrKtcEssIt*DaH zH^YrwNz-=lY4!Tq($l?aJymsAT}6%><=t7^H0Iwpw1Ihxecy@pLLR@=s#c%c z$vkrg%#BMhM_H&yHhLzp2+tByEf) zhh}JOuH9?xVI@Ud@{YT$wFnNKA-|A^cMACNZAzH6|6&~sOb)WvhzzTSAQ*UhYv!~DnoDP%DW9(#)Fiu1cgJ=@ z{2t+b#+WxH4qYF44^lf8yfVwe9X^m-;+J$AD4W`jcYtdPUZcm8=n4)=nNduw+%Oa+ zZO28g=LiJy9&sa3Pi_&4`Zoe}r1x9$^P2d3St0B#!bV4_PUHGJ1FwWUi`qI3GU1t1 z$;X*y`dati@xXk@C!VAG0@7v3t|0&cXY>4h42}`Kt+N5a(-+~jVU>|?C!{whSxI36 zgLvGH!juv|)6!Xy(WIfmqQVZyFkiCjJJ*mO0!Lrrer7dYnKjXg;@+Jbbu}B(!>)#g zuavC^kejC31#%TrcCdl2Wiyaf^(_{1`zrB_!e3q$}Og zM;8{3rbMQDE>L0kQ!Fv`WcQBr|yGrU97y3{=2 zR%$y=dZ|2@unoJ3J?;&QvUwfID#Hg)DCf!cxhEaMHQPcKNBAR(F?4osd7JDWbr{UkKPp@?e<@5<$MbE)sXO zoMoahcZnGu7on%|Quw9b?R9BtI+2sTp2oS%seR~qj zs>Fo|y0v+(Oj+Z zD`SMpvMz5^bA5RM3%A4E7-B+Y2y$>Y#x=^zNcf(DeGvOC_#F~*v1M133zJ%qrxrF2 zc!a4+b~Qu7H+a4ysWX0#Dyh?Z9w(_Ydaf+#mAY;g`$*FUl=O;RKZtw$)<#cekKHyF z*DR!e;S<{yOJ_cs$eD0dO8Vv_uKN7uL$`S$=v!b9U2$Dm+oB_3S+J#NEtTN?tR%ZF z4L2?6#TjA=*ByFHE!ftvrZI5|tJe}mMQ0kZnI+#w$a7_Pl_xY0hnG$h=(Uf2C8<7c zremuXMamH+A0w@yqC@SW~nnTvJOXn zR~)a_n5kq%Xa@v9oMe{PTa>&Rc;?jX2hWx_Tx;45)%sC*;36C0uz;I2ioS^s<%7U} z@0m{fq;5N1NR@jSj7ONPSEgejWynd>mJ#yiXLOF&8GK$5zPu{DcuIJ;h8i*< z_JFH1_U81SSc;7cH*ZDnTm*j@rwqOW2v1q0<>i`9hq@zx{Etk%|C+6N?{|kT!Vp|- z#@013%9UKHLH;+3_!kOL#YBnD6;fv>D!aAq;J})TBP#6NdNXH;wpNWfrcHtSMx%ro z1~cKt_KK-z4+EDjgVmo|A4D5lA?PgDHhWK$O*>Rd0``PbM7keylTE#%lJ-e1Cp-yN z9K#w^#i1}b;@}wq7(0wHdnYuU$Tub^iA*Gwv2j=%@`D2?hArF)Cg&`P&2uShrhmVt z0MUwj%%C77d?8q2wU6$74YSAkl$3A`uFt4s;(pf~HT3)die50ZXw7mi4ao2P{asD2 z6?BXI6ie&hz7nzg$T5`)!R&%(luh{YFEDu^Wp%T|r>d69`QOQQ{{>9`pVIiQ05dZa zhyR+*Ur_3i0{aA$0~aeRw6qbo$yJaXFN>kTujXfaH`)izn)9vL2}iWrpOJmSA^E$b zQ0jDbsoS!J!dN(s^{&a7-RY}rr|7@fLFf|PdmsM9gJM?7Z$W1|8mdX3`%ZWSA7E@c znHS8GHUd2WLa)D>B|M?F7bTk)+6$oUI-qGFG8L}$`8C82H6b7Z-Bdy*Vp}jk?|^kf zV)%REb8% zv1ZUEqeiRMY&EENb%+W&Xj!QsWpoal)0*F=)ckph55J-#B;u|deOM*PiPlhv1I~f; zn`q9eJ;4i$w8$ZC37VAbsg3=plvlu{ddbXLywIwEK(Qd(F}~0bo}ebYQo%j|K_l#% zQ!_X>_=fY$29ZVAzuG5TzLmrYd^U>w1^@5<8`S@-Wm*7?EFEoa{;%Xv#{d0S{96kB z&wW`WjQ=5sW~f;HBZ%_O{i&oyucj)_exz7|G|^^d3}qw~L5cMX86fjXw;8H!&H$Pg z2J??0f{H`%duR3Ik7I>;xONn#gNf84Yg{qKGMJa?| zVsn&vz$$B|5St0?m+#Wlf@<6TK&edmPQh2;-{&fOW!GP73#BQHG$@4;HVDeVF-Itb zW(Zc%-qP8Mv&7jJ{}QLI6lUkklxfMwa?nD0V;rr`2Q*m%iK^QRwHjw3TY$d7PU z1?)%g#5AyxK`TTxi4Xci3L=In{=KokBZIxXjBGbTNpGK6uW9$qO}q!jh8)Oq@*rdNVbc*VKl9J0c4_N_Fzu#smi2wMlj zaO|pPX>>P9dEYtsJ za#Pm*j}u!JXaWlkn;V?%XQgcr!k7F7MKU2@GAtEkqi8Ij#>Omlow9#(TmLYO9?P4d zGvzTa+_fo;P)XK1IfI-0V8in~Wto7#%M1JxO`8mkM)s$_2`b{{bT=_7=RcjZmrLC^ z!ZwR>nHxqDs|7|N8PyCZP)RHK0HA6Pr3cyeDPVj)VeHKa-))BTEA#U_EOvQnJW=s8 z4;=Up_Tx;4Uf2zrux`%J$>|D`W?ksVzuH;_@7_vd4~V9TG~8?Z44O;l_P#E7TI$Q6 ziOf$QL6k}x%Lh!R2|oImiD;FGIZ{d{EQ*c)?Cey4dnzQ`g5QuO)2%x(drjx&OR_$2 zK9OnmI3Pp0!?pFW9&x76Jg}AIJ$sU4#ZR+DKaDK5iMmaZU4YfG|0`OH0a|UvX3f#| zBGuIo%(P+;;8P`su!1Fxrw#9`SLkW|4G)`UhovU2^qC=MhD-QpHURZzkujhJwR9`s zw9xfgX&+K+E?SPS7UbZ^Iio7VJmv6`mUN>ts;R|kDQFwYZhkpZiX-ul{@l299D*KDW6T(o_|f}>m@#=Yd>naCltRJhX3-YC2AAD}ML>c>$1Q@%LF4dV&I z`QXd9^MOO6ql{dNT1HGu>=*EVbZ~`|85qUS^Sbg0fA~Mwz5JJglYd{*|N9&EKThkw zC+iw*58LO%IBr>n?E9bZP*{Y&qT}`;Bn5g24Z$e3kctcYOi>{2gSl}LR!glHJZ`HS zLKPY|8bht?QAE&c)XK#x?yJ=*tj_@Qo=uGfD-T&I88WdGaqx}ud-exezMUU08yAmV z#8d4zm&jk32WG#mfmT)1L%3DSyE9KC7w__ohx_Z^fy6!m}vcggO^fq;yRGKW$j_ymJl4IeHY(35Z(k*w_P?BQKGiK_W0e7!JN6> z(&C?C89szc$!kKkP3`s*;2bS25~$1l|UfX+g3OKlWf*I@VN>2UKF{JycGX`&?V?he80jt)-tC%wQ9GONQP75WfD3(fat3pSBK_=}`{T?pydO1kByR_#XiSDe+ku zl8JctoGp5L8*j@iy-ZVr58_ zCTj#woVdP_a>l&t3N);HM>^_R)^Ii5W^3>jOE+H0W+IM(Re(YEj-wioqLCXv$CWZmfTG`BN~*3_TBZHf*cP*RS)eR{_kRUJ7ir_pipf=@bV9-_lZWj z!amQ<52<6%kt3j;g<~!=Hsd6Ni8oGK%T_9tDD`6z$al*M{=_cxm2>j(tViT3X3{uz zYm|??gGafkvGy6r0cp9kZL+>4n<`h;k`MD~H{dA=H@3`AlMB7$Mb*(Q=ji)AG<1t`L6BPoi+kb$TV@3e<8?6ZlH-y@Q1e8wg|$(Q?0Aow2XHry zwO*Oj(#yB{uE(1ND?79@9*0=7}L)&KiN$g9B$Se&* zi|0iWicOyvL?Y^SE3m3UxG0TE$$E2T43yYXWRd4s7_5zryh3^|l~EPGFDm zDq8uYCnVPl&CZ-<`h&j%?_36lZ`ceDg?hn4-8hl~m8mb7 zBv#C=Bc}ee(ptmJ%af;u`P^Ej60dmgih!j5&nTgc)f=@1n@~Q6KlU8|hGItkjE$7m z=tVrX^;>qsL{2$D{mjV?q+d)rL>l}gtm2IjH%Ez8+A zF-}J%BRJkgo@4UICeu!ASaO+(q#u9!D3uyjz8QIFF{PEx@FUyek4`i1_T&_+4?~ZS zP7j(e$6VNXENw9E-mS)=NM@c*bDA?y_8T(2NQb7-jc^TqQ&p9uq?sKeevsOzXlaI5F8j0vu15k8^^=8m(K1HWHD{v0kan zj%Vh+<}dTMup6h4&tDela>sv-nCVTQu^LSoh@s6J`l!5I*OVo={0?q&6$PXAu6h7wW;RLY~n&$>L(LTFXp_7<|Wq5!qKlJ zz)|!YItMDXfFtoQl;t%ruiCVxtkat(xM4;=mI<8$16naVvmbvP&A?o7V#ai{vs?GS z2Kx`UY?5&&b(Oy5pa`k}h}DUI2wC--cI$OyeG8m8=Sf<39wrwyu(=c5RU;5H*b&_Q zA>cCspujB??g>(`L$Y9pVOLqi`=zGq`9*Yrbsg(Z#5Ne#2C)~@G8n6|4^^mQm}0Ro zXBK+$h;7}Y3ERFwCA?KT@hlkIA~>1)!5jqV^t2!1WlK-tWKD@*5ToCrkgg7_wrQug zX{RM+hHbjWn(`uX)W@&T+HS&hl4{Jny;70C6jGKJC%a?AJWe5WtGlu547h)m>vuS@ z#0yc5X@Wu^8@^RASk<7L3%9{neA5Q3m{C{5ua3};HtZ`|3x{*tS2_|7wrHTP9e0CQ zqGH$$T^;#j$?ZfQUymObHv_-;k^z?AWpd_BR4+h5O1i|YjIH!}H{RiBQ87XVF3sUC zt>KlVd0(6pbk0oCX-U zh(-R8*3WCKSiqc-45)L5^IoY|y0xqXu776_zs214-z7i82;hiB0VmkzMDVBU*5cbs zNnd;Oj<2_(jC^y{q5R63#YHZfSGIzm+UiArEnMVe&nj0rIHo$F7Y`z{W30iA+dVJQ z%^A^ckk3hmu?+Y2Nv*AI#Z7ooARiG@T`%Sfr2=Ne0i$q!2Pw2+_DSli#Jx})w=yVl4% z(;1ye6St{A=L_x7S=n2BvZ#7}Rasl-4SEb&ecJBOQ=@k4J1quL2Y$SjuyiEr;v<{( zJq#2Ufe`W>vYze=eWO!T`rkMUP%PBd(Fw&Q1413J@jSht4f4qiN9MVil{Ce zsIBDGJ=l-q@?&u1s-P#%2h;PCJ8JK-$QJN>b$;87uLjNJ%+1=~JP11fkz=z9=b!C- zYMTD+S9x1aR<{+$a(zNsazgBNO4Zm9Nw8^29h^D}S*;dg`06$4?@|M6Z75s30aByS zi6Hp}fth+-{^H*f^zEE9`K{gXfw95qsaxjupB2vtQF-NGqJRbe)hqGp?=Q(#gTdQx z$|7H2jp68Tji8p3_64tb1>j`pNDgE82jl)(?NzTck*`zk*B5qsQx~LNk=OE=ZePM$ zXPPnHbE!LOmNuXuNb1-49?29SE}{1Lq`btjx}q2(2nJMmCUI`R?{7&GY&_xrvw(c< zR1Q%_cvqQdKetabov)^erWAoMc9R zdX^lTD3TWjo_d+eNrUF)+a!qo^@~ocgUVls?{i+B7@}^GqPOlClbCKb`u#^b^nKF! zuOm)ps_hy~6p5apG(+%fs4jOgN&Pu1Crazx3Dv5&f$iI_*;Gs9hjGv_d>`_`O_KZb zg}9O~s5UNl9pApLUhFyBVAEFIsLlv$;14SZ>zi16L;#PS^*iYw>=Hd$>(|P1_FVSH z?^Gup+8p)^sSh+T*D)VIXz!2J_QipXUv6^aAkjEJ7Oq--d=;@bggT1#RqhG?iLFqF zHYqx+LA{dcj|e@RaMJGPP%)DRN1v9Wam{A=K_go%~izj0y(>e{ZKjFfjV9N_L% za#%GyQ}P$GpCq_5U#yLOhuQxWFma6ONv_W~a;J&H)}0P#I41>C0^?XZnsQt&fT&HD zdxYNhc5SH(bR^ggwWA zKKkg(3JA8%8h&Ux%rG|l!G*mr#;2c(`$9QJfh8Igj|vK?kR8{h)mW>5HuO-V$4YAB}X}t>abB>-0R`U$M z{83^*M0F`2D?t}qFDUnowbH^k;+kg_s;MCA z>2KCE=Bd-Bb_RROM1!&bihY*=jY_NH3{GtvbFf#jD%!{HS6nImY}r7#zpoE?aeG;eom;!VAW^FyOaP z;hq(#02JnIAGZZNIqL2imypQuA}-O|$7N=19fj*#vTR%0rH#t%Wds9r7DU9?R5Gr> zCTvct?dwXl?@$5P zcR*qdEi!x?D(+JS4H3~kaj*LH-GXe}-!XIQQ{C^v-7qA5GvO?){_ErxVLI{VbbT%d5V1~FzE zGvYgB(lN1zIfR=hkqU#?2BUEgkwJBV*Nk{Y2`7iSubfih1sLr+kX42VGbbkpEt=fm|@yM0Z89~yk{kBLln-KkCVNH6ybGtB*$}3*- zRXV8GT*cnkLnFUWC&JE|i9>|W19A^bbEPF9GkHzF3YwM-5wx3Q5>U{iAaodL1W=a` z3xq`X6+O}wsn1dw`WziZS6FVaC~^_hzyKjhnf&qPBTm!+=@KrCKkAJ^@)Z6U4NE9y zH!=AjEq{j4L{-LM1KttT{ZMT<=vFH{53|KXD*B6@Q<5D%E}!D)a|%rog1rp6hFMZD zVQ&MCx`~JMlNv&eez-EsoOY6}d~^d?jxV4q|L?W%_qCcfGVu_9dK~_gi@8jWQQ%(H z5-)c6`H0-;Oy{XFMJqcub|hcc1PMPUKHl;A6~5uf2Ilvk5cE@R5sJsH_3ZlB3*TWs zqLv)$H2`kgSoEgBW=r4CjdJHejvL>EoDdZGm#5BsS1Q{x^vaMgY(F2NxY4}?W4S&g z%Szoo9;2D-Nhpp@$sXuK_60<6F>{8;qW$jz0(C1~aXbJ`()2orfbZaN89;vdl8pG@y}K#?_sY}16sLcW(EYdI6c{e}50_l@!<@AN218z2Y}s|JFb#!!mB)of!4O z67qJXyoCvjJBNBYYrw9)Z2GV1KG$cTE!|(gKfZ$WgneVoiov!o|E1d*WEq|md_LIL z=jZ>N68;oi|5ps+zulJq{OIB)pA1yMC)HQo0buv(zx?~RC{WjQofAWQA9P@fr1=R= zVsQVB7J)Fix`8Cx)QFLTkd#teOG`BI2e>9vEDFOqW~*%#&qGetEoorp9Db(Tq5Lr? zZ3lDhkD%}A3Ry-IhsTrb4?eEgM^(PQAE=)mOMWiAFcrvNY5%$C^v1{qVLCDGfJ6$ZpA0KBf`L$)%ml)B){1N+xMJ$m;YG zd#<_NNfQn+mpC=;HRvQGkEnA|TZ9=_IFw!R14U9NjwRBRhJ9~y_Qriqdg5>pe$!cr zxIV#q=2q8p^7fu5qNb=VDTh)&hN+&0F*(P(Mzz3jpteq)I_q#8%Z4yv?ydXQ2J^HO zy>+MgH@*f-2Lr1Sjv$vdYe7@gy*Z^vCE)q}7yo{Xv4(=-qY<`H*6*wZFz-=^+7icl z0gWZ?vA`{^T^?HKWvtS*+0W5Kkj{d_apELK9X}d|!G9kVh2~5o9u-mT$H{AH>fkKE zGBr!LBlnORVRNaSVuG;?)nVUP4N8vA3vt@Es_iidx8tNcB?_Y3L?jbgV;?)1asEDd z7WI>c50Er4?Hl-xhpK=Y`@5J}QmNK75@3g3>|c1UB0<3Bn2SX@@%<5v7n{x7f6IWk zy{ER+41KI@F&r{q1Z`O7fPtg7b{CkrGwdj%y!p2}INILz5A*n3BF&a4xT`=wI@Mde z(Nd*6ApxU5ki9JD2RoFYf5f+-ydKe*`)NB={GckrZW`-i074VX8icCw$47xk-;Z|j zdrLP00`o^Cf|xrTzCm)lEQ?3DEX(FFdKRycDl8Wo5=+@D1eGE@ealCPO{UY-@%foE z(oPnypbKn-E`hM^$KN@g3$WM-<#fkrJV(P;2FoQ*3c!#F`6SwgXLL2{zRm=73gH8) z(b%m=SatlND7XW4C!Ga;rPjTeKbh?Q_HlAhtF6RFa&mh#xyKr{Hn!TPKhXc?EL7zx z>DZ+Lm|C_gwH5~p;032}c{HMu|`%q15gzmzDEVh%!Y?@1nI<0zt*-?9w&Cs2yRE|!_ zPlC=`GIX)f)dbAE^Hck*wPiacwE}eKJNL(tXcKSNggAKhP9n_qtpJjosZ*lJ07jm; zQ(d=3EDh`>$ElY`p_?1aTxvoSr=y>Q4eNdp?I-)zaauw-0y0>YwCv^PGYH^`db8=C|2IlkO%egM=7 zy6mrtIBECJHfM%izu%}-QJkzv&?%6u5@CsiptY-Y{a65>sJ9Jimc@X~_){WDw6>Ze zI6grmun1%qeH}}M9h5tX$NEs5o-sGkT+wPw$riKkKbFWNBC}Cnp!q{9M-fix)(4I> zDUmb8jX!weGeIJKJh_N70$*)qSolPU`*?NGnI|uyYVb4v-k2YUkQzqKBn3N93U>tM z31M9TrC26}PZUv)!OGpk$rvj;HWL&Ay>u;a!0LH~PK3+V?LLyo`K5=1S|b7Qvf4=M zS~CUZL&zpz5D9Gg2`=H3xb~vU0VkuTSfdymED)nEYf3H>L=FluWDf{GMMWZGJRwKC z6QGX8*%eWUlcxS6d4ue?tP-k~{^v@m=D-u;k}@VBJ`xrA=n;!l=hX8Q(s!_r+`;3; zyLGVl+cAC&$diZBC+EBja0sF=gM5{3qcSdnn*IU-3?G$Q75kXD&4=e|L@0~*y*-Hn zh=otoe0<*akWdF106@~Gc&&->|NZU%KZNX#&&1Q*C$fCCURJAAKow0yw0v4gisCTL z1PkxA6vM8+XQs)zHPIl|DfZW8)h)ERxbH9i(JRwAF}`^W0xR<6^)$~5&I8kn{gR9o-@Mopt0I=*tFMgX?+D{PLuN$m8*ibn5RD@w z3HSiDqq121 zc-1e?X^a(VM|~Cv)(R*V{bzGVLSKttCbJJ4R5);N9Xymo0Z;dgPIRxy&A|#6UXlOD zM%u}bA3HupbGT0j@&9WNiTOX|^Z#ihRrv)lDx!ia{ZzCC`RHynaQHYj**T(@eq`YqeHUo)EI^$8ACnr4i9mCLs)<)yN9i#f}R;M=PTJA530PvVtGc zT|K;d?B$^QfNx%)gq?#%-h35AG+^H{P>j!O?Rc#5i#P}S=p=B8J#%0CDkxV;Ol zx01@OMtnL4v@I<~^N(rL#@N^1Cx!~Qzu5Z5HAR$)8o9icdEyK}!86(S=h_bf&HtE) z^@?XC9X?KNk1udYv+Ji50=`Bou=B zpkVlqi3p}_0riVIA4X`#(g;&;HYqD#?#2?O`%fqq&9*+~07qRPVoeP*JnNTd!-f(T60Py%F6`9HxTS0AuQ8RAT>KVuU8f{`eN zmy$?@Ak-PC+>IGPWl9ndJI!JglFxcW@RX)R{l2mr_Baa&@AC5k+M-00kbH!>I7FrY z+J5v?*o<1mHH#W$-|+An-AaFRPuG?mY1dFwyc{CD``1K~_+Q;t|JVrh{|`38@*g%* zpkn=55QXG(@1dYo+Fo2792#sW$^-pa5@2u)yMPgn^xEE0xp%y7UDx*WmHN%tF!!GV zzVy}3{9lDC7Y=Q8b<9&d%-o**zTPii4ZvYF^X<4JmRa_(K#P7H3@31~h@ z&bC9vKPxe%cuNh38|Zc)u-0cjRiOM78tJScPaW`))(WQypKRnBR;Yzf)(QTMoH!XzxBK|86U5cunw4IuG zMzU0?XQ30b=ZaX7aXeKIRB^ zC0C~goqE?ZChxnv=LE)qfO(a0mcwYn!jLvkZICBf+OAy)jqv-LJ7fMEhBZjspF}bP zr{TpEm>qyE))u5(%4qDm`}=xetlQ-@)x}1G3_3AREjT z)wSDnRUnh>mUB6qXCsgPQdMfsB2*fsUh1xKhzHF2ibwzkD{ZzDY1L}kr8Ze4Dc1z= z-T!zP8hv+-bNAY1|L0NoKcn0J7yAGIyRi4)6;V(BO510e<;U!O z#ogjSHpm`C(`-Z&E7+BPyp3QhD(ZS@ z&c+LlpsJhvas)=^uQCeXnHVb{@m8J9{9i}(N1o1~TVd@t;kf#}N$w}qHf~p{&`CN= zbX%4-vOpa(sO=1pO)S-`pn zu$E9CR}?nksK4~qHgaV_Mns^ZRA!~?H`1gCtt6Kjm@i)Tv=NC&&G}7}$$OTsR?6Sm z^`c>x3|Q?WecI-!>KEgr=JtXw03valLkOER6_)YlT{)K8t8ilGA&)4na}Q7Nja_kA z;iU4_7v+!`WuA+ug#1v4i&&MwMR6vrymkc_8}4G0T^x4-$%--rzqLm=vyGtur&e*FeW&r@*(laz;X=pwzP|( zav@7fTbXh*=~^TogWpt2Sx<{w-QN&l96T%aKEBC;85p@uqD4YKRn6$bks{}!) ztj`aNtL?mecse~4?-?Q-`G=6w9jQaA3NPdxqYR_UUZ>;$W^SkD!d5nzS!e^PSAJYM zg}~8-uv3+2AyBqQ(q%|Wd0P|8!c`QY$k2qFz`WO1OO8R6Hy9mB7}+6~nBEI;XjJ=4 z(}*LK^)sqqs(k0Kn#}2y65J_BiJff=2K;Fn)_EpCj~OU((bO?2re#`J!V4ug@`@E> zHJZzH9zEK+!aqT>(}=@vZ>p;m?@bTDBpH`}tPCh~l8mvl7F6vzd$N0&X4O{hIPJxF zH#apP+*leVpoO~&QxsS(6>%>=No$J6QP*Zk-VpuUj;R;El4(UcIaz{9(~)nAOP zifHkwafdHv3Aa+{+rhUk0R=L1bY_DJa?CKz|+*e=8vcLnX!ObeU>+2YJO^;l8T%UKoF}%MC8q8BdCrj8WtV3G9`7vy5M{ePgcFBe??9i&5xO zlAcYWee<&E-XLO1r@D_uTf8vBN0uUgkP_yV^Qyp-< zR`g*we5|Jg8)&NN^BP1rRu509z~$tH4%9X1j8C@*lMXIyK%Ta7-Eg>=s-#DG<^W(G zOxtkYub!^Qx?efx=XVjIPAsPGx@VTdlqPJPDoKAfWg+|Sdr{k$$i?{L@>>fv5)N1! z+($66T9@{Fro4{MD9*n1h51;?V9V>Lmds}5&t{E-7_!PvA7uBweL=H~P|1H>BwP1J zzzN~d*LK?^JX4ZlJyX8PG$b(Z4>ev2pNkyM02KQ(!l+KSQlW9bpT#9!&Q+8dX@tcH zmwCIUHiwhln=mJpY7DL_Du;m|kqsT}!Xt@}C`vV}=>uTUBhe<9Q^NNz^|Kg2eo{&y zpAqcAmD?vJ7FKIE9FKVH`$R>72a2f~&q!V^SJX0KU>J=f?QafT4=rgt2<&95U+v4J zx1L__*I4ekT2@+DduT*{#hz)gGp5rDt$`^^3-#=Df}Gp^ug429yT0d?P|QeGeTx@u{$G=~uh#itRd$}~@6^$ieVo9fsSMxfm0Dg{T@K@pB3Llq7Em10&ui@W zLDo9EC$Oo!SEf5~=^=+$B#$k$X9YqYC9|-zzTj z6(%Z=2w7$gzLdp^^l>5mfd!bNY9)?{mjGrB(sWV(>}=IwEt~pPQ{+L#u?RZ6K6_Xn zOu4`CiE+BY8sD$}^l^xaRFI6y$L%1b*Bm03-AlUdl-bSHB|;UZDWxtINpeXj>6EtO zR-K`*ST6GTuMDnKw24+d;*GvBYcPH-QcrKEsFrSe@8NKn>DB8~hv^H@?c)M`cb>n8 zzM^@fRt#|r@PnMRor%JGev*jKk5F)f-$R)hK7SzxHV88bNE~gO2mLzxiO7j*_7>rI z8BaLP5|m)_mqB0T?t7v;C32aWT@-t zgtVQ#WQr>H$UADsMRI5$3wP);VJh66=kG~@dl#+g=8KtMo#fH)}@ z3mIV`6Xwd%2gU^by;imU+-28KmEVms=3Ei-v!BJnqN@}PVYOqTOV^n1g7P>zYWkLiE@rMlpStf{) zuB==<{OXpNB215{(vbl$&RfA8fwEh{Mlhe7Bh17W5Gtt-d}8vNNd?APgW5_^z+4>H zJ(?0vew#MYi~0(J3hOoKv}oGl*GIaH?~Bf5!5*kyCoPdIsejdjC#))LZ%N{M^%8}C z$}rS8dN*9--S%IOQ{s8u{3o*9^0N=?{~Qhfmr-EF@KgXj!1gM~|`x zrm6ExZZ^IQpl(OKy2TR6r)&fHZ_&7Au4DvWC3(i^r&6|`zT6_yyA6ctT^)S!B78Rt zO?r){ce&g#sdOJe^S$f)S&2=eXQH9)mcID9ZM*GU>DfoWfo6LZ)FgWqNg&lyf^>1c z!&~W-1^L>IM(_-%e;h_5cmaez_S5sBXQgaA@_!$|)Vax)f7N~U*Y9E(P}jR^P=B4H z??m2Yf__Iw+6=kC-bLiQ%6kksc(J8B+pTJoxvJBDC33kjlK)Z|rr*-K+;0{fiSmk4 za4AihKndS7lq0F+r>v&&Ny|h_dQBrL?Y`+*;IQab8Y4c}}ji6}XRU`C1(7{z|(U{|079q^OVZ z(_-xREfJ(Wkb#gMR)({m9@d?!ti>aohRLLcQu>=+DxSrtk}|?gA9j7NgWH$MSmJLE z`FI1<;y3N1GMr>z4u-*+4>Xh^-t73cq?5yUmVaPHLyq`A*#}c1-t`r13wjJ+`EUx# zvFwpN@5NNb$ALM(_;QQj?|d1f_~6GYH0gPwAcZ zprQC@VI1JRb(}iMa}VYnh0rIF+%Ahpxst`CfPmUKfwBzjGN61*oR(j1*T#AL5540m zMS^jMKHIQr|Kv4^kM6{HEl8T&@d%ABV{~0^XZA=(Ypj5|*@-M^a(l@3u_p3l(sa1% zZp?AF<*R!p&n7*6G^WG4=-Te~uXYi=^CF-XZb ziRVT0QE>^Ey~JNuvAzcLjn@v5FvH?NXCNpl#UYJgu0Qh2?(k5D19y{qFZGA{D0$0c zJY^Q!UgVdRYi$1gVg4sZZN8I)sg&!dFZVm6R+2(jxs)Gx-S5}*YlozC9af|2uN)ek z{SHs+KJBAbRgA)~5d>A9d$@&O%)bg8nC?*Y?T%Ij8YAha;Mc+`nUR9<=_-=M`t{n@XF<&3s^xuVjMyU3vmEY%rly{qao*G^; zPyCYHf3xs*8cFg@$8SQ~6~6u^;CHx_FMl_e{Wu$H*_QT*;eM(KGr8s<+nW0N1Ut4% ze~sjGx_`IS*Y`fEKla#=A_XH8Scp;>3-zb|_}Ff}e^h}5Co)xvFdrYI@Us9)cD=V% z!P>eRp@-S%9uOp(85Yf#S7_r7tan&0MwK#~r_sl+#1+>^3|A39Mij$RW5{bSEOpYP z&?2bR)>YN?5GwXEsV{7;CsHBM!YQew$mqBYuycQtfp=Mp28XgRloiDyG!e_^;wj6q z05;qBm;+5TqEzrpb&yKKF59$Aj@3nSp`MtDSPN$2gm`?s!c)E%JJ@h&DYuOFl#Ysa z=4(q3;w^V*lJuIqr>?Ikko> z*T<=?)p}L|df?1*P!%ugNz%&(6>bO?5hF#BMC~beCmSOxfS6p6*|wMnCQ=I~k(20Vh$>)m0`ajhdDj8VcJLEzC=I5UI=J9pYW;iqJVHP~H@k1EI zBv@j=+Wh7?^bj}Ohp&$nyoG;M3^;yVP;9COv~>y~I+r39qGEh(UL}yIAlIVS^Ou&! zcD@|F?2g*0Hm7nJM&nyLQ_9QBm!OM@53Jf(B_cw(>l$zpD-l!@z2mK!^v4M~JLj;{ z8tSxPWbSA;nYwFX>oMz7r^z)Kd#wk1ezNd!d*%2Q(FG6V3{*Oz=SnSDpNOnDoZgvs{1dv_u92;?OMO)JsjPC-1 z<6pjXt6TkJcNKcLdv&dP_t6Apf;nenSL-V(_sRV(^iZAp?V^oCbFt=cZF%8Fx(HFR z;o~s8hZt1ED1*glz)Xe=r#!K!M(@r+R~%V*(VO_k8iC9ke(tvMJp9%QCz^{&sOH`} zQ*AJo5~=2_FAF-(PyMVvQZmtO!5Y|IT+QrS_j}%yW$ZEU+`}ag!!`4-pn$SfY#kT! zFP8O3C$H>Z_&RxDQ>}(EPX%|7$~GKByv28EFNtLz#V;_1N|4LD$y>+KfNxyeCEc=z zl$uZ#wbtKj(r%Nq`ikgA5}rB7QCfd1gl$-@)fw!i-?`ahW}TXmvK1DW_AkffD)iJu zvS0MfwqQQ~c;wu;7*MfKB#R9UDsn~XS%oE$48~-SJ3QXKp%*R-Cp}(%IDeoVJ6PBY zkL(P$+2CqJEA8uwmnG>CMRDXV5iQWr4orw79bEjw1kL4iw)5#+;5aKv2l$IBr7XQ0Va=9JQk*9 zDtYZkiqZ7isiDIr`G09>t>yMhi75izs}z^$M_O$A&kGp5j6@0ixm1`t+MT8n+tbT|M@M@We~P1n60|7}EwUHY zPMzUvgjMNzIja=x(4iBfYoaWET2#HJULt6R(e(SenfK#dNaHXJCRHA&1?AuOKR!;z z>j+HJzmv|jUF&cKoPs$Nws%)kXie~4w&U%EW0);pu(Xvo`$Sno$cTF>xncJQ*$HI} zT_9)t1RP%m;eIi31>o3foYyXoPUqIUojD|zVMdrLi!g+pa65$h&ttmQ){3UDE8s)N zvZ~bI_qWQD2(0l+jEqFH12n^b94B%v4iU*kOwau|89LsN8m=3YpSAPS&OCq`I^Tf) zMG|d9;L6k1Jl(-2fU8=yMmq+WFydJ)bpkk23CK9<%F2Ges40r>btm2HSZ$;Dt}c$p zrQlTgXo1qKbLK8@K`Grq6O%l5I_Q$AU~{KA5N@mmG%m0MtHJ2H#OkJM9Ovn5*%8AK zoaID)(^2gsnToB$ZM8b0C#TSni#ruBxZJIc2idYCOZ z8-|V5f7v!&Jv{4Ou<|B)WlYoRYpCCOwKNzV#g{3`a*wE37XRiv zGE(NV9k){MHY$fxE+pD~^qnGpw+ExMMBlr^3BXuJk1k5rp7kEoTJVr0Y0;_*4;st3 zmCNLJ?r+r0oX40evR#Om+kl3jNal7wq)J+qXs|jbnIJ{0Veu&56rJxRQBp*%&aMpx z|KktgCHe~!^lyc4a+s&7JEN3>N)5oS4>x#cr*2$bb=&lk!k!mNE}+M zyr8azUNZfTAl+k7)g;UFIqdSS)vojaEPr0jm4#UR1``A7;yb4xM`7(YQAsVRoR((5 zu?5{w?w4nXeT`E?i{gf4Uw}sWcoUrU`oK+l@OupMnTT_x&VUd6t7{z0G66lEMC%mQ zDG5UsY}&TYzC0PDYMj+Jn^UrL604J_y_!Ozo&<=3JZjkK3x(*lp(f?)aM5O2rw@jh z1R(BinOR2F0&oKQSM6R%5l2$2X=l!N2mhFxU^v#hB^`|+M&&O}mgS$is^P&(_&QSk zt$5IF=^Ac1Ub!|Jhvs7Kd@rmkX7 zCG1?Z3r6b*n$~i9J3H{Q`r`Pw#Z|^^X;Hq+vb5R)I!g9ca{>XaZS^sl)W?b>*lvu( zl@sK&`iN;1w6dUfGWGJqtXa4AXM1{;QBZAOt(_$mj>}RII)GxY8;7TEoYUCHF81OxUfY#yshT`KlL``4Fys1ovU zs)*Gy^!msQ`f1wJ#)sKXTFjs3Wdh|jWpA1^>PMP~)!8QHUeb^1pmcnwjD@ew8|f?F zPD?_{*vUAB5ZdKJ@O3JAH~|W?ONGR;dg#Ot7lVVT<02ZRM$$>8d4oc_YbTAO2nz_I zx^K@lP>it1jGE;t@TBPJ4!lcB14~fSQ7Q#UFdg06mV4+{jYZ>&STKil06!e-vRsld zfmtQUvOs!3D2~jvH)lK$L%=VCz7zMRZZXfQ^Y3#xv}l1`VsjBixfE2_lVJrNyXH}< zRd^ACvNErBQQMwrmAYk6S+S;7J5Q#*nZo9xo`}wwoYlW|+6rSj0A0hGqg7Z@v^udeeUnOCIaAV(l3`QjRA#13Xj!th)!%T9 zbFicV>yCM)r1Ej4rSf5=rgKrBss8wh*ywwSRqp*P?xNUZa z?OPQ94eLo+aXlR%oo7qQdI=ljI^POV%rl|Xqj<4i?V2x|T{hi(sFJ;8kKN+D2&FYw zO|dsxK>{Qvn{HZk-~8lb$f{u=l5d9Xpet^l?T=U#J1lbH?iR*s$SLEN)~$Ry*U`5D zU@VG`#z{6h-$GowlQW8m z!#Zi{*0R?xs!npMS6IuKYFY6+l4cih5aGS$91qbqDe796|B?Qb(_Q%|Q`(nppq!Jg zy9G@KY0HGBCJ{}#Sb|S(SKKlw&!7iHv@a>Olx@&ANp1Z?0GwpVCckyH52(0moil7& zmUWyFCx;%;^J#AxmwVC!2*cXB6zLlVy&TEHmsazEn`_T&j3g`P@?aiYTfe+tBlw^0BfgTX{zN9K6~y?&52* zsK?=q{IR}BPw{~6@xR781-$~Ek2uX^`(zK@F2iz8`p0CC4V4>>bKS@6qHT3TjdPLe zvD!t6@=+B+?Q_(}vLXTHoQ!i==}+Cy0hEa$7-{daZkDB$WceO4SoxTA6 z1kg8sT^K~V$EvrKqHg6JZKEu%4W*rm?&P;$pRFrmn<12=lS?Zo{EPC*Z!PO%Mt7)= zl2Wp|(BMR22~o-GLn_~zpC}nJ85BIP(>boFG4#ZbYe$7SMNg&7hZ288deY9-rP&*R zyvsipgeH)JMX?&~lXT@v8Ei`_z4=>d?Ur@6S2tR=EG@B{;EIaV$E~r0JvLbQf-P|# z_LZaX7rCq2O)#F zUB*!;V+knW7U&hH%!sN6l3Pqou=wdn69~?KkWR4FOIc&_FWob%t>GfjyH{~31JZvs zz-1&R#T5(#(0LXrt!LBzbYb0gb6d;Nm2u?Kak;G*SbZ={0P>(_JLec{a7U(s_{h0?@V4_GS zs5pMFw~_%xBTeB{ap?*Y2?tUKoOymjLRaG&dfCIZ4E}v!62~Hy6`N#=Wa1RBOYhX& zG{P>BQpYhpXPLKwc8DHR+c3dw%hZ(&iyN5J)ZjPZvV4`p1$1IFw??#$HX9mJw()YV zT6Ro{a~Lx2VT&Dm@@6a#-yazp97^4s=-ueyM|6>gAjPj=`VTsUQEEH|v^bxaHD*w% ztW)7X%OLcxehNg-{}XPBnUKq^&$T!9pdJ**A$uJn@TwjL{oxDbCY!UxahAH=50~o7 zs+uJL{}+ko-$TU}_L3!SV7GB4&A#vX8NkH(M~SXr8RGY4>~AYiywR~LC`Q}dTrZn| zOV1I16u2&fnrZQVSQ=4l32KhSju2Cd>rcDiob}&<9YKP|87N_Lf1ZSm-Gw!K!5&b5 zBF5lTGM;~|%U1LylvO03to|elkR(mI0hsBoE}Y*1&k6oba-j)imfp)Idg{+BJlJJd zbNq-?4^-XO2AE{$Cz~8h1pM8NjA6Gx4)Zb( zvRG9C=jt1%NeW2Hirv%Y`b8%QrnG5VDjA^^A+e3?fbD*`!WN%WDx6%6ncYa8 zCC0jGnv$}F92YUK?efQ%vw2j`-1W3!|8dZLswhm!g3p_iK}VvzN)D$>1k z8)YVwoRVi&k~s`=-Vz49C8=pLkhwR9y;9Mq4%Vot5SPq^%1*9?jcvG5n+Wxf_@KI= zt@y4SxJc9z(_BkOL2>(k(Y=HOw4<-{id;8Ys)z z_b)*q$nCC>Lx0x%bUp&WNNko@EPxVJl2i}SuSc;6p7~ot;}d0aBT$i7>1sC?buS9M zvei+&C=HAeNTw4!&zUF>q@kqkJJLB@q0H?4`*u3C7hnE1JMpVUc0uKKnXQ-C9G)c2 zc-vwwHr|$TQRNuMlyhDNCl~Ql!r^}rmg6}%35u_Fm^*?JU{!9vL@#GY6?Gdb@DU1{ zx>8bRFD6433#WcH#$}-n*DcX!4Fd=ons0oADiGCb zfzCDbmZS-{9LicDzcCiNxVN)vlb`@>=Jbj*LnH^Z0JquS^0Jj>e*j$^CsJO?SxZt) zsLC0K+p^Sk9Mq9ArU%0cQEJY1+b)Euylr@qAGWZ38=i;#kr#@vXQ1o``5Om zI+PtCai?*3YVvSmuc@kigBmosOnjl`-l(br8dRlipYTRY3p-2}({)kSc{tew40VvUwZWkG7wSp#$T>R%Ls z_<02Xyv!RBs`*`@4Yu_LO1riF>&h&pb^dCa@Cs_g2uog)P{m-FXuaJu%Pm45)21R& zJ05&lspM481y)qsRS8_;KHaQk9$>w0qRzcETTD^~P=3z8fB4>{XwlI!0Xta~C7pJ# zWx=fzk91l`5jTlVYO&f~zWoH)%{o=x_Ao`Lt+27D8Rssz zFRknI{z+zBE>y?0S=V31n;n}{Ov|gwoa^r56CR=zf`z9(il0^=x~gNZ6VUp zRaE9|Q?)P1T<&1_xkV9+b20?C(k7jtgj*gFto@9yI{Vk3H-1TZL!pL0>mlF?O=I?H zR43B6Bu3Cmm^Q@0s#U3E0Nz_3gt$}R>*ft@iwQ4n{n3%;#lT<`Q0&pXmzB)urOg;e zi+RKg&;Ie87kqh?Y3C`#*G^V{rlX+VjDg~ACpE|Qww~;sDP3M@py{A3cR=_=SQfYJ z=n>Q0ZAV9B)HUaXS!q(kptK*Mndz85LJ8dRn;&?pX&3&sOa!AL1ro0zOD1IHt7RqRJ0kY|2L@CpMw5{4+A7BhJf5vwN63bam`!D~w;d%*tNSVQ zG5b^W%;!1bnrR-D&pb^M#K;?+u&ggBtM9XPDOE9Cb^K$m+<3U94!SAiU$u!w(!mDH zm`@1m=3r4)XJeN|t2j1OVemHb;<7MoGc~STj>i35dZp4x-}{mcgNB9&aQ@?^l+T`H z^;R~A)i)!6DR^$2rV@ zIPsV`YZnnT8l6;799`!?&8KW?U3b0UWsU;;_>kQAh=ToU2HU=Ypj#lHuyVM73Gy$;e z_X9uvcBe833vPHFzi|76)~p?{BFGHI2e4G!UWRpq#T+v0bezMh|OfM*IUaY9gB z11N8}$wEbyc2!Z^_)<+>L3I_BAN#_O4Ftm_9DJzd!g>{GlhHL(peYNn$~1^AJ_~ zf0PCgE5Jhv!^`~DN=10YSrP6Z4KUG(vbM+Byz3wy?7X*;E_Y8_OIiuLiuvo@EK182;H z@Zl0MW*D@%62H49RUVfz(m0zw&5pBs*>J-WdO=r;EiNeb|93+323^4b3&x zmKVx_N2;s3nx#xNp}g`lzAB_Rji?1ZE_!yJ7{tdlRPwO9SefGhiV(C&J4t8s_MqQE z_k8u4@N#dv_+2$6WEkZ70e)^SdL64_iP}PJY>QJty}3mNvkC7()Y{~%gFI;2yt|2a z=hG{ou-P17w+2{+*!gX1=Owlyz~Z#0*xH25i(_>|=hKaoatOujldM6J&ZPHTKN*o5O`tpK-z3f-;qxN`+?%wjM@`3oAif1u=#mSA$}huZij93P!2na$v=K zfWn)UY;u^LQV^PPwz&G|Fz3%v83LchWeD!E$_*?I?YakN#L%cwGzhhK~=sJLYz;Nax+V%g#gEs7PH14@v{zGm5bfCoO)8&G> z9+q-Ioc8ksYPkJK=`-73f^=l(lhIiTJ?SNN z>|=v?*o5b%`10XIOLseAQ0k2C-4^@aih6Eczqja5Bk!pJV&T$ou;1r%Ho~2oncsLYxX7%_Sr1x?LmqsSAUskW)pHI%Y+*C zeU^do4iK0}VMOCb;kM?TMDVb^VKouAEaes}l0Z43%?jcbT62b{*%J+ZoiG)8wWz_gpgfnH;`_U&ky!as2$|R z8|Z$-TY?YCD&Ksy@8T1=7jT!npFO$Yo=l(u5*e+`gvccYiyseoZSucPV-Vv>fT*Id zg#WPl{lf9Bc6sv>!1?DolyJ8#+d{qc(nJ{z)m_5UL}BB!>y?Z>(arFfcpQ@EaN5`b zAhQ#cLW*6l?O?-CJ~YCStHF#lE|{F$_y9b-XkW5QxX~dJFO(dTCmo2K{e{I9vh~g= z-dpVWC}*jcub`O#`Fq}p5Y}_&>(ZDwR)4#hlLLPJA2rFr_rzss53TwY(U`IytodQS z%s}$D5g2nU%T)f@=^XZkfdvFV)|=nJ${WZ_}r zj_>o5)e2v#6%p$Ad6z)isdTQ9mU!Dk@!NzYKD!V#9I~{i+Mx0n#PWWUCr{yDq~2w= z7Uqn#=);Iyt!N33DnkU^@iE|0V(>1>(DaN1)_fuD8>@vZLc zO+7{#?GnMZE~k44IRth=raE1nvCKMiP;ug1#1{3qjmSz+oEvl`f!*^zuCRa66r@$n z>4ZKz=Zrs;QOfL%=VqfJCE>0j;#~JyI`AIzIvCYpHw%8XTkTO$0V;>3`uy-$ zf4aL6c>_o**AOb!Xg7Y9kJxL=I@B*@9`D)*DP!=w7 zy{~LzM{IVx6MjN#F=($QA4gO#l-f zD&o#h$T~1%gBoL{F#HN|wq$}2Jaf?^)xntTH9%z0?FQvI+YxUiNiCB;Q|IVc-Pjv9 zNX}{koxiH2XvOK9o^2Fdo8J5h?_!3kBT`_pvBqoAmbC?SG2ziZ>;;N@A9er0hK;(> zj4!imz+fqZ0DZj5y;+u$HTBn;Q)p*0JFUwOJRo(g0@oq+!;o3~Yy1H#kH%oa@97KEI& zL7sAM3$6vsQ|Woifwt-34APeD@)G|pL|Ays-u(7$yIIi(ht!#I!!Bqe!vIybx@Bu4 zE0f`D>98Xg)8RGTPqVc7ph{Ue0Y-p;~0bNtPXIT zz*iT65Jqz2`5^o98(b>CK`FE$C8J@>1lU;S_2)_>G6x|HSRP3pXP>@uqQ?dNRG-A6JzN|KM#-b@IV%xx_q3M*)VRGR z<19_V-dT@UG0hBqYMBS_QC~+?clc=DtCbxsNssZSU96twPwm)FSDBOBq>>j8mi}o| za}xG<2Rk!l5~P%@o}eZetYI3R;c0#T?1u1HjSF5c5L2k*)`nQ1T6L z&GCNLC?`6>o0I%33i039v-+A&kTP)fOBd# z-{;8uJF{o=0XyC2>LB0~0DCK;L&oRU2(@bz7c~<4PtJrDB|X%q!C+?mH#Nqv4o*Fk z9Shlf|F4Za8WpBgL?~f`z(3!ZCy|z0NK6$-x%u(7~mNw*?Sk8UbJA_WH z?TCvbP`3gvD9&;5&R-mRvUkv(n%zMyqbs*+uMl?e_6PWP(jQ$P1UK=#K)todXKH`M zQo7B`x4l3sK7m4nk&q=iFHzN946(cr9%Mq*l06Opu|W0m0pSvbmlFFv!cx#o`PEB+ z2e`h9{ekqkwU_2+kgsaTt?EF8FDnZWVEm)oFmX3yn96GcE5aTZ6{vgQ;5EaABghmz zfEZ=e;9(XANqWRc#+b)3@f+?v zF2d%Vz#!jl5-IVwgtN`?lMLLqp6hz@{FJ zGTpPdW;=E9Otxu>$YNB1%qFv7{bGx5e8b@8qnfqN5nde(Ha`$$a zC7wH&)?NBxtercdtX(@{J8r&cC!Vh1uwDX=d5oGmhZ7i>?;a7-UZ(p>J9+yoJED$l z_Ap&DNG&fIq1xWkgSOr1`*H{dL*`8Q40%XE_Ri@3=@TOS@8B9`tPRm$SGX?}f0HZn zl+1@djF_ZuwOa}39J!OWhh2%ps)PJr7`i3YDnY`5-Z0wECfIlpgbKRyno!6evFG(e z46C7pdn2*bT@F8`HcMj3ajD_H-~>xt7!|o*!IvIY4*FtzM<()On12MkAf9JfC-ypg zpwtBO8Ka@?tGkgO;$n8_-$z+;?&G;wlbu&uEgvp#B>i1 zQ20pSpPoRYCi?EV&aQN3F})D@`h6XHjFQ;iq8@tck;~rMZ$f+X@8n~;D(?80L4fxQ z9x%pQSNk`$W^^By`P|8F2KERu0@C@wGr)!Hn{)|s8`QlAJH#2Y#-uTGu=v4H65)Vt zamB1Y{D5CzxlKL(%YrcC=f~YM;qmcmPJ{jd1h^}f+!TLzejU|QqG+Q zwZ--KP<d>GA^$JyP1AKJ zfMj;a1k5mB0-e;jAY2isxH4aA{-adcK%C{;zmLKa!ON5rjv4s8X2c0sw3FixGa%c^ z8n`32M$p=eW-PO*^1zzvX%J0~z%;bV&ooJ>nYyk!SAhQk1FEh{UX3a_$beX(J zzkLoTIt$IvXX1ww2^uJP=0jmgH;vTOzowTS#}(wv7&J*sM$qyFa*$!k%=#_T`|m!Z zg^O0W?^etu5?6aH@}Z8dTr9>Y<+_xbz|8~M(v1v z((YKne!HOFgh6)@>pPptE8}s{m~+-er7~G)us#Gee)dMFD_s8EAlnFQ`GRB9i3?-o z7^q_ta_wV|#C+_@DCHj(r^+RMiUH*X5#4gZ`8@bA%`sDQe)5H;6JmWZn!iD0b7}|3 zsmMSM`JPU#mG?O*jrx@LRJy4tqI!)WFLTS~h3QzXy6{)ZefuZq3o5lfD9>6vMk(iP zjLT>qPd%8W<59Y?bdd%Kz=V25-QI|=j=h#=!LGP-%k2&xF^tXRw0U$zfAVYZVFq+` zv?4zhe*Z?yFv{VNn&qn~G`%Q}MMgtJI?ouJ=7;hg5@FKdgIf?I#gpwBiJ-6jt?)wH ze9rcva~n^XKw}nP{rpRxOL3AUBiDeb5~*PbPb*f{AcC}XdH^-X{#&Qm7Q-H>LvcK> zF7WOU)~rImA&9WqWRk$O#}8$~iU%doMbg5hX(fB_etmZn^wnWNWhkJJcZQ@xM_G!! z_`GZ+JEloK<41hM;7C<&lBT$rT}?T1dhQt@(p5`C3Su8aAF!jAIlif8HdbFaStxU1 zmTCdXk{}M2U@J(8(UMd&Uf(#`IJuZX-6%UIgWKm=n&pK{29zh=hZr`{#i^R-y@)@3 zE!C@QV2w&fg;jRrl(vCX=KIzB9Ajdg6CeX*`_B0@-~fb+ME4B<9co}w<%5(Sx_2md z`^kX9i1L{oQc-%XW#yXiQlXb)+L&DuZ(c9-jwo$ds3BQok_vM_sCbz6V#t+Agb}xM zV$3tNa-w!cp2xtw{TF&AtYFA!-Yt!7o_SF{F1bwsPkK8Xd8glDSPPfX+SaSmkS%$^ zIkh9_RQH@-d3hWe>S`1rquVDVjXexL})`G}J zT%I%?*Wiz$2jN>ca(G#hddgkd;X+Zi%H4&Mlj2)a`|MM!bnGbHKENo2GgNn*q~+Td zrNea$+6VD14AG$U1!*`e#-RQM%Pc~EmkLOYCqX<4+`p-cPNs`u{8n;u7n$C}zk-9& zHNw<7N8t^uib0V}VFCQY6dseNKtq#EzfpU#xf zwyt0J=PseVezSZ}Oy1xLg6dDX2h3`;ivqgsh>c!WRcgbin(Qj<9`fZ@sCTL6PBi~} zJO4Z2GVS7NvcT-sZiY9j{(3&A-GYmB{TZ*9A96mGUNvyDyi>Ne@)VkC>qkL&vq;&3 zwS#m`fH+=#ZINB9wz{MYcj6oT`j5b}9ir=#r?mjFD2>Zb1SfrIsHr@LapkOf@iw;L zyU`~q!~_3e>%><8n6OR9-x<<9Nf4HD^j<}V-Z@Wjjbo5W=O59QkhecTSeC&xP7~RC zi9k*6Oom4Xx<-(lcm3)2g`1&;vcdIUacd8Gu&8E&K~J9z+!#tlXh>h!{hx578aEI#I5Z)%(oc+4<->dncSoI~i;K&K%zC(z@fbO>Tj8Q|d9?^uyoTb^h88%sA?Lsr34xpO67G zekJ-65eV8D5BZxIMIylw_UjJOC~=c!cuZo*?KL%(y2W~KOHOY<2&EZnO$_y1GAWx# zEq-517Lb%5PIhKjUV*``(!#Cxj1K4YI~5T;AEQO_%;GNB3TXBACSZd^8P1cx46kt7 z+<`ZYbV#-2ja&1cdR{KZKX&aF?nH|X6V^$OGe{#KEb^69!B;xC2ERz&ybRK56wVd4 zC>w!TWIbs03^hd`I}f*JU`2Q?j_)NCrCs;y%y{HFc&%82_1K)sCfM@2tx$v4v7TD) z=UtS%C51v*H?+qt0~5*vKY-9%-gYac66$+N_1R&8l#N<|Gf}+}95G!AhgP=a61b~L zJ{09P`kB$on*ehF^r;eUAc8~$yfWuBWqF0uT`lY;EGi3tuHCth#?1&bzT!P3Fb>M< zHN3}hv?7%w)n($hP$Ybl+SmOyc3bhzvt{4gv#~MfdOxnN;}4RKM4vXn zY=t(r9I&QzbmwTHq|bk5nb%&Lnmc}C=JoSf@McRZByHZ`6cf946erU;W`&V}NRVcG zbE&^_cJW!pZarJ6VTppTezF1vs{JA)d6AAK)A#@Ls(wnmlRxwYb$3Kr7%T8M?~XN< zS}^4G4wg&q3t#w-R)hK*TJaS=lddQ5{_xo$WE1*%{NFy(2R1=UPw$8mXZ~hjSv@vu zqL8)}pAdCsIUJwPzn|=W0EsOai~`hlWJr<=P8o7{qX*m7bIP2d%xl~=Y}L{cDk9_a zOC0{YPjbg}JkT>V#N(y~O&BUY3VAyq^P;Ll6QAnusQB?PN0QYjqT4Q0cySOB(df(o zy$|Qe?T!Kiu}|d)-YpTyjTSMO1h!U?_Goa&hj&>`a>*uFsHT%yns{g=yq63r3rA^z z5ZMG4xaNrr=5lekQWIN~W!VWpgkv6BQrQMo&K!MF$I318D4#Z!ot^u_y0wbyQ4X1H zIYrWTU4e$Y$&OW30Zz58E4(*)?530gQrPyUycn->{s-If()>lV^8C~*hY9+K;l_hoQ8ECd1hjz3j zSx1!M=$;ulabTiDKzV?Y5;;~YxhYB>6506!p|Q!)VgS#=ah}0Z>f%A?;@?}(2Z7vU zS1GCrx18HBbn2WP4<$k8k<)`&<2#=G+^y3lot>lmjc$LE?n7K9o)mh?l+$ylbmqNP zr(mTHdi4RC^a!=IWJc3Td*7}ycx+KHk|wNSC`|xzxoEVL^7GkK zw>@E>8DSG%XFRmfBkrK_maK;=88b9q#5R+f5&6W;i%ZOhzK479OYpzqxsmr#`qI2V ze&j^{Pw`yJ|2Nk};h&Dr(A-qb)XCY>-tIs7+$g0DxeXyC{*2UBu#gDYqKD}!7@|v( zK~$)+a-k{{a;OEqM^j^rhO&dIWrSPJB5#YO5Fa5y7yzEm{M`>tOLH>`=i|(*tsQki z-=C|4PUsi}QT>CNe@8H~HQcm@Sot`C{e#k|_i$#`H%x9jHcWJ{|Dr#Xd{aT)r^9+7 zAvsD(Zh7XXz}jfuo#WhdvP2V^`qE5BE;H7kKGu z+t@ST430{Vq8Y{-*6+~19`=}Zb4Kd4CP3DrX+at_z?}1#HZ$rQCP~IRzUcxRFqu9a z;tT6E>mcoqJofsQ9b_I@$2aYg8TPdnRFFXtbk0Js5M2KJ=@@I7Cb}_T5{$#jaVnu{ zfK|kwf*9+goo19yx#q~@eu(`Vw{&BWf|khit9f2NJ(bK_AJYH^!QF#I2GgMB2d=*2 zn-i?|JES$51}rP*-~<_&K6}X}*7PW%N_XC$HA*bDu_nPw&g{?srny2fPGpt;voO+u z{!hox@&7)4<^R|*|1XDL%I=Soy|aU<@js^Pf2yG>vz+ivI-3XrU!h;Er4X=p?Q_JZ)uML2lc??V_DoE8q^#SBO^sz~q z6}iGYG6=7YuS?%uW!-^Go&ooWO@+#C>^+DqX|pk80SNHVOr{^lH3pr3RYJ3|top=# zGAHecbfuJRyE{+fp9v?GGH}>tMhA;|7uK(edX2`;$^1$E2VKg9ilh;|5qJ}!@k&&; zYW=!9{|k87(-f;)koN`t1oxKAHlokoJBAc#0IvH=152DF!dg4gr_G$VGc;DlR=cryD;Ty46K0e5f#C^kQ#Q6mA=-{>wa2Gv; z5X2+GrjJf@^#F(chKzk}v1C}j4Qdn_N&gZ~Q#m34L@CUAIm$Z~dm@ zrI5Q+5BI?1Akv9)#|@7TN6o$8ml|2rrvl6Z(-~R;@9N9apdR~ zlWfqiZHbL5l9Z+Sk>5cH{PnldZ@GugRC3ey32e70ZRRQ_N~}~)<<`ozc+X(d?I$B@w{dOlcj(J zKU{HL-B4*I3?|N}`ZC*p0;#)A=hEMAL2_qgClBi>OSoO1U6I{f7DjMlX7bT1Eiky^ z^->OTo|OmAHL=BlivQkHpl@fm#YlS0txaUMUvH|U-~)(x-Tl{?y?qW6nu=!K*qVzt zHy1aSmyv^_O~atux)evpUd750Yq-K@Igx3r?N=%jxI19jc>bX2xf~2oVP|3cj5g2p zc= z4P5=GNUQkC?XM$~12<$Bsi7}k@kKH9+3#55H}Ij`FFQ!@&Z~k|=PwXSo&GI(kX8*L z{Bsck09$cE2ohSz7d6{;eI)(r7<-rt9^7H8$2!Q^u;H(;F81!6Gil3}I5)&~mGAe} zIbT>=5Ot_xw5;R%u-~AJBiCFfOKqXR4N~UQ@ zSlNKMy!KA|#GhGd7|B-e8hjaZ?iS520sO#u%Ii*a$FI8SQ@PA4qc7Z{alqfG?l1Lb z47pnsQ)Yo1U!5L@_|lzy#iJO3I{3mX_~J|QinK9~Ty+C|SIF`Xy)q_#|JB(mz#MHc zq*!iYuv1~YkFZ|q#~-sd6#B{j6n)>-f>6B5E197Lw5{^~m-P}KRe^HIL}<_L$femk zlVlxQFpT>5_LO`2@E8+SJ%irzP);5>J1wIaars(m*~aLS?d1Hh0aoh^BwNCwqt*zX zx!edgzWM9n_v#Dg(`SbJu1+f9^uo}@izr)GpjU+sDyntEh!<5}!Ln9Jq~dx>f9CyJ z?L*psJk$>(I=?{vkq*6({--Yc|6!o~?=Jffoer=u{ZCiTQogeKFFSEUj9o&dt!$H3 z)%xOMahOX)cmVpZeBs|VLl(U`2~$`lc4qz4qVHO7l%>0%FADoxTPpNqqB^T-Z7I$O z&NE&22PZ2xKducpLn>O6NBEWtiVh7(W8kVWYXj;7Wg$7Sk|UwW5!XrBlqy!DDB)~! z_GENvjoa#N3E;#q#zwG?34W7bkp}-U?U;%!yQntMu=!1n5d0Ypr4N)7N;6V^C!3JU z+;?O#-jN!pol9J2C3LT$6ut?4zll=QqYcZsxMo7~gaaqNbchW?pnU; zk%(f*zdH;y->Gl;)_&7Q{Qbr}Z9VoyghWZ<+2D?fXFw&}Is?1zE+2Uku45JXX3W>t z&R&&Q;-Cn+QkYNNoZxNj#^lUG!D@Up<$DK8&h^lL>TiI~eQ3$3kQg8>7{McPfns_+ z#LT4s3CAIPt{llDZJq6cG)=4%CubKhz%o75&c<#WB~oa7>D0s_-2Mcg#z|_@W5DoN z&j2CJ?CY)$tiIE;Do>b zM@{ShM=Px2?qDisXlwd^j0Exy|Lqj|PpKs--`LL^Ao=L6E1sSQQzPoL?6JW_CzG=%=FR4Pm*tU)^)N9eT_T)O%`l_A-P?3lgR&l~Lb#8Nt2OneE z$yqn@e7wlm4&WouDE}|c-Z4nhMOzc@t}dgCS+;H4wrypX*=5_dZJS-T zZL7<6*H>qsJ2Q7~?6V{0%ZU7yk#9ui^0U@@*2pF?j{O?eOVNG*p&ygCpj3u#5BFAj zf}gv3{3qe7?2L#2c$%LGHATt*cI9$`aS+Dbwf1i>j_NFo;)Qc9Q*mguk9>^2zWOC} z8sKwBHRnpZ_D0S`@(Ek0O1(BtjOPBFqOdR$S}b@U$&KpqezXVV15_fjSZh=>9Q4JxnEAt>R{5b2fLFl8~hwg~I!982s0EEd8sSb?D3Gy1i^cY>7q z;jA4^ueKNn+i(`NtFZr-*$GvDGEjnDbQeCm=dDN*7rD&VMAs; zY!VP=4@yIN!Cz|X{nvHt4Dq!M@=rB1_(wIQ`1@kwf2!fX)vr1Oinu3~h!0HWH)}19r8Efmz;^}Pw1Q7U@WoNmavi5edqZ<6ifM=jemo#n4$X9M z?mI~XQxpZ0v^VA4AFy{d&Uk|Ni;YI&HNVx&6BozJ4fm-%t}TwovzP4bw|k;5!PjJP z?sl?$$+o(EVA}InCLSVvxE?BfBpxyqungnj1Vj&Yh9<1~c&M1MeI{_IRV6KyrtOF{ z!xpyNW#s0|q17;e&rJ?EUP(+;I~io_Fm!VPcbHgT8+_~aY9m!o?0%lB$1^wun7-KM#e0H7V`aDFv4wP!e=*wc_mf{XhNBpQ0iH`hkmF37| zpxd(`Ou2U$4C1cmtPczBqZ3U|)#8nmKTG#6ySzLqni)l1_y zixvESd9VpWWR?Q1rQ%@OUKAWX8&gZIuXuPW*BO364T%o0-TO0}Odl2rYxmmmC_EL+ z8fVZ^#AN~dn@J^=Q_ITM8wKU~X=cxB&<|?|Dph}zaUeqzr#Rj;KHZ5kF*C6V zF)VqoZ#G@?oW5Y`G!M_haIXEgP)O%vz6(rI67mRN!FwZx42s6Bnr*ZwFADHhoR0yGOHdZS*EQ zAm{W3%Z76HPN%VW?eHczL}w>7AcIrA2M4B;-J8t+Tok3Zv&8A;->lqGxrg(nI&kUu zhHG>D^exG$BOHr!vkwn&XGw6x>1NB{6BRbL@=Rqqs77BC8Kz)s9=>Aeucel9stqy2 zC;^D2SZabIvqfUN1@o5p(MbBj>Qs%B7%4HulvIMq6h=`l{_GzbUK+^|rJ9al*f68H z!m*QZGpk0uhni%HCN4p!0<*%&m78Q8Qt~DH;3LusZr6s=Yn_OtP5bx19bmO}G<6e$LLbc0mr`6SH4t}@` zla&siBv#(zdgxbDY`i?jI|sdi{i3|+aod*7edM;nvdbvia|5^Lwu*w5Cr^*#)d^=6 z+9O#U^?I>-kMf)yN9)gs@fJbP`uxkw%kbhLm`)Ei@6i?@CVZ!NfgOj}@8N43^{^Fm z!;9u5ZadHZEfeKj5KqkwKfnvP%kgmBGyMy0{uX|Dfsg)a=G0tWWP`DxM`ga6u+Hz8 zCTl?|eM0d9cd~tEQe$}o?KsGJ;0I*i>=G^U^%n*1;d}p*_Hfeq@~4cjKFX*ZTJ=ql z3b*EtH*T3L7D1=4*D{=;wig)c0%xSmggU-%<=N5Kskza)W0657!a<;`A;N2(p$+u`hz#Y3axq4hKLnBcP>5LT3fq)&Y<#P94A zyvm{;1jH)H=q!E~71QYP;P5Il#fd%UCiI$+MIZt&1j?`Jkniu|4hgqU+u6C^K1H1C z!WmWRHgFA%75YP4(}W?4i6+NFcsVLPl&eu9ZA5rN$cAGf&SI47PLf979JxbOK~`m! z`o@cVJcwogdpf|<$EM>&Vsl1#yV$$EifWhA)zZqNtt6n%FpFJEr-yKtZrPCRJ;K-cWy0bsh#;D56=QW*0>AHlzT>G;PRQy70AO|5_~Kx?{hpNxwTpWKUIzI;aIzh3{Dfsy6&^S`04 z{`Z3<%&cwfP2}u>W zGZk?@JGzT?-!GaZn#sElM*98nw#6{ad~+b^9_Z&DIWr%N-rw9lzS#OX!vGN>kO5nZ9t$4|P*zR3VN1b~#L}-Mp5K zDVK_?C|lub5OF^m&r;!zKEN7pl<0nLs?ipwT2AQN=d$DLz5wq0+t5=a@UgSI5(j|$ z8&V!I<^x+Q=b1^shIytI{y|~)h*lLU&wQ+QRNNjlg9^e1q55_&#>h#)Fw)4gRZk2K z5|s6D{IIU9CzbDqSN${GzvO`g7EeR-iMeikzW;y9L+Sx5zn7Y$l6Hlb(ytWyFes(k1u$E zEt9KN%059MC|r*j@$OTdZCl6qRqheTp4S`XS#ZN{!Ve z5|S=Q4av{l8OEVbNJ#y(QHBojgq@4}VMgGyctLi?Oo#lD{dIhLoU0LHG)xiKXY7|1uRfkMibktGjwjnC(PhO86&fmo1f5 z75w!A?RCSY$1~+%?1_&in0Vuv0|#D=@g7!-Ig;<=#BJ%~sPT>%-}7C1pJbxdq&jUi z>O+&brQJ03PlI&3jb!?$8l~mb;brokYlv_AwH$tXDKN*DxwntFB|VF{Dk;< z!lggvSUu-Hwc{mXIgSWV3aXQ?k`>JNR|+jQie2COsTYm^h{x0Yldb-}l}0Ma$bDLA zW^Y}&j}N35whXtAsQXn30|P1M1SJ&ug$d2+wspE=`|#F{@oo>^b~NK8EodZJnxpQ~ z!NG)BcNZV;*KHK%G5LTdh&9|ZdfO?5+)jP@Gsj@q461ixjCoJx8-hr&S?(|eVd=Rg z-;khQ{Ukc^Azq{2?P0Nrcs0bJ*{e`UU8G8v2qxtYGkRf?ye{l5vwn)UO8T@JntnPR3ws^}lN_Kg}X&qNGSj=v% z<497*nn_-i$vA)6yv9wb%%bp#Nrj_XG5Q&u#e&hVKK9l99QImBD{A;zUIm zIjm2oN}3)JaD`}2u_Lvcl*7t<2U!+C2>=AbBPO)hrwkY@MJ;}x&K`gY{l=HWS7w-D zsf55$Ky@B*G!d~?Kh*uf&GYRk?3~elncT2GgeIuBYj)JrXm|k&CuqC9H32r9rtn|{ z|77$|(9uXRNsAQ4POM;b2m`&v!UQ9Y#-ybaS%Fw-6L}|+C5`O2F3^kCYRjBzZKqMX zzjo*WT{6~@C?HqCro&n;gs-V1JFQDPGcGARGO4?y+L?D+mZUDfg7E97nUZA?f&|f3 zP7}XLs*}yV5`Pl8?-6x+_U>B}74& z@Oo42e$}z*FiCFw=8MWi9!CS)gJe3QDhh^@=<8!( z9WrjF0wZLJD0NvwnZ#rn^#=WpN6o8f2*}nYS*!zXU5)X62m6=vKHw^2NcRbn>ZNR1OEbO{vCY-75>$3MahuKXkiWF$Ik_hk#v@X zmi`Xr^@~9$kvkD744WT{)Zhq5;;Lgiw*iFu^$YRk;Hli74aR^}QA(LjMIDWg*LuHq zy+Ccl>9*9=?&O8Z=rmzduC+B-aW`H^^rYFc7?(WCKC9tIxL|_~Q6}0ojLGA`ut>|6 zti;zUzrxaSJ-R-|T4y`L$0PU1pN^<^WJf^|zK=r?&+1Eq3Y^t{q%*U^sJdEjY_h2DQf4s0` zlo7gC{ViVJoT+C)l7}5CK`B@TdaadRR2yeBlbl+>@_mk`d8^5N)yLX}(by8{@1 z~NXD#i(f=RW!=`Zu`{E79P zB^v8E;Bc+(}PLu6`yR)WsJ4ShWEHwj{Au|8Z4w1#%mMKFW>B}vlQPXDTPC& zOMdPlH}?xLj^Pp_;}0&q%fK3XJaqwnsH5L-RKsqC^2gdQ2a>d919BZ! zT1v|d5@%^JZQKD*ofLY7g+~qOmG0#Yj>h2E_w5Z}_^X*R+&iQ7yrKir(6Y_lYYsDe z<}gxZuI8&$McIMgb37`dw;Q@lavgD#RNdREg3TVPP65b#Jcv?05eMFej3`|Wi>Q7! z(W6QnXXWSYb;CI(0nztfkgx_yzf-6lNZ`KthAL>}0z&DaW{9H^k8sg7VD%NT?m#+3 zJA`8Pw&2u+rr(hRs~3{NA*%rs5kLV9z3@s^R2%LJ0Z<#jj42S<>>5iDKqr#NiIfPE z19C+KPatU!M}^H(V^DJ`bE%(ggi~!4ZRQ=)yQmo|zx+F6A^CoRpz#?2TmBLB`)qvt z_v*sQ5%~Y+5B~>f_}BLZEG=z*8W>udh*&#WsTx>1nK=Ag-z!zM)UZ@g{(Mh07EA$= z0fmAF__DHLiJS-Gvx=0N`~1)(Z%_@Ur^@7PWoH7SUH*acyeq6;E;J#qxQBRxctig4 zCA(rPRRX%zv2yi5Xfn0aOt0(x-1Bfh+S|(;dfO8nv7dem9*zS5g9u8GHz5}2rqLZ5|R)v7| z+E&V}j^zgI<21-P}1 zv9$xyfs(ce*S3jF1apj%W2cpJSXRShm_$h00i zW%@>%Ky<897OM=VupuThzjSvwY>~I(KDB4ke_Vpb8de%4M_3ePq}SrU^U!TD_uC2e zL5hwXF=TaEow~=leT_AEWnS+O3X)kz+U8jAWyLDnVQper?^yzwqhpX~Tw=#^%n|hagdY<_MteL@ zGsnZ5Zv|0RoJ|;={L7+J!Q2~*vCHNd)i;v3jVoi_RMRuLv8O>c=J5>^lQk zXtnQXOKc^r1D({VPm?~Krq6GS~Nq<3Mrd7fvs{IH#8 z<|BBf*hHq98Dum}U&9eqF4DyyEphlM3i5i$AS+F?Xu)a8iAMXU#7#vLTA%eZ+?;q( z;6?i6razDy9Jw7sJ}>Ng%lGG-c^APm;9n6bUqgNqn{JwgU~in74ukNVl|mLuL6Jt3 z_rpJeq!8nn+BKn|SS2-Q^4AD3XNju!fR=P&A0nG}@66}cBN~&EXY$=<3KIZG04M-J z0T9yG!ZM&uGk0rhN)B9&TRG9@0i$&)IXGjwM+8=sSs* zp=kOR01oH&eWq8$9OFJg-dD?_N3Jxs3FmQy%d^nKNH!+n1-&C)95}&&N6*GU?wB9{^#>?DK*yBGZ<&=Npj{dhhQ8cjroN4>N{K<(L zvKq<`9jqCkeNIuC=qwz$S#y`?Tk~^subadOw#T(uUc>H>o2_fF8?P5*+1?)yTt2jK+XL3p^LeOf%WX}a z3STG9y@F)hT=^FgjVahF(TQ#vis*fAFf_0d;S#S+a_2IX!a+E}=RI0nR3=RUeSV#C zb2nd;-UA5@4jsaRpcIi`7IRsC8YZm#L0S)K^1&O?%a#4O@~vxcg-C8q0S<*hR)64h96BWx zJXQXvMc{ZH+DsIO{XuPIH{OQ{GoXFISW%Rnk?Ae1MT*=L5|>98lclZktN!%9G*5=P zijFn|b{W(0yKPnI3No~)8U(Wz8;)wp%wm~^fIhG>O_i{nu>3!9WfSCsn<_)Gl*i!3 zbQBm&v&e|oO+Kp$X$vOx#`2_SOL#{gkz~K-GG|7ULu-mocVrHvL`69&8Sz)oUv9rR z5bq#NNBvY0aKzCIbP;IN!yCi)R8DMjr89=g*VmqyGc2`WNE%o~C4-DF4ad><#e;Yb6 zp}2=z9pP0mS#{yJuTafbJUXrSB*--mLfBOCc~1V<{Bs5}WGm)Lc!*zh7SOmj$*?F6 zBqe5;B#E!+=7vTNVc{YwV(9?Ojv)|dn;Aj(jI4Xr3C5M^Q@>q>LPrN8O=0ef*A#V% zxFb?>mgwwg3AUe*x7gbh1CbWaQe=u)Tlpvrfp?J_K;|mm z8mdy3D$Tp2+cZL@6Jg#e2s2>EGg+Bu5(}Y)j>>v?sz=qYOOK<$X#a^1xR-WiDZa1n z=3Ao|yzkMgVP?|;b)LdYIaw~=fGvKHoUkoHkD4%>py&xeo~LEmRi-HH7W~bIlqNIg za9()JX@9Hw{I(}#&$P}wX!BMe(XuPrq<;M^t#)(kRv$MLTcwq4UgnWjv=xdsmmQaF zKo@os_YMa(82bPtBKv@S$qvfcXb(kFbUZgs-?cp}8@_$zFiwmABmVb*i=O&`$>0(k z_|}V_*DvXUvRzUHKU2|Y{_y_x3Q$rfb%2mt5}WkZxkBil0KJA<)kvdJh1}&bf0W;b zY@_f!3XPY)MT-hQJ^|Rp<>Uc1Wvwzg>hjO77L-iWZ3J#u=nbK04W0=whoJbkeq6bE z4SFU7;K?ZG60LLm^zp(?33SLC6srbLUpk$6iR~b$HWY)%_ruRpgYRPeaNzUH~f9ysCYH{({_$xxN8ip~FfP{K z-pZfmV@J^0u!p3$ad~ve4NIEe|H6i#S}@(|KEeAIxPJ;m|D($Pzq8u^9)U8WrX;@! zzz%lLuQpmNpmw_4>T@kX1GJHeoqylnq%hQe`Ha{-pSAG+&zS!2 zKU3wi?D(%5AyIMcvnKu=p(?Q3ZIjC(umVbGNzO{TDAfAk6Dubs0!b9>^w}7Q%rw`K z&+Mpp1G{|yAz)g>T~GuU>_Mp4<`z;8rWc(@>qFy9m)X4EmIa1H0c=*xwdO`pW31K& z1HEN|Yp@Gqj7cvHLaiGopOfedR6X>2BkE^nGyKHC9td$Jn@YU!uiUYR+UQhnEa z3#v}E$UCf{!dsy&oSOnNT{FT5k>=YQ?*-oCC%sTS-SfjqJK+53N5ooq{jpgXgqoC{ z=y_fsl-ubcm2c`=Zlf$&atxxZrRNv->~<^7aw8&Api@|1`8l z-W{p~sEN%h%#Vgrm$l1bjY%-H+cOsE>N%VEVd6uHIsrq{kzRGk`joM7^O#4>5xpsm zGb~J0>uFbmv-iI+^yvl<_oYu&>HA06X58dsF zgq#`UvvdxL2S|XlSA?K=@4o+60T2m(kWinTObMnF<07-;EZ-dJQhTFTdt|hvK$xbQ zuYQszgMlz(l;!I!jSZuTFk`cnBv}`!Fq3U6pvNS;eW zfjqJK^f8NdMqsW7nB|g-qsC5DKaGT?su}6i>S38Aqz4F#%t`v41e>iq>sn^G6NU?n z)R?)7wdzllEj6Xamob=FOAi{L`Z6Liw|@jcT~Ls>4}x2oCEMxX4-CloCOJ7cw1pHh zRG-v6j33WaFQI+T<1bCs_*BqwCF)?YqqrH;g8f!q?2kM%)WKFy-P&wi(RSy5mkkng zkj7xq=0f6J7xWbKBQ+2d6znCITCQBXQ6K{TXzdXBiS|c~#4078J8eV@>OEx#RJFaV z=8=;Un$@75eJa99(c5Knyl&x|Z5R!Y5Y5Y@ytpwlo2%pacyoO_d@L z)^UDcbQPf-&aAERaqw*(mX6Vp}NYuZ2<%AcaiKNwnbxYqECLpd;{qIYz&j%Mwar!{F_ zL2XAeGPa0?b0?1Hk|tvU(aM|J7c4Pe7Ms%`n`tZ$FPtuW>v(r0K?tu}yMZQQKBJ7$ zIEDGO0#Ac_s3B#B;z`2zPWZkUKT#jko^L_-yqbBaI2BA*I`=CJ30(5mH8i0|TV^)n zA0uxcpWj_4XLoNenz;Py4g+*{j+;Mopmpct{`aPJDZL-6IgD*e;4 z&p!$URpL98d5|T`K`1tA6K>Cf5c@db|HBrSaUhHd%3hIRm%ywF(owZ+R7iPzN35~; z-K$vg5izarS^NO|1vgKzvL)J!!lx#4e|0pQxEbFzv_1J(~G zqU-&*9zLWV0pv7|+e{6!o4T5oeQ4%Gj~O36$=6s^d+?5sU73QS#UVLb^Lshw{L$tj z)yKUAZkNcN$7n+we4$?%qQLE-v_$+qz}9!|p=V5KoMXgN#0N4}=B)iHob9S{dG;5E z1*LX>GFlLlhU<+~LIL()nbJlWgctc@&9EpjrnZb*(FB;oth-EPuI64@8Lj;S+!%gI zZVd^V2r&A6uY-)4`}(4vX{!=km$yXgMl;+-ep+;f7J!NnB-bkdWfv8J`;jLi7#*m-Czmx-gK%UnHO?G#`YsK;CK^Ytk^U=ey`7`llhx9-2%}L0qV4V6cN?(@ zAV`p<2yhY0`Z#qrQ8~_3QL7sFc8WV1NX;nyPPSMCq}h_UM?ZWmK2}Q|QsT}>^#|n{ zfDL~qKIvP>**AB$)^hPhDJZtcDw@6*lxVxb--vQ!puR&E{$qTv7>0gfrv=)p6poxO zv2YDNP)nT4AU@oeW5OJO;l{{rl|o}M7lvInCzjq{vpTgd)hRA{(a&5}d@Qly5yUdr z7%6lSKaIS`77G=9>s|xkksrZ<*5zw4*=iC66`H0G#MV%4d0s5PJcnD4hAE8soF|lHM3O{E^}4 z0-*siF$ogN;)|qEYorZQsdx-xZ1h`z5UdsqxLIQgrfz#T@PiT#AxB|f$N zKj*-hf1~M=4*zR4Gf~A#4OtAuixg_bSOYRB*+){VVfM>n<-!jZR6YJ5R`RRz2roc& zQT4VJ88T!&FNJQxEM$&zj`!aj?+RI)sg}$I*BOUn9qXNsu37F!lV^OFf8MZu0p5NX zVOygbJ&g{Ucv#K-4ht-21>atM0$*x4Xp6M5>+6-lVwKcb@BN8EZECwVh_l{k2QP(b zs3EkzR1SdI(sKC~Q+1;$BOXLIrmO6feba_?Bf??}-}0!%1HGYB^%RA7(H8yldqA;j zquCIq~cLbZs2P6OPDme+B)NRY9ewLd{4$~kn9_6qz!zNnMfuu~Uu42fP8 zH?F1a$*HHMbg5_eB)!4|QS+aS%X6p`)&#s3cnJiB_JLO3f$u6PuG6fh;!6eczfJJu z(`VJde>AD{ZcnvfUD?w8QB6CgS4p_*rZ24 z0h$k)i-w~zUnLB85(>~Oj$a6DEqKSy7{q`;CRcyz=@A+~o`CIJ*wk=~MX6k+4KMCM zENO(_7u0;35x^+_KDp-r6OGM12o^MhE5V`OhXKRK@q_`8v<>-+x`^}U2M3e>JxhPA zhZtIOzR8~g1%1#BhrUnz=OFA+I}aDUOQ1VtoMT!O8JJpLVBNG>xV#uQ8^m~x%A2@Q ziee_YTsTMu6gqZRhuBogw?96j=fw)iRuA~fZEBd2;6Sqa!1}Xk$SM7`Rny{Z`ULYemQw7U7-niP1yW1mCKEnt8+%{@IUHcFE@ZgWU&b z?_?~dyNt*=t<-|z=$9?`9266qg!3GA+rvTC7 z10T6-j0p`-|J`k@Ll}DdfPO9G=va?P&`S8NJ=l1J$e2NdNRAAq*%Tpq$56u*jXmMX zA@TP>-%2)dHUl8SA_1w5A#FbcE+Vn{Bn}bNmheMO$8%p`9=ZMB$0@bFLgX9 zy$GjldIc#tx72j~Q*Zyid_VTYk!Aoq_4wQ)n05qIHewWM2CpBo!(s4EpUi$5`tvu8 zzK>D8Y`$d93*ODRtZ7qmsInmc4HKISuyr| zRR58AhMQ`;Fy{?GwJDlUIMCOObY6u1P}AkN`3ihALamUH=Os!u) z3f&SyeEPx!g@gf$9Cd!N;5^i?KW)sc$13YxFKJNO*3p#L(NNIVZ6#p4B2cSBlOB3YFF%-rXY1<)(uOjBY9#v-VN1YHDQ9!KcKSglR#tcE*Jh1VM#C~-&18_ z|8Yu5EoUg-r+pTtF9%u*X&sL~OONNyvL3}nd@*m!dJ)&6Wth$HlBv_s2?x?6y!PE! zUX8*GYJ7ZIq};t`+Ja+kVw0QTTAIS*@MlU?N04NfA zo8&a-m}7E3H>BmD9Jo7EtSwi*t01VZx2li@D~!@w2ulOSDVNJ}0*NTE=t3k`K%gfz z$Xh|#zf08!$4yDZpnptJSz~HCz2@G3aSm(X_m`ur(FbwXDHLqo*K9>>iZtcD>!mU(Q}%#v)prxZZr$Um5asEV~m=N zJkrp%)J)AAwJGEqbLXV-zjIv{R^4JoVJhSzP6&CjgnrH+(9ax9d;HKXW$O9{ZQ6Qv zq^#4Ov8~$ZQZ6^G!3K()2XnllXcv9p!ZrSe-`POQ&_xmD>v$lulv!e@YSdcmw$zVo zwMVDVYwq$mDO*5R5Y?6>_Hi3$!a@4`LH?dJ4587YIdck1T-R=)!&mcafQh71$veq6*oFQN~p<%%840MB0 z2o4Ko)E-tWH1aCql4nj9G}aC@rqXOoUy495?x2?Fa!ilGIINE{V7v^61$!{_w>c;i zTbTXoQHb6xRGMP!>dx;H0-^eR=wgl#gK<=GU=V8rs;|GfS~-W{Op&4JnUpYm-bx6L z5OX0Gq7dHT$=5UPo5x2Kw9;SfeyO5Q4&#L(t|+Df(a!x^7K>TAhc!80nOi8liV!)2 zo&gyuJ$}hR&nNaYPj@uc%$PVak7mdIqo^;it_k12KYwjWkM`96p6Sh*W{?B8MekD` zJcZ4OW~v1@GhiaXpzfEY7UbJIrSE;kSTn=e5Q3dv+P}jQdio~xh}`$U^z9Lb<1NhL z3hSfv`CGa0m-4_MmOMm@0Yz>6#XKd;9yh)#2zvhpOp3`|Ts@_5hgu|to9?vvBO*Zx zjLnU5#6n)Z>*l1;_#UwqpW-+VI$`Kc$oN;ztf~Oz5k)EDMolq^UOg*(>o0BU(c$8V z!u9Hbk=lXNl$^E0H*5-CDvPE!8@=^oh_5gbp;BdA-L>!xp;9EXNXeOB zq_k;cchtl!!BpRTe_e(QdWmhz-TUpj{xnx5YI;^d_yuUOUlirMEc-Dz2PWY4rM1G- z6)ZeTR*|vJ^n|<|H)_o@th}}_`{$p(_#~bnb*JqopnT-8bqO9aIW90bO|H;oddL?w5bU!r+AiE>^NGPh_#EB*_3qumNl z@2qihef!KJ-~Q5Xi0x&Ex8EFp03ZHCT|FDQ73ZaE~K-!rndDNVCjsa`^V zOPf$h=5wNs7l5MeXDP41E{PgDS38KaFZe+Rl$udd+hCJ^2Z2tdgLr&!YfNR9u2i0J z)pUYqYwZj58hJ`wgSCt{C~8XInXEP8e9IG!wAQ6bCYM`)65?I<^)p@3Myy@G@O#FH-v*k);Ijo((cI>%3>fiXKApwQbp;bJk<=K|1ZeGP1@X5n z79m_o$^_@`_l3F;Nj1Aes=G`mb~YuQ zKDU-v8Kf>;1=!0DvN{ucknOp@;qQrc#K^~7Ba{1inln0a#pHZWPj0MK+WP@+DFzy!=u`jvh^UuOQYRq=>WnE%8cG6v`y1 zRmzd34`8P)DZvun=qdSJNTsAr@h#5^h+XeGgMfO^xOM_Mr)k#N7z;W&`u>1g2Gp!d zMvgYESpCChLF7Llv!4RA=TcO}37!M6B}kLNjGVh<7!-a>e>74uljc~TU|mXWK5!`> z<~qoO`BBX_-bwo#?a68;QmvK(L#?^D*2R|*L8idrxmT1qqkz?Idg3P+{Vsil#-Xpm zT@2UYyH`w>&0^_>G&LHHWst*+B|!$wzG0|2E1GP92)0g+rggBWYSF32iY%{Gk#l^Y zBWYrkseLWEFYlRX4G*OPjkAmd#9UT9W5I9E4Jd}P?xUV3*KBu{?uSXi>Z_kxm&vev z+pKIXUOUo6_djxuEb^|=12aQZc&l2p$*6jNrzOBl4tUnjO9|~Ty>zpDyT$@Vjz;#h znU>CtonfzWfqvkE@_Z^N0*%;HdKp#uJnJREtvWl)Wt?zOM2>4%%wM{ zBh+0?Q+txibk_~EW7%mq^avbgrBOZz$?9~?%L+;r((tLGfR+VjNynvQ=lgYmc z_wGA`91&{Q@d2t9a3!Dv8Ds0jhVn#zH3LN|o&u|V8^9zT2s-8!eSi}&{S!4l!A}F) z%9ouMxmm>!Jy#>+$;t?dPTT?SXQ%mvn(OS3;c(H%UBfKm-QPqFpeI!OMyOcEjncKA zJB1xKXQ9F$%de2a#J|5jnBT=;b2`WBWxxDYf&;6J^#VVq+~)tE!6tbF`_BbyM-%(M z$572~(91=4!72hX=@V9U=ca5M8wvAj zcz5tufoPtN9ts|%e7M-A89Tn$3V*&1cK6!N*Qdu7O_Ta!#5+H3x_3ET{Oodgu)cV| z9jpE#Ya}$Fpe-NUQxF!Ovg@MNLjoYsR;4f5h2GprQDyL_9;)c}Qt8PEbEUSWrgTX* zlIU^AzNC8c*-P^~#m1w23fT(^BYH~NL;l`_fWb!Hm#%*-O`MD_h`~jN(N+W}WlB|; z;fN|SS&+EgPzmE8!5+l7r3vdQ(r1F6#%ejyNdXOZVh)(1Z!GUcBsq~VQ*4XVmfll3 zDZqF*YCeM1BQA1kFQ9=*j#-E+t%USkXrz&8#wpdwMI0dTaD!LZbs;oUceQdy+rel` ztfi4t?R2b*RSQL8(y4rlNo|*j3vohE%H9i8M@yrq@N3%U2vWJCp)%p?dkBdmZd1EQ z7tM}i1oX#R4-_DTKCA>+O@EQD2PH|CZH~*Ih|r(3)$bv?iXewbgi9kD%2l#a zII`Qvm=9OcN%E|sg&;`6$oS~=TDwn~s1)CjazH_Upg{+dasdQ~=-H4R4bo!Us4YS% zO6b&3MbQ?+cCWquJpUcfJ4Bw*kSo?CH*E);OE|L+Vg_4)Yuyr&6(U6K-Vof=B9}D%+qEYpv7S>!bh;f<#f|XuLr< zDh#ET3u_2g2Gk3~Y5mU7eQUbq5bbivcrVer^E#0mOz`8QQH7^$S^AHR!c!RLx#P)W zT--m1XAqc<+ahhEegnAn-||?#==P2|n*BkRB)2zxq(~98@UFA`fsAvvLK%U_$MrX?CQt4BRa{m$egd7^g)h~u7rHLRBVB# z1$4iHm59=hyEh87o=`8(<&Taz5nVb$oBdv&|Gj*ed2cNc|LN;W{?XU{-5A~f_I2|1 zHby264mS404F68#0wV;Vd+8BGKFnDfp`DLZ3oQIyKox8WptJB7bDR1><5VvXd%wAm zGYk~Mn5FP}xO{YPMw9uF1c3TuNP6Uhya5x>LZS<^UbT(V-mZlR%ERilP zCKoN+dDfcw2E-()zO++9JJ*#;(RlBz_|dOo_E{GuKAu4V*T@?g1J|=DCoOu)pDzG$@N<4S$Q#;#;g1HociFZc%3HZ#vJiPsH`ui# z0-xH|W$!%<*au=S-F2DYhw_ykm zQ2@Y2iIk3_A7*hI4i|x9AIb>enkvnE@(h3uuw!v8-0?*+9rNqeLdZi1EL7+_F5rNk zfXk1A2Gb<&bcF^4mjoQb{48aLDWHfq&E+2zY6w9cyMo4`jonO~EsxPHWR?Py#ig3` zwrQKHlHaj5rK_UW9RCI>izOwLsbnrM(abFmFmOVM4mDbi>@Fw~RD(E4LwNWkQ&n6< zIJDZDk@t2`di8x-9Q;;!?|zyNC6yjw%QWBtx@4fL*r|R& zdhkw}5=c9h^s5}ufUyBZvtjc)z{v*CO;MLB@-#d2g08dfD2_FqXGb%GVyjgfZG>4E*L8Ng=B2U05-U5E6kH?tYR9d{PNO%$=l)2Q{cNO@*5 zFJik`Q%v$)&xo9R5qYjeqyB8Ki$EcN}3O!VVp>1WfS8W);alhD#5 zl--Py4vRKPTFkj#t&C(K+-D9wPA7u6GUMspFoNlcu@G?fG2*(^MhP$u=EE0xSU6X*1l%)jZu zWvp{>IdG~TYX(*kHS7;vStg~?jvrx_z9>uHM5ZJ(5M>sZ*Ym3~uBrE>PT_@H3`O5& z$>uWtf25sbbY=ar?$fc;v6GH%yJOq7Z6_UfY<6thPF8GnY}@8dzwh2>?0e6?dz>-O z`nE9Um-U-ZRn33ZQ^dX#6GFy{#KY~7ROj=v6Cy?mH2U6ma|y~!;jp-yn@8dfoEp0Z z)^);$mAT@#l}7D~Y^bf7at%#i`v+Jh`|0U;)eT$36B#Zi`Dk`@@nu1L2L^K1?^4IAXDm#BuLzn<$$o)~-tXRW zz40rBT2MXGHO-C`mnzp3kPRd+<0hHwg_+!xweeaJ85l0iKPN6uzQQmyP$p+EFmZ9p8 zih)%lkiHK>IQbSw86_ScQz)Be&s`!XRUk8?e7jv8W-9z5IO8efVSm)2>Egt%GIwug zf?cG=gJ`(ew3qFIco6uoX(v;@{7@&s<0eJ|f+HWQm%DR@bsv63=YzF-$ z|1r2GU!aK7>SD)o`@%>m z_;4B%UYe`|XBrk?UFfWG7L^g7osVapO}#Z6XC^7o8#XZiNmfuj-b&F(_HyQ{s)hjO z(`3(JE6Vq)F2B`eIZ)LEb>3z&8#Q8;Z|4^iTQ#lcp?oNO0top4VM%byLG1F}vx79O zK=g06$7ox*GJMz0j)~+dos*RVuNJl1POTHQ4Ik0FuD?>zI( z3C?bGHV0QPKp)tbM38Q8v9sAjikGL@e#tTbHfY~IuCO1>(5ey6oy+#1EwuN^FN5;m zF>>1q&*n1hnf=k-C?eK1bTDMnP67@Bz7wYO9P9Y{v$NeFzFt&yS+`T^?zejR@{hof`5P|44L9AT-k64 zu!2f}kh#l$xNGqR{_H5V#c{4Z7LjLVsvAz#N47fU&XL@tC&vG zSK5s^aU9YlYUEupYWIc=LKajxE0sUBJA`Yw1rL|WTRfU_-J5YWK8%c|_7toI+`pdx zyf9y_pR`nbs+e;DA4k3{gl*rm=fy(UFBujl@~D(g`QJ4BFE zFpntjU-5&obhezX8DzM>h~qu7^A5-5yRyCi>>%&(yc|q7qU5IAk!8Pfliz!ycu%(zO9eY6VKJka>UB9c}ZPUI`4phlXBExm{Vb< zoW2ga9ew!7P`w%xyqbU@z^7GF8;RpD-mn<%X&jLAJ-wTohk@-VhSeD*&wKETeG=8x zkmF?%%VV$p3-X6Z{VeA^6!8a@3#<#Q&P18Dt%5B{J}>B(2h^?`=JmS>(E5URU_{Z$ zyiY&Qu+GtzS9g`S7i5d%YvT{)bOS?od2So+y4+nYw+$h+9?0q1jp_(8HyMJ)@5jKs z3+#^Z1@