diff --git a/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml b/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml index b39b25ffc59c..9f2ab7237ea1 100755 --- a/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml +++ b/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle-suppressions.xml @@ -473,6 +473,7 @@ + + + + + + + @@ -603,11 +610,11 @@ - + - + diff --git a/eng/code-quality-reports/src/main/resources/revapi/revapi.json b/eng/code-quality-reports/src/main/resources/revapi/revapi.json index bc69bcd19c16..c5ead03aa977 100644 --- a/eng/code-quality-reports/src/main/resources/revapi/revapi.json +++ b/eng/code-quality-reports/src/main/resources/revapi/revapi.json @@ -235,6 +235,17 @@ "code": "java\\.class\\.externalClassExposedInAPI", "new": "(interface|class|enum) io\\.opentelemetry.*", "justification": "Azure Monitor Exporter is allowed to use OpenTelemetry types in public APIs as it implements interfaces defined by OpenTelemetry" + }, + { + "code": "java.annotation.attributeAdded", + "old": "class com.azure.messaging.eventhubs.EventHubClientBuilder", + "new": "class com.azure.messaging.eventhubs.EventHubClientBuilder", + "justification": "Setting protocol to AMQP in @ServiceClientBuilder annotation is not a breaking change" + }, + { + "code": "java.annotation.added", + "new": "class com.azure.storage.blob.models.PageList", + "justification": "Annotation required to resolve deserialization bug." } ] } diff --git a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml index 9c83c11e658b..05a4da3620ee 100755 --- a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml +++ b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml @@ -1333,6 +1333,23 @@ + + + + + + + + + + + + + + + + + @@ -2441,4 +2458,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/eng/common/README.md b/eng/common/README.md index e63b74367b74..7bda6ec94208 100644 --- a/eng/common/README.md +++ b/eng/common/README.md @@ -20,7 +20,6 @@ The 'Sync eng/common directory' PRs will be created in the language repositories 3. The `azure-sdk-tools - sync - eng-common` pipeline queues test runs for template pipelines in various languages. These help you test your changes in the **Tools PR**. 4. If there are changes in the **Tools PR** that will affect the release stage you should approve the release test pipelines by clicking the approval gate. The test (template) pipeline will automatically release the next eligible version without needing manual intervention for the versioning. Please approve your test releases as quickly as possible. A race condition may occur due to someone else queueing the pipeline and going all the way to release using your version while yours is still waiting. If this occurs manually rerun the pipeline that failed. 5. If you make additional changes to your **Tools PR** repeat steps 1 - 4 until you have completed the necessary testing of your changes. This includes full releases of the template package, if necessary. -6. Sign off on CreateSyncPRs stage of the sync pipeline using the approval gate. This stage will create the **Sync PRs** in the various language repos with the `auto-merge` label applied. A link to each of the **Sync PRs** will show up in the **Tools PR** for you to click and review. -7. Go review and approve each of your **Sync PRs**. The merging will happen automatically. -8. Sign off on VerifyAndMerge stage of the sync pipeline using the approval gate. This stage will merge any remaining open **Sync PRs** and also append `auto-merge` to the **Tools PR** so it will automatically merge once the pipeline finishes. -7. Sign Off on the VerifyAndMerge stage. This will merge any remaining open **Sync PR** and also append `auto-merge` to the **Tools PR**. +6. Sign off on CreateSyncPRs stage of the sync pipeline using the approval gate. This stage will create the **Sync PRs** in the various language repos. A link to each of the **Sync PRs** will show up in the **Tools PR** for you to click and review. +7. Go review and approve each of your **Sync PRs**. +8. Sign Off on the VerifyAndMerge stage. This will merge any remaining open **Sync PR** and also append `auto-merge` to the **Tools PR**. diff --git a/eng/common/TestResources/New-TestResources.ps1.md b/eng/common/TestResources/New-TestResources.ps1.md index 6fc15eefdb49..c41693c87666 100644 --- a/eng/common/TestResources/New-TestResources.ps1.md +++ b/eng/common/TestResources/New-TestResources.ps1.md @@ -449,7 +449,7 @@ Accept wildcard characters: False ``` ### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](https://go.microsoft.com/fwlink/?LinkID=113216). ## INPUTS diff --git a/eng/common/TestResources/Remove-TestResources.ps1.md b/eng/common/TestResources/Remove-TestResources.ps1.md index 18317cec07cc..8c99997e0731 100644 --- a/eng/common/TestResources/Remove-TestResources.ps1.md +++ b/eng/common/TestResources/Remove-TestResources.ps1.md @@ -263,7 +263,7 @@ Accept wildcard characters: False ``` ### CommonParameters -This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](https://go.microsoft.com/fwlink/?LinkID=113216). ## INPUTS diff --git a/eng/common/pipelines/templates/steps/docs-metadata-release.yml b/eng/common/pipelines/templates/steps/docs-metadata-release.yml index 2b57bcf7f413..45f12580f10e 100644 --- a/eng/common/pipelines/templates/steps/docs-metadata-release.yml +++ b/eng/common/pipelines/templates/steps/docs-metadata-release.yml @@ -8,8 +8,8 @@ parameters: ScriptDirectory: eng/common/scripts TargetDocRepoName: '' TargetDocRepoOwner: '' - PRBranchName: 'smoke-test-rdme' - SourceBranchName: 'smoke-test' + PRBranchName: 'master-rdme' + SourceBranchName: 'master' PRLabels: 'auto-merge' ArtifactName: '' Language: '' diff --git a/eng/common/scripts/Delete-RemoteBranches.ps1 b/eng/common/scripts/Delete-RemoteBranches.ps1 index 0ca7c55be932..77cf7e506461 100644 --- a/eng/common/scripts/Delete-RemoteBranches.ps1 +++ b/eng/common/scripts/Delete-RemoteBranches.ps1 @@ -9,7 +9,7 @@ param( LogDebug "Operating on Repo [ $RepoName ]" try{ - $branches = (Get-GitHubSourceReferences -RepoOwner $RepoOwner -RepoName $RepoName -Ref "heads/$BranchPrefix").ref + $branches = (Get-GitHubSourceReferences -RepoOwner $RepoOwner -RepoName $RepoName -Ref "heads/$BranchPrefix" -AuthToken $AuthToken).ref } catch { LogError "Get-GitHubSourceReferences failed with exception:`n$_" @@ -22,7 +22,7 @@ foreach ($branch in $branches) $branchName = $branch.Replace("refs/heads/","") $head = "${RepoOwner}/${RepoName}:${branchName}" LogDebug "Operating on branch [ $branchName ]" - $pullRequests = Get-GitHubPullRequests -RepoOwner $RepoOwner -RepoName $RepoName -head $head + $pullRequests = Get-GitHubPullRequests -RepoOwner $RepoOwner -RepoName $RepoName -State "all" -Head $head -AuthToken $AuthToken } catch { @@ -30,9 +30,9 @@ foreach ($branch in $branches) exit 1 } - if ($pullRequests.Count -eq 0) + if ($pullRequests -and (($pullRequests | ? { $_.State -eq "open" }).Count -eq 0)) { - LogDebug "Branch [ $branchName ] in repo [ $RepoName ] has no associated Pull Request. Deleting Branch" + LogDebug "Branch [ $branchName ] in repo [ $RepoName ] has no associated open Pull Request. Deleting Branch" try{ Remove-GitHubSourceReferences -RepoOwner $RepoOwner -RepoName $RepoName -Ref ($branch.Remove(0,5)) -AuthToken $AuthToken } diff --git a/eng/common/scripts/Verify-Links.ps1 b/eng/common/scripts/Verify-Links.ps1 index 9376564e3472..c9991a058894 100644 --- a/eng/common/scripts/Verify-Links.ps1 +++ b/eng/common/scripts/Verify-Links.ps1 @@ -200,6 +200,10 @@ function CheckLink ([System.Uri]$linkUri) } if ($checkLinkGuidance) { + if ($linkUri.Scheme -eq 'http') { + LogWarning "DO NOT use 'http' in $linkUri. Please use secure link with https instead. Check here for more information: https://aka.ms/azsdk/guideline/links" + $linkValid = $false + } $link = $linkUri.ToString() # Check if the url is relative links, suppress the archor link validation. if (!$linkUri.IsAbsoluteUri -and !$link.StartsWith("#")) { diff --git a/sdk/communication/azure-communication-administration/pom.xml b/sdk/communication/azure-communication-administration/pom.xml index 5bda961599a0..951bea5a2777 100644 --- a/sdk/communication/azure-communication-administration/pom.xml +++ b/sdk/communication/azure-communication-administration/pom.xml @@ -57,12 +57,6 @@ azure-core 1.9.0 - - com.azure - azure-core-http-netty - 1.6.2 - test - com.azure azure-communication-common diff --git a/sdk/communication/azure-communication-chat/pom.xml b/sdk/communication/azure-communication-chat/pom.xml index 2c44b8fc24f5..666eee2cab2d 100644 --- a/sdk/communication/azure-communication-chat/pom.xml +++ b/sdk/communication/azure-communication-chat/pom.xml @@ -51,12 +51,6 @@ azure-communication-administration 1.0.0-beta.3 - - com.azure - azure-core-http-netty - 1.6.2 - test - com.azure azure-core-test diff --git a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java index 8f5b5eb87c58..5e158ff24597 100644 --- a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java +++ b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatClientTestBase.java @@ -11,16 +11,12 @@ import com.azure.communication.chat.models.*; import com.azure.communication.common.CommunicationUserCredential; import com.azure.core.exception.HttpResponseException; -import com.azure.core.http.policy.FixedDelay; -import com.azure.core.http.policy.RetryPolicy; import com.azure.core.http.HttpClient; import com.azure.core.test.TestBase; import com.azure.core.test.TestMode; import com.azure.core.util.Configuration; import com.azure.core.util.logging.ClientLogger; - -import java.time.Duration; import java.time.ZonedDateTime; import java.time.LocalDateTime; import java.time.ZoneId; @@ -44,8 +40,6 @@ public class ChatClientTestBase extends TestBase { protected static final String CONNSTRING = Configuration.getGlobalConfiguration() .get("COMMUNICATION_SERVICES_CONNECTION_STRING", "pw=="); - protected static final FixedDelay RETRY_STRATEGY = new FixedDelay(3, Duration.ofMillis(1000)); - protected ChatClientBuilder getChatClientBuilder(String token, HttpClient httpClient) { ChatClientBuilder builder = new ChatClientBuilder(); @@ -60,10 +54,7 @@ protected ChatClientBuilder getChatClientBuilder(String token, HttpClient httpCl builder.credential(new CommunicationUserCredential(token)); } - if (interceptorManager.isLiveMode()) { - builder.addPolicy(new RetryPolicy(RETRY_STRATEGY)); - } - else { + if (getTestMode() == TestMode.RECORD) { builder.addPolicy(interceptorManager.getRecordPolicy()); } diff --git a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java index 4de7058cccc6..ecbf507a668b 100644 --- a/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java +++ b/sdk/communication/azure-communication-chat/src/test/java/com/azure/communication/chat/ChatThreadAsyncClientTest.java @@ -5,6 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -176,8 +178,7 @@ public void canAddListAndRemoveMembersWithResponseAsync(HttpClient httpClient) t } assertTrue(returnedMembers.size() == 4); - }) - .verifyComplete(); + }); for (ChatThreadMember member: options.getMembers()) { StepVerifier.create(chatThreadClient.removeMemberWithResponse(member.getUser())) @@ -408,6 +409,9 @@ public void canSendTypingNotificationWithResponse(HttpClient httpClient) { @ParameterizedTest @MethodSource("com.azure.core.test.TestBase#getHttpClients") + @DisabledIfEnvironmentVariable( + named = "SKIP_LIVE_TEST", + matches = "(?i)(true)") public void canSendThenListReadReceipts(HttpClient httpClient) throws InterruptedException { // Arrange setupTest(httpClient); @@ -431,16 +435,16 @@ public void canSendThenListReadReceipts(HttpClient httpClient) throws Interrupte assertEquals(resp.getStatusCode(), 200); resp.getItems().forEach(item -> returnedReadReceipts.add(item)); }); - - if (interceptorManager.isPlaybackMode()) { - assertTrue(returnedReadReceipts.size() > 0); - checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); - } + assertTrue(returnedReadReceipts.size() > 0); + checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); }); } @ParameterizedTest @MethodSource("com.azure.core.test.TestBase#getHttpClients") + @DisabledIfEnvironmentVariable( + named = "SKIP_LIVE_TEST", + matches = "(?i)(true)") public void canSendThenListReadReceiptsWithResponse(HttpClient httpClient) throws InterruptedException { // Arrange setupTest(httpClient); @@ -466,12 +470,9 @@ public void canSendThenListReadReceiptsWithResponse(HttpClient httpClient) throw resp.getItems().forEach(item -> returnedReadReceipts.add(item)); }); - if (interceptorManager.isPlaybackMode()) { - assertTrue(returnedReadReceipts.size() > 0); - checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); - } - }) - .verifyComplete(); + assertTrue(returnedReadReceipts.size() > 0); + checkReadReceiptListContainsMessageId(returnedReadReceipts, messageResponseRef.get().getId()); + }); } } diff --git a/sdk/communication/tests.yml b/sdk/communication/tests.yml index a35bb4f6fb49..a435579fb140 100644 --- a/sdk/communication/tests.yml +++ b/sdk/communication/tests.yml @@ -9,8 +9,10 @@ jobs: safeName: azurecommunicationadministration - name: azure-communication-chat groupId: com.azure - safeName: azurecommunicationchatclient + safeName: azurecommunicationchat ServiceDirectory: communication EnvVars: AZURE_TEST_MODE: LIVE SKIP_PHONENUMBER_INTEGRATION_TESTS: TRUE + SKIP_LIVE_TEST: TRUE + diff --git a/sdk/compute/mgmt-v2017_09_01/pom.xml b/sdk/compute/mgmt-v2017_09_01/pom.xml index 512ed7415d5f..ff10be84ec04 100644 --- a/sdk/compute/mgmt-v2017_09_01/pom.xml +++ b/sdk/compute/mgmt-v2017_09_01/pom.xml @@ -11,15 +11,15 @@ com.microsoft.azure azure-arm-parent - 1.2.0 - ../../parents/azure-arm-parent + 1.1.0 + ../../../pom.management.xml azure-mgmt-compute 1.0.0-beta jar Microsoft Azure SDK for Compute Management This package contains Microsoft Compute Management SDK. - https://github.com/Azure/azure-libraries-for-java + https://github.com/Azure/azure-sdk-for-java The MIT License (MIT) @@ -28,8 +28,8 @@ - scm:git:https://github.com/Azure/azure-libraries-for-java - scm:git:git@github.com:Azure/azure-libraries-for-java.git + scm:git:https://github.com/Azure/azure-sdk-for-java + scm:git:git@github.com:Azure/azure-sdk-for-java.git HEAD @@ -71,6 +71,8 @@ azure-arm-client-runtime test-jar test + + 1.6.5 diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapabilities.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapabilities.java index 01c94ba90cea..b877a757d633 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapabilities.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapabilities.java @@ -11,7 +11,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * Describes The SKU capabilites object. + * Describes The SKU capabilities object. */ public class ResourceSkuCapabilities { /** @@ -27,7 +27,7 @@ public class ResourceSkuCapabilities { private String value; /** - * Get the name value. + * Get an invariant to describe the feature. * * @return the name value */ @@ -36,7 +36,7 @@ public String name() { } /** - * Get the value value. + * Get an invariant if the feature is measured by quantity. * * @return the value value */ diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapacity.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapacity.java index 0a164a574154..bae4e0326b52 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapacity.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCapacity.java @@ -40,7 +40,7 @@ public class ResourceSkuCapacity { private ResourceSkuCapacityScaleType scaleType; /** - * Get the minimum value. + * Get the minimum capacity. * * @return the minimum value */ @@ -49,7 +49,7 @@ public Long minimum() { } /** - * Get the maximum value. + * Get the maximum capacity that can be set. * * @return the maximum value */ @@ -58,7 +58,7 @@ public Long maximum() { } /** - * Get the defaultProperty value. + * Get the default capacity. * * @return the defaultProperty value */ @@ -67,7 +67,7 @@ public Long defaultProperty() { } /** - * Get the scaleType value. + * Get the scale type applicable to the sku. Possible values include: 'Automatic', 'Manual', 'None'. * * @return the scaleType value */ diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCosts.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCosts.java index 65f7e352fdbc..ea00d71771c2 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCosts.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuCosts.java @@ -33,7 +33,7 @@ public class ResourceSkuCosts { private String extendedUnit; /** - * Get the meterID value. + * Get used for querying price from commerce. * * @return the meterID value */ @@ -42,7 +42,7 @@ public String meterID() { } /** - * Get the quantity value. + * Get the multiplier is needed to extend the base metered cost. * * @return the quantity value */ @@ -51,7 +51,7 @@ public Long quantity() { } /** - * Get the extendedUnit value. + * Get an invariant to show the extended unit. * * @return the extendedUnit value */ diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuLocationInfo.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuLocationInfo.java index 1e205d572573..4c3a86ebb0e4 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuLocationInfo.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuLocationInfo.java @@ -28,7 +28,7 @@ public class ResourceSkuLocationInfo { private List zones; /** - * Get the location value. + * Get location of the SKU. * * @return the location value */ @@ -37,7 +37,7 @@ public String location() { } /** - * Get the zones value. + * Get list of availability zones where the SKU is supported. * * @return the zones value */ diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictionInfo.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictionInfo.java index e539c9d6b63c..ea3f4b180536 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictionInfo.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictionInfo.java @@ -28,7 +28,7 @@ public class ResourceSkuRestrictionInfo { private List zones; /** - * Get the locations value. + * Get locations where the SKU is restricted. * * @return the locations value */ @@ -37,7 +37,7 @@ public List locations() { } /** - * Get the zones value. + * Get list of availability zones where the SKU is restricted. * * @return the zones value */ diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictions.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictions.java index 6a32797609df..e7a4794c43b8 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictions.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/ResourceSkuRestrictions.java @@ -42,7 +42,7 @@ public class ResourceSkuRestrictions { private ResourceSkuRestrictionsReasonCode reasonCode; /** - * Get the type value. + * Get the type of restrictions. Possible values include: 'Location', 'Zone'. * * @return the type value */ @@ -51,7 +51,7 @@ public ResourceSkuRestrictionsType type() { } /** - * Get the values value. + * Get the value of restrictions. If the restriction type is set to location. This would be different locations where the SKU is restricted. * * @return the values value */ @@ -60,7 +60,7 @@ public List values() { } /** - * Get the restrictionInfo value. + * Get the information about the restriction where the SKU cannot be used. * * @return the restrictionInfo value */ @@ -69,7 +69,7 @@ public ResourceSkuRestrictionInfo restrictionInfo() { } /** - * Get the reasonCode value. + * Get the reason for restriction. Possible values include: 'QuotaId', 'NotAvailableForSubscription'. * * @return the reasonCode value */ diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ComputeManagementClientImpl.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ComputeManagementClientImpl.java index 681827e15dd0..8cf4c58e73cb 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ComputeManagementClientImpl.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ComputeManagementClientImpl.java @@ -63,11 +63,11 @@ public String apiVersion() { return this.apiVersion; } - /** Gets or sets the preferred language for the response. */ + /** The preferred language for the response. */ private String acceptLanguage; /** - * Gets Gets or sets the preferred language for the response. + * Gets The preferred language for the response. * * @return the acceptLanguage value. */ @@ -76,7 +76,7 @@ public String acceptLanguage() { } /** - * Sets Gets or sets the preferred language for the response. + * Sets The preferred language for the response. * * @param acceptLanguage the acceptLanguage value. * @return the service client itself @@ -86,11 +86,11 @@ public ComputeManagementClientImpl withAcceptLanguage(String acceptLanguage) { return this; } - /** Gets or sets the retry timeout in seconds for Long Running Operations. Default value is 30. */ + /** The retry timeout in seconds for Long Running Operations. Default value is 30. */ private int longRunningOperationRetryTimeout; /** - * Gets Gets or sets the retry timeout in seconds for Long Running Operations. Default value is 30. + * Gets The retry timeout in seconds for Long Running Operations. Default value is 30. * * @return the longRunningOperationRetryTimeout value. */ @@ -99,7 +99,7 @@ public int longRunningOperationRetryTimeout() { } /** - * Sets Gets or sets the retry timeout in seconds for Long Running Operations. Default value is 30. + * Sets The retry timeout in seconds for Long Running Operations. Default value is 30. * * @param longRunningOperationRetryTimeout the longRunningOperationRetryTimeout value. * @return the service client itself @@ -109,11 +109,11 @@ public ComputeManagementClientImpl withLongRunningOperationRetryTimeout(int long return this; } - /** When set to true a unique x-ms-client-request-id value is generated and included in each request. Default is true. */ + /** Whether a unique x-ms-client-request-id should be generated. When set to true a unique x-ms-client-request-id value is generated and included in each request. Default is true. */ private boolean generateClientRequestId; /** - * Gets When set to true a unique x-ms-client-request-id value is generated and included in each request. Default is true. + * Gets Whether a unique x-ms-client-request-id should be generated. When set to true a unique x-ms-client-request-id value is generated and included in each request. Default is true. * * @return the generateClientRequestId value. */ @@ -122,7 +122,7 @@ public boolean generateClientRequestId() { } /** - * Sets When set to true a unique x-ms-client-request-id value is generated and included in each request. Default is true. + * Sets Whether a unique x-ms-client-request-id should be generated. When set to true a unique x-ms-client-request-id value is generated and included in each request. Default is true. * * @param generateClientRequestId the generateClientRequestId value. * @return the service client itself @@ -191,6 +191,6 @@ protected void initialize() { */ @Override public String userAgent() { - return String.format("%s (%s, %s)", super.userAgent(), "ComputeManagementClient", "2017-09-01"); + return String.format("%s (%s, %s, auto-generated)", super.userAgent(), "ComputeManagementClient", "2017-09-01"); } } diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkuInner.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkuInner.java index cc07679eb97e..da5b155234ac 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkuInner.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkuInner.java @@ -103,7 +103,7 @@ public class ResourceSkuInner { private List restrictions; /** - * Get the resourceType value. + * Get the type of resource the SKU applies to. * * @return the resourceType value */ @@ -112,7 +112,7 @@ public String resourceType() { } /** - * Get the name value. + * Get the name of SKU. * * @return the name value */ @@ -121,7 +121,7 @@ public String name() { } /** - * Get the tier value. + * Get specifies the tier of virtual machines in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br /><br /> **Basic**. * * @return the tier value */ @@ -130,7 +130,7 @@ public String tier() { } /** - * Get the size value. + * Get the Size of the SKU. * * @return the size value */ @@ -139,7 +139,7 @@ public String size() { } /** - * Get the family value. + * Get the Family of this particular SKU. * * @return the family value */ @@ -148,7 +148,7 @@ public String family() { } /** - * Get the kind value. + * Get the Kind of resources that are supported in this SKU. * * @return the kind value */ @@ -157,7 +157,7 @@ public String kind() { } /** - * Get the capacity value. + * Get specifies the number of virtual machines in the scale set. * * @return the capacity value */ @@ -166,7 +166,7 @@ public ResourceSkuCapacity capacity() { } /** - * Get the locations value. + * Get the set of locations that the SKU is available. * * @return the locations value */ @@ -175,7 +175,7 @@ public List locations() { } /** - * Get the locationInfo value. + * Get a list of locations and availability zones in those locations where the SKU is available. * * @return the locationInfo value */ @@ -184,7 +184,7 @@ public List locationInfo() { } /** - * Get the apiVersions value. + * Get the api versions that support this SKU. * * @return the apiVersions value */ @@ -193,7 +193,7 @@ public List apiVersions() { } /** - * Get the costs value. + * Get metadata for retrieving price info. * * @return the costs value */ @@ -202,7 +202,7 @@ public List costs() { } /** - * Get the capabilities value. + * Get a name value pair to describe the capability. * * @return the capabilities value */ @@ -211,7 +211,7 @@ public List capabilities() { } /** - * Get the restrictions value. + * Get the restrictions because of which SKU cannot be used. This is empty if there are no restrictions. * * @return the restrictions value */ diff --git a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkusImpl.java b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkusImpl.java index a9f341529dea..68d8220ac874 100644 --- a/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkusImpl.java +++ b/sdk/compute/mgmt-v2017_09_01/src/main/java/com/microsoft/azure/management/compute/v2017_09_01/implementation/ResourceSkusImpl.java @@ -37,7 +37,8 @@ public Observable listAsync() { public Iterable call(Page page) { return page.items(); } - }) .map(new Func1() { + }) + .map(new Func1() { @Override public ResourceSku call(ResourceSkuInner inner) { return new ResourceSkuImpl(inner, manager()); diff --git a/sdk/core/azure-core-experimental/CHANGELOG.md b/sdk/core/azure-core-experimental/CHANGELOG.md index 369cd8bcefe5..9ed249c7810f 100644 --- a/sdk/core/azure-core-experimental/CHANGELOG.md +++ b/sdk/core/azure-core-experimental/CHANGELOG.md @@ -2,6 +2,7 @@ ## 1.0.0-beta.7 (2020-10-08) +- Added API `fromObject()` in `BinaryData` which uses `JsonSerializer` present in the classpath. - Added APIs to `JsonPatchDocument` which accept pre-serialized JSON. - Updated `azure-core` dependency to released version. diff --git a/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java b/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java index 2979599d21ca..060cda67f27b 100644 --- a/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java +++ b/sdk/core/azure-core-experimental/src/main/java/com/azure/core/experimental/util/BinaryData.java @@ -5,7 +5,9 @@ import com.azure.core.util.FluxUtil; import com.azure.core.util.logging.ClientLogger; +import com.azure.core.util.serializer.JsonSerializerProviders; import com.azure.core.util.serializer.ObjectSerializer; +import com.azure.core.util.serializer.JsonSerializer; import com.azure.core.util.serializer.TypeReference; import static com.azure.core.util.FluxUtil.monoError; @@ -18,18 +20,20 @@ import java.io.InputStream; import java.io.UncheckedIOException; import java.nio.ByteBuffer; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Objects; /** * This class is an abstraction over many different ways that binary data can be represented. The {@link BinaryData} - * can be created from {@link InputStream}, {@link Flux} of {@link ByteBuffer}, {@link String}, {@link Object} and byte - * array. The data is collected from provided sources and stored into a byte array. + * can be created from {@link InputStream}, {@link Flux} of {@link ByteBuffer}, {@link String}, {@link Object}, or byte + * array. + *

Immutable data

+ * {@link BinaryData} is constructed by copying the given data. Once {@link BinaryData} is instantiated, it can not be + * changed. It provides various convenient APIs to get data out of {@link BinaryData}, they all start with the 'to' + * prefix, for example {@link BinaryData#toBytes()}. *

- * It also provides a way to serialize and deserialize an {@link Object} into {@link BinaryData} given an - * {@link ObjectSerializer}. Code samples are explained below. + * Code samples are presented below. * *

Create an instance from Bytes

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#bytes} @@ -43,57 +47,48 @@ *

Get an Object from {@link BinaryData}

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync} * + *

Create an instance from Object

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Object} + * * @see ObjectSerializer + * @see JsonSerializer + * @see More about serialization */ public final class BinaryData { private static final ClientLogger LOGGER = new ClientLogger(BinaryData.class); - private final byte[] data; + private static final BinaryData EMPTY_DATA = new BinaryData(new byte[0]); - /** - * Create instance of {@link BinaryData} given the data. - * @param data to represent as bytes. - * @throws NullPointerException If {@code data} is null. - */ - BinaryData(byte[] data) { - Objects.requireNonNull(data, "'data' cannot be null."); - this.data = Arrays.copyOf(data, data.length); - } + private static final Object LOCK = new Object(); - /** - * Provides {@link InputStream} for the data represented by this {@link BinaryData} object. - * - *

Get InputStream from BinaryData

- * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#Stream} - * - * @return {@link InputStream} representing the binary data. - */ - public InputStream toStream() { - return new ByteArrayInputStream(this.data); - } + private final byte[] data; + + private static volatile JsonSerializer defaultJsonSerializer; /** - * Provides {@link Mono} of {@link InputStream} for the data represented by this {@link BinaryData} object. + * Create an instance of {@link BinaryData} from the given data. * - * @return {@link InputStream} representation of the {@link BinaryData}. + * @param data to represent as bytes. */ - public Mono toStreamAsync() { - return Mono.fromCallable(() -> toStream()); + BinaryData(byte[] data) { + this.data = data; } /** - * Create {@link BinaryData} instance with given {@link InputStream} as source of data. The {@link InputStream} is - * not closed by this function. + * Creates a {@link BinaryData} instance with given {@link InputStream} as source of data. The {@link InputStream} + * is not closed by this function. * *

Create an instance from InputStream

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Stream} * * @param inputStream to read bytes from. * @throws UncheckedIOException If any error in reading from {@link InputStream}. - * @throws NullPointerException if {@code inputStream} is null. + * @throws NullPointerException If {@code inputStream} is null. * @return {@link BinaryData} representing the binary data. */ public static BinaryData fromStream(InputStream inputStream) { - Objects.requireNonNull(inputStream, "'inputStream' cannot be null."); + if (Objects.isNull(inputStream)) { + return EMPTY_DATA; + } final int bufferSize = 1024; try { @@ -103,98 +98,125 @@ public static BinaryData fromStream(InputStream inputStream) { while ((nRead = inputStream.read(data, 0, data.length)) != -1) { dataOutputBuffer.write(data, 0, nRead); } + dataOutputBuffer.flush(); + + return new BinaryData(dataOutputBuffer.toByteArray()); - return fromBytes(dataOutputBuffer.toByteArray()); } catch (IOException ex) { throw LOGGER.logExceptionAsError(new UncheckedIOException(ex)); } } /** - * Asynchronously create {@link BinaryData} instance with given {@link InputStream} as source of data. The - * {@link InputStream} is not closed by this function. + * Asynchronously creates a {@link BinaryData} instance with the given {@link InputStream} as source of data. The + * {@link InputStream} is not closed by this function. If the {@link InputStream} is {@code null}, an empty + * {@link BinaryData} will be returned. * * @param inputStream to read bytes from. - * @throws NullPointerException if {@code inputStream} is null. * @return {@link Mono} of {@link BinaryData} representing the binary data. */ public static Mono fromStreamAsync(InputStream inputStream) { - Objects.requireNonNull(inputStream, "'inputStream' cannot be null."); - return Mono.fromCallable(() -> fromStream(inputStream)); } /** - * Create {@link BinaryData} instance with given {@link Flux} of {@link ByteBuffer} as source of data. It will - * collect all the bytes from {@link ByteBuffer} into {@link BinaryData}. + * Creates a {@link BinaryData} instance with given {@link Flux} of {@link ByteBuffer} as source of data. It will + * collect all the bytes from {@link ByteBuffer} into {@link BinaryData}. If the {@link Flux} is {@code null}, an + * empty {@link BinaryData} will be returned. * *

Create an instance from String

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Flux} * * @param data to use. - * @throws NullPointerException if {@code inputStream} is null. * @return {@link Mono} of {@link BinaryData} representing binary data. */ public static Mono fromFlux(Flux data) { if (Objects.isNull(data)) { - return monoError(LOGGER, new NullPointerException("'data' cannot be null.")); + return Mono.just(EMPTY_DATA); } return FluxUtil.collectBytesInByteBufferStream(data) - .flatMap(bytes -> Mono.just(fromBytes(bytes))); + .flatMap(bytes -> Mono.just(new BinaryData(bytes))); } /** - * Create {@link BinaryData} instance with given data and character set. - * - *

Create an instance from String

- * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#String} + * Creates a {@link BinaryData} instance with given data. The {@link String} is converted into bytes using UTF_8 + * character set. If the String is {@code null}, an empty {@link BinaryData} will be returned. * * @param data to use. - * @param charSet to use. - * @throws NullPointerException if {@code inputStream} is null. - * @return {@link BinaryData} representing the binary data. + * @return {@link BinaryData} representing binary data. */ - public static BinaryData fromString(String data, Charset charSet) { - Objects.requireNonNull(data, "'data' cannot be null."); + public static BinaryData fromString(String data) { + if (Objects.isNull(data) || data.length() == 0) { + return EMPTY_DATA; + } - return new BinaryData(data.getBytes(charSet)); + return new BinaryData(data.getBytes(StandardCharsets.UTF_8)); } /** - * Create {@link BinaryData} instance with given data. The {@link String} is converted into bytes using - * {@link StandardCharsets#UTF_8} character set. + * Creates a {@link BinaryData} instance with given byte array data. If the byte array is {@code null}, an empty + * {@link BinaryData} will be returned. * * @param data to use. - * @throws NullPointerException if {@code inputStream} is null. - * @return {@link BinaryData} representing binary data. + * @return {@link BinaryData} representing the binary data. */ - public static BinaryData fromString(String data) { - Objects.requireNonNull(data, "'data' cannot be null."); + public static BinaryData fromBytes(byte[] data) { + if (Objects.isNull(data) || data.length == 0) { + return EMPTY_DATA; + } - return new BinaryData(data.getBytes(StandardCharsets.UTF_8)); + return new BinaryData(Arrays.copyOf(data, data.length)); } /** - * Create {@link BinaryData} instance with given byte array data. + * Serialize the given {@link Object} into {@link BinaryData} using json serializer which is available on classpath. + * The serializer on classpath must implement {@link JsonSerializer} interface. If the given Object is {@code null}, + * an empty {@link BinaryData} will be returned. + *

Code sample

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from.default.serializer#Object} + + * @param data The {@link Object} which needs to be serialized into bytes. + * @throws IllegalStateException If a {@link JsonSerializer} cannot be found on the classpath. + * @return {@link BinaryData} representing the JSON serialized object. * - * @param data to use. - * @return {@link BinaryData} representing the binary data. + * @see JsonSerializer + * @see More about serialization */ - public static BinaryData fromBytes(byte[] data) { - return new BinaryData(data); + public static BinaryData fromObject(Object data) { + if (Objects.isNull(data)) { + return EMPTY_DATA; + } + final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + getDefaultSerializer().serialize(outputStream, data); + + return new BinaryData(outputStream.toByteArray()); } /** * Serialize the given {@link Object} into {@link BinaryData} using the provided {@link ObjectSerializer}. + * If the Object is {@code null}, an empty {@link BinaryData} will be returned. + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. + * + *

Create an instance from Object

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.from#Object} * * @param data The {@link Object} which needs to be serialized into bytes. * @param serializer to use for serializing the object. - * @throws NullPointerException if {@code inputStream} or {@code serializer} is null. + * @throws NullPointerException If {@code serializer} is null. * @return {@link BinaryData} representing binary data. + * @see ObjectSerializer + * @see JsonSerializer + * @see More about serialization */ public static BinaryData fromObject(Object data, ObjectSerializer serializer) { - Objects.requireNonNull(data, "'data' cannot be null."); + if (Objects.isNull(data)) { + return EMPTY_DATA; + } + Objects.requireNonNull(serializer, "'serializer' cannot be null."); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); @@ -204,19 +226,25 @@ public static BinaryData fromObject(Object data, ObjectSerializer serializer) { /** * Serialize the given {@link Object} into {@link Mono} {@link BinaryData} using the provided - * {@link ObjectSerializer}. + * {@link ObjectSerializer}. If the Object is {@code null}, an empty {@link BinaryData} will be returned. + * + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. * * @param data The {@link Object} which needs to be serialized into bytes. * @param serializer to use for serializing the object. - * @throws NullPointerException if {@code inputStream} or {@code serializer} is null. + * @throws NullPointerException If {@code serializer} is null. * @return {@link Mono} of {@link BinaryData} representing the binary data. + * @see ObjectSerializer + * @see More about serialization */ public static Mono fromObjectAsync(Object data, ObjectSerializer serializer) { - Objects.requireNonNull(data, "'data' cannot be null."); - Objects.requireNonNull(serializer, "'serializer' cannot be null."); - + if (Objects.isNull(serializer)) { + return monoError(LOGGER, new NullPointerException("'serializer' cannot be null.")); + } return Mono.fromCallable(() -> fromObject(data, serializer)); - } /** @@ -230,7 +258,7 @@ public byte[] toBytes() { /** * Provides {@link String} representation of this {@link BinaryData} object. The bytes are converted into - * {@link String} using {@link StandardCharsets#UTF_8} character set. + * {@link String} using the UTF-8 character set. * * @return {@link String} representation of the data. */ @@ -238,23 +266,21 @@ public String toString() { return new String(this.data, StandardCharsets.UTF_8); } - /** - * Provides {@link String} representation of this {@link BinaryData} object given a character set. - * - * @param charSet to use to convert bytes into {@link String}. - * @return {@link String} representation of the the binary data. - */ - public String toString(Charset charSet) { - return new String(this.data, charSet); - } - /** * Deserialize the bytes into the {@link Object} of given type by applying the provided {@link ObjectSerializer} on * the data. * + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. + * + *

Code sample

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#Object} * @param clazz representing the type of the Object. * @param serializer to use deserialize data into type. * @param Generic type that the data is deserialized into. + * @throws NullPointerException If {@code serializer} or {@code clazz} is null. * @return The {@link Object} of given type after deserializing the bytes. */ public T toObject(Class clazz, ObjectSerializer serializer) { @@ -267,8 +293,13 @@ public T toObject(Class clazz, ObjectSerializer serializer) { } /** - * Return a {@link Mono} by deserialize the bytes into the {@link Object} of given type after applying the provided - * {@link ObjectSerializer} on the {@link BinaryData}. + * Return a {@link Mono} by deserializing the bytes into the {@link Object} of given type after applying the + * provided {@link ObjectSerializer} on the {@link BinaryData}. + * + *

You can provide your custom implementation of {@link ObjectSerializer} interface or use one provided in azure + * sdk by adding them as dependency. These implementations could be found at + * Json Jackson serializer + * and Gson based serializer. * *

Gets the specified object

* {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync} @@ -276,10 +307,77 @@ public T toObject(Class clazz, ObjectSerializer serializer) { * @param clazz representing the type of the Object. * @param serializer to use deserialize data into type. * @param Generic type that the data is deserialized into. - * @throws NullPointerException if {@code clazz} or {@code serializer} is null. + * @throws NullPointerException If {@code clazz} or {@code serializer} is null. * @return The {@link Object} of given type after deserializing the bytes. */ public Mono toObjectAsync(Class clazz, ObjectSerializer serializer) { + + if (Objects.isNull(clazz)) { + return monoError(LOGGER, new NullPointerException("'clazz' cannot be null.")); + } else if (Objects.isNull(serializer)) { + return monoError(LOGGER, new NullPointerException("'serializer' cannot be null.")); + } return Mono.fromCallable(() -> toObject(clazz, serializer)); } + + /** + * Deserialize the bytes into the {@link Object} of given type by using json serializer which is available in + * classpath. The serializer must implement {@link JsonSerializer} interface. A singleton instance of + * {@link JsonSerializer} is kept for this class to use. + * + * @param clazz representing the type of the Object. + * @param Generic type that the data is deserialized into. + * @throws NullPointerException If {@code clazz} is null. + * @return The {@link Object} of given type after deserializing the bytes. + */ + public T toObject(Class clazz) { + Objects.requireNonNull(clazz, "'clazz' cannot be null."); + + TypeReference ref = TypeReference.createInstance(clazz); + InputStream jsonStream = new ByteArrayInputStream(this.data); + return getDefaultSerializer().deserialize(jsonStream, ref); + } + + /** + * Return a {@link Mono} by deserializing the bytes into the {@link Object} of given type after applying the Json + * serializer found on classpath. + * + *

Gets the specified object

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync} + * + * @param clazz representing the type of the Object. + * @param Generic type that the data is deserialized into. + * @throws NullPointerException If {@code clazz} is null. + * @return The {@link Object} of given type after deserializing the bytes. + */ + public Mono toObjectAsync(Class clazz) { + if (Objects.isNull(clazz)) { + return monoError(LOGGER, new NullPointerException("'clazz' cannot be null.")); + } + return Mono.fromCallable(() -> toObject(clazz)); + } + + /** + * Provides {@link InputStream} for the data represented by this {@link BinaryData} object. + * + *

Get InputStream from BinaryData

+ * {@codesnippet com.azure.core.experimental.util.BinaryDocument.to#Stream} + * + * @return {@link InputStream} representing the binary data. + */ + public InputStream toStream() { + return new ByteArrayInputStream(this.data); + } + + /* This will ensure lazy instantiation to avoid hard dependency on Json Serializer. */ + private static JsonSerializer getDefaultSerializer() { + if (defaultJsonSerializer == null) { + synchronized (LOCK) { + if (defaultJsonSerializer == null) { + defaultJsonSerializer = JsonSerializerProviders.createInstance(); + } + } + } + return defaultJsonSerializer; + } } diff --git a/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java b/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java index d4999b654cf2..a7211d27ca89 100644 --- a/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java +++ b/sdk/core/azure-core-experimental/src/samples/java/com/azure/core/experimental/util/BinaryDateJavaDocCodeSnippet.java @@ -58,8 +58,8 @@ public void createFromString() { */ public void createFromStream() { // BEGIN: com.azure.core.experimental.util.BinaryDocument.from#Stream - final byte[] data = "Some Data".getBytes(StandardCharsets.UTF_8); - BinaryData binaryData = BinaryData.fromStream(new ByteArrayInputStream(data)); + final ByteArrayInputStream inputStream = new ByteArrayInputStream("Some Data".getBytes(StandardCharsets.UTF_8)); + BinaryData binaryData = BinaryData.fromStream(inputStream); System.out.println(binaryData.toString()); // END: com.azure.core.experimental.util.BinaryDocument.from#Stream } @@ -88,6 +88,40 @@ public void createFromFlux() throws InterruptedException { // END: com.azure.core.experimental.util.BinaryDocument.from#Flux } + /** + * Codesnippets for {@link BinaryData#fromObject(Object, ObjectSerializer)}. + */ + public void createFromObject() { + // BEGIN: com.azure.core.experimental.util.BinaryDocument.from#Object + // Lets say we have Person object which could be serialized into json. + class Person { + @JsonProperty + private String name; + + @JsonSetter + public Person setName(String name) { + this.name = name; + return this; + } + + @JsonGetter + public String getName() { + return name; + } + } + final Person data = new Person().setName("John"); + + // Provide your custom serializer or use Azure provided serializers. + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson + + final ObjectSerializer serializer = + new MyJsonSerializer(); // Replace this with your Serializer or from above libraries. + BinaryData binaryData = BinaryData.fromObject(data, serializer); + System.out.println(binaryData.toString()); + // END: com.azure.core.experimental.util.BinaryDocument.from#Object + } + /** * Codesnippets for {@link BinaryData#toStream()}. */ @@ -124,8 +158,7 @@ public String getName() { } final Person data = new Person().setName("John"); - // Ensure your classpath have the Serializer to use to serialize object. For example you can use one of - // following library. + // Provide your custom serializer or use Azure provided serializers. // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson @@ -133,7 +166,6 @@ public String getName() { new MyJsonSerializer(); // Replace this with your Serializer BinaryData binaryData = BinaryData.fromObject(data, serializer); - // Lets print the value of BinaryData Disposable subscriber = binaryData .toObjectAsync(Person.class, serializer) .map(person -> { @@ -148,6 +180,78 @@ public String getName() { // END: com.azure.core.experimental.util.BinaryDocument.to#ObjectAsync } + /** + * Codesnippets for {@link BinaryData#toObject(Class, ObjectSerializer)}. + */ + public void createToObject() { + // BEGIN: com.azure.core.experimental.util.BinaryDocument.to#Object + // Lets say we have Person object which could be serialized into json. + class Person { + @JsonProperty + private String name; + + @JsonSetter + public Person setName(String name) { + this.name = name; + return this; + } + + @JsonGetter + public String getName() { + return name; + } + } + final Person data = new Person().setName("John"); + + // Provide your custom serializer or use Azure provided serializers. + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson + + final ObjectSerializer serializer = + new MyJsonSerializer(); // Replace this with your Serializer + BinaryData binaryData = BinaryData.fromObject(data, serializer); + + Person person = binaryData.toObject(Person.class, serializer); + // Lets print the name + System.out.println("Name : " + person.getName()); + + // END: com.azure.core.experimental.util.BinaryDocument.to#Object + } + + /** + * Codesnippets for {@link BinaryData#fromObject(Object)}. + */ + public void createFromObjectDefaultSerializer() { + // BEGIN: com.azure.core.experimental.util.BinaryDocument.from.default.serializer#Object + // Lets say we have Person object which could be serialized into json. + class Person { + @JsonProperty + private String name; + + @JsonSetter + public Person setName(String name) { + this.name = name; + return this; + } + + @JsonGetter + public String getName() { + return name; + } + } + final Person data = new Person().setName("John"); + + // Ensure your classpath have the Serializer to serialize the object which implement implement + // com.azure.core.util.serializer.JsonSerializer interface. + // Or use Azure provided libraries for this. + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-jackson or + // https://mvnrepository.com/artifact/com.azure/azure-core-serializer-json-gson + + BinaryData binaryData = BinaryData.fromObject(data); + System.out.println(binaryData.toString()); + // END: com.azure.core.experimental.util.BinaryDocument.from.default.serializer#Object + } + public static class MyJsonSerializer implements JsonSerializer { private final ClientLogger logger = new ClientLogger(BinaryDataTest.MyJsonSerializer.class); private final ObjectMapper mapper; @@ -192,4 +296,3 @@ public Mono serializeAsync(OutputStream stream, Object value) { } } } - diff --git a/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java b/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java index e0afe19e16d3..157b7d8ea094 100644 --- a/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java +++ b/sdk/core/azure-core-experimental/src/test/java/com/azure/core/experimental/util/BinaryDataTest.java @@ -85,34 +85,75 @@ public void createFromString() { } @Test - public void createFromStringCharSet() { + public void createFromByteArray() { // Arrange - final String expected = "Doe"; + final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); // Act - final BinaryData data = BinaryData.fromString(expected, StandardCharsets.UTF_8); + final BinaryData data = new BinaryData(expected); // Assert - assertArrayEquals(expected.getBytes(), data.toBytes()); - assertEquals(expected, data.toString(StandardCharsets.UTF_8)); + assertArrayEquals(expected, data.toBytes()); } @Test - public void createFromByteArray() { + public void createFromNullStream() throws IOException { // Arrange - final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); + final byte[] expected = new byte[0]; // Act - final BinaryData data = new BinaryData(expected); + BinaryData data = BinaryData.fromStream(null); + final byte[] actual = new byte[0]; + (data.toStream()).read(actual, 0, expected.length); // Assert assertArrayEquals(expected, data.toBytes()); + assertArrayEquals(expected, actual); + } + + @Test + public void createFromNullByteArray() { + // Arrange + final byte[] expected = new byte[0]; + + // Act + BinaryData actual = BinaryData.fromBytes(null); + + // Assert + assertArrayEquals(expected, actual.toBytes()); + } + + @Test + public void createFromNullObject() { + // Arrange + final byte[] expected = new byte[0]; + + // Act + BinaryData actual = BinaryData.fromObject(null); + + // Assert + assertArrayEquals(expected, actual.toBytes()); } @Test public void createFromStream() throws IOException { // Arrange final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); + + // Act + BinaryData data = BinaryData.fromStream(new ByteArrayInputStream(expected)); + final byte[] actual = new byte[expected.length]; + (data.toStream()).read(actual, 0, expected.length); + + // Assert + assertArrayEquals(expected, data.toBytes()); + assertArrayEquals(expected, actual); + } + + @Test + public void createFromEmptyStream() throws IOException { + // Arrange + final byte[] expected = "".getBytes(); final byte[] actual = new byte[expected.length]; // Act @@ -140,7 +181,7 @@ public void createFromFlux() { } @Test - public void createFromStreamAsync() throws IOException { + public void createFromStreamAsync() { // Arrange final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); @@ -152,27 +193,6 @@ public void createFromStreamAsync() throws IOException { .verifyComplete(); } - @Test - public void createToStreamAsync() { - // Arrange - final byte[] expected = "Doe".getBytes(StandardCharsets.UTF_8); - final BinaryData actual = BinaryData.fromStreamAsync(new ByteArrayInputStream(expected)).block(); - // Act & Assert - StepVerifier.create(actual.toStreamAsync()) - .assertNext(inutStream -> { - byte[] actualBytes = new byte[expected.length]; - - // Act - try { - inutStream.read(actualBytes, 0, expected.length); - } catch (IOException e) { - e.printStackTrace(); - } - Assertions.assertArrayEquals(expected, actualBytes); - }) - .verifyComplete(); - } - @Test public void createFromObjectAsync() { // Arrange @@ -189,6 +209,58 @@ public void createFromObjectAsync() { .verifyComplete(); } + + @Test + public void createFromEmptyString() { + // Arrange + final String expected = ""; + + // Act + final BinaryData data = BinaryData.fromString(expected); + + // Assert + assertArrayEquals(expected.getBytes(), data.toBytes()); + assertEquals(expected, data.toString()); + } + + @Test + public void createFromEmptyByteArray() { + // Arrange + final byte[] expected = new byte[0]; + + // Act + final BinaryData data = BinaryData.fromBytes(expected); + + // Assert + assertArrayEquals(expected, data.toBytes()); + } + + @Test + public void createFromNullString() { + // Arrange + final String expected = null; + + // Arrange & Act + final BinaryData data = BinaryData.fromString(expected); + + // Assert + assertArrayEquals(new byte[0], data.toBytes()); + assertEquals("", data.toString()); + } + + @Test + public void createFromNullByte() { + // Arrange + final byte[] expected = null; + + // Arrange & Act + final BinaryData data = BinaryData.fromBytes(expected); + + // Assert + assertArrayEquals(new byte[0], data.toBytes()); + assertEquals("", data.toString()); + } + public static class MyJsonSerializer implements JsonSerializer { private final ClientLogger logger = new ClientLogger(MyJsonSerializer.class); private final ObjectMapper mapper; diff --git a/sdk/core/azure-core/pom.xml b/sdk/core/azure-core/pom.xml index 62533be9e2e8..82714f23f444 100644 --- a/sdk/core/azure-core/pom.xml +++ b/sdk/core/azure-core/pom.xml @@ -183,6 +183,23 @@ + + + + com.github.spotbugs + spotbugs-maven-plugin + 3.1.12.2 + + + + com.h3xstream.findsecbugs + findsecbugs-plugin + 1.9.0 + + + + +
diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java index 96b3d24120c8..fe826da4c305 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/http/HttpClientProviders.java @@ -13,8 +13,11 @@ */ public final class HttpClientProviders { private static HttpClientProvider defaultProvider; - private static final String CANNOT_FIND_HTTP_CLIENT = - "Cannot find any HttpClient provider on the classpath - unable to create a default HttpClient instance"; + private static final String CANNOT_FIND_HTTP_CLIENT = "A request was made to load the default HttpClient provider " + + "but one could not be found on the classpath. If you are using a dependency manager, consider including a " + + "dependency on azure-core-http-netty or azure-core-http-okhttp. Depending on your existing dependencies, you " + + "have the choice of Netty or OkHttp implementations. Additionally, refer to " + + "https://aka.ms/azsdk/java/docs/custom-httpclient to learn about writing your own implementation."; static { ServiceLoader serviceLoader = ServiceLoader.load(HttpClientProvider.class); diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java index 2fd4f3d7a7f9..7cdb9feff4f1 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocument.java @@ -7,8 +7,7 @@ import com.azure.core.util.serializer.JacksonAdapter; import com.azure.core.util.serializer.JsonSerializer; import com.azure.core.util.serializer.JsonSerializerProviders; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -20,19 +19,15 @@ /** * Represents a JSON Patch document. */ -//@JsonSerialize(using = JsonPatchDocumentSerializer.class) -public class JsonPatchDocument { +@JsonSerialize(using = JsonPatchDocumentSerializer.class) +public final class JsonPatchDocument { private static final Object SERIALIZER_INSTANTIATION_SYNCHRONIZER = new Object(); private static volatile JsonSerializer defaultSerializer; - @JsonIgnore private final ClientLogger logger = new ClientLogger(JsonPatchDocument.class); - @JsonValue - private final List operations; - - @JsonIgnore private final JsonSerializer serializer; + private final List operations; /** * Creates a new JSON Patch document. @@ -53,7 +48,14 @@ public JsonPatchDocument(JsonSerializer serializer) { this.serializer = serializer; } - List getOperations() { + /** + * Gets a representation of the {@link JsonPatchOperation JSON patch operations} in this JSON patch document. + *

+ * Modifications to the returned list won't mutate the operations in the document. + * + * @return The JSON patch operations in this JSON patch document. + */ + public List getOperations() { return new ArrayList<>(operations); } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java index 31eba6abd7d2..08e0ff8b4a92 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchDocumentSerializer.java @@ -13,7 +13,7 @@ /** * Handles serialization of a {@link JsonPatchDocument}. */ -class JsonPatchDocumentSerializer extends JsonSerializer { +final class JsonPatchDocumentSerializer extends JsonSerializer { @Override public void serialize(JsonPatchDocument value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java index cab3bd1528db..f9c6d9d18cf4 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperation.java @@ -3,6 +3,7 @@ package com.azure.core.util; +import com.azure.core.annotation.Immutable; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.Objects; @@ -11,8 +12,9 @@ /** * Represents a JSON Patch operation. */ +@Immutable @JsonSerialize(using = JsonPatchOperationSerializer.class) -final class JsonPatchOperation { +public final class JsonPatchOperation { private final JsonPatchOperationKind op; private final String from; private final String path; @@ -41,7 +43,7 @@ final class JsonPatchOperation { * * @return The kind of operation. */ - JsonPatchOperationKind getOp() { + public JsonPatchOperationKind getOp() { return op; } @@ -50,7 +52,7 @@ JsonPatchOperationKind getOp() { * * @return The operation from target path. */ - String getFrom() { + public String getFrom() { return from; } @@ -59,16 +61,18 @@ String getFrom() { * * @return The operation target path. */ - String getPath() { + public String getPath() { return path; } /** * Gets the operation value. + *

+ * If the operation doesn't take a value {@link Option#uninitialized()} will be returned. * * @return The operation value. */ - Option getValue() { + public Option getValue() { return value; } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java index 57fe594f7bc5..2520e1f15572 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationKind.java @@ -8,7 +8,7 @@ /** * Represents the JSON Patch operation kind. */ -enum JsonPatchOperationKind { +public enum JsonPatchOperationKind { /** * Add operation. */ @@ -45,6 +45,11 @@ enum JsonPatchOperationKind { this.op = op; } + /** + * Gets the string representation of the JSON patch operation kind. + * + * @return The string representation of the JSON patch operation kind. + */ @JsonValue public String toString() { return op; diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java index acc60d4dee84..38ae5b5439a4 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/JsonPatchOperationSerializer.java @@ -12,7 +12,7 @@ /** * Handles serialization of a {@link JsonPatchOperation}. */ -class JsonPatchOperationSerializer extends JsonSerializer { +final class JsonPatchOperationSerializer extends JsonSerializer { @Override public void serialize(JsonPatchOperation value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java index 090072a409e1..eb390c706729 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/logging/ClientLogger.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.Objects; +import java.util.regex.Pattern; /** * This is a fluent logger helper class that wraps a pluggable {@link Logger}. @@ -35,6 +36,7 @@ * @see Configuration */ public class ClientLogger { + private static final Pattern CRLF_PATTERN = Pattern.compile("[\r\n]"); private final Logger logger; /** @@ -70,7 +72,7 @@ public ClientLogger(String className) { */ public void verbose(String message) { if (logger.isDebugEnabled()) { - logger.debug(message); + logger.debug(sanitizeLogMessageInput(message)); } } @@ -106,7 +108,7 @@ public void verbose(String format, Object... args) { */ public void info(String message) { if (logger.isInfoEnabled()) { - logger.info(message); + logger.info(sanitizeLogMessageInput(message)); } } @@ -142,7 +144,7 @@ public void info(String format, Object... args) { */ public void warning(String message) { if (logger.isWarnEnabled()) { - logger.warn(message); + logger.warn(sanitizeLogMessageInput(message)); } } @@ -178,7 +180,7 @@ public void warning(String format, Object... args) { */ public void error(String message) { if (logger.isErrorEnabled()) { - logger.error(message); + logger.error(sanitizeLogMessageInput(message)); } } @@ -327,6 +329,7 @@ private void performLogging(LogLevel logLevel, boolean isExceptionLogging, Strin } } + sanitizeLogMessageInput(format); switch (logLevel) { case VERBOSE: logger.debug(format, args); @@ -401,4 +404,14 @@ private boolean doesArgsHaveThrowable(Object... args) { private Object[] removeThrowable(Object... args) { return Arrays.copyOf(args, args.length - 1); } + + /** + * Removes CRLF pattern in the {@code logMessage}. + * + * @param logMessage The log message to sanitize. + * @return The updated logMessage. + */ + private static String sanitizeLogMessageInput(String logMessage) { + return CRLF_PATTERN.matcher(logMessage).replaceAll(""); + } } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java index f080043d7799..82131dd5b04a 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JsonSerializerProviders.java @@ -10,8 +10,12 @@ * This class is a proxy for using a {@link JsonSerializerProvider} loaded from the classpath. */ public final class JsonSerializerProviders { - private static final String CANNOT_FIND_JSON_SERIALIZER_PROVIDER = - "Cannot find any JSON serializer provider on the classpath."; + private static final String CANNOT_FIND_JSON_SERIALIZER_PROVIDER = "A request was made to load the default JSON " + + "serializer provider but one could not be found on the classpath. If you are using a dependency manager, " + + "consider including a dependency on azure-core-serializer-json-jackson or azure-core-serializer-json-gson. " + + "Depending on your existing dependencies, you have the choice of Jackson or GSON implementations. " + + "Additionally, refer to https://aka.ms/azsdk/java/docs/custom-jsonserializer to learn about writing your own " + + "implementation."; private static JsonSerializerProvider defaultProvider; private static boolean attemptedLoad; diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java index 96e31e26bb4c..e530bd35731e 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/util/JsonPatchDocumentTests.java @@ -42,6 +42,13 @@ public void jsonifyDocument(JsonPatchDocument document, String expected) throws assertEquals(expected, SERIALIZER.serialize(document, SerializerEncoding.JSON).replace(" ", "")); } + @ParameterizedTest + @MethodSource("formattingSupplier") + public void jsonifyOperations(JsonPatchDocument document, String expected) throws IOException { + assertEquals(expected, SERIALIZER.serialize(document.getOperations(), SerializerEncoding.JSON) + .replace(" ", "")); + } + private static Stream formattingSupplier() { JsonPatchDocument complexDocument = newDocument() .appendTest("/a/b/c", "foo") diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java index 91b4c78d6845..11d6a8a804da 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/util/logging/ClientLoggerTests.java @@ -80,6 +80,30 @@ public void logSimpleMessage(LogLevel logLevelToConfigure, LogLevel logLevelToUs assertEquals(logContainsMessage, logValues.contains(logMessage)); } + /** + * Test whether a log will be captured when the ClientLogger and message are configured to the passed log levels. + */ + @ParameterizedTest + @MethodSource("logMaliciousErrorSupplier") + @ResourceLock("SYSTEM_OUT") + public void logMaliciousMessage(LogLevel logLevelToConfigure, LogLevel logLevelToUse) + throws UnsupportedEncodingException { + String logMessage = "You have successfully authenticated, \r\n[INFO] User dummy was not" + + " successfully authenticated."; + + String expectedMessage = "You have successfully authenticated, [INFO] User dummy was not" + + " successfully authenticated."; + + String originalLogLevel = setupLogLevel(logLevelToConfigure.getLogLevel()); + logMessage(new ClientLogger(ClientLoggerTests.class), logLevelToUse, logMessage); + + setPropertyToOriginalOrClear(originalLogLevel); + + String logValues = logCaptureStream.toString("UTF-8"); + System.out.println(logValues); + assertEquals(true, logValues.contains(expectedMessage)); + } + @ParameterizedTest @MethodSource("singleLevelCheckSupplier") @ResourceLock("SYSTEM_OUT") @@ -461,6 +485,41 @@ private static Stream multiLevelCheckSupplier() { ); } + private static Stream logMaliciousErrorSupplier() { + return Stream.of( + // Supported logging level set to VERBOSE. + // Checking VERBOSE. + Arguments.of(LogLevel.VERBOSE, LogLevel.VERBOSE, true), + + // Checking INFORMATIONAL. + Arguments.of(LogLevel.VERBOSE, LogLevel.INFORMATIONAL, true), + + // Checking WARNING. + Arguments.of(LogLevel.VERBOSE, LogLevel.WARNING, true), + + // Checking ERROR. + Arguments.of(LogLevel.VERBOSE, LogLevel.ERROR, true), + + // Checking INFORMATIONAL. + Arguments.of(LogLevel.INFORMATIONAL, LogLevel.INFORMATIONAL, true), + + // Checking WARNING. + Arguments.of(LogLevel.INFORMATIONAL, LogLevel.WARNING, true), + + // Checking ERROR. + Arguments.of(LogLevel.INFORMATIONAL, LogLevel.ERROR, true), + + // Checking WARNING. + Arguments.of(LogLevel.WARNING, LogLevel.WARNING, true), + + // Checking ERROR. + Arguments.of(LogLevel.WARNING, LogLevel.ERROR, true), + + // Checking ERROR. + Arguments.of(LogLevel.ERROR, LogLevel.ERROR, true) + ); + } + private static Stream logExceptionAsWarningSupplier() { return Stream.of( Arguments.of(LogLevel.VERBOSE, true, true), diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java index d7bd9a56153b..7f3622d00374 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/query/DocumentProducer.java @@ -147,7 +147,9 @@ public DocumentProducer( this.correlatedActivityId = correlatedActivityId; - this.cosmosQueryRequestOptions = cosmosQueryRequestOptions != null ? cosmosQueryRequestOptions : new CosmosQueryRequestOptions(); + this.cosmosQueryRequestOptions = cosmosQueryRequestOptions != null ? + ModelBridgeInternal.createQueryRequestOptions(cosmosQueryRequestOptions) + : new CosmosQueryRequestOptions(); ModelBridgeInternal.setQueryRequestOptionsContinuationToken(this.cosmosQueryRequestOptions, initialContinuationToken); this.lastResponseContinuationToken = initialContinuationToken; this.resourceType = resourceType; diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java index 1f7374d2502d..84949cab3a39 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsAsyncClient.java @@ -741,13 +741,13 @@ Mono> listIncomingRelationshipsNextSinglePag * * {@codesnippet com.azure.digitaltwins.core.asyncClient.createModels#Iterable} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @return A List of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Mono> createModels(Iterable models) { - return createModelsWithResponse(models, null) + public Mono> createModels(Iterable dtdlModels) { + return createModelsWithResponse(dtdlModels, null) .map(Response::getValue); } @@ -758,19 +758,19 @@ public Mono> createModels(Iterable model * * {@codesnippet com.azure.digitaltwins.core.asyncClient.createModelsWithResponse#Iterable-Options} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @param options The optional parameters for this request. If null, the default option values will be used. * @return A {@link Response} containing the list of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Mono>> createModelsWithResponse(Iterable models, CreateModelsOptions options) { - return withContext(context -> createModelsWithResponse(models, options, context)); + public Mono>> createModelsWithResponse(Iterable dtdlModels, CreateModelsOptions options) { + return withContext(context -> createModelsWithResponse(dtdlModels, options, context)); } - Mono>> createModelsWithResponse(Iterable models, CreateModelsOptions options, Context context) { + Mono>> createModelsWithResponse(Iterable dtdlModels, CreateModelsOptions options, Context context) { List modelsPayload = new ArrayList<>(); - for (String model : models) { + for (String model : dtdlModels) { try { modelsPayload.add(mapper.readValue(model, Object.class)); } diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java index a6f68d1bf297..957297dd3019 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/DigitalTwinsClient.java @@ -506,13 +506,13 @@ public PagedIterable listIncomingRelationships(String digi * * {@codesnippet com.azure.digitaltwins.core.syncClient.createModels#Iterable} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @return A List of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Iterable createModels(Iterable models) { - return createModelsWithResponse(models, null, Context.NONE).getValue(); + public Iterable createModels(Iterable dtdlModels) { + return createModelsWithResponse(dtdlModels, null, Context.NONE).getValue(); } /** @@ -522,15 +522,15 @@ public Iterable createModels(Iterable models) { * * {@codesnippet com.azure.digitaltwins.core.syncClient.createModelsWithResponse#Iterable} * - * @param models The list of models to create. Each string corresponds to exactly one model. + * @param dtdlModels The list of models to create. Each string corresponds to exactly one model. * @param options The optional parameters for this request. If null, the default option values will be used. * @param context Additional context that is passed through the Http pipeline during the service call. * @return A {@link Response} containing the list of created models. Each {@link DigitalTwinsModelData} instance in this list * will contain metadata about the created model, but will not contain the model itself. */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Response> createModelsWithResponse(Iterable models, CreateModelsOptions options, Context context) { - return digitalTwinsAsyncClient.createModelsWithResponse(models, options, context).block(); + public Response> createModelsWithResponse(Iterable dtdlModels, CreateModelsOptions options, Context context) { + return digitalTwinsAsyncClient.createModelsWithResponse(dtdlModels, options, context).block(); } /** diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java index 76d692fca598..beaadfcc4c9f 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/main/java/com/azure/digitaltwins/core/models/DigitalTwinsModelData.java @@ -49,24 +49,24 @@ public final class DigitalTwinsModelData { private boolean decommissioned; /* - * The model definition. + * The model definition that conforms to Digital Twins Definition Language (DTDL) v2. */ @JsonProperty(value = "model") - private String model; + private String dtdlModel; /** * Construct a new DigitalTwinsModelData instance. This class should only be constructed internally since the * service never takes this as an input. * * @param modelId The Id of the model. - * @param model The contents of the model. + * @param dtdlModel The contents of the model. * @param displayName The language map of the localized display names. * @param description The language map of the localized descriptions. * @param uploadTime The time when this model was uploaded. * @param decommissioned If this model has been decommissioned. */ public DigitalTwinsModelData(String modelId, - String model, + String dtdlModel, Map displayName, Map description, OffsetDateTime uploadTime, @@ -76,7 +76,7 @@ public DigitalTwinsModelData(String modelId, this.id = modelId; this.uploadTime = uploadTime; this.decommissioned = decommissioned; - this.model = model; + this.dtdlModel = dtdlModel; } /** @@ -132,7 +132,7 @@ public boolean isDecommissioned() { * * @return the model value. */ - public String getModel() { - return this.model; + public String getDtdlModel() { + return this.dtdlModel; } } diff --git a/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java index c32cfb502119..3de19c55b9aa 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java +++ b/sdk/digitaltwins/azure-digitaltwins-core/src/test/java/com/azure/digitaltwins/core/ModelsTestBase.java @@ -60,7 +60,7 @@ static void assertModelDataAreEqual(DigitalTwinsModelData expected, DigitalTwins // ModelData objects that are obtained through the createModels API do not populate the model field, so it isn't // worth comparing those ModelData objects with ModelData objects retrieved through getModel calls if (compareModel) { - assertEquals(expected.getModel(), actual.getModel()); + assertEquals(expected.getDtdlModel(), actual.getDtdlModel()); } assertEquals(expected.getDescriptionLanguageMap().size(), actual.getDescriptionLanguageMap().size()); diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java index a21eb74f8f0b..0ffe23f98ad1 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubClientBuilder.java @@ -18,6 +18,7 @@ import com.azure.core.amqp.implementation.TokenManagerProvider; import com.azure.core.amqp.implementation.TracerProvider; import com.azure.core.annotation.ServiceClientBuilder; +import com.azure.core.annotation.ServiceClientProtocol; import com.azure.core.credential.TokenCredential; import com.azure.core.exception.AzureException; import com.azure.core.util.ClientOptions; @@ -94,7 +95,7 @@ * @see EventHubConsumerClient */ @ServiceClientBuilder(serviceClients = {EventHubProducerAsyncClient.class, EventHubProducerClient.class, - EventHubConsumerAsyncClient.class, EventHubConsumerClient.class}) + EventHubConsumerAsyncClient.class, EventHubConsumerClient.class}, protocol = ServiceClientProtocol.AMQP) public class EventHubClientBuilder { // Default number of events to fetch when creating the consumer. diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java index 50c3d59d86f2..ee88f75aa6b0 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerAsyncClient.java @@ -140,6 +140,7 @@ public Mono getEventHubProperties() { * * @return A Flux of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux getPartitionIds() { return getEventHubProperties().flatMapMany(properties -> Flux.fromIterable(properties.getPartitionIds())); } @@ -177,6 +178,7 @@ public Mono getPartitionProperties(String partitionId) { * @throws NullPointerException if {@code partitionId}, or {@code startingPosition} is null. * @throws IllegalArgumentException if {@code partitionId} is an empty string. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receiveFromPartition(String partitionId, EventPosition startingPosition) { return receiveFromPartition(partitionId, startingPosition, defaultReceiveOptions); } @@ -205,6 +207,7 @@ public Flux receiveFromPartition(String partitionId, EventPositi * null. * @throws IllegalArgumentException if {@code partitionId} is an empty string. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receiveFromPartition(String partitionId, EventPosition startingPosition, ReceiveOptions receiveOptions) { if (Objects.isNull(partitionId)) { @@ -235,6 +238,7 @@ public Flux receiveFromPartition(String partitionId, EventPositi * * @return A stream of events for every partition in the Event Hub starting from the beginning of each partition. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receive() { return receive(true, defaultReceiveOptions); } @@ -256,6 +260,7 @@ public Flux receive() { * * @return A stream of events for every partition in the Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receive(boolean startReadingAtEarliestEvent) { return receive(startReadingAtEarliestEvent, defaultReceiveOptions); } @@ -289,6 +294,7 @@ public Flux receive(boolean startReadingAtEarliestEvent) { * * @throws NullPointerException if {@code receiveOptions} is null. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux receive(boolean startReadingAtEarliestEvent, ReceiveOptions receiveOptions) { if (Objects.isNull(receiveOptions)) { return fluxError(logger, new NullPointerException("'receiveOptions' cannot be null.")); diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java index bc985d7c54be..7abf3cd381d5 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubConsumerClient.java @@ -94,6 +94,7 @@ public EventHubProperties getEventHubProperties() { * * @return The set of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream getPartitionIds() { return new IterableStream<>(consumer.getPartitionIds()); } @@ -128,6 +129,7 @@ public PartitionProperties getPartitionProperties(String partitionId) { * @throws IllegalArgumentException if {@code maximumMessageCount} is less than 1, or if {@code partitionId} is an * empty string. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream receiveFromPartition(String partitionId, int maximumMessageCount, EventPosition startingPosition) { return receiveFromPartition(partitionId, maximumMessageCount, startingPosition, timeout); @@ -150,6 +152,7 @@ public IterableStream receiveFromPartition(String partitionId, i * @throws IllegalArgumentException if {@code maximumMessageCount} is less than 1 or {@code maximumWaitTime} is * zero or a negative duration. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream receiveFromPartition(String partitionId, int maximumMessageCount, EventPosition startingPosition, Duration maximumWaitTime) { if (Objects.isNull(maximumWaitTime)) { @@ -197,6 +200,7 @@ public IterableStream receiveFromPartition(String partitionId, i * @throws IllegalArgumentException if {@code maximumMessageCount} is less than 1 or {@code maximumWaitTime} is * zero or a negative duration. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream receiveFromPartition(String partitionId, int maximumMessageCount, EventPosition startingPosition, Duration maximumWaitTime, ReceiveOptions receiveOptions) { if (Objects.isNull(maximumWaitTime)) { diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java index 2a502d8afc86..760b7d6b135d 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java @@ -171,6 +171,7 @@ public Mono getEventHubProperties() { * * @return A Flux of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public Flux getPartitionIds() { return getEventHubProperties().flatMapMany(properties -> Flux.fromIterable(properties.getPartitionIds())); } @@ -194,6 +195,7 @@ public Mono getPartitionProperties(String partitionId) { * * @return A new {@link EventDataBatch} that can fit as many events as the transport allows. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono createBatch() { return createBatch(DEFAULT_BATCH_OPTIONS); } @@ -205,6 +207,7 @@ public Mono createBatch() { * @return A new {@link EventDataBatch} that can fit as many events as the transport allows. * @throws NullPointerException if {@code options} is null. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono createBatch(CreateBatchOptions options) { if (options == null) { return monoError(logger, new NullPointerException("'options' cannot be null.")); @@ -312,6 +315,7 @@ Mono send(EventData event, SendOptions options) { * @return A {@link Mono} that completes when all events are pushed to the service. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono send(Iterable events) { if (events == null) { return monoError(logger, new NullPointerException("'events' cannot be null.")); @@ -338,6 +342,7 @@ public Mono send(Iterable events) { * @return A {@link Mono} that completes when all events are pushed to the service. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono send(Iterable events, SendOptions options) { if (events == null) { return monoError(logger, new NullPointerException("'events' cannot be null.")); @@ -392,6 +397,7 @@ Mono send(Flux events, SendOptions options) { * @see EventHubProducerAsyncClient#createBatch() * @see EventHubProducerAsyncClient#createBatch(CreateBatchOptions) */ + @ServiceMethod(returns = ReturnType.SINGLE) public Mono send(EventDataBatch batch) { if (batch == null) { return monoError(logger, new NullPointerException("'batch' cannot be null.")); diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java index 700fd8d9c648..f805d67b2c25 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerClient.java @@ -100,6 +100,7 @@ public EventHubProperties getEventHubProperties() { * * @return A Flux of identifiers for the partitions of an Event Hub. */ + @ServiceMethod(returns = ReturnType.COLLECTION) public IterableStream getPartitionIds() { return new IterableStream<>(producer.getPartitionIds()); } @@ -122,6 +123,7 @@ public PartitionProperties getPartitionProperties(String partitionId) { * * @return A new {@link EventDataBatch} that can fit as many events as the transport allows. */ + @ServiceMethod(returns = ReturnType.SINGLE) public EventDataBatch createBatch() { return producer.createBatch().block(tryTimeout); } @@ -135,6 +137,7 @@ public EventDataBatch createBatch() { * * @throws NullPointerException if {@code options} is null. */ + @ServiceMethod(returns = ReturnType.SINGLE) public EventDataBatch createBatch(CreateBatchOptions options) { return producer.createBatch(options).block(tryTimeout); } @@ -151,6 +154,7 @@ public EventDataBatch createBatch(CreateBatchOptions options) { * * @param event Event to send to the service. */ + @ServiceMethod(returns = ReturnType.SINGLE) void send(EventData event) { producer.send(event).block(); } @@ -168,6 +172,7 @@ void send(EventData event) { * @param event Event to send to the service. * @param options The set of options to consider when sending this event. */ + @ServiceMethod(returns = ReturnType.SINGLE) void send(EventData event, SendOptions options) { producer.send(event, options).block(); } @@ -188,6 +193,7 @@ void send(EventData event, SendOptions options) { * @param events Events to send to the service. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public void send(Iterable events) { producer.send(events).block(); } @@ -209,6 +215,7 @@ public void send(Iterable events) { * @param options The set of options to consider when sending this batch. * @throws AmqpException if the size of {@code events} exceed the maximum size of a single batch. */ + @ServiceMethod(returns = ReturnType.SINGLE) public void send(Iterable events, SendOptions options) { producer.send(events, options).block(); } @@ -221,6 +228,7 @@ public void send(Iterable events, SendOptions options) { * @see EventHubProducerClient#createBatch() * @see EventHubProducerClient#createBatch(CreateBatchOptions) */ + @ServiceMethod(returns = ReturnType.SINGLE) public void send(EventDataBatch batch) { producer.send(batch).block(); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md b/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md index f05c9ac0147c..b730ce667093 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md +++ b/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md @@ -10,6 +10,11 @@ - Added support for providing locale info when recognizing receipts and business cards. Supported locales include support EN-US, EN-AU, EN-CA, EN-GB, EN-IN. - Added support for pre-built business card recognition. +- Added support to `beginRecognizeContent` to recognize selection marks such as check boxes and radio buttons. +- Added support to train and recognize custom forms with selection marks such as check boxes and radio buttons. +This functionality is only available in trained with labels scenarios. +- When passing `includeFieldElements` as true in `RecognizeCustomFormsOptions`, the property `fieldElements` on `FieldData` +and `FormTableCell` will also be populated with any selection marks found on the page. ### Breaking changes - Defaults to the latest supported API version, which currently is `2.1-preview.1`. diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/README.md b/sdk/formrecognizer/azure-ai-formrecognizer/README.md index becf1de61838..c420405ba47a 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/README.md +++ b/sdk/formrecognizer/azure-ai-formrecognizer/README.md @@ -219,8 +219,9 @@ for (int i = 0; i < recognizedForms.size(); i++) { ``` ### Recognize Content -Recognize text and table structures, along with their bounding box coordinates, from documents. - +Recognize text, table structures and selection marks like radio buttons and check boxes, along with their bounding box +coordinates, from documents, without the need to train a model. + ```java // recognize form content using file input stream File form = new File("local/file_path/filename.png"); @@ -245,6 +246,11 @@ for (int i = 0; i < contentPageResults.size(); i++) { formTable.getCells().forEach(formTableCell -> System.out.printf("Cell has text %s.%n", formTableCell.getText())); }); + // Selection Mark + formPage.getSelectionMarks().forEach(selectionMark -> System.out.printf( + "Page: %s, Selection mark is %s within bounding box %s has a confidence score %.2f.%n", + selectionMark.getPageNumber(), selectionMark.getState(), selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence())); } ``` @@ -254,7 +260,7 @@ can be found [here][service_recognize_receipt]. See [StronglyTypedRecognizedForm][strongly_typed_sample] for a suggested approach to extract information from receipts. - + ```java String receiptUrl = "https://docs.microsoft.com/azure/cognitive-services/form-recognizer/media" + "/contoso-allinone.jpg"; @@ -321,7 +327,7 @@ can be found [here][service_recognize_business_card]. See [StronglyTypedRecognizedForm][strongly_typed_sample] for a suggested approach to extract information from a business card. The given sample is for `receipt` but the same approach applies to `business card`. - + ```java String businessCardUrl = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/master/sdk/formrecognizer" @@ -384,7 +390,7 @@ for (int i = 0; i < businessCardPageResults.size(); i++) { Train a machine-learned model on your own form type. The resulting model will be able to recognize values from the types of forms it was trained on. Provide a container SAS url to your Azure Storage Blob container where you're storing the training documents. See details on setting this up in the [service quickstart documentation][quickstart_training]. - + ```java String trainingFilesUrl = "{SAS_URL_of_your_container_in_blob_storage}"; SyncPoller trainingPoller = @@ -417,7 +423,7 @@ customFormModel.getSubmodels().forEach(customFormSubmodel -> { ### Manage your models Manage the custom models in your Form Recognizer account. - + ```java // First, we see how many custom models we have, and what our limit is AccountProperties accountProperties = formTrainingClient.getAccountProperties(); @@ -458,7 +464,7 @@ to provide an invalid file source URL an `HttpResponseException` would be raised In the following code snippet, the error is handled gracefully by catching the exception and display the additional information about the error. - + ```java try { formRecognizerClient.beginRecognizeContentFromUrl("invalidSourceUrl"); @@ -493,7 +499,7 @@ These code samples show common scenario operations with the Azure Form Recognize #### Async APIs All the examples shown so far have been using synchronous APIs, but we provide full support for async APIs as well. You'll need to use `FormRecognizerAsyncClient` - + ```java FormRecognizerAsyncClient formRecognizerAsyncClient = new FormRecognizerClientBuilder() .credential(new AzureKeyCredential("{key}")) diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java index 9a8b6272cb3e..8af6d97957de 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClient.java @@ -153,7 +153,7 @@ isFieldElementsIncluded, new SourcePath().setSource(formUrl), context) .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - modelId)) + modelId, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -246,7 +246,7 @@ isFieldElementsIncluded, new SourcePath().setSource(formUrl), context) .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - modelId)) + modelId, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -478,7 +478,7 @@ PollerFlux> beginRecognizeContent( .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -573,7 +573,7 @@ public PollerFlux> beginReco .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm(modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, false)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -655,7 +655,7 @@ PollerFlux> beginRecognizeBu .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm( modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, true)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); @@ -748,7 +748,7 @@ PollerFlux> beginRecognizeBu .andThen(after -> after.map(modelSimpleResponse -> toRecognizedForm( modelSimpleResponse.getValue().getAnalyzeResult(), isFieldElementsIncluded, - null)) + null, true)) .onErrorMap(Utility::mapToHttpResponseExceptionIfExist))); } catch (RuntimeException ex) { return PollerFlux.error(ex); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java index 5818a038515b..e7210807b508 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/FormRecognizerClientBuilder.java @@ -31,7 +31,6 @@ import java.net.MalformedURLException; import java.net.URL; -import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; @@ -99,7 +98,6 @@ public final class FormRecognizerClientBuilder { private FormRecognizerServiceVersion version; static final String OCP_APIM_SUBSCRIPTION_KEY = "Ocp-Apim-Subscription-Key"; - static final Duration DEFAULT_DURATION = Duration.ofSeconds(5); /** * The constructor with defaults. */ diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java index bffe38efdeab..74bb99310c86 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/Transforms.java @@ -7,9 +7,11 @@ import com.azure.ai.formrecognizer.implementation.models.AnalyzeResult; import com.azure.ai.formrecognizer.implementation.models.DocumentResult; import com.azure.ai.formrecognizer.implementation.models.FieldValue; +import com.azure.ai.formrecognizer.implementation.models.FieldValueSelectionMark; import com.azure.ai.formrecognizer.implementation.models.KeyValuePair; import com.azure.ai.formrecognizer.implementation.models.PageResult; import com.azure.ai.formrecognizer.implementation.models.ReadResult; +import com.azure.ai.formrecognizer.implementation.models.SelectionMarkState; import com.azure.ai.formrecognizer.implementation.models.TextLine; import com.azure.ai.formrecognizer.implementation.models.TextWord; import com.azure.ai.formrecognizer.models.FieldBoundingBox; @@ -20,6 +22,7 @@ import com.azure.ai.formrecognizer.models.FormLine; import com.azure.ai.formrecognizer.models.FormPage; import com.azure.ai.formrecognizer.models.FormPageRange; +import com.azure.ai.formrecognizer.models.FormSelectionMark; import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormTableCell; import com.azure.ai.formrecognizer.models.FormWord; @@ -42,6 +45,7 @@ import static com.azure.ai.formrecognizer.implementation.Utility.forEachWithIndex; import static com.azure.ai.formrecognizer.implementation.models.FieldValueType.ARRAY; +import static com.azure.ai.formrecognizer.implementation.models.FieldValueType.OBJECT; /** * Helper class to convert service level models to SDK exposed models. @@ -63,10 +67,11 @@ private Transforms() { * @param includeFieldElements Boolean to indicate if to set reference elements data on fields. * * @param modelId the unlabeled model Id used for recognition. + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The List of {@code RecognizedForm}. */ static List toRecognizedForm(AnalyzeResult analyzeResult, boolean includeFieldElements, - String modelId) { + String modelId, boolean isBusinessCard) { List readResults = analyzeResult.getReadResults(); List documentResults = analyzeResult.getDocumentResults(); List pageResults = analyzeResult.getPageResults(); @@ -85,7 +90,8 @@ static List toRecognizedForm(AnalyzeResult analyzeResult, boolea formPageRange = new FormPageRange(1, 1); } - Map extractedFieldMap = getLabeledFieldMap(documentResultItem, readResults); + Map extractedFieldMap = getLabeledFieldMap(documentResultItem, readResults, + isBusinessCard); final RecognizedForm recognizedForm = new RecognizedForm( extractedFieldMap, documentResultItem.getDocType(), @@ -141,6 +147,7 @@ static List toRecognizedLayout(AnalyzeResult analyzeResult, boolean in forEachWithIndex(readResults, ((index, readResultItem) -> { List perPageTableList = new ArrayList<>(); + // add form tables if (!pageResultsIsNullOrEmpty) { PageResult pageResultItem = pageResults.get(index); perPageTableList = getPageTables(pageResultItem, readResults, pageResultItem.getPage()); @@ -152,13 +159,51 @@ static List toRecognizedLayout(AnalyzeResult analyzeResult, boolean in perPageFormLineList = getReadResultFormLines(readResultItem); } - // get form tables - formPages.add(getFormPage(readResultItem, perPageTableList, perPageFormLineList)); + // add selection marks + List perPageFormSelectionMarkList = new ArrayList<>(); + if (includeFieldElements && !CoreUtils.isNullOrEmpty(readResultItem.getSelectionMarks())) { + PageResult pageResultItem = pageResults.get(index); + perPageFormSelectionMarkList = getReadResultFormSelectionMarks(readResultItem, + pageResultItem.getPage()); + } + + formPages.add(getFormPage(readResultItem, perPageTableList, perPageFormLineList, + perPageFormSelectionMarkList)); })); return formPages; } + /** + * Helper method to convert the per page {@link ReadResult} item to {@link FormSelectionMark}. + * + * @param readResultItem The per page text extraction item result returned by the service. + * @param pageNumber The page number. + * + * @return A list of {@code FormSelectionMark}. + */ + static List getReadResultFormSelectionMarks(ReadResult readResultItem, int pageNumber) { + return readResultItem.getSelectionMarks().stream() + .map(selectionMark -> { + final FormSelectionMark formSelectionMark = new FormSelectionMark( + null, toBoundingBox(selectionMark.getBoundingBox()), pageNumber); + final SelectionMarkState selectionMarkStateImpl = selectionMark.getState(); + com.azure.ai.formrecognizer.models.SelectionMarkState selectionMarkState = null; + if (SelectionMarkState.SELECTED.equals(selectionMarkStateImpl)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.SELECTED; + } else if (SelectionMarkState.UNSELECTED.equals(selectionMarkStateImpl)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.UNSELECTED; + } else { + throw LOGGER.logThrowableAsError(new RuntimeException( + String.format("%s, unsupported selection mark state.", selectionMarkStateImpl))); + } + PrivateFieldAccessHelper.set(formSelectionMark, "confidence", selectionMark.getConfidence()); + PrivateFieldAccessHelper.set(formSelectionMark, "state", selectionMarkState); + return formSelectionMark; + }) + .collect(Collectors.toList()); + } + /** * Helper method to get per-page table information. * @@ -209,10 +254,11 @@ static List getReadResultFormLines(ReadResult readResultItem) { * * @param documentResultItem The extracted document level information. * @param readResults The text extraction result returned by the service. + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The {@link RecognizedForm#getFields}. */ private static Map getLabeledFieldMap(DocumentResult documentResultItem, - List readResults) { + List readResults, boolean isBusinessCard) { Map recognizedFieldMap = new LinkedHashMap<>(); // add receipt fields if (!CoreUtils.isNullOrEmpty(documentResultItem.getFields())) { @@ -226,7 +272,7 @@ private static Map getLabeledFieldMap(DocumentResult document valueData = new FieldData(fieldValue.getText(), toBoundingBox(fieldValue.getBoundingBox()), fieldValue.getPage(), formElementList); } - recognizedFieldMap.put(key, setFormField(key, valueData, fieldValue, readResults)); + recognizedFieldMap.put(key, setFormField(key, valueData, fieldValue, readResults, isBusinessCard)); } else { recognizedFieldMap.put(key, new FormField(key, null, null, null, DEFAULT_CONFIDENCE_VALUE)); @@ -241,14 +287,15 @@ private static Map getLabeledFieldMap(DocumentResult document * {@link FormField} with reference elements set when {@code includeFieldElements} is set to true. * * @param name The name of the field. - * @param fieldValue The named field values returned by the service. * @param valueData The value text of the field. + * @param fieldValue The named field values returned by the service. * @param readResults The text extraction result returned by the service. * + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The strongly typed {@link FormField} for the field input. */ private static FormField setFormField(String name, FieldData valueData, FieldValue fieldValue, - List readResults) { + List readResults, boolean isBusinessCard) { com.azure.ai.formrecognizer.models.FieldValue value; switch (fieldValue.getType()) { case PHONE_NUMBER: @@ -286,17 +333,37 @@ private static FormField setFormField(String name, FieldData valueData, FieldVal break; case ARRAY: value = new com.azure.ai.formrecognizer.models.FieldValue( - toFieldValueArray(fieldValue.getValueArray(), readResults), FieldValueType.LIST); + toFieldValueArray(fieldValue.getValueArray(), readResults, isBusinessCard), FieldValueType.LIST); break; case OBJECT: value = new com.azure.ai.formrecognizer.models.FieldValue( - toFieldValueObject(fieldValue.getValueObject(), readResults), FieldValueType.MAP); + toFieldValueObject(fieldValue.getValueObject(), readResults, isBusinessCard), FieldValueType.MAP); + break; + case SELECTION_MARK: + com.azure.ai.formrecognizer.models.SelectionMarkState selectionMarkState = null; + final FieldValueSelectionMark fieldValueSelectionMarkState = fieldValue.getValueSelectionMark(); + if (FieldValueSelectionMark.SELECTED.equals(fieldValueSelectionMarkState)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.SELECTED; + } else if (FieldValueSelectionMark.UNSELECTED.equals(fieldValueSelectionMarkState)) { + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.UNSELECTED; + } else { + // TODO: (ServiceBug) + // Currently, the fieldValue's valueSelectionMark is null which is incorrect. + // Use the fieldValue's text as the temperately solution. + selectionMarkState = com.azure.ai.formrecognizer.models.SelectionMarkState.fromString( + fieldValue.getText()); + // throw LOGGER.logThrowableAsError(new RuntimeException( + // String.format("%s, unsupported selection mark state.", selectionMarkState))); + } + value = new com.azure.ai.formrecognizer.models.FieldValue(selectionMarkState, + FieldValueType.SELECTION_MARK_STATE); break; default: throw LOGGER.logExceptionAsError(new RuntimeException("FieldValue Type not supported")); } - return new FormField(name, null, valueData, value, setDefaultConfidenceValue(fieldValue.getConfidence())); + return new FormField(name, null, valueData, value, + setDefaultConfidenceValue(fieldValue.getConfidence())); } /** @@ -317,10 +384,11 @@ private static float setDefaultConfidenceValue(Float confidence) { * * @param valueObject The array of field values returned by the service in {@link FieldValue#getValueObject()}. * + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The Map of {@link FormField}. */ private static Map toFieldValueObject(Map valueObject, - List readResults) { + List readResults, boolean isBusinessCard) { Map fieldValueObjectMap = new TreeMap<>(); valueObject.forEach((key, fieldValue) -> fieldValueObjectMap.put(key, @@ -330,7 +398,7 @@ private static Map toFieldValueObject(Map fieldValue.getPage(), setReferenceElements(fieldValue.getElements(), readResults)), fieldValue, - readResults) + readResults, isBusinessCard) )); return fieldValueObjectMap; } @@ -342,20 +410,32 @@ private static Map toFieldValueObject(Map * * @param valueArray The array of field values returned by the service in {@link FieldValue#getValueArray()}. * @param readResults The text extraction result returned by the service. - * + * @param isBusinessCard boolean indicating if its recognizing a business card. * @return The List of {@link FormField}. */ - private static List toFieldValueArray(List valueArray, List readResults) { + private static List toFieldValueArray(List valueArray, List readResults, + boolean isBusinessCard) { return valueArray.stream() .map(fieldValue -> { FieldData valueData = null; // ARRAY has ho value data, such as bounding box. - if (ARRAY != fieldValue.getType()) { + if (ARRAY != fieldValue.getType() && OBJECT != fieldValue.getType()) { valueData = new FieldData(fieldValue.getText(), toBoundingBox(fieldValue.getBoundingBox()), - fieldValue.getPage() == null ? 1 : fieldValue.getPage(), + fieldValue.getPage(), setReferenceElements(fieldValue.getElements(), readResults)); + } else if (isBusinessCard && OBJECT.equals(fieldValue.getType())) { + // TODO: (savaity) Service bug, update after fixed. + if (fieldValue.getValueObject().get("FirstName") != null + && fieldValue.getValueObject().get("LastName") != null) { + if (fieldValue.getValueObject().get("FirstName").getPage() + .equals(fieldValue.getValueObject().get("LastName").getPage())) { + valueData = new FieldData(fieldValue.getText(), toBoundingBox(fieldValue.getBoundingBox()), + fieldValue.getValueObject().get("FirstName").getPage(), + setReferenceElements(fieldValue.getElements(), readResults)); + } + } } - return setFormField(null, valueData, fieldValue, readResults); + return setFormField(null, valueData, fieldValue, readResults, isBusinessCard); }) .collect(Collectors.toList()); } @@ -366,12 +446,13 @@ private static List toFieldValueArray(List valueArray, Li * @param readResultItem The per page text extraction item result returned by the service. * @param perPageTableList The per page tables list. * @param perPageLineList The per page form lines. + * @param perPageSelectionMarkList The per page selection marks. * * @return The per page {@code FormPage}. */ private static FormPage getFormPage(ReadResult readResultItem, List perPageTableList, - List perPageLineList) { - return new FormPage( + List perPageLineList, List perPageSelectionMarkList) { + FormPage formPage = new FormPage( readResultItem.getHeight(), readResultItem.getAngle(), LengthUnit.fromString(readResultItem.getUnit().toString()), @@ -379,6 +460,8 @@ private static FormPage getFormPage(ReadResult readResultItem, List p perPageLineList, perPageTableList, readResultItem.getPage()); + PrivateFieldAccessHelper.set(formPage, "selectionMarks", perPageSelectionMarkList); + return formPage; } /** diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java index 2feb9692eb11..9a90df0d67bc 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/CreateComposedModelOptions.java @@ -7,12 +7,13 @@ import java.time.Duration; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; + /** * The configurable options to pass when creating a composed model. */ @Fluent public final class CreateComposedModelOptions { - private static final Duration DEFAULT_POLL_INTERVAL = Duration.ofSeconds(5); private String modelName; private Duration pollInterval = DEFAULT_POLL_INTERVAL; diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java index a08b228a3e8e..7e36482b65e9 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValue.java @@ -17,6 +17,7 @@ import static com.azure.ai.formrecognizer.models.FieldValueType.LONG; import static com.azure.ai.formrecognizer.models.FieldValueType.MAP; import static com.azure.ai.formrecognizer.models.FieldValueType.PHONE_NUMBER; +import static com.azure.ai.formrecognizer.models.FieldValueType.SELECTION_MARK_STATE; import static com.azure.ai.formrecognizer.models.FieldValueType.STRING; import static com.azure.ai.formrecognizer.models.FieldValueType.TIME; @@ -33,6 +34,7 @@ public final class FieldValue { private Long formFieldLong; private LocalDate formFieldDate; private LocalTime formFieldTime; + private SelectionMarkState selectionMarkState; private String formFieldString; private String formFieldPhoneNumber; @@ -70,6 +72,9 @@ public FieldValue(final Object value, final FieldValueType valueType) { case MAP: formFieldMap = (Map) value; break; + case SELECTION_MARK_STATE: + selectionMarkState = (SelectionMarkState) value; + break; default: throw logger.logExceptionAsError(new IllegalStateException("Unexpected type value: " + valueType)); } @@ -196,4 +201,19 @@ public Map asMap() { } return this.formFieldMap; } + + /** + * Gets the value of the field as a selection mark state. + * + * @return the value of the field as an unmodifiable selection mark state. + * @throws UnsupportedOperationException if {@link FieldValue#getValueType()} is not + * {@link FieldValueType#SELECTION_MARK_STATE}. + */ + public SelectionMarkState asSelectionMarkState() { + if (SELECTION_MARK_STATE != this.getValueType()) { + throw logger.logExceptionAsError((new UnsupportedOperationException(String.format( + "Cannot get field as a %s from field value of type %s", SELECTION_MARK_STATE, this.getValueType())))); + } + return this.selectionMarkState; + } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java index 9a87eb33e121..b459dbad3391 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FieldValueType.java @@ -27,5 +27,8 @@ public enum FieldValueType { LIST, /** Enum value map. */ - MAP; + MAP, + + /** Enum value selection mark state. */ + SELECTION_MARK_STATE; } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java index 269dda772def..01730ffe8506 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormPage.java @@ -3,15 +3,12 @@ package com.azure.ai.formrecognizer.models; -import com.azure.core.annotation.Immutable; - import java.util.Collections; import java.util.List; /** * The FormPage model. */ -@Immutable public final class FormPage { /* @@ -29,6 +26,11 @@ public final class FormPage { */ private final List tables; + /* + * List of selection marks extracted from the page. + */ + private List selectionMarks; + /* * The general orientation of the text in clockwise direction, measured in * degrees between (-180, 180]. @@ -140,5 +142,14 @@ public float getWidth() { public Integer getPageNumber() { return this.pageNumber; } + + /** + * Get the selection marks in the input document. + * + * @return the selection marks. + */ + public List getSelectionMarks() { + return Collections.unmodifiableList(this.selectionMarks); + } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormSelectionMark.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormSelectionMark.java new file mode 100644 index 000000000000..791ea518aa66 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/FormSelectionMark.java @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer.models; + +/** + * The FormSelectionMark model. + */ +public final class FormSelectionMark extends FormElement { + private float confidence; + private SelectionMarkState state; + + /** + * Creates a FormSelectionMark. + * + * @param text The text content of the extracted element. + * @param boundingBox The BoundingBox specifying relative coordinates of the element. + * @param pageNumber the 1 based page number. + */ + public FormSelectionMark(String text, FieldBoundingBox boundingBox, int pageNumber) { + super(text, boundingBox, pageNumber); + } + + /** + * {@inheritDoc} + */ + @Override + public FieldBoundingBox getBoundingBox() { + return super.getBoundingBox(); + } + + /** + * {@inheritDoc} + */ + @Override + public String getText() { + return super.getText(); + } + + /** + * {@inheritDoc} + */ + @Override + public int getPageNumber() { + return super.getPageNumber(); + } + + /** + * Gets the state property of the selection mark. + * + * @return the state property of the selection mark. + */ + public SelectionMarkState getState() { + return this.state; + } + + /** + * Gets the confidence property of the selection mark. + * + * @return the confidence property of the selection mark. + */ + public float getConfidence() { + return this.confidence; + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/SelectionMarkState.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/SelectionMarkState.java new file mode 100644 index 000000000000..9f3fc2bdd7d6 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/SelectionMarkState.java @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer.models; + +import com.azure.core.util.ExpandableStringEnum; + +/** Defines values for SelectionMarkState. i.e., Selected or Unselected */ +public final class SelectionMarkState extends ExpandableStringEnum { + /** + * Static value SELECTED for SelectionMarkState. + */ + public static final SelectionMarkState SELECTED = fromString("selected"); + + /** + * Static value UNSELECTED for SelectionMarkState. + */ + public static final SelectionMarkState UNSELECTED = fromString("unselected"); + + /** + * Creates or finds a SelectionMarkState from its string representation. + * + * @param value a value to look for. + * + * @return the corresponding SelectionMarkState. + */ + public static SelectionMarkState fromString(String value) { + return fromString(value, SelectionMarkState.class); + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java index 1148a941f773..50634f274849 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/CustomModelTransforms.java @@ -12,15 +12,14 @@ import com.azure.ai.formrecognizer.training.models.CustomFormModel; import com.azure.ai.formrecognizer.training.models.CustomFormModelField; import com.azure.ai.formrecognizer.training.models.CustomFormModelInfo; +import com.azure.ai.formrecognizer.training.models.CustomFormModelProperties; import com.azure.ai.formrecognizer.training.models.CustomFormModelStatus; import com.azure.ai.formrecognizer.training.models.CustomFormSubmodel; -import com.azure.ai.formrecognizer.training.models.CustomFormModelProperties; import com.azure.ai.formrecognizer.training.models.TrainingDocumentInfo; import com.azure.ai.formrecognizer.training.models.TrainingStatus; import com.azure.core.util.CoreUtils; import com.azure.core.util.logging.ClientLogger; -import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -35,7 +34,6 @@ */ final class CustomModelTransforms { private static final ClientLogger LOGGER = new ClientLogger(CustomModelTransforms.class); - static final Duration DEFAULT_DURATION = Duration.ofSeconds(5); private CustomModelTransforms() { } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java index 8c743c43cdfe..dd285eabc05b 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/FormTrainingAsyncClient.java @@ -54,9 +54,9 @@ import java.util.function.Function; import java.util.stream.Collectors; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; import static com.azure.ai.formrecognizer.implementation.Utility.parseModelId; import static com.azure.ai.formrecognizer.implementation.Utility.urlActivationOperation; -import static com.azure.ai.formrecognizer.training.CustomModelTransforms.DEFAULT_DURATION; import static com.azure.ai.formrecognizer.training.CustomModelTransforms.toCustomFormModel; import static com.azure.ai.formrecognizer.training.CustomModelTransforms.toCustomFormModelInfo; import static com.azure.core.util.FluxUtil.monoError; @@ -423,7 +423,7 @@ public PollerFlux beginCopyM PollerFlux beginCopyModel(String modelId, CopyAuthorization target, Duration pollInterval, Context context) { - final Duration interval = pollInterval != null ? pollInterval : DEFAULT_DURATION; + final Duration interval = pollInterval != null ? pollInterval : DEFAULT_POLL_INTERVAL; return new PollerFlux( interval, getCopyActivationOperation(modelId, target, context), diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java index 86944fcb192f..ec18e75b15cd 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/training/models/TrainingOptions.java @@ -7,12 +7,13 @@ import java.time.Duration; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; + /** * Options that may be passed when using training APIs on Form Training client. */ @Fluent public final class TrainingOptions { - private static final Duration DEFAULT_POLL_INTERVAL = Duration.ofSeconds(5); private Duration pollInterval = DEFAULT_POLL_INTERVAL; private TrainingFileFilter trainingFileFilter; private String modelName; diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java index b39781d881e5..463bec20d6f3 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledData.java @@ -73,15 +73,10 @@ public static void main(String[] args) throws IOException { // `labelText` is not populated for a model trained with labels as this was the given label used to extract // the key formsWithLabeledModel.forEach(labeledForm -> labeledForm.getFields().forEach((label, formField) -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formField.getValueData().getBoundingBox() != null) { - formField.getValueData().getBoundingBox().getPoints().stream().map(point -> - String.format("[%.2f, %.2f]", point.getX(), point.getY())).forEach(boundingBoxStr::append); - } System.out.printf("Field %s has value data text %s based on %s within bounding box %s with a confidence " + "score of %.2f.%n", - label, formField.getValueData().getText(), formField.getValueData().getText(), boundingBoxStr, - formField.getConfidence()); + label, formField.getValueData().getText(), formField.getValueData().getText(), + formField.getValueData().getBoundingBox().toString(), formField.getConfidence()); // Find the value of a specific labeled field. System.out.println("Value for a specific labeled field using the training-time label:"); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java index ad11769c1cc4..aa730b23f748 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/AdvancedDiffLabeledUnlabeledDataAsync.java @@ -103,15 +103,10 @@ public static void main(String[] args) throws IOException { // the key labeledDataResult.subscribe(formsWithLabeledModel -> formsWithLabeledModel.forEach(labeledForm -> labeledForm.getFields().forEach((label, formField) -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formField.getValueData().getBoundingBox() != null) { - formField.getValueData().getBoundingBox().getPoints().stream().map(point -> String.format("[%.2f," - + " %.2f]", point.getX(), point.getY())).forEach(boundingBoxStr::append); - } System.out.printf("Field %s has value data text %s based on %s within bounding box %s with " + "a confidence score of %.2f.%n", - label, formField.getValueData().getText(), formField.getValueData().getText(), boundingBoxStr, - formField.getConfidence()); + label, formField.getValueData().getText(), formField.getValueData().getText(), + formField.getValueData().getBoundingBox().toString(), formField.getConfidence()); // Find the value of a specific labeled field. System.out.println("Value for a specific labeled field using the training-time label:"); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java index e6483c8b043b..d516acc3a526 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxes.java @@ -70,8 +70,8 @@ public static void main(String[] args) { System.out.printf("Cell text %s has following words: %n", formTableCell.getText()); // FormElements only exists if you set includeFieldElements to true in your // call to beginRecognizeCustomFormsFromUrl - // It is also a list of FormWords and FormLines, but in this example, we only deal with - // FormWords + // It is also a list of FormWords, FormLines and FormSelectionMarks, but in this example, + // we only deal with FormWords. formTableCell.getFieldElements().stream() .filter(formContent -> formContent instanceof FormWord) .map(formContent -> (FormWord) (formContent)) diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java index 28385c37cb92..79700e578548 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/GetBoundingBoxesAsync.java @@ -82,22 +82,15 @@ public static void main(String[] args) { System.out.printf("Cell text %s has following words: %n", formTableCell.getText()); // FormElements only exists if you set includeFieldElements to true in your // call to beginRecognizeCustomFormsFromUrl - // It is also a list of FormWords and FormLines, but in this example, we only deal with - // FormWords + // It is also a list of FormWords, FormLines and FormSelectionMarks, but in this example, + // we only deal with FormWords. formTableCell.getFieldElements().stream() .filter(formContent -> formContent instanceof FormWord) .map(formContent -> (FormWord) (formContent)) - .forEach(formWordElement -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formWordElement.getBoundingBox() != null) { - formWordElement.getBoundingBox().getPoints().forEach(point -> - boundingBoxStr.append(String.format("[%.2f, %.2f]", point.getX(), - point.getY()))); - } + .forEach(formWordElement -> System.out.printf("Word '%s' within bounding box %s with a confidence of %.2f.%n", - formWordElement.getText(), boundingBoxStr, - formWordElement.getConfidence()); - }); + formWordElement.getText(), formWordElement.getBoundingBox().toString(), + formWordElement.getConfidence())); }); System.out.println(); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java index 03c71373c2f0..c3d647fe53dd 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/ReadmeSamples.java @@ -136,6 +136,11 @@ public void recognizeContent() throws IOException { formTable.getCells().forEach(formTableCell -> System.out.printf("Cell has text %s.%n", formTableCell.getText())); }); + // Selection Mark + formPage.getSelectionMarks().forEach(selectionMark -> System.out.printf( + "Page: %s, Selection mark is %s within bounding box %s has a confidence score %.2f.%n", + selectionMark.getPageNumber(), selectionMark.getState(), selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence())); } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java index db5df5f1694f..88537f386138 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContent.java @@ -4,8 +4,8 @@ package com.azure.ai.formrecognizer; import com.azure.ai.formrecognizer.models.FormPage; -import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormTable; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.polling.SyncPoller; @@ -58,13 +58,8 @@ public static void main(final String[] args) throws IOException { System.out.printf("Table %d has %d rows and %d columns.%n", i1, formTable.getRowCount(), formTable.getColumnCount()); formTable.getCells().forEach(formTableCell -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formTableCell.getBoundingBox() != null) { - formTableCell.getBoundingBox().getPoints().forEach(point -> - boundingBoxStr.append(String.format("[%.2f, %.2f]", point.getX(), point.getY()))); - } System.out.printf("Cell has text '%s', within bounding box %s.%n", formTableCell.getText(), - boundingBoxStr); + formTableCell.getBoundingBox().toString()); }); System.out.println(); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java index f7c239c4c64e..12ad86480128 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentFromUrlAsync.java @@ -4,8 +4,8 @@ package com.azure.ai.formrecognizer; import com.azure.ai.formrecognizer.models.FormPage; -import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormTable; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.polling.PollerFlux; import reactor.core.publisher.Mono; @@ -25,7 +25,6 @@ public class RecognizeContentFromUrlAsync { */ public static void main(final String[] args) { // Instantiate a client that will be used to call the service. - FormRecognizerAsyncClient client = new FormRecognizerClientBuilder() .credential(new AzureKeyCredential("{key}")) .endpoint("https://{endpoint}.cognitiveservices.azure.com/") @@ -59,15 +58,9 @@ public static void main(final String[] args) { final FormTable formTable = tables.get(i1); System.out.printf("Table %d has %d rows and %d columns.%n", i1, formTable.getRowCount(), formTable.getColumnCount()); - formTable.getCells().forEach(formTableCell -> { - final StringBuilder boundingBoxStr = new StringBuilder(); - if (formTableCell.getBoundingBox() != null) { - formTableCell.getBoundingBox().getPoints().forEach(point -> - boundingBoxStr.append(String.format("[%.2f, %.2f]", point.getX(), point.getY()))); - } + formTable.getCells().forEach(formTableCell -> System.out.printf("Cell has text '%s', within bounding box %s.%n", formTableCell.getText(), - boundingBoxStr); - }); + formTableCell.getBoundingBox().toString())); System.out.println(); } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentWithSelectionMarks.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentWithSelectionMarks.java new file mode 100644 index 000000000000..5a964da25d12 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeContentWithSelectionMarks.java @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer; + +import com.azure.ai.formrecognizer.models.FormPage; +import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormSelectionMark; +import com.azure.ai.formrecognizer.models.FormTable; +import com.azure.core.credential.AzureKeyCredential; +import com.azure.core.util.polling.SyncPoller; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.List; + +/** + * Sample for recognizing content information with selection mark from a document given through a file. + */ +public class RecognizeContentWithSelectionMarks { + /** + * Main method to invoke this demo. + * + * @param args Unused. Arguments to the program. + * + * @throws IOException Exception thrown when there is an error in reading all the bytes from the File. + */ + public static void main(final String[] args) throws IOException { + // Instantiate a client that will be used to call the service. + FormRecognizerClient client = new FormRecognizerClientBuilder() + .credential(new AzureKeyCredential("{key}")) + .endpoint("https://{endpoint}.cognitiveservices.azure.com/") + .buildClient(); + + File sourceFile = new File("../formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/" + + "forms/selectionMarkForm.pdf"); + byte[] fileContent = Files.readAllBytes(sourceFile.toPath()); + InputStream targetStream = new ByteArrayInputStream(fileContent); + + SyncPoller> recognizeContentPoller = + client.beginRecognizeContent(targetStream, sourceFile.length()); + + List contentPageResults = recognizeContentPoller.getFinalResult(); + + for (int i = 0; i < contentPageResults.size(); i++) { + final FormPage formPage = contentPageResults.get(i); + System.out.printf("---- Recognized content info for page %d ----%n", i); + // Table information + System.out.printf("Has width: %.2f and height: %.2f, measured with unit: %s%n", formPage.getWidth(), + formPage.getHeight(), + formPage.getUnit()); + final List tables = formPage.getTables(); + for (int i1 = 0; i1 < tables.size(); i1++) { + final FormTable formTable = tables.get(i1); + System.out.printf("Table %d has %d rows and %d columns.%n", i1, formTable.getRowCount(), + formTable.getColumnCount()); + formTable.getCells().forEach(formTableCell -> + System.out.printf("Cell has text '%s', within bounding box %s.%n", formTableCell.getText(), + formTableCell.getBoundingBox().toString())); + System.out.println(); + } + // Selection Mark + for (FormSelectionMark selectionMark : formPage.getSelectionMarks()) { + System.out.printf( + "Page: %s, Selection mark is %s within bounding box %s has a confidence score %.2f.%n", + selectionMark.getPageNumber(), + selectionMark.getState(), + selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence()); + } + } + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsAsyncWithSelectionMarks.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsAsyncWithSelectionMarks.java new file mode 100644 index 000000000000..6bc65aa86ec2 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsAsyncWithSelectionMarks.java @@ -0,0 +1,129 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.formrecognizer; + +import com.azure.ai.formrecognizer.models.FormPage; +import com.azure.ai.formrecognizer.models.FormRecognizerOperationResult; +import com.azure.ai.formrecognizer.models.FormSelectionMark; +import com.azure.ai.formrecognizer.models.FormTable; +import com.azure.ai.formrecognizer.models.RecognizeCustomFormsOptions; +import com.azure.ai.formrecognizer.models.RecognizedForm; +import com.azure.core.credential.AzureKeyCredential; +import com.azure.core.util.polling.PollerFlux; +import reactor.core.publisher.Mono; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static com.azure.ai.formrecognizer.implementation.Utility.toFluxByteBuffer; + +/** + * Async sample to analyze a form with selection mark from a document with a custom trained model. To learn how to train + * your own models, look at TrainModelWithoutLabels.java and TrainModelWithLabels.java. + */ +public class RecognizeCustomFormsAsyncWithSelectionMarks { + /** + * Main method to invoke this demo. + * + * @param args Unused arguments to the program. + * + * @throws IOException Exception thrown when there is an error in reading all the bytes from the File. + */ + public static void main(String[] args) throws IOException { + // Instantiate a client that will be used to call the service. + FormRecognizerAsyncClient client = new FormRecognizerClientBuilder() + .credential(new AzureKeyCredential("{key}")) + .endpoint("https://{endpoint}.cognitiveservices.azure.com/") + .buildAsyncClient(); + + // The form you are recognizing must be of the same type as the forms the custom model was trained on + File sourceFile = new File("../formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/" + + "forms/selectionMarkForm.pdf"); + byte[] fileContent = Files.readAllBytes(sourceFile.toPath()); + String modelId = "{modelId}"; + PollerFlux> recognizeFormPoller; + // Selection mark will only be available when includeFieldElements is true. + try (InputStream targetStream = new ByteArrayInputStream(fileContent)) { + recognizeFormPoller = client.beginRecognizeCustomForms(modelId, toFluxByteBuffer(targetStream), + sourceFile.length(), new RecognizeCustomFormsOptions().setFieldElementsIncluded(true)); + } + + Mono> recognizeFormResult = + recognizeFormPoller + .last() + .flatMap(pollResponse -> { + if (pollResponse.getStatus().isComplete()) { + // training completed successfully, retrieving final result. + return pollResponse.getFinalResult(); + } else { + return Mono.error(new RuntimeException("Polling completed unsuccessfully with status:" + + pollResponse.getStatus())); + } + }); + + recognizeFormResult.subscribe(recognizedForms -> { + for (int i = 0; i < recognizedForms.size(); i++) { + final RecognizedForm form = recognizedForms.get(i); + System.out.printf("----------- Recognized custom form info for page %d -----------%n", i); + System.out.printf("Form type: %s%n", form.getFormType()); + System.out.printf("Form has form type confidence : %.2f%n", form.getFormTypeConfidence()); + System.out.printf("Form was analyzed with model with ID: ", form.getModelId()); + form.getFields().forEach((label, formField) -> { + System.out.printf("Field '%s' has label '%s' with confidence score of %.2f.%n", label, + formField.getLabelData().getText(), + formField.getConfidence()); + }); + + // Page Information + final List pages = form.getPages(); + for (int i1 = 0; i1 < pages.size(); i1++) { + final FormPage formPage = pages.get(i1); + System.out.printf("------- Recognizing info on page %s of Form ------- %n", i1); + System.out.printf("Has width: %f, angle: %.2f, height: %f %n", formPage.getWidth(), + formPage.getTextAngle(), formPage.getHeight()); + // Table information + System.out.println("Recognized Tables: "); + final List tables = formPage.getTables(); + for (int i2 = 0; i2 < tables.size(); i2++) { + final FormTable formTable = tables.get(i2); + System.out.printf("Table %d%n", i2); + formTable.getCells() + .forEach(formTableCell -> { + System.out.printf("Cell text %s has following words: %n", formTableCell.getText()); + // FormElements only exists if you set includeFieldElements to true in your + // call to beginRecognizeCustomFormsFromUrl + // It is also a list of FormWords, FormLines and FormSelectionMarks, but in this example, + // we only deal with FormSelectionMarks. + formTableCell.getFieldElements().stream() + .filter(formContent -> formContent instanceof FormSelectionMark) + .map(formContent -> (FormSelectionMark) (formContent)) + .forEach(selectionMark -> + System.out.printf("Page: %s, Selection mark is %s within bounding box %s has a " + + "confidence score %.2f.%n", + selectionMark.getPageNumber(), + selectionMark.getState(), + selectionMark.getBoundingBox().toString(), + selectionMark.getConfidence())); + }); + System.out.println(); + } + } + } + }); + + // The .subscribe() creation and assignment is not a blocking call. For the purpose of this example, we sleep + // the thread so the program does not end before the send operation is complete. Using .block() instead of + // .subscribe() will turn this into a synchronous call. + try { + TimeUnit.MINUTES.sleep(1); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java index 91be572b0ab3..862718b44ae3 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/com/azure/ai/formrecognizer/RecognizeCustomFormsFromUrl.java @@ -45,8 +45,8 @@ public static void main(String[] args) { form.getFields().forEach((label, formField) -> // label data is populated if you are using a model trained with unlabeled data, // since the service needs to make predictions for labels if not explicitly given to it. - System.out.printf("Field '%s' has label '%s' with a confidence " - + "score of %.2f.%n", label, formField.getLabelData().getText(), formField.getConfidence())); + System.out.printf("Field '%s' has label '%s' with a confidence score of %.2f.%n", + label, formField.getLabelData().getText(), formField.getConfidence())); } } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/forms/selectionMarkForm.pdf b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/forms/selectionMarkForm.pdf new file mode 100644 index 000000000000..0721647fa52b Binary files /dev/null and b/sdk/formrecognizer/azure-ai-formrecognizer/src/samples/java/sample-forms/forms/selectionMarkForm.pdf differ diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java index 87b6f67a9a82..26e8ee0ec850 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerAsyncClientTest.java @@ -28,8 +28,8 @@ import java.time.Duration; import java.util.List; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.BUSINESS_CARD; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.RECEIPT; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.BUSINESS_CARD; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.RECEIPT; import static com.azure.ai.formrecognizer.TestUtils.BLANK_PDF; import static com.azure.ai.formrecognizer.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS; import static com.azure.ai.formrecognizer.TestUtils.FORM_JPG; @@ -37,6 +37,7 @@ import static com.azure.ai.formrecognizer.TestUtils.INVALID_SOURCE_URL_ERROR_CODE; import static com.azure.ai.formrecognizer.TestUtils.INVALID_URL; import static com.azure.ai.formrecognizer.TestUtils.NON_EXIST_MODEL_ID; +import static com.azure.ai.formrecognizer.TestUtils.SELECTION_MARK_PDF; import static com.azure.ai.formrecognizer.TestUtils.getContentDetectionFileData; import static com.azure.ai.formrecognizer.TestUtils.validateExceptionSource; import static com.azure.ai.formrecognizer.implementation.Utility.toFluxByteBuffer; @@ -397,6 +398,21 @@ public void recognizeContentFromDamagedPdf(HttpClient httpClient, }); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeContentWithSelectionMarks(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerAsyncClient(httpClient, serviceVersion); + dataRunner((data, dataLength) -> { + SyncPoller> syncPoller = client.beginRecognizeContent( + toFluxByteBuffer(data), dataLength, new RecognizeContentOptions() + .setContentType(FormContentType.APPLICATION_PDF) + .setPollInterval(durationTestMode)).getSyncPoller(); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Content - URL /** @@ -475,6 +491,21 @@ public void recognizeContentFromUrlMultiPage(HttpClient httpClient, FormRecogniz }, MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeContentWithSelectionMarksFromUrl(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerAsyncClient(httpClient, serviceVersion); + urlRunner(sourceUrl -> { + SyncPoller> syncPoller = + client.beginRecognizeContentFromUrl(sourceUrl, + new RecognizeContentOptions().setPollInterval(durationTestMode)) + .getSyncPoller(); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Custom form recognition // Custom form - non-URL - labeled data @@ -713,6 +744,32 @@ public void recognizeCustomFormMultiPageLabeled(HttpClient httpClient, }), MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerAsyncClient(httpClient, serviceVersion); + dataRunner((data, dataLength) -> + beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + SyncPoller trainingPoller = + getFormTrainingAsyncClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode)) + .getSyncPoller(); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomForms(trainingPoller.getFinalResult().getModelId(), + toFluxByteBuffer(data), + dataLength, + new RecognizeCustomFormsOptions() + .setContentType(FormContentType.APPLICATION_PDF).setFieldElementsIncluded(true) + .setPollInterval(durationTestMode)) + .getSyncPoller(); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + // Custom form - non-URL - unlabeled data /** @@ -1108,6 +1165,27 @@ useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode)) })); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormUrlLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerAsyncClient(httpClient, serviceVersion); + urlRunner(fileUrl -> beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + SyncPoller trainingPoller = + getFormTrainingAsyncClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode)) + .getSyncPoller(); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomFormsFromUrl(trainingPoller.getFinalResult().getModelId(), fileUrl, + new RecognizeCustomFormsOptions().setFieldElementsIncluded(true).setPollInterval(durationTestMode)) + .getSyncPoller(); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + // Business Card Recognition /** diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java index 44923ceb4d7e..c3b3f08e8d5b 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTest.java @@ -29,14 +29,15 @@ import java.util.Arrays; import java.util.List; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.BUSINESS_CARD; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.RECEIPT; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.BUSINESS_CARD; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.RECEIPT; import static com.azure.ai.formrecognizer.TestUtils.BLANK_PDF; import static com.azure.ai.formrecognizer.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS; import static com.azure.ai.formrecognizer.TestUtils.FORM_JPG; import static com.azure.ai.formrecognizer.TestUtils.INVALID_SOURCE_URL_ERROR_CODE; import static com.azure.ai.formrecognizer.TestUtils.INVALID_URL; import static com.azure.ai.formrecognizer.TestUtils.NON_EXIST_MODEL_ID; +import static com.azure.ai.formrecognizer.TestUtils.SELECTION_MARK_PDF; import static com.azure.ai.formrecognizer.TestUtils.getContentDetectionFileData; import static com.azure.ai.formrecognizer.TestUtils.validateExceptionSource; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -377,6 +378,20 @@ public void recognizeContentFromDamagedPdf(HttpClient httpClient, }); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeContentWithSelectionMarks(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerClient(httpClient, serviceVersion); + dataRunner((data, dataLength) -> { + SyncPoller> syncPoller = + client.beginRecognizeContent(data, dataLength, new RecognizeContentOptions() + .setContentType(FormContentType.APPLICATION_PDF).setPollInterval(durationTestMode), Context.NONE); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Content - URL @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) @@ -450,6 +465,20 @@ public void recognizeContentFromUrlMultiPage(HttpClient httpClient, FormRecogniz }, MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeContentWithSelectionMarksFromUrl(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerClient(httpClient, serviceVersion); + urlRunner(sourceUrl -> { + SyncPoller> syncPoller = + client.beginRecognizeContentFromUrl(sourceUrl, + new RecognizeContentOptions().setPollInterval(durationTestMode), Context.NONE); + syncPoller.waitForCompletion(); + validateContentResultData(syncPoller.getFinalResult(), false); + }, SELECTION_MARK_PDF); + } + // Custom form recognition // Custom form - non-URL - labeled data @@ -668,6 +697,30 @@ public void recognizeCustomFormMultiPageLabeled(HttpClient httpClient, }), MULTIPAGE_INVOICE_PDF); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + client = getFormRecognizerClient(httpClient, serviceVersion); + dataRunner((data, dataLength) -> + beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + SyncPoller trainingPoller = + getFormTrainingClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode), Context.NONE); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomForms(trainingPoller.getFinalResult().getModelId(), data, dataLength, + new RecognizeCustomFormsOptions() + .setContentType(FormContentType.APPLICATION_PDF) + .setFieldElementsIncluded(true) + .setPollInterval(durationTestMode), + Context.NONE); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + // Custom form - non-URL - unlabeled data /** @@ -1028,6 +1081,28 @@ dataLength, new RecognizeCustomFormsOptions() })); } + @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) + @MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters") + public void recognizeCustomFormUrlLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion) { + urlRunner(fileUrl -> beginSelectionMarkTrainingLabeledRunner((trainingFilesUrl, useTrainingLabels) -> { + client = getFormRecognizerClient(httpClient, serviceVersion); + + SyncPoller trainingPoller = + getFormTrainingClient(httpClient, serviceVersion).beginTraining(trainingFilesUrl, + useTrainingLabels, new TrainingOptions().setPollInterval(durationTestMode), Context.NONE); + trainingPoller.waitForCompletion(); + + SyncPoller> syncPoller = + client.beginRecognizeCustomFormsFromUrl(trainingPoller.getFinalResult().getModelId(), fileUrl, + new RecognizeCustomFormsOptions().setFieldElementsIncluded(true) + .setPollInterval(durationTestMode), + Context.NONE); + syncPoller.waitForCompletion(); + validateRecognizedResult(syncPoller.getFinalResult(), true, true); + }), SELECTION_MARK_PDF); + } + /** * Verifies recognized form type when labeled model used for recognition and model name is provided by user. */ diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java index 04e30f6aab14..05f357be35a3 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormRecognizerClientTestBase.java @@ -13,6 +13,7 @@ import com.azure.ai.formrecognizer.implementation.models.OperationStatus; import com.azure.ai.formrecognizer.implementation.models.PageResult; import com.azure.ai.formrecognizer.implementation.models.ReadResult; +import com.azure.ai.formrecognizer.implementation.models.SelectionMark; import com.azure.ai.formrecognizer.implementation.models.TextLine; import com.azure.ai.formrecognizer.implementation.models.TextWord; import com.azure.ai.formrecognizer.models.FieldBoundingBox; @@ -21,6 +22,7 @@ import com.azure.ai.formrecognizer.models.FormLine; import com.azure.ai.formrecognizer.models.FormPage; import com.azure.ai.formrecognizer.models.FormPageRange; +import com.azure.ai.formrecognizer.models.FormSelectionMark; import com.azure.ai.formrecognizer.models.FormTable; import com.azure.ai.formrecognizer.models.FormTableCell; import com.azure.ai.formrecognizer.models.FormWord; @@ -36,7 +38,6 @@ import com.azure.core.test.models.NetworkCallRecord; import com.azure.core.util.Configuration; import com.azure.core.util.serializer.SerializerAdapter; -import com.azure.identity.DefaultAzureCredentialBuilder; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; @@ -58,20 +59,20 @@ import java.util.function.Consumer; import java.util.regex.Pattern; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.BUSINESS_CARD; -import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PREBUILT_TYPE.RECEIPT; +import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.PrebuiltType.BUSINESS_CARD; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.AZURE_FORM_RECOGNIZER_API_KEY; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.AZURE_FORM_RECOGNIZER_ENDPOINT; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.FORM_RECOGNIZER_MULTIPAGE_TRAINING_BLOB_CONTAINER_SAS_URL; +import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL; import static com.azure.ai.formrecognizer.FormTrainingClientTestBase.deserializeRawResponse; -import static com.azure.ai.formrecognizer.TestUtils.DEFAULT_DURATION; import static com.azure.ai.formrecognizer.TestUtils.FAKE_ENCODED_EMPTY_SPACE_URL; import static com.azure.ai.formrecognizer.TestUtils.INVALID_KEY; import static com.azure.ai.formrecognizer.TestUtils.ONE_NANO_DURATION; import static com.azure.ai.formrecognizer.TestUtils.TEST_DATA_PNG; import static com.azure.ai.formrecognizer.TestUtils.URL_TEST_FILE_FORMAT; import static com.azure.ai.formrecognizer.TestUtils.getSerializerAdapter; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -115,11 +116,11 @@ public abstract class FormRecognizerClientTestBase extends TestBase { static final List BUSINESS_CARD_FIELDS = Arrays.asList("ContactNames", "JobTitles", "Departments", "Emails", "Websites", "MobilePhones", "OtherPhones", "Faxes", "Addresses", "CompanyNames"); - // Business Card fields + // Receipt fields static final List RECEIPT_FIELDS = Arrays.asList("MerchantName", "MerchantPhoneNumber", "MerchantAddress", "Total", "Subtotal", "Tax", "TransactionDate", "TransactionDate", "TransactionTime", "Items"); - enum PREBUILT_TYPE { + enum PrebuiltType { RECEIPT, BUSINESS_CARD } @@ -133,7 +134,7 @@ protected void beforeTest() { if (interceptorManager.isPlaybackMode()) { durationTestMode = ONE_NANO_DURATION; } else { - durationTestMode = DEFAULT_DURATION; + durationTestMode = DEFAULT_POLL_INTERVAL; } } @@ -149,7 +150,9 @@ FormRecognizerClientBuilder getFormRecognizerClientBuilder(HttpClient httpClient if (getTestMode() == TestMode.PLAYBACK) { builder.credential(new AzureKeyCredential(INVALID_KEY)); } else { - builder.credential(new DefaultAzureCredentialBuilder().build()); + // TODO: (savaity) switch back to AAD once fixed on service - side. +// builder.credential(new DefaultAzureCredentialBuilder().build()); + builder.credential(new AzureKeyCredential(Configuration.getGlobalConfiguration().get("AZURE_FORM_RECOGNIZER_API_KEY"))); } return builder; } @@ -255,6 +258,19 @@ private static void validateFormLineData(List expectedLines, List
expectedMarks, + List actualMarks, int pageNumber) { + for (int i = 0; i < actualMarks.size(); i++) { + final SelectionMark expectedMark = expectedMarks.get(i); + final FormSelectionMark actualMark = actualMarks.get(i); + assertEquals(expectedMark.getState().toString(), actualMark.getState().toString()); + validateBoundingBoxData(expectedMark.getBoundingBox(), actualMark.getBoundingBox()); + // Currently, service has the null as the text value for layout. + assertNull(actualMark.getText()); + assertEquals(pageNumber, actualMark.getPageNumber()); + } + } + private static void validateFormWordData(List expectedFormWords, List actualFormWordList) { assertEquals(expectedFormWords.size(), actualFormWordList.size()); @@ -415,6 +431,10 @@ abstract void recognizeContentResultWithBlankPdf(HttpClient httpClient, @Test abstract void recognizeContentFromDataMultiPage(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeContentWithSelectionMarks(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Content - URL @Test @@ -429,6 +449,10 @@ abstract void recognizeContentResultWithBlankPdf(HttpClient httpClient, @Test abstract void recognizeContentFromUrlMultiPage(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeContentWithSelectionMarksFromUrl(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Custom form recognition // Custom form - non-URL - labeled data @@ -471,6 +495,10 @@ abstract void recognizeCustomFormLabeledDataWithContentTypeAutoDetection(HttpCli abstract void recognizeCustomFormMultiPageLabeled(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeCustomFormLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Custom form - non-URL - unlabeled data @Test abstract void recognizeCustomFormUnlabeledData(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); @@ -530,6 +558,10 @@ abstract void recognizeCustomFormUrlLabeledDataIncludeFieldElements(HttpClient h abstract void recognizeCustomFormUrlMultiPageLabeled(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); + @Test + abstract void recognizeCustomFormUrlLabeledDataWithSelectionMark(HttpClient httpClient, + FormRecognizerServiceVersion serviceVersion); + // Business Card - data @Test abstract void recognizeBusinessCardData(HttpClient httpClient, FormRecognizerServiceVersion serviceVersion); @@ -597,6 +629,9 @@ void validateContentResultData(List actualFormPageList, boolean includ if (includeFieldElements) { validateFormLineData(readResult.getLines(), actualFormPage.getLines()); } + + validateFormSelectionMarkData(readResult.getSelectionMarks(), actualFormPage.getSelectionMarks(), + readResult.getPage()); if (pageResults != null) { validateFormTableData(pageResults.get(i).getTables(), actualFormPage.getTables(), readResults, includeFieldElements, pageResults.get(i).getPage()); @@ -628,7 +663,7 @@ void validateRecognizedResult(List actualFormList, boolean inclu } void validatePrebuiltResultData(List actualPrebuiltRecognizedForms, boolean includeFieldElements, - PREBUILT_TYPE prebuiltType) { + PrebuiltType prebuiltType) { final AnalyzeResult rawResponse = getAnalyzeRawResponse().getAnalyzeResult(); final List rawReadResults = rawResponse.getReadResults(); for (int i = 0; i < actualPrebuiltRecognizedForms.size(); i++) { @@ -705,6 +740,10 @@ void beginTrainingLabeledRunner(BiConsumer testRunner) { testRunner.accept(getTrainingSasUri(), true); } + void beginSelectionMarkTrainingLabeledRunner(BiConsumer testRunner) { + testRunner.accept(getSelectionMarkTrainingSasUri(), true); + } + void beginTrainingMultipageRunner(Consumer testRunner) { testRunner.accept(getMultipageTrainingSasUri()); } @@ -794,6 +833,11 @@ static void validateMultipageBusinessData(List recognizedBusines assertEquals("+14257793479", phoneNumberList.get(0).getValue().asPhoneNumber()); assertNotNull(businessCard1.getPages()); + // assert contact name page number + FormField contactNameField = businessCard1Fields.get("ContactNames").getValue().asList().get(0); + assertEquals(contactNameField.getValueData().getPageNumber(), 1); + assertEquals(contactNameField.getValueData().getText(), "JOHN SINGER"); + assertEquals(2, businessCard2.getPageRange().getFirstPageNumber()); assertEquals(2, businessCard2.getPageRange().getLastPageNumber()); Map businessCard2Fields = businessCard2.getFields(); @@ -802,6 +846,11 @@ static void validateMultipageBusinessData(List recognizedBusines List phoneNumber2List = businessCard2Fields.get("OtherPhones").getValue().asList(); assertEquals("+44 (0) 20 9876 5432", phoneNumber2List.get(0).getValueData().getText()); assertNotNull(businessCard2.getPages()); + + // assert contact name page number + FormField contactName2Field = businessCard2Fields.get("ContactNames").getValue().asList().get(0); + assertEquals(contactName2Field.getValueData().getPageNumber(), 2); + assertEquals(contactName2Field.getValueData().getText(), "Dr. Avery Smith"); } static void validateMultipageReceiptData(List recognizedReceipts) { @@ -863,6 +912,14 @@ private String getTrainingSasUri() { } } + private String getSelectionMarkTrainingSasUri() { + if (interceptorManager.isPlaybackMode()) { + return "https://isPlaybackmode"; + } else { + return Configuration.getGlobalConfiguration().get(FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL); + } + } + /** * Get the training data set SAS Url value based on the test running mode. * diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java index c2a23447150a..c156778b1b25 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTestBase.java @@ -41,13 +41,13 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -import static com.azure.ai.formrecognizer.FormRecognizerClientBuilder.DEFAULT_DURATION; import static com.azure.ai.formrecognizer.TestUtils.BLANK_PDF; import static com.azure.ai.formrecognizer.TestUtils.INVALID_KEY; import static com.azure.ai.formrecognizer.TestUtils.INVALID_RECEIPT_URL; import static com.azure.ai.formrecognizer.TestUtils.ONE_NANO_DURATION; import static com.azure.ai.formrecognizer.TestUtils.TEST_DATA_PNG; import static com.azure.ai.formrecognizer.TestUtils.getSerializerAdapter; +import static com.azure.ai.formrecognizer.implementation.Utility.DEFAULT_POLL_INTERVAL; import static com.azure.ai.formrecognizer.implementation.models.ModelStatus.READY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -65,6 +65,8 @@ public abstract class FormTrainingClientTestBase extends TestBase { "FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL"; static final String FORM_RECOGNIZER_MULTIPAGE_TRAINING_BLOB_CONTAINER_SAS_URL = "FORM_RECOGNIZER_MULTIPAGE_TRAINING_BLOB_CONTAINER_SAS_URL"; + static final String FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL = + "FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL"; static final String PREFIX_SUBFOLDER = "subfolder"; static final String INVALID_PREFIX_FILE_NAME = "XXXXX"; @@ -83,7 +85,7 @@ protected void beforeTest() { if (interceptorManager.isPlaybackMode()) { durationTestMode = ONE_NANO_DURATION; } else { - durationTestMode = DEFAULT_DURATION; + durationTestMode = DEFAULT_POLL_INTERVAL; } } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java index d59bc432b8e1..107afce9ee8b 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java @@ -3,7 +3,6 @@ package com.azure.ai.formrecognizer; -import com.azure.ai.formrecognizer.implementation.Utility; import com.azure.core.exception.HttpResponseException; import com.azure.core.http.HttpClient; import com.azure.core.util.Configuration; @@ -12,20 +11,16 @@ import com.azure.core.util.serializer.JacksonAdapter; import com.azure.core.util.serializer.SerializerAdapter; import org.junit.jupiter.params.provider.Arguments; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; -import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.function.Function; import java.util.stream.Stream; import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.ENCODED_EMPTY_SPACE; @@ -37,27 +32,30 @@ * Contains helper methods for generating inputs for test methods */ final class TestUtils { - static final String URL_TEST_FILE_FORMAT = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/" - + "master/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/sample_files/Test/"; + // Duration + static final Duration ONE_NANO_DURATION = Duration.ofNanos(1); + // Local test files + static final String BLANK_PDF = "blank.pdf"; + static final String FORM_JPG = "Form_1.jpg"; + static final String TEST_DATA_PNG = "testData.png"; + static final String SELECTION_MARK_PDF = "selectionMarkForm.pdf"; + // Other resources + static final String DISPLAY_NAME_WITH_ARGUMENTS = "{displayName} with [{arguments}]"; static final String FAKE_ENCODED_EMPTY_SPACE_URL = "https://fakeuri.com/blank%20space"; static final String INVALID_IMAGE_URL_ERROR_CODE = "InvalidImageURL"; + static final String INVALID_KEY = "invalid key"; static final String INVALID_MODEL_ID = "a0a3998a-4c4affe66b7"; + static final String INVALID_MODEL_ID_ERROR = "Invalid UUID string: " + INVALID_MODEL_ID; static final String INVALID_RECEIPT_URL = "https://invalid.blob.core.windows.net/fr/contoso-allinone.jpg"; - static final String INVALID_KEY = "invalid key"; static final String INVALID_SOURCE_URL_ERROR_CODE = "1003"; - static final String INVALID_MODEL_ID_ERROR = "Invalid UUID string: " + INVALID_MODEL_ID; + static final String INVALID_URL = "htttttttps://localhost:8080"; static final String NON_EXIST_MODEL_ID = "00000000-0000-0000-0000-000000000000"; static final String NULL_SOURCE_URL_ERROR = "'trainingFilesUrl' cannot be null."; - static final String INVALID_URL = "htttttttps://localhost:8080"; + static final String URL_TEST_FILE_FORMAT = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/" + + "master/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/sample_files/Test/"; static final String VALID_HTTPS_LOCALHOST = "https://localhost:8080"; static final String VALID_HTTP_LOCALHOST = "http://localhost:8080"; - static final String BLANK_PDF = "blank.pdf"; - static final String FORM_JPG = "Form_1.jpg"; - static final String TEST_DATA_PNG = "testData.png"; static final String VALID_URL = "https://resources/contoso-allinone.jpg"; - static final String DISPLAY_NAME_WITH_ARGUMENTS = "{displayName} with [{arguments}]"; - static final Duration ONE_NANO_DURATION = Duration.ofNanos(1); - static final Duration DEFAULT_DURATION = Duration.ofSeconds(5); private TestUtils() { } @@ -70,22 +68,6 @@ static InputStream getContentDetectionFileData(String localFileUrl) { } } - static Flux getReplayableBufferData(String localFileUrl) { - Mono dataMono = Mono.defer(() -> { - try { - return Mono.just(new FileInputStream(localFileUrl)); - } catch (FileNotFoundException e) { - return Mono.error(new RuntimeException("Local file not found.", e)); - } - }); - return dataMono.flatMapMany(new Function>() { - @Override - public Flux apply(InputStream inputStream) { - return Utility.toFluxByteBuffer(inputStream); - } - }); - } - static SerializerAdapter getSerializerAdapter() { return JacksonAdapter.createDefaultSerializerAdapter(); } diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarksFromUrl[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarksFromUrl[1].json new file mode 100644 index 000000000000..2ffd7dbc6720 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarksFromUrl[1].json @@ -0,0 +1,84 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "8d187b35-3268-4db4-aeb7-c08b97f0b46e", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "74", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ae44ae82-3c41-4820-843f-dd0588025f0c", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Date" : "Thu, 22 Oct 2020 04:39:54 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "acd27765-d9ed-49ef-974f-6f38772d0a1c" + }, + "Response" : { + "x-envoy-upstream-service-time" : "9", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "af347c93-39a3-49fe-9e4c-62651f199a13", + "retry-after" : "0", + "Content-Length" : "106", + "StatusCode" : "200", + "Body" : "{\"status\":\"running\",\"createdDateTime\":\"2020-10-22T04:39:55Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:39:55Z\"}", + "Date" : "Thu, 22 Oct 2020 04:40:00 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "c3a2ac98-cf31-4686-b8c6-1fa43c5bb350" + }, + "Response" : { + "x-envoy-upstream-service-time" : "25", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "2a68345d-373e-4a5a-b0a2-7e64eddef242", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:39:55Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:40:01Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:40:05 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/ae44ae82-3c41-4820-843f-dd0588025f0c", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "0c682ec8-089a-4101-b5fd-dc1eb5c44f2d" + }, + "Response" : { + "x-envoy-upstream-service-time" : "22", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "c11fe280-77fc-4928-89bc-afdd09011e06", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:39:55Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:40:01Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:40:05 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarks[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarks[1].json new file mode 100644 index 000000000000..fd2c80c2c29e --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeContentWithSelectionMarks[1].json @@ -0,0 +1,84 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "f0fca782-2ba9-45cf-a497-fb31aa2de048", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "131", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "c053f7e4-e100-4055-a910-688babe31cdc", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Date" : "Wed, 21 Oct 2020 17:05:28 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "eba82e1b-0333-487b-bd00-46cb05c440ec" + }, + "Response" : { + "x-envoy-upstream-service-time" : "190", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a6fef349-1de3-44d1-a160-7ba4b3a3ba70", + "retry-after" : "0", + "Content-Length" : "106", + "StatusCode" : "200", + "Body" : "{\"status\":\"running\",\"createdDateTime\":\"2020-10-21T17:05:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:05:28Z\"}", + "Date" : "Wed, 21 Oct 2020 17:05:33 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "37f3bc39-5fbe-4e57-9725-665f3eebbf56" + }, + "Response" : { + "x-envoy-upstream-service-time" : "38", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "5e79d373-314a-4087-80b7-643db94d3769", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:05:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:05:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Wed, 21 Oct 2020 17:05:38 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/c053f7e4-e100-4055-a910-688babe31cdc", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "541dc8f6-4956-4ac6-8bee-b7086b2e518a" + }, + "Response" : { + "x-envoy-upstream-service-time" : "28", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "20b43022-fea2-4626-a16d-d8c345a0427c", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:05:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:05:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Wed, 21 Oct 2020 17:05:38 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..95ec3b08ba6a --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json @@ -0,0 +1,144 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "9ec75e06-c03e-4fd8-8494-a84097db7ff8", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "215", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "30844b63-76d4-406f-8235-30bb4149cbd7", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Wed, 21 Oct 2020 17:10:27 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/b18dc567-8fd5-4174-a20d-448cae64c358" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "7d098499-5a83-4d73-b2f4-7d094f92916d" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "22", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "2c913263-c4cc-4a08-a678-7625de77b376", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-21T17:10:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:31Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:33 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "5b89ee8d-5b63-44c7-8294-058941e319d8" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "24", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a9f55c93-ab14-408d-abbb-053b2a6287d3", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-21T17:10:28Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:31Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e3592fb2-bafb-473d-99c6-2769fa5191bb", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "93", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "1c878e1a-077f-41dd-b0df-983ab581dcb5", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeresults/27953366-f55c-4218-958d-a8bb1df959f5", + "Date" : "Wed, 21 Oct 2020 17:10:34 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeResults/27953366-f55c-4218-958d-a8bb1df959f5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "deb76877-37bb-489d-ad8f-13551eba106b" + }, + "Response" : { + "x-envoy-upstream-service-time" : "43", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "d03e5f5b-5a4b-46a1-ab87-dadbc210f6c8", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-21T17:10:34Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:38Z\"}", + "Date" : "Wed, 21 Oct 2020 17:10:39 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeResults/27953366-f55c-4218-958d-a8bb1df959f5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "edb6d5be-794f-47ce-9678-67af4a8c5b96" + }, + "Response" : { + "x-envoy-upstream-service-time" : "36", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "e4160d0a-07bd-4fb0-9946-78455954eeef", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:10:34Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:44Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:b18dc567-8fd5-4174-a20d-448cae64c358\",\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:44 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/b18dc567-8fd5-4174-a20d-448cae64c358/analyzeResults/27953366-f55c-4218-958d-a8bb1df959f5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "4cd6ea11-e7c8-4312-88db-fe1c5a0fa959" + }, + "Response" : { + "x-envoy-upstream-service-time" : "38", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "fa4caf27-5249-40d2-b254-6a35ccf7dc08", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-21T17:10:34Z\",\"lastUpdatedDateTime\":\"2020-10-21T17:10:44Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:b18dc567-8fd5-4174-a20d-448cae64c358\",\"modelId\":\"b18dc567-8fd5-4174-a20d-448cae64c358\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Wed, 21 Oct 2020 17:10:45 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..61f6db992fb2 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerAsyncClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json @@ -0,0 +1,164 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "0d4d13ac-b269-4cf8-a397-eda4f5e491d0", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "132", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "cfac1b1d-87d9-4436-ab07-9d35bec17f50", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Thu, 22 Oct 2020 04:43:12 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/58448c81-ad3c-4d00-8945-31c143c66778" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "991d5f1d-65ea-4f30-ade1-df8c8ad8749d" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "21", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "e7c9aa8c-1ee8-4ff4-be7e-dd1f95398b7b", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:43:13Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:17Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:18 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "257cb6e7-0345-4009-b16b-2963ab3ba625" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "23", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ed5b18d2-1421-4a56-ba90-f1e00041c251", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:43:13Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:17Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:18 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "b73d9e4f-617f-4211-b1ac-53c029b9916a", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "76", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "b0638d62-63ae-403f-b4dc-f6add22f4213", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeresults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Date" : "Thu, 22 Oct 2020 04:43:18 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "8fa2e113-d1c5-4b11-acd5-95b29a4faca8" + }, + "Response" : { + "x-envoy-upstream-service-time" : "26", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "9fb04e26-3cdf-4918-8312-8ee9426f8796", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:23Z\"}", + "Date" : "Thu, 22 Oct 2020 04:43:23 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "74911a36-b5d5-4a19-839e-8256eb489553" + }, + "Response" : { + "x-envoy-upstream-service-time" : "28", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "68d79a2e-41f8-48b6-86cf-9248c08d0afb", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:26Z\"}", + "Date" : "Thu, 22 Oct 2020 04:43:28 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "f5777359-09f3-4ca7-ae3f-4d0d01e1a712" + }, + "Response" : { + "x-envoy-upstream-service-time" : "72", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ccc78d59-2a7e-4c25-8c49-6bd0ed9902dd", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:29Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:58448c81-ad3c-4d00-8945-31c143c66778\",\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:33 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/58448c81-ad3c-4d00-8945-31c143c66778/analyzeResults/a3778d91-dd9c-40c3-a87a-5964bbb23bb5", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e9e71177-9cba-4c94-8e48-49d9871435d6" + }, + "Response" : { + "x-envoy-upstream-service-time" : "39", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "94800e91-5613-4cab-acdf-6ba6ab7f7521", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:43:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:43:29Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:58448c81-ad3c-4d00-8945-31c143c66778\",\"modelId\":\"58448c81-ad3c-4d00-8945-31c143c66778\",\"pageRange\":[1,1],\"fields\":{\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]},\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:43:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarksFromUrl[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarksFromUrl[1].json new file mode 100644 index 000000000000..488c5fdebee6 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarksFromUrl[1].json @@ -0,0 +1,64 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "41b810db-5485-4731-9d3f-2ec8fa95eb0e", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "221", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a8861ab5-565d-4fff-b752-ae477620c3e9", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/a8861ab5-565d-4fff-b752-ae477620c3e9", + "Date" : "Thu, 22 Oct 2020 04:38:25 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/a8861ab5-565d-4fff-b752-ae477620c3e9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "8df1592a-9e76-425d-b243-c91044644928" + }, + "Response" : { + "x-envoy-upstream-service-time" : "46", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "fb3a73d8-927f-425b-919f-13349cb7e693", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:38:26Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:38:32Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:38:50 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/a8861ab5-565d-4fff-b752-ae477620c3e9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e68c0ee9-457b-4bae-a040-3b0524073ed6" + }, + "Response" : { + "x-envoy-upstream-service-time" : "21", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "1289c36b-7306-4df1-aba8-18cac61cf0d5", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:38:26Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:38:32Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 04:38:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarks[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarks[1].json new file mode 100644 index 000000000000..c34ad6f02e00 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeContentWithSelectionMarks[1].json @@ -0,0 +1,84 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyze", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "008211b4-c42f-4780-b50a-61600c6a8aaf", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "119", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Date" : "Thu, 22 Oct 2020 06:38:40 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "04234c9a-5b2f-4357-8e82-974d5a6fb588" + }, + "Response" : { + "x-envoy-upstream-service-time" : "13", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "6d4d6d97-e547-4e44-a51d-67a54fe821eb", + "retry-after" : "0", + "Content-Length" : "106", + "StatusCode" : "200", + "Body" : "{\"status\":\"running\",\"createdDateTime\":\"2020-10-22T06:38:41Z\",\"lastUpdatedDateTime\":\"2020-10-22T06:38:41Z\"}", + "Date" : "Thu, 22 Oct 2020 06:38:45 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "337f54d2-1c18-4cf4-8369-d658dcafdb4f" + }, + "Response" : { + "x-envoy-upstream-service-time" : "95", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "fd9d24b9-6f54-4572-99a3-cb075a3df50f", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T06:38:41Z\",\"lastUpdatedDateTime\":\"2020-10-22T06:38:48Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 06:38:51 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//layout/analyzeResults/3aa96872-a5c2-43c4-aef1-2eb438d778d9", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "1cc1a0bd-bdf7-4002-a079-bc57ad336946" + }, + "Response" : { + "x-envoy-upstream-service-time" : "22", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "055899ee-a12e-46ab-a198-00f7adb71ce3", + "retry-after" : "0", + "Content-Length" : "34833", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T06:38:41Z\",\"lastUpdatedDateTime\":\"2020-10-22T06:38:48Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.7370,4.3860,0.7370,4.3860,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.5760,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1000,3.3832,1.1000],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1000,3.6851,1.1000],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1000,4.0571,1.1000],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1000,4.3323,1.1000],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.7560,1.0062,4.7560,1.1000,4.5886,1.1000],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.3330,2.4417,2.3330],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.8560,2.2182,4.0615,2.2182,4.0615,2.3330,3.8560,2.3330],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.3330,4.1098,2.3330],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.7530,2.2182,5.2052,2.2182,5.2052,2.3330,4.7530,2.3330],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.2560,2.2185,6.0557,2.2185,6.0557,2.3325,5.2560,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.1600,3.5151,1.5019,3.5151,1.5019,3.6168,1.1600,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.5500,3.5209,1.6753,3.5209,1.6753,3.6168,1.5500,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.5390,3.0909,3.5390,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.5390,4.3377,3.5390,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.5390,4.6247,3.5390,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.5010,3.5138,5.5751,3.5138,5.5751,3.6150,5.5010,3.6150],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.5390,5.8539,3.5390,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.5390,6.6562,3.5390,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.5390,6.9940,3.5390,6.9940,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.0360,3.5128,7.4009,3.5128,7.4009,3.6438,7.0360,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.3730,3.6789,7.3730,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.3640,3.6792,3.6047,3.6792,3.6047,3.7819,3.3640,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.3730,3.6801,7.3730,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.2220,3.8468,1.5826,3.8468,1.5826,3.9486,1.2220,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.1440,3.8456,5.1440,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.9750,4.2094,5.9750,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.8070,4.3655,2.8070,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.0680,3.5656,5.0680],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.0670,3.5656,5.0670],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.0680,4.3295,5.0680],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.0340,5.0848,5.0340],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.0340,5.0848,5.0340],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.0340,5.6202,5.0340],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.0340,5.8088,5.0340],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.4950,5.4285,1.4950,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.5020,5.7604,3.2429,5.7604,3.2429,5.8923,2.5020,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.5020,5.7621,2.7903,5.7621,2.7903,5.8648,2.5020,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.7840,7.5307,5.7840],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.7850,7.8166,5.7850],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.9550,5.2262,5.9550],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.9820,5.5744,5.9820],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.4170,5.8562,6.4170,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.8700,5.8542,6.8700,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.9180,7.3783,5.9180],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.8090,5.8181,7.8090,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.8090,5.8181,7.8090,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.2980,6.0376,1.8846,6.0376,1.8846,6.1393,1.2980,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.3570,6.2792,1.3570,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.8920,6.5399,1.1815,6.5399,1.1815,6.6721,0.8920,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.0100,6.5747,2.0100,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.6450,4.2363,6.6450],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.6450,6.7385,6.6450],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.0120,4.0467,8.0120],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.4420,7.8916,4.5825,7.8916,4.5825,7.9982,4.4420,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.0120,4.6708,8.0120],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.0100,5.0592,8.0100],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.0120,5.2259,8.0120],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.0120,5.4691,8.0120],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.0120,6.0082,8.0120],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.1190,8.0771,1.4992,8.0771,1.4992,8.1636,1.1190,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.9400,8.0771,1.9400,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.9750,8.0771,2.2103,8.0771,2.2103,8.1895,1.9750,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.2600,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.5190,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.970},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.6600,8.5205,6.1697,8.5205,6.1697,8.5281,5.6600,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.7270,1.7087,8.7270],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.1680,8.6246,2.4850,8.6246,2.4850,8.7284,2.1680,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.7270,3.2268,8.7270],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.5920,8.6300,3.6791,8.6300,3.6791,8.7056,3.5920,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.7270,3.7147,8.7270],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.3230,4.3584,9.3230,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.4380,1.9774,9.4380],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.6950,9.3230,4.3584,9.3230,4.3584,9.4677,2.6950,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.7750,3.9960,9.7750,3.9960,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.7900,4.1168,9.7900,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.4790,9.7741,4.4790,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.990,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.2960,1.0459,10.2960,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0000,0,11.0000],\"confidence\":0.690,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.5390,10.7248,0.5390,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}]}}", + "Date" : "Thu, 22 Oct 2020 06:38:51 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..dc53ad59b10e --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormLabeledDataWithSelectionMark[1].json @@ -0,0 +1,144 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "09246005-5e8a-4fe3-bfec-311eed1be7ee", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "330", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "d5f64fdc-f6e1-41d3-bd2f-b26fbf8717ba", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Thu, 22 Oct 2020 04:27:48 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "f5633e86-2203-4ea2-9017-27ad02ef0e14" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "29", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "efadd33a-20fd-4529-9d36-5d59934f470c", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:27:48Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:27:51Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:27:53 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "aa5f0e4b-b3f4-40bf-b1fa-7f2d253b5714" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "27", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a1560f66-e1e4-429f-a931-4e1f17e8ac36", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:27:48Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:27:51Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:27:53 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "cda3b623-af3f-44e1-8669-03910a6b4f6c", + "Content-Type" : "application/pdf" + }, + "Response" : { + "x-envoy-upstream-service-time" : "101", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "ea41e646-345e-4cd9-8557-a48c905c81ee", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeresults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Date" : "Thu, 22 Oct 2020 04:27:54 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeResults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "946b3e97-807b-4a96-aa2f-046d6d80e007" + }, + "Response" : { + "x-envoy-upstream-service-time" : "37", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "c3ee9f31-5814-4ba8-8c35-07589c913cec", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:27:54Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:27:58Z\"}", + "Date" : "Thu, 22 Oct 2020 04:27:58 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeResults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "e8c32350-e198-408a-a9e2-26784f6c6e3d" + }, + "Response" : { + "x-envoy-upstream-service-time" : "42", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a2353233-08ee-4a47-8d27-7933c257ec37", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:27:54Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:28:04Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:28:04 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/17e41b0a-2264-4b21-beb4-7dbbf49db3e1/analyzeResults/8131c98d-7b2c-417d-97d0-e33dd72bae87", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "2a33b37b-7643-44d9-a940-8003d2c32b57" + }, + "Response" : { + "x-envoy-upstream-service-time" : "36", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "adcf30c0-c95f-49ad-b3a1-15443645c7b7", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:27:54Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:28:04Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"modelId\":\"17e41b0a-2264-4b21-beb4-7dbbf49db3e1\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:28:04 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json new file mode 100644 index 000000000000..a3680b1c14b9 --- /dev/null +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/resources/session-records/FormRecognizerClientTest.recognizeCustomFormUrlLabeledDataWithSelectionMark[1].json @@ -0,0 +1,144 @@ +{ + "networkCallRecords" : [ { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "49b0720e-bc1f-4b75-a00f-e4f71e7e1dd0", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "67", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "96be5eec-5443-4f29-9f51-8e2fe4bf4bdb", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "Date" : "Thu, 22 Oct 2020 04:44:19 GMT", + "Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "d3a4023f-af18-47eb-9f1d-a9334885177c" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "97", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "2ffefcab-5b96-4d9a-83be-69ae9a4dbaa6", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:44:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:22Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:24 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6?includeKeys=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "63cf6efd-bfa5-4ae1-ba1a-b5b0b42e1c2e" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-envoy-upstream-service-time" : "18", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "15e4ddcd-f123-4361-a849-ccb15375ea89", + "retry-after" : "0", + "StatusCode" : "200", + "Body" : "{\"modelInfo\":{\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"attributes\":{\"isComposed\":false},\"status\":\"ready\",\"createdDateTime\":\"2020-10-22T04:44:19Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:22Z\"},\"trainResult\":{\"averageModelAccuracy\":1.0,\"trainingDocuments\":[{\"documentName\":\"CCAuth-1.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-2.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-3.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-4.pdf\",\"pages\":1,\"status\":\"succeeded\"},{\"documentName\":\"CCAuth-5.pdf\",\"pages\":1,\"status\":\"succeeded\"}],\"fields\":[{\"fieldName\":\"AMEX_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"MASTERCARD_SELECTION_MARK\",\"accuracy\":1.0},{\"fieldName\":\"VISA_SELECTION_MARK\",\"accuracy\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:24 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "POST", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyze?includeTextDetails=true", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "4804772a-3ddc-428d-8ee9-979705b38ca6", + "Content-Type" : "application/json" + }, + "Response" : { + "x-envoy-upstream-service-time" : "80", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "4e070250-f278-4fbf-b712-4c7741062bdb", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "Operation-Location" : "https://shafangfr.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1/custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeresults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Date" : "Thu, 22 Oct 2020 04:44:24 GMT" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeResults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "5533c7d9-c03b-4e78-8a34-ef5075590eed" + }, + "Response" : { + "x-envoy-upstream-service-time" : "44", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "12b0413e-a4b5-452f-a83c-0038177c746b", + "retry-after" : "0", + "Content-Length" : "109", + "StatusCode" : "200", + "Body" : "{\"status\":\"notStarted\",\"createdDateTime\":\"2020-10-22T04:44:25Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:28Z\"}", + "Date" : "Thu, 22 Oct 2020 04:44:29 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeResults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "16f59883-f66b-44ff-89fe-02834ba5cd4a" + }, + "Response" : { + "x-envoy-upstream-service-time" : "149", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "f5c08164-1583-46b5-9cd4-0d1b24c47d1c", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:44:25Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.cognitiveservices.azure.com/formrecognizer/v2.1-preview.1//custom/models/9db3a709-548b-4ebf-9eeb-7f417760a3e6/analyzeResults/da9b1607-9f2c-4586-bc69-4542df4301df", + "Headers" : { + "User-Agent" : "azsdk-java-azure-ai-formrecognizer/3.1.0-beta.1 (11.0.8; Windows 10; 10.0)", + "x-ms-client-request-id" : "d2788de8-0d91-445c-97bc-ac3df8b14907" + }, + "Response" : { + "x-envoy-upstream-service-time" : "36", + "Strict-Transport-Security" : "max-age=31536000; includeSubDomains; preload", + "x-content-type-options" : "nosniff", + "apim-request-id" : "a99fda6d-6305-4984-a196-4f0b641b5382", + "retry-after" : "0", + "Content-Length" : "35389", + "StatusCode" : "200", + "Body" : "{\"status\":\"succeeded\",\"createdDateTime\":\"2020-10-22T04:44:25Z\",\"lastUpdatedDateTime\":\"2020-10-22T04:44:35Z\",\"analyzeResult\":{\"version\":\"2.1.0\",\"readResults\":[{\"page\":1,\"angle\":0,\"width\":8.5,\"height\":11,\"unit\":\"inch\",\"lines\":[{\"boundingBox\":[3.2791,0.7167,5.0584,0.7167,5.0584,0.8109,3.2791,0.8109],\"text\":\"STATE OF CALIFORNIA: CONTOSO\",\"words\":[{\"boundingBox\":[3.2791,0.7373,3.5799,0.7373,3.5799,0.8109,3.2791,0.8109],\"text\":\"STATE\",\"confidence\":1},{\"boundingBox\":[3.6193,0.7373,3.7481,0.7373,3.7481,0.8109,3.6193,0.8109],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[3.7831,0.737,4.386,0.737,4.386,0.8102,3.7831,0.8102],\"text\":\"CALIFORNIA:\",\"confidence\":1},{\"boundingBox\":[4.4383,0.7167,5.0584,0.7167,5.0584,0.8105,4.4383,0.8105],\"text\":\"CONTOSO\",\"confidence\":1}]},{\"boundingBox\":[0.5367,0.7,2.3833,0.7067,2.38,1.2967,0.5367,1.2933],\"text\":\"Contoso\",\"words\":[{\"boundingBox\":[0.576,0.7124,2.3577,0.8224,2.3498,1.1995,0.6019,1.2967],\"text\":\"Contoso\",\"confidence\":0.973}]},{\"boundingBox\":[3.4183,0.8618,4.9237,0.8618,4.9237,0.9561,3.4183,0.9561],\"text\":\"BUREAU OF INSURANCE\",\"words\":[{\"boundingBox\":[3.4183,0.8641,3.9344,0.8641,3.9344,0.9561,3.4183,0.9561],\"text\":\"BUREAU\",\"confidence\":1},{\"boundingBox\":[3.9836,0.8641,4.1487,0.8641,4.1487,0.9561,3.9836,0.9561],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1947,0.8618,4.9237,0.8618,4.9237,0.9561,4.1947,0.9561],\"text\":\"INSURANCE\",\"confidence\":1}]},{\"boundingBox\":[3.1443,1.0062,5.2024,1.0062,5.2024,1.1001,3.1443,1.1001],\"text\":\"124 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.1443,1.0073,3.333,1.0073,3.333,1.0986,3.1443,1.0986],\"text\":\"124\",\"confidence\":1},{\"boundingBox\":[3.3832,1.0077,3.6359,1.0077,3.6359,1.1,3.3832,1.1],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[3.6851,1.0062,4.0117,1.0062,4.0117,1.1,3.6851,1.1],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.0571,1.0077,4.2928,1.0077,4.2928,1.1,4.0571,1.1],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[4.3323,1.0077,4.5428,1.0077,4.5428,1.1,4.3323,1.1],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[4.5886,1.0062,4.756,1.0062,4.756,1.1,4.5886,1.1],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[4.7959,1.0073,5.2024,1.0073,5.2024,1.1001,4.7959,1.1001],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"words\":[{\"boundingBox\":[3.7689,1.1509,4.5703,1.1509,4.5703,1.2694,3.7689,1.2694],\"text\":\"(650)768-2322\",\"confidence\":1}]},{\"boundingBox\":[2.4417,2.2182,6.0557,2.2182,6.0557,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION OF CREDIT CARD PAYMENT\",\"words\":[{\"boundingBox\":[2.4417,2.2182,3.8058,2.2182,3.8058,2.333,2.4417,2.333],\"text\":\"AUTHORIZATION\",\"confidence\":1},{\"boundingBox\":[3.856,2.2182,4.0615,2.2182,4.0615,2.333,3.856,2.333],\"text\":\"OF\",\"confidence\":1},{\"boundingBox\":[4.1098,2.2182,4.7034,2.2182,4.7034,2.333,4.1098,2.333],\"text\":\"CREDIT\",\"confidence\":1},{\"boundingBox\":[4.753,2.2182,5.2052,2.2182,5.2052,2.333,4.753,2.333],\"text\":\"CARD\",\"confidence\":1},{\"boundingBox\":[5.256,2.2185,6.0557,2.2185,6.0557,2.3325,5.256,2.3325],\"text\":\"PAYMENT\",\"confidence\":1}]},{\"boundingBox\":[3.3533,3.0267,5.1867,3.0267,5.1867,3.2267,3.3533,3.23],\"text\":\"CONTOSO BANK\",\"words\":[{\"boundingBox\":[3.3563,3.0304,4.5105,3.0286,4.5106,3.2286,3.3624,3.2333],\"text\":\"CONTOSO\",\"confidence\":0.985},{\"boundingBox\":[4.5508,3.0286,5.1816,3.0301,5.1782,3.2286,4.5507,3.2286],\"text\":\"BANK\",\"confidence\":0.987}]},{\"boundingBox\":[0.8106,3.5128,7.4009,3.5128,7.4009,3.6446,0.8106,3.6446],\"text\":\"Fees owed to this Department may be paid by the use of a credit card. If you wish to pay your fee(s)\",\"words\":[{\"boundingBox\":[0.8106,3.5151,1.1118,3.5151,1.1118,3.6168,0.8106,3.6168],\"text\":\"Fees\",\"confidence\":1},{\"boundingBox\":[1.16,3.5151,1.5019,3.5151,1.5019,3.6168,1.16,3.6168],\"text\":\"owed\",\"confidence\":1},{\"boundingBox\":[1.55,3.5209,1.6753,3.5209,1.6753,3.6168,1.55,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[1.7196,3.5141,1.9602,3.5141,1.9602,3.6168,1.7196,3.6168],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[2.0143,3.5151,2.7723,3.5151,2.7723,3.6437,2.0143,3.6437],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[2.8228,3.539,3.0909,3.539,3.0909,3.6446,2.8228,3.6446],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[3.1377,3.5151,3.2877,3.5151,3.2877,3.6168,3.1377,3.6168],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[3.3395,3.5141,3.6084,3.5141,3.6084,3.6437,3.3395,3.6437],\"text\":\"paid\",\"confidence\":1},{\"boundingBox\":[3.6635,3.5151,3.8159,3.5151,3.8159,3.6446,3.6635,3.6446],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[3.8565,3.5151,4.0598,3.5151,4.0598,3.6168,3.8565,3.6168],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[4.1112,3.539,4.3377,3.539,4.3377,3.6168,4.1112,3.6168],\"text\":\"use\",\"confidence\":1},{\"boundingBox\":[4.3863,3.5138,4.5109,3.5138,4.5109,3.6168,4.3863,3.6168],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.5554,3.539,4.6247,3.539,4.6247,3.6168,4.5554,3.6168],\"text\":\"a\",\"confidence\":1},{\"boundingBox\":[4.6718,3.5141,5.0411,3.5141,5.0411,3.6168,4.6718,3.6168],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[5.0875,3.5151,5.4065,3.5151,5.4065,3.6168,5.0875,3.6168],\"text\":\"card.\",\"confidence\":1},{\"boundingBox\":[5.501,3.5138,5.5751,3.5138,5.5751,3.615,5.501,3.615],\"text\":\"If\",\"confidence\":1},{\"boundingBox\":[5.6177,3.539,5.8539,3.539,5.8539,3.6446,5.6177,3.6446],\"text\":\"you\",\"confidence\":1},{\"boundingBox\":[5.9011,3.5141,6.2016,3.5141,6.2016,3.6168,5.9011,3.6168],\"text\":\"wish\",\"confidence\":1},{\"boundingBox\":[6.2504,3.5209,6.3758,3.5209,6.3758,3.6168,6.2504,3.6168],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[6.4273,3.539,6.6562,3.539,6.6562,3.6446,6.4273,3.6446],\"text\":\"pay\",\"confidence\":1},{\"boundingBox\":[6.6976,3.539,6.994,3.539,6.994,3.6446,6.6976,3.6446],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[7.036,3.5128,7.4009,3.5128,7.4009,3.6438,7.036,3.6438],\"text\":\"fee(s)\",\"confidence\":1}]},{\"boundingBox\":[0.8014,3.6789,7.373,3.6789,7.373,3.8101,0.8014,3.8101],\"text\":\"with your credit card, please complete this form and send it with your paperwork. Payment through\",\"words\":[{\"boundingBox\":[0.8014,3.6792,1.0698,3.6792,1.0698,3.7807,0.8014,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[1.1194,3.7041,1.4149,3.7041,1.4149,3.8097,1.1194,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[1.4602,3.6792,1.8317,3.6792,1.8317,3.7819,1.4602,3.7819],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.8781,3.6801,2.1969,3.6801,2.1969,3.8033,1.8781,3.8033],\"text\":\"card,\",\"confidence\":1},{\"boundingBox\":[2.2527,3.6801,2.6721,3.6801,2.6721,3.8087,2.2527,3.8087],\"text\":\"please\",\"confidence\":1},{\"boundingBox\":[2.7191,3.6801,3.3204,3.6801,3.3204,3.8087,2.7191,3.8087],\"text\":\"complete\",\"confidence\":1},{\"boundingBox\":[3.364,3.6792,3.6047,3.6792,3.6047,3.7819,3.364,3.7819],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.6496,3.6789,3.9485,3.6789,3.9485,3.7819,3.6496,3.7819],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[3.9997,3.6801,4.2346,3.6801,4.2346,3.7819,3.9997,3.7819],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.2855,3.6801,4.5976,3.6801,4.5976,3.7819,4.2855,3.7819],\"text\":\"send\",\"confidence\":1},{\"boundingBox\":[4.6539,3.6792,4.7259,3.6792,4.7259,3.7807,4.6539,3.7807],\"text\":\"it\",\"confidence\":1},{\"boundingBox\":[4.7682,3.6792,5.0366,3.6792,5.0366,3.7807,4.7682,3.7807],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[5.0862,3.7041,5.3817,3.7041,5.3817,3.8097,5.0862,3.8097],\"text\":\"your\",\"confidence\":1},{\"boundingBox\":[5.4308,3.6801,6.1548,3.6801,6.1548,3.8087,5.4308,3.8087],\"text\":\"paperwork.\",\"confidence\":1},{\"boundingBox\":[6.2509,3.6801,6.8158,3.6801,6.8158,3.8097,6.2509,3.8097],\"text\":\"Payment\",\"confidence\":1},{\"boundingBox\":[6.8588,3.6801,7.373,3.6801,7.373,3.8101,6.8588,3.8101],\"text\":\"through\",\"confidence\":1}]},{\"boundingBox\":[0.8047,3.8456,7.0271,3.8456,7.0271,3.9764,0.8047,3.9764],\"text\":\"credit cards will not be processed without this authorization form. Please print or type clearly.\",\"words\":[{\"boundingBox\":[0.8047,3.8459,1.1755,3.8459,1.1755,3.9486,0.8047,3.9486],\"text\":\"credit\",\"confidence\":1},{\"boundingBox\":[1.222,3.8468,1.5826,3.8468,1.5826,3.9486,1.222,3.9486],\"text\":\"cards\",\"confidence\":1},{\"boundingBox\":[1.6266,3.8459,1.8414,3.8459,1.8414,3.9468,1.6266,3.9468],\"text\":\"will\",\"confidence\":1},{\"boundingBox\":[1.8984,3.8527,2.1015,3.8527,2.1015,3.9486,1.8984,3.9486],\"text\":\"not\",\"confidence\":1},{\"boundingBox\":[2.1517,3.8468,2.3017,3.8468,2.3017,3.9486,2.1517,3.9486],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.3526,3.8468,3.0301,3.8468,3.0301,3.9754,2.3526,3.9754],\"text\":\"processed\",\"confidence\":1},{\"boundingBox\":[3.0757,3.8459,3.5679,3.8459,3.5679,3.9486,3.0757,3.9486],\"text\":\"without\",\"confidence\":1},{\"boundingBox\":[3.6109,3.8459,3.8518,3.8459,3.8518,3.9486,3.6109,3.9486],\"text\":\"this\",\"confidence\":1},{\"boundingBox\":[3.8985,3.8459,4.7585,3.8459,4.7585,3.9486,3.8985,3.9486],\"text\":\"authorization\",\"confidence\":1},{\"boundingBox\":[4.8073,3.8456,5.144,3.8456,5.144,3.9486,4.8073,3.9486],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.2402,3.8468,5.6667,3.8468,5.6667,3.9486,5.2402,3.9486],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[5.7176,3.8459,6.0148,3.8459,6.0148,3.9754,5.7176,3.9754],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[6.0612,3.8708,6.1934,3.8708,6.1934,3.9486,6.0612,3.9486],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[6.2353,3.8527,6.5149,3.8527,6.5149,3.9764,6.2353,3.9764],\"text\":\"type\",\"confidence\":1},{\"boundingBox\":[6.5627,3.8468,7.0271,3.8468,7.0271,3.9764,6.5627,3.9764],\"text\":\"clearly.\",\"confidence\":1}]},{\"boundingBox\":[0.8479,4.1881,7.0286,4.1881,7.0286,4.3316,0.8479,4.3316],\"text\":\"Name (company/individual for whom payment is being made) (Please Include License # and SSN/FEIN):\",\"words\":[{\"boundingBox\":[0.8479,4.2002,1.2134,4.2002,1.2134,4.3019,0.8479,4.3019],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.2654,4.1881,2.4681,4.1881,2.4681,4.3316,1.2654,4.3316],\"text\":\"(company/individual\",\"confidence\":1},{\"boundingBox\":[2.5128,4.2091,2.6764,4.2091,2.6764,4.3016,2.5128,4.3016],\"text\":\"for\",\"confidence\":1},{\"boundingBox\":[2.7128,4.2102,3.0674,4.2102,3.0674,4.3016,2.7128,4.3016],\"text\":\"whom\",\"confidence\":1},{\"boundingBox\":[3.1169,4.2155,3.6202,4.2155,3.6202,4.3266,3.1169,4.3266],\"text\":\"payment\",\"confidence\":1},{\"boundingBox\":[3.6667,4.2094,3.7576,4.2094,3.7576,4.3016,3.6667,4.3016],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[3.8047,4.2094,4.1234,4.2094,4.1234,4.327,3.8047,4.327],\"text\":\"being\",\"confidence\":1},{\"boundingBox\":[4.1727,4.2083,4.5281,4.2083,4.5281,4.3259,4.1727,4.3259],\"text\":\"made)\",\"confidence\":1},{\"boundingBox\":[4.5718,4.2083,5.0014,4.2083,5.0014,4.3259,4.5718,4.3259],\"text\":\"(Please\",\"confidence\":1},{\"boundingBox\":[5.0484,4.2102,5.4746,4.2102,5.4746,4.3016,5.0484,4.3016],\"text\":\"Include\",\"confidence\":1},{\"boundingBox\":[5.5225,4.2094,5.975,4.2094,5.975,4.3016,5.5225,4.3016],\"text\":\"License\",\"confidence\":1},{\"boundingBox\":[6.0157,4.2128,6.0807,4.2128,6.0807,4.3,6.0157,4.3],\"text\":\"#\",\"confidence\":1},{\"boundingBox\":[6.1214,4.2102,6.3327,4.2102,6.3327,4.3016,6.1214,4.3016],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[6.3805,4.2079,7.0286,4.2079,7.0286,4.3259,6.3805,4.3259],\"text\":\"SSN/FEIN):\",\"confidence\":1}]},{\"boundingBox\":[0.8942,4.3643,3.6366,4.3643,3.6366,4.4867,0.8942,4.4867],\"text\":\"Contoso Insurance 54353T7A, 36-1222985\",\"words\":[{\"boundingBox\":[0.8942,4.3643,1.4017,4.3643,1.4017,4.4686,0.8942,4.4686],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[1.4589,4.3659,2.0531,4.3659,2.0531,4.4686,1.4589,4.4686],\"text\":\"Insurance\",\"confidence\":1},{\"boundingBox\":[2.1427,4.3655,2.807,4.3655,2.807,4.4867,2.1427,4.4867],\"text\":\"54353T7A,\",\"confidence\":1},{\"boundingBox\":[2.9033,4.3655,3.6366,4.3655,3.6366,4.4688,2.9033,4.4688],\"text\":\"36-1222985\",\"confidence\":1}]},{\"boundingBox\":[3.5656,4.9372,4.9313,4.9372,4.9313,5.068,3.5656,5.068],\"text\":\"Purpose of Payment:\",\"words\":[{\"boundingBox\":[3.5656,4.9384,4.1075,4.9384,4.1075,5.067,3.5656,5.067],\"text\":\"Purpose\",\"confidence\":1},{\"boundingBox\":[4.1544,4.9372,4.2781,4.9372,4.2781,5.0401,4.1544,5.0401],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[4.3295,4.9384,4.9313,4.9384,4.9313,5.068,4.3295,5.068],\"text\":\"Payment:\",\"confidence\":1}]},{\"boundingBox\":[5.0848,4.9313,6.3102,4.9313,6.3102,5.034,5.0848,5.034],\"text\":\"Balance on Account\",\"words\":[{\"boundingBox\":[5.0848,4.9313,5.5713,4.9313,5.5713,5.034,5.0848,5.034],\"text\":\"Balance\",\"confidence\":1},{\"boundingBox\":[5.6202,4.9576,5.7607,4.9576,5.7607,5.034,5.6202,5.034],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[5.8088,4.9313,6.3102,4.9313,6.3102,5.034,5.8088,5.034],\"text\":\"Account\",\"confidence\":1}]},{\"boundingBox\":[0.8258,5.4268,2.1074,5.4268,2.1074,5.5929,0.8258,5.5929],\"text\":\"Card Type: ❑Visa\",\"words\":[{\"boundingBox\":[0.8258,5.4268,1.1104,5.4268,1.1104,5.5312,0.8258,5.5312],\"text\":\"Card\",\"confidence\":1},{\"boundingBox\":[1.1624,5.4285,1.495,5.4285,1.495,5.5588,1.1624,5.5588],\"text\":\"Type:\",\"confidence\":1},{\"boundingBox\":[1.6159,5.4302,2.1074,5.4302,2.1074,5.5929,1.6159,5.5929],\"text\":\"❑Visa\",\"confidence\":1}]},{\"boundingBox\":[2.2989,5.4295,2.8924,5.4295,2.8924,5.5922,2.2989,5.5922],\"text\":\"❑x AMEX\",\"words\":[{\"boundingBox\":[2.2989,5.4295,2.4591,5.4295,2.4591,5.5922,2.2989,5.5922],\"text\":\"❑x\",\"confidence\":1},{\"boundingBox\":[2.4996,5.4443,2.8924,5.4443,2.8924,5.5453,2.4996,5.5453],\"text\":\"AMEX\",\"confidence\":1}]},{\"boundingBox\":[3.0846,5.4481,4.0327,5.4481,4.0327,5.6108,3.0846,5.6108],\"text\":\"❑Master Card\",\"words\":[{\"boundingBox\":[3.0846,5.4481,3.7051,5.4481,3.7051,5.6108,3.0846,5.6108],\"text\":\"❑Master\",\"confidence\":1},{\"boundingBox\":[3.7487,5.4569,4.0327,5.4569,4.0327,5.5611,3.7487,5.5611],\"text\":\"Card\",\"confidence\":1}]},{\"boundingBox\":[0.8954,5.7074,2.2511,5.7074,2.2511,5.8125,0.8954,5.8125],\"text\":\"Name of Cardholder:\",\"words\":[{\"boundingBox\":[0.8954,5.7101,1.2609,5.7101,1.2609,5.8118,0.8954,5.8118],\"text\":\"Name\",\"confidence\":1},{\"boundingBox\":[1.3079,5.7088,1.4324,5.7088,1.4324,5.8118,1.3079,5.8118],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[1.4782,5.7074,2.2511,5.7074,2.2511,5.8125,1.4782,5.8125],\"text\":\"Cardholder:\",\"confidence\":1}]},{\"boundingBox\":[2.502,5.7604,3.2429,5.7604,3.2429,5.8923,2.502,5.8923],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[2.502,5.7621,2.7903,5.7621,2.7903,5.8648,2.502,5.8648],\"text\":\"John\",\"confidence\":1},{\"boundingBox\":[2.8449,5.7604,3.2429,5.7604,3.2429,5.8923,2.8449,5.8923],\"text\":\"Singer\",\"confidence\":1}]},{\"boundingBox\":[5.2305,5.6912,8.0337,5.6912,8.0337,5.8091,5.2305,5.8091],\"text\":\"Contact persons phone #, if questions with this\",\"words\":[{\"boundingBox\":[5.2305,5.6912,5.6874,5.6912,5.6874,5.7856,5.2305,5.7856],\"text\":\"Contact\",\"confidence\":1},{\"boundingBox\":[5.7333,5.7151,6.2073,5.7151,6.2073,5.8091,5.7333,5.8091],\"text\":\"persons\",\"confidence\":1},{\"boundingBox\":[6.2544,5.6936,6.6183,5.6936,6.6183,5.8091,6.2544,5.8091],\"text\":\"phone\",\"confidence\":1},{\"boundingBox\":[6.6587,5.6961,6.7524,5.6961,6.7524,5.8042,6.6587,5.8042],\"text\":\"#,\",\"confidence\":1},{\"boundingBox\":[6.8042,5.6925,6.8703,5.6925,6.8703,5.7833,6.8042,5.7833],\"text\":\"if\",\"confidence\":1},{\"boundingBox\":[6.9099,5.6927,7.4918,5.6927,7.4918,5.8091,6.9099,5.8091],\"text\":\"questions\",\"confidence\":1},{\"boundingBox\":[7.5307,5.6927,7.7719,5.6927,7.7719,5.784,7.5307,5.784],\"text\":\"with\",\"confidence\":1},{\"boundingBox\":[7.8166,5.6927,8.0337,5.6927,8.0337,5.785,7.8166,5.785],\"text\":\"this\",\"confidence\":1}]},{\"boundingBox\":[5.2262,5.8416,6.5139,5.8416,6.5139,5.9847,5.2262,5.9847],\"text\":\"form. Telephone #: (\",\"words\":[{\"boundingBox\":[5.2262,5.8625,5.5295,5.8625,5.5295,5.955,5.2262,5.955],\"text\":\"form.\",\"confidence\":1},{\"boundingBox\":[5.5744,5.8534,6.2637,5.8534,6.2637,5.982,5.5744,5.982],\"text\":\"Telephone\",\"confidence\":1},{\"boundingBox\":[6.3085,5.8562,6.417,5.8562,6.417,5.9533,6.3085,5.9533],\"text\":\"#:\",\"confidence\":1},{\"boundingBox\":[6.4787,5.8416,6.5139,5.8416,6.5139,5.9847,6.4787,5.9847],\"text\":\"(\",\"confidence\":1}]},{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"words\":[{\"boundingBox\":[6.6237,5.8542,6.87,5.8542,6.87,5.9672,6.6237,5.9672],\"text\":\"425\",\"confidence\":1}]},{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"words\":[{\"boundingBox\":[6.9056,5.8416,6.9409,5.8416,6.9409,5.9847,6.9056,5.9847],\"text\":\")\",\"confidence\":1}]},{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"words\":[{\"boundingBox\":[7.3783,5.9042,7.4157,5.9042,7.4157,5.918,7.3783,5.918],\"text\":\"-\",\"confidence\":1}]},{\"boundingBox\":[7.1288,5.8181,7.809,5.8181,7.809,5.9672,7.1288,5.9672],\"text\":\"779 3479\",\"words\":[{\"boundingBox\":[7.1288,5.8542,7.3693,5.8542,7.3693,5.9672,7.1288,5.9672],\"text\":\"779\",\"confidence\":1},{\"boundingBox\":[7.4829,5.8181,7.809,5.8181,7.809,5.9313,7.4829,5.9313],\"text\":\"3479\",\"confidence\":1}]},{\"boundingBox\":[0.8964,6.0366,1.8846,6.0366,1.8846,6.1393,0.8964,6.1393],\"text\":\"Email Address:\",\"words\":[{\"boundingBox\":[0.8964,6.0366,1.2473,6.0366,1.2473,6.1393,0.8964,6.1393],\"text\":\"Email\",\"confidence\":1},{\"boundingBox\":[1.298,6.0376,1.8846,6.0376,1.8846,6.1393,1.298,6.1393],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"words\":[{\"boundingBox\":[1.9261,6.0432,3.4556,6.0432,3.4556,6.1753,1.9261,6.1753],\"text\":\"johnsinger@hotmail.com\",\"confidence\":1}]},{\"boundingBox\":[0.8954,6.2792,1.9961,6.2792,1.9961,6.4101,0.8954,6.4101],\"text\":\"Mailing Address:\",\"words\":[{\"boundingBox\":[0.8954,6.2792,1.357,6.2792,1.357,6.4101,0.8954,6.4101],\"text\":\"Mailing\",\"confidence\":1},{\"boundingBox\":[1.4062,6.2801,1.9961,6.2801,1.9961,6.3819,1.4062,6.3819],\"text\":\"Address:\",\"confidence\":1}]},{\"boundingBox\":[2.1027,6.3142,3.0803,6.3142,3.0803,6.4186,2.1027,6.4186],\"text\":\"472 SE 74th ST\",\"words\":[{\"boundingBox\":[2.1027,6.3155,2.3256,6.3155,2.3256,6.4171,2.1027,6.4171],\"text\":\"472\",\"confidence\":1},{\"boundingBox\":[2.3779,6.3142,2.5497,6.3142,2.5497,6.4186,2.3779,6.4186],\"text\":\"SE\",\"confidence\":1},{\"boundingBox\":[2.6024,6.3159,2.8571,6.3159,2.8571,6.4179,2.6024,6.4179],\"text\":\"74th\",\"confidence\":1},{\"boundingBox\":[2.9115,6.3142,3.0803,6.3142,3.0803,6.4186,2.9115,6.4186],\"text\":\"ST\",\"confidence\":1}]},{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"words\":[{\"boundingBox\":[0.892,6.5399,1.1815,6.5399,1.1815,6.6721,0.892,6.6721],\"text\":\"City:\",\"confidence\":1}]},{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"words\":[{\"boundingBox\":[1.3947,6.5747,2.01,6.5747,2.01,6.6774,1.3947,6.6774],\"text\":\"Lakewood\",\"confidence\":1}]},{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"words\":[{\"boundingBox\":[4.2363,6.5399,4.6048,6.5399,4.6048,6.645,4.2363,6.645],\"text\":\"State:\",\"confidence\":1}]},{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"words\":[{\"boundingBox\":[4.7452,6.5506,4.9679,6.5506,4.9679,6.6518,4.7452,6.6518],\"text\":\"WA\",\"confidence\":1}]},{\"boundingBox\":[6.4885,6.5399,7.1134,6.5399,7.1134,6.6712,6.4885,6.6712],\"text\":\"Zip Code:\",\"words\":[{\"boundingBox\":[6.4885,6.5416,6.6893,6.5416,6.6893,6.6712,6.4885,6.6712],\"text\":\"Zip\",\"confidence\":1},{\"boundingBox\":[6.7385,6.5399,7.1134,6.5399,7.1134,6.645,6.7385,6.645],\"text\":\"Code:\",\"confidence\":1}]},{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"words\":[{\"boundingBox\":[7.2536,6.5442,7.6275,6.5442,7.6275,6.6473,7.2536,6.6473],\"text\":\"98712\",\"confidence\":1}]},{\"boundingBox\":[0.8033,6.9573,7.5868,6.9573,7.5868,7.1067,0.8033,7.1067],\"text\":\"I authorize Contoso Department of Professional and Financial Regulation, Bureau of Insurance\",\"words\":[{\"boundingBox\":[0.8033,6.9598,0.8617,6.9598,0.8617,7.0725,0.8033,7.0725],\"text\":\"I\",\"confidence\":1},{\"boundingBox\":[0.9107,6.9573,1.5801,6.9573,1.5801,7.0747,0.9107,7.0747],\"text\":\"authorize\",\"confidence\":1},{\"boundingBox\":[1.6314,6.958,2.2027,6.958,2.2027,7.0748,1.6314,7.0748],\"text\":\"Contoso\",\"confidence\":1},{\"boundingBox\":[2.2527,6.9598,3.1119,6.9598,3.1119,7.1065,2.2527,7.1065],\"text\":\"Department\",\"confidence\":1},{\"boundingBox\":[3.1579,6.9573,3.302,6.9573,3.302,7.0747,3.1579,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[3.3372,6.9573,4.2012,6.9573,4.2012,7.0747,3.3372,7.0747],\"text\":\"Professional\",\"confidence\":1},{\"boundingBox\":[4.2509,6.9598,4.5118,6.9598,4.5118,7.0747,4.2509,7.0747],\"text\":\"and\",\"confidence\":1},{\"boundingBox\":[4.5598,6.9573,5.2201,6.9573,5.2201,7.0747,4.5598,7.0747],\"text\":\"Financial\",\"confidence\":1},{\"boundingBox\":[5.2699,6.9573,6.0806,6.9573,6.0806,7.1067,5.2699,7.1067],\"text\":\"Regulation,\",\"confidence\":1},{\"boundingBox\":[6.1294,6.9598,6.6514,6.9598,6.6514,7.0747,6.1294,7.0747],\"text\":\"Bureau\",\"confidence\":1},{\"boundingBox\":[6.7004,6.9573,6.8444,6.9573,6.8444,7.0747,6.7004,7.0747],\"text\":\"of\",\"confidence\":1},{\"boundingBox\":[6.8801,6.9598,7.5868,6.9598,7.5868,7.0747,6.8801,7.0747],\"text\":\"Insurance\",\"confidence\":1}]},{\"boundingBox\":[0.8033,7.1495,2.1348,7.1495,2.1348,7.2983,0.8033,7.2983],\"text\":\"to charge my: Visa\",\"words\":[{\"boundingBox\":[0.8033,7.1592,0.9348,7.1592,0.9348,7.2663,0.8033,7.2663],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[0.9847,7.1515,1.4588,7.1515,1.4588,7.2983,0.9847,7.2983],\"text\":\"charge\",\"confidence\":1},{\"boundingBox\":[1.5062,7.1853,1.7675,7.1853,1.7675,7.2982,1.5062,7.2982],\"text\":\"my:\",\"confidence\":1},{\"boundingBox\":[1.8242,7.1495,2.1348,7.1495,2.1348,7.2665,1.8242,7.2665],\"text\":\"Visa\",\"confidence\":1}]},{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"words\":[{\"boundingBox\":[0.8996,7.8438,2.2164,7.8438,2.2164,7.9603,0.8996,7.9603],\"text\":\"4872876432425423\",\"confidence\":1}]},{\"boundingBox\":[3.3024,7.9046,4.3518,7.9046,4.3518,8.0411,3.3024,8.0411],\"text\":\"Expiration date:\",\"words\":[{\"boundingBox\":[3.3024,7.9046,4.0018,7.9046,4.0018,8.0411,3.3024,8.0411],\"text\":\"Expiration\",\"confidence\":1},{\"boundingBox\":[4.0467,7.9069,4.3518,7.9069,4.3518,8.012,4.0467,8.012],\"text\":\"date:\",\"confidence\":1}]},{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"words\":[{\"boundingBox\":[4.442,7.8916,4.5825,7.8916,4.5825,7.9982,4.442,7.9982],\"text\":\"09\",\"confidence\":1}]},{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"words\":[{\"boundingBox\":[4.6708,7.9069,4.7157,7.9069,4.7157,8.012,4.6708,8.012],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"words\":[{\"boundingBox\":[4.7708,7.8956,4.9015,7.8956,4.9015,8.0002,4.7708,8.0002],\"text\":\"21\",\"confidence\":1}]},{\"boundingBox\":[5.0592,7.8956,7.6702,7.8956,7.6702,8.0289,5.0592,8.0289],\"text\":\"in the amount of: $__________________\",\"words\":[{\"boundingBox\":[5.0592,7.9046,5.1817,7.9046,5.1817,8.01,5.0592,8.01],\"text\":\"in\",\"confidence\":1},{\"boundingBox\":[5.2259,7.9069,5.4239,7.9069,5.4239,8.012,5.2259,8.012],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[5.4691,7.9139,5.9657,7.9139,5.9657,8.012,5.4691,8.012],\"text\":\"amount\",\"confidence\":1},{\"boundingBox\":[6.0082,7.9046,6.1702,7.9046,6.1702,8.012,6.0082,8.012],\"text\":\"of:\",\"confidence\":1},{\"boundingBox\":[6.2258,7.8956,7.6702,7.8956,7.6702,8.0289,6.2258,8.0289],\"text\":\"$__________________\",\"confidence\":1}]},{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"words\":[{\"boundingBox\":[6.5828,7.8896,6.9948,7.8896,6.9948,7.9962,6.5828,7.9962],\"text\":\"263.00\",\"confidence\":1}]},{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"words\":[{\"boundingBox\":[0.8,8.0223,3.1333,8.0223,3.1333,8.0307,0.8,8.0307],\"text\":\"____________________________\",\"confidence\":1}]},{\"boundingBox\":[0.806,8.0771,2.6175,8.0771,2.6175,8.1896,0.806,8.1896],\"text\":\"(Card number – Please print clearly)\",\"words\":[{\"boundingBox\":[0.806,8.0771,1.0841,8.0771,1.0841,8.1845,0.806,8.1845],\"text\":\"(Card\",\"confidence\":1},{\"boundingBox\":[1.119,8.0771,1.4992,8.0771,1.4992,8.1636,1.119,8.1636],\"text\":\"number\",\"confidence\":1},{\"boundingBox\":[1.5308,8.1322,1.5933,8.1322,1.5933,8.1374,1.5308,8.1374],\"text\":\"–\",\"confidence\":1},{\"boundingBox\":[1.6253,8.0771,1.94,8.0771,1.94,8.1636,1.6253,8.1636],\"text\":\"Please\",\"confidence\":1},{\"boundingBox\":[1.975,8.0771,2.2103,8.0771,2.2103,8.1895,1.975,8.1895],\"text\":\"print\",\"confidence\":1},{\"boundingBox\":[2.2444,8.0771,2.6175,8.0771,2.6175,8.1896,2.2444,8.1896],\"text\":\"clearly)\",\"confidence\":1}]},{\"boundingBox\":[1.89,8.26,3.2367,8.27,3.2333,8.5567,1.89,8.5533],\"text\":\"John Singer\",\"words\":[{\"boundingBox\":[1.9698,8.2645,2.519,8.2845,2.5195,8.5409,1.9695,8.5567],\"text\":\"John\",\"confidence\":0.97},{\"boundingBox\":[2.5778,8.2865,3.2251,8.3065,3.2268,8.5309,2.5784,8.5396],\"text\":\"Singer\",\"confidence\":0.947}]},{\"boundingBox\":[0.8059,8.3968,6.1697,8.3968,6.1697,8.5421,0.8059,8.5421],\"text\":\"Signature: ___________________________________________ Date: ______\",\"words\":[{\"boundingBox\":[0.8059,8.3968,1.5333,8.3968,1.5333,8.5421,0.8059,8.5421],\"text\":\"Signature:\",\"confidence\":1},{\"boundingBox\":[1.5893,8.5205,5.2429,8.5205,5.2429,8.5281,1.5893,8.5281],\"text\":\"___________________________________________\",\"confidence\":1},{\"boundingBox\":[5.2557,8.3997,5.6041,8.3997,5.6041,8.5111,5.2557,8.5111],\"text\":\"Date:\",\"confidence\":1},{\"boundingBox\":[5.66,8.5205,6.1697,8.5205,6.1697,8.5281,5.66,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"words\":[{\"boundingBox\":[5.8155,8.3705,5.9721,8.3705,5.9721,8.4835,5.8155,8.4835],\"text\":\"08\",\"confidence\":1}]},{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.1674,8.3968,6.2149,8.3968,6.2149,8.5119,6.1674,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"words\":[{\"boundingBox\":[6.5359,8.3585,6.6943,8.3585,6.6943,8.4716,6.5359,8.4716],\"text\":\"23\",\"confidence\":1}]},{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"words\":[{\"boundingBox\":[6.7199,8.3968,6.7673,8.3968,6.7673,8.5119,6.7199,8.5119],\"text\":\"/\",\"confidence\":1}]},{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"words\":[{\"boundingBox\":[7.0358,8.3585,7.3644,8.3585,7.3644,8.4715,7.0358,8.4715],\"text\":\"2018\",\"confidence\":1}]},{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"words\":[{\"boundingBox\":[6.2125,8.5205,6.7221,8.5205,6.7221,8.5281,6.2125,8.5281],\"text\":\"______\",\"confidence\":1}]},{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"words\":[{\"boundingBox\":[6.7649,8.5205,7.4445,8.5205,7.4445,8.5281,6.7649,8.5281],\"text\":\"________\",\"confidence\":1}]},{\"boundingBox\":[1.7087,8.6229,4.1257,8.6229,4.1257,8.7284,1.7087,8.7284],\"text\":\"(must be signed by authorized person to validate)\",\"words\":[{\"boundingBox\":[1.7087,8.6229,1.9762,8.6229,1.9762,8.727,1.7087,8.727],\"text\":\"(must\",\"confidence\":1},{\"boundingBox\":[2.0158,8.6246,2.1283,8.6246,2.1283,8.7057,2.0158,8.7057],\"text\":\"be\",\"confidence\":1},{\"boundingBox\":[2.168,8.6246,2.485,8.6246,2.485,8.7284,2.168,8.7284],\"text\":\"signed\",\"confidence\":1},{\"boundingBox\":[2.5286,8.6246,2.6389,8.6246,2.6389,8.7278,2.5286,8.7278],\"text\":\"by\",\"confidence\":1},{\"boundingBox\":[2.6737,8.6246,3.1831,8.6246,3.1831,8.7057,2.6737,8.7057],\"text\":\"authorized\",\"confidence\":1},{\"boundingBox\":[3.2268,8.6445,3.5523,8.6445,3.5523,8.727,3.2268,8.727],\"text\":\"person\",\"confidence\":1},{\"boundingBox\":[3.592,8.63,3.6791,8.63,3.6791,8.7056,3.592,8.7056],\"text\":\"to\",\"confidence\":1},{\"boundingBox\":[3.7147,8.6229,4.1257,8.6229,4.1257,8.727,3.7147,8.727],\"text\":\"validate)\",\"confidence\":1}]},{\"boundingBox\":[0.8131,9.1368,6.7518,9.1368,6.7518,9.2816,0.8131,9.2816],\"text\":\"Form is available on our website: www.contoso.com/insurance You may fax the form to:\",\"words\":[{\"boundingBox\":[0.8131,9.1397,1.1463,9.1397,1.1463,9.2511,0.8131,9.2511],\"text\":\"Form\",\"confidence\":1},{\"boundingBox\":[1.2089,9.1397,1.3033,9.1397,1.3033,9.2513,1.2089,9.2513],\"text\":\"is\",\"confidence\":1},{\"boundingBox\":[1.3569,9.1397,1.9478,9.1397,1.9478,9.2513,1.3569,9.2513],\"text\":\"available\",\"confidence\":1},{\"boundingBox\":[2.0018,9.1671,2.1563,9.1671,2.1563,9.2511,2.0018,9.2511],\"text\":\"on\",\"confidence\":1},{\"boundingBox\":[2.2141,9.1671,2.4292,9.1671,2.4292,9.2513,2.2141,9.2513],\"text\":\"our\",\"confidence\":1},{\"boundingBox\":[2.4732,9.1397,3.0178,9.1397,3.0178,9.2513,2.4732,9.2513],\"text\":\"website:\",\"confidence\":1},{\"boundingBox\":[3.1183,9.1368,5.0528,9.1368,5.0528,9.2519,3.1183,9.2519],\"text\":\"www.contoso.com/insurance\",\"confidence\":1},{\"boundingBox\":[5.1037,9.1397,5.3628,9.1397,5.3628,9.2513,5.1037,9.2513],\"text\":\"You\",\"confidence\":1},{\"boundingBox\":[5.4255,9.1671,5.7022,9.1671,5.7022,9.2816,5.4255,9.2816],\"text\":\"may\",\"confidence\":1},{\"boundingBox\":[5.7486,9.1381,5.9485,9.1381,5.9485,9.2513,5.7486,9.2513],\"text\":\"fax\",\"confidence\":1},{\"boundingBox\":[5.9948,9.1397,6.1987,9.1397,6.1987,9.2513,5.9948,9.2513],\"text\":\"the\",\"confidence\":1},{\"boundingBox\":[6.2496,9.1381,6.5429,9.1381,6.5429,9.2511,6.2496,9.2511],\"text\":\"form\",\"confidence\":1},{\"boundingBox\":[6.5974,9.1471,6.7518,9.1471,6.7518,9.2511,6.5974,9.2511],\"text\":\"to:\",\"confidence\":1}]},{\"boundingBox\":[0.8058,9.323,4.3584,9.323,4.3584,9.4677,0.8058,9.4677],\"text\":\"650-768-2322 or e-mail to: insurance@contoso.com\",\"words\":[{\"boundingBox\":[0.8058,9.3245,1.7423,9.3245,1.7423,9.4376,0.8058,9.4376],\"text\":\"650-768-2322\",\"confidence\":1},{\"boundingBox\":[1.7983,9.3538,1.9285,9.3538,1.9285,9.4378,1.7983,9.4378],\"text\":\"or\",\"confidence\":1},{\"boundingBox\":[1.9774,9.3263,2.3769,9.3263,2.3769,9.438,1.9774,9.438],\"text\":\"e-mail\",\"confidence\":1},{\"boundingBox\":[2.4319,9.3338,2.5864,9.3338,2.5864,9.4378,2.4319,9.4378],\"text\":\"to:\",\"confidence\":1},{\"boundingBox\":[2.695,9.323,4.3584,9.323,4.3584,9.4677,2.695,9.4677],\"text\":\"insurance@contoso.com\",\"confidence\":1}]},{\"boundingBox\":[3.2626,9.7729,5.6997,9.7729,5.6997,9.8468,3.2626,9.8468],\"text\":\"OFFICES LOCATED AT 24 Main Street Palo Alto CA 842325\",\"words\":[{\"boundingBox\":[3.2626,9.7731,3.6024,9.7731,3.6024,9.8468,3.2626,9.8468],\"text\":\"OFFICES\",\"confidence\":1},{\"boundingBox\":[3.6348,9.775,3.996,9.775,3.996,9.8464,3.6348,9.8464],\"text\":\"LOCATED\",\"confidence\":1},{\"boundingBox\":[4.0212,9.79,4.1168,9.79,4.1168,9.845,4.0212,9.845],\"text\":\"AT\",\"confidence\":1},{\"boundingBox\":[4.1421,9.7738,4.2429,9.7738,4.2429,9.845,4.1421,9.845],\"text\":\"24\",\"confidence\":1},{\"boundingBox\":[4.2818,9.7741,4.479,9.7741,4.479,9.8461,4.2818,9.8461],\"text\":\"Main\",\"confidence\":1},{\"boundingBox\":[4.5171,9.7729,4.7719,9.7729,4.7719,9.8461,4.5171,9.8461],\"text\":\"Street\",\"confidence\":1},{\"boundingBox\":[4.8071,9.7741,4.9909,9.7741,4.9909,9.8461,4.8071,9.8461],\"text\":\"Palo\",\"confidence\":1},{\"boundingBox\":[5.0215,9.7741,5.1857,9.7741,5.1857,9.8461,5.0215,9.8461],\"text\":\"Alto\",\"confidence\":1},{\"boundingBox\":[5.2212,9.7729,5.3518,9.7729,5.3518,9.8461,5.2212,9.8461],\"text\":\"CA\",\"confidence\":1},{\"boundingBox\":[5.3827,9.7738,5.6997,9.7738,5.6997,9.8462,5.3827,9.8462],\"text\":\"842325\",\"confidence\":1}]},{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"words\":[{\"boundingBox\":[3.8373,9.8915,5.1228,9.8915,5.1228,9.9709,3.8373,9.9709],\"text\":\"www.contoso.com/insurance\",\"confidence\":1}]}],\"selectionMarks\":[{\"boundingBox\":[3.0724,5.4394,3.2498,5.4394,3.2498,5.6098,3.0724,5.6098],\"confidence\":0.991,\"state\":\"unselected\"},{\"boundingBox\":[1.6064,5.4233,1.7774,5.4233,1.7774,5.5937,1.6064,5.5937],\"confidence\":0.99,\"state\":\"unselected\"},{\"boundingBox\":[2.2849,5.4179,2.4652,5.4179,2.4652,5.5969,2.2849,5.5969],\"confidence\":0.881,\"state\":\"selected\"},{\"boundingBox\":[0,10.296,1.0459,10.296,1.0459,10.9982,0,10.9982],\"confidence\":0.833,\"state\":\"unselected\"},{\"boundingBox\":[0,10.6052,1.5019,10.6052,1.5019,11.0,0,11.0],\"confidence\":0.69,\"state\":\"unselected\"},{\"boundingBox\":[2.2887,5.4204,2.4633,5.4204,2.4633,5.5937,2.2887,5.5937],\"confidence\":0.609,\"state\":\"unselected\"},{\"boundingBox\":[3.3758,5.6907,4.9999,5.6907,4.9999,5.9387,3.3758,5.9387],\"confidence\":0.553,\"state\":\"unselected\"},{\"boundingBox\":[0,10.7248,0.539,10.7248,0.539,11,0,11],\"confidence\":0.553,\"state\":\"unselected\"}]}],\"pageResults\":[{\"page\":1,\"tables\":[{\"rows\":4,\"columns\":4,\"cells\":[{\"rowIndex\":0,\"columnIndex\":0,\"text\":\"Name of Cardholder: John Singer\",\"boundingBox\":[0.8104,5.6546,4.1554,5.6546,4.1554,5.9962,0.8104,5.9962],\"elements\":[\"#/readResults/0/lines/17/words/0\",\"#/readResults/0/lines/17/words/1\",\"#/readResults/0/lines/17/words/2\",\"#/readResults/0/lines/18/words/0\",\"#/readResults/0/lines/18/words/1\"]},{\"rowIndex\":0,\"columnIndex\":2,\"columnSpan\":2,\"text\":\"Contact persons phone #, if questions with this form. Telephone #: ( ) - 425 779 3479\",\"boundingBox\":[5.1496,5.6546,8.2604,5.6546,8.2604,5.9962,5.1496,5.9962],\"elements\":[\"#/readResults/0/lines/19/words/0\",\"#/readResults/0/lines/19/words/1\",\"#/readResults/0/lines/19/words/2\",\"#/readResults/0/lines/19/words/3\",\"#/readResults/0/lines/19/words/4\",\"#/readResults/0/lines/19/words/5\",\"#/readResults/0/lines/19/words/6\",\"#/readResults/0/lines/19/words/7\",\"#/readResults/0/lines/20/words/0\",\"#/readResults/0/lines/20/words/1\",\"#/readResults/0/lines/20/words/2\",\"#/readResults/0/lines/20/words/3\",\"#/readResults/0/lines/22/words/0\",\"#/readResults/0/lines/23/words/0\",\"#/readResults/0/lines/21/words/0\",\"#/readResults/0/lines/24/words/0\",\"#/readResults/0/lines/24/words/1\"]},{\"rowIndex\":1,\"columnIndex\":0,\"text\":\"Email Address: johnsinger@hotmail.com\",\"boundingBox\":[0.8104,5.9962,4.1554,5.9962,4.1554,6.2262,0.8104,6.2262],\"elements\":[\"#/readResults/0/lines/25/words/0\",\"#/readResults/0/lines/25/words/1\",\"#/readResults/0/lines/26/words/0\"]},{\"rowIndex\":2,\"columnIndex\":0,\"text\":\"Mailing Address: 472 SE 74th ST\",\"boundingBox\":[0.8104,6.2262,4.1554,6.2262,4.1554,6.5021,0.8104,6.5021],\"elements\":[\"#/readResults/0/lines/27/words/0\",\"#/readResults/0/lines/27/words/1\",\"#/readResults/0/lines/28/words/0\",\"#/readResults/0/lines/28/words/1\",\"#/readResults/0/lines/28/words/2\",\"#/readResults/0/lines/28/words/3\"]},{\"rowIndex\":3,\"columnIndex\":0,\"text\":\"City: Lakewood\",\"boundingBox\":[0.8104,6.5021,4.1554,6.5021,4.1554,6.7146,0.8104,6.7146],\"elements\":[\"#/readResults/0/lines/29/words/0\",\"#/readResults/0/lines/30/words/0\"]},{\"rowIndex\":3,\"columnIndex\":1,\"text\":\"State: WA\",\"boundingBox\":[4.1554,6.5021,5.1496,6.5021,5.1496,6.7146,4.1554,6.7146],\"elements\":[\"#/readResults/0/lines/31/words/0\",\"#/readResults/0/lines/32/words/0\"]},{\"rowIndex\":3,\"columnIndex\":3,\"text\":\"Zip Code: 98712\",\"boundingBox\":[6.4104,6.5021,8.2604,6.5021,8.2604,6.7146,6.4104,6.7146],\"elements\":[\"#/readResults/0/lines/33/words/0\",\"#/readResults/0/lines/33/words/1\",\"#/readResults/0/lines/34/words/0\"]}]}]}],\"documentResults\":[{\"docType\":\"custom:9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"modelId\":\"9db3a709-548b-4ebf-9eeb-7f417760a3e6\",\"pageRange\":[1,1],\"fields\":{\"MASTERCARD_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[3.07,5.44,3.25,5.44,3.25,5.61,3.07,5.61],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/0\"]},\"AMEX_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"selected\",\"page\":1,\"boundingBox\":[2.285,5.42,2.465,5.42,2.465,5.595,2.285,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/2\"]},\"VISA_SELECTION_MARK\":{\"type\":\"selectionMark\",\"text\":\"unselected\",\"page\":1,\"boundingBox\":[1.605,5.425,1.775,5.425,1.775,5.595,1.605,5.595],\"confidence\":1.0,\"elements\":[\"#/readResults/0/selectionMarks/1\"]}},\"docTypeConfidence\":1.0}],\"errors\":[]}}", + "Date" : "Thu, 22 Oct 2020 04:44:34 GMT", + "Content-Type" : "application/json; charset=utf-8" + }, + "Exception" : null + } ], + "variables" : [ ] +} \ No newline at end of file diff --git a/sdk/formrecognizer/test-resources.json b/sdk/formrecognizer/test-resources.json index 7c1bc6857260..ed538ef22a13 100644 --- a/sdk/formrecognizer/test-resources.json +++ b/sdk/formrecognizer/test-resources.json @@ -71,6 +71,10 @@ "type": "string", "defaultValue": "testingdata" }, + "selectionMarkTrainingDataContainer": { + "type": "string", + "defaultValue": "selectionmark" + }, "testingDataSasProperties": { "type": "object", "defaultValue": { @@ -92,6 +96,15 @@ "signedPermission": "rl", "signedResource": "c" } + }, + "selectionMarkTrainingDataSasProperties": { + "type": "object", + "defaultValue": { + "canonicalizedResource": "[concat('/blob/', parameters('blobStorageAccount'), '/', parameters('selectionMarkTrainingDataContainer'))]", + "signedExpiry": "[dateTimeAdd(utcNow('u'), 'PT2H')]", + "signedPermission": "rl", + "signedResource": "c" + } } }, "variables": { @@ -161,6 +174,10 @@ "type": "string", "value": "[concat(reference(parameters('blobResourceId'), '2019-06-01').primaryEndpoints.blob, parameters('multiPageTestingDataContainer'), '?', listServiceSas(parameters('blobResourceId'), '2019-06-01', parameters('multiPageTestingDataSasProperties')).serviceSasToken)]" }, + "FORM_RECOGNIZER_SELECTION_MARK_BLOB_CONTAINER_SAS_URL": { + "type": "string", + "value": "[concat(reference(parameters('blobResourceId'), '2019-06-01').primaryEndpoints.blob, parameters('selectionMarkTrainingDataContainer'), '?', listServiceSas(parameters('blobResourceId'), '2019-06-01', parameters('selectionMarkTrainingDataContainer')).serviceSasToken)]" + }, "FORM_RECOGNIZER_TARGET_RESOURCE_REGION": { "type": "string", "value": "[parameters('location')]" diff --git a/sdk/keyvault/azure-security-keyvault-jca/README.md b/sdk/keyvault/azure-security-keyvault-jca/README.md index f6efb38fbe05..d53ac82c551d 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/README.md +++ b/sdk/keyvault/azure-security-keyvault-jca/README.md @@ -1,51 +1,49 @@ -# JCA Provider for Azure Key Vault +# Azure Key Vault JCA client library for Java + +# Getting started + +# Key concepts The JCA Provider for Azure Key Vault is a JCA provider for certificates in Azure Key Vault. It is built on four principles: -1. Must be extremely thin to run within a JVM -1. Must not introduce any library version conflicts with Java app code dependencies -1. Must not introduce any class loader hierarchy conflicts with Java app code dependencies +1. Must be extremely thin to run within a JVM. +1. Must not introduce any library version conflicts with Java app code dependencies. +1. Must not introduce any class loader hierarchy conflicts with Java app code dependencies. 1. Must be ready for "never trust, always verify and credential-free" Zero Trust environments. -## Testing the version under development - -If you want to test the current version under development you will have to -build and install it into your local Maven repository. To do so use the -following command line: - -``` - mvn clean install -DskipTests=true -``` +# Examples ## Server side SSL -If you are looking to integrate the JCA provider to create a SSLServerSocket +If you are looking to integrate the JCA provider to create an SSLServerSocket see the example below. + + ```java - KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); - Security.addProvider(provider); +KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); +Security.addProvider(provider); - KeyStore ks = KeyStore.getInstance("AzureKeyVault"); - KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( - System.getProperty("azure.keyvault.uri"), - System.getProperty("azure.tenant.id"), - System.getProperty("azure.client.id"), - System.getProperty("azure.client.secret")); - ks.load(parameter); +KeyStore ks = KeyStore.getInstance("AzureKeyVault"); +KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); +ks.load(parameter); - KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - kmf.init(ks, "".toCharArray()); +KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); +kmf.init(ks, "".toCharArray()); - SSLContext context = SSLContext.getInstance("TLS"); - context.init(kmf.getKeyManagers(), null, null); +SSLContext context = SSLContext.getInstance("TLS"); +context.init(kmf.getKeyManagers(), null, null); - SSLServerSocketFactory factory = (SSLServerSocketFactory) context.getServerSocketFactory(); - SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(8765); +SSLServerSocketFactory factory = context.getServerSocketFactory(); +SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(8765); ``` -Note if you want to use Azure managed identity, you should set the value +Note if you want to use Azure Managed Identity, you should set the value of `azure.keyvault.uri`, and the rest of the parameters would be `null`. ## Client side SSL @@ -53,75 +51,79 @@ of `azure.keyvault.uri`, and the rest of the parameters would be `null`. If you are looking to integrate the JCA provider for client side socket connections, see the Apache HTTP client example below. + + ```java - KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); - Security.addProvider(provider); - - KeyStore ks = KeyStore.getInstance("AzureKeyVault"); - KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( - System.getProperty("azure.keyvault.uri"), - System.getProperty("azure.tenant.id"), - System.getProperty("azure.client.id"), - System.getProperty("azure.client.secret")); - ks.load(parameter); - - SSLContext sslContext = SSLContexts - .custom() - .loadTrustMaterial(ks, new TrustSelfSignedStrategy()) - .build(); - - SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder - .create() - .setSslContext(sslContext) - .setHostnameVerifier((hostname, session) -> { - return true; - }) - .build(); - - PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder - .create() - .setSSLSocketFactory(sslSocketFactory) - .build(); - - String result = null; - - try ( CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build()) { - HttpGet httpGet = new HttpGet("https://localhost:8766"); - HttpClientResponseHandler responseHandler = (ClassicHttpResponse response) -> { - int status = response.getCode(); - String result1 = "Not success"; - if (status == 204) { - result1 = "Success"; - } - return result1; - }; - result = client.execute(httpGet, responseHandler); - } catch (IOException ioe) { - ioe.printStackTrace(); - } +KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); +Security.addProvider(provider); + +KeyStore ks = KeyStore.getInstance("AzureKeyVault"); +KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); +ks.load(parameter); + +SSLContext sslContext = SSLContexts + .custom() + .loadTrustMaterial(ks, new TrustSelfSignedStrategy()) + .build(); + +SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder + .create() + .setSslContext(sslContext) + .setHostnameVerifier((hostname, session) -> { + return true; + }) + .build(); + +PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder + .create() + .setSSLSocketFactory(sslSocketFactory) + .build(); + +String result = null; + +try (CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build()) { + HttpGet httpGet = new HttpGet("https://localhost:8766"); + HttpClientResponseHandler responseHandler = (ClassicHttpResponse response) -> { + int status = response.getCode(); + String result1 = "Not success"; + if (status == 204) { + result1 = "Success"; + } + return result1; + }; + result = client.execute(httpGet, responseHandler); +} catch (IOException ioe) { + ioe.printStackTrace(); +} ``` Note if you want to use Azure managed identity, you should set the value of `azure.keyvault.uri`, and the rest of the parameters would be `null`. +# Troubleshooting + +# Next steps + ## Spring Boot -For Spring Boot applications see our [Spring Boot starter]. +For Spring Boot applications see our [Spring Boot starter](https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md). ## Reference 1. [Java Cryptography Architecture (JCA) Reference Guide](https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html) -# Azure KeyVault JCA client library for Java - -# Getting started - -# Key concepts - -# Examples +# Contributing -# Troubleshooting +## Testing the version under development -# Next steps +If you want to test the current version under development you will have to +build and install it into your local Maven repository. To do so use the +following command line: -# Contributing +``` + mvn clean install -DskipTests=true +``` diff --git a/sdk/keyvault/azure-security-keyvault-jca/pom.xml b/sdk/keyvault/azure-security-keyvault-jca/pom.xml index fc653e43be9b..89c2a0be13e5 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-jca/pom.xml @@ -16,7 +16,7 @@ azure-security-keyvault-jca 1.0.0-beta.2 JCA Provider for Azure Key Vault - The Java Crypto Architecture (JCA) Provider for Azure KeyVault + The Java Crypto Architecture (JCA) Provider for Azure Key Vault @@ -195,7 +195,7 @@ To run the integration tests pass in the following system properties - - azure.keyvault.uri - the KeyVault URI + - azure.keyvault.uri - the Azure Key Vault URI - azure.tenant.id - your tenant ID - azure.client.id - the (application) client ID - azure.client.secret - the (application) client secret diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java index 7fab5629bce9..e3684ed39b69 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/AuthClient.java @@ -116,7 +116,7 @@ public String getAccessToken(String resource, String tenantId, if (body != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); OAuthToken token = (OAuthToken) converter.fromJson(body, OAuthToken.class); - result = token.getAccess_token(); + result = token.getAccessToken(); } LOGGER.log(FINER, "Access token: {0}", result); return result; @@ -146,7 +146,7 @@ private String getAccessTokenOnAppService(String resource) { if (body != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); OAuthToken token = (OAuthToken) converter.fromJson(body, OAuthToken.class); - result = token.getAccess_token(); + result = token.getAccessToken(); } LOGGER.exiting("AuthClient", "getAccessTokenOnAppService", result); return result; @@ -174,7 +174,7 @@ private String getAccessTokenOnOthers(String resource) { if (body != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); OAuthToken token = (OAuthToken) converter.fromJson(body, OAuthToken.class); - result = token.getAccess_token(); + result = token.getAccessToken(); } LOGGER.exiting("AuthClient", "getAccessTokenOnOthers", result); return result; diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultCertificate.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultCertificate.java deleted file mode 100644 index c37e93563046..000000000000 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultCertificate.java +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.jca; - -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Principal; -import java.security.PublicKey; -import java.security.SignatureException; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateNotYetValidException; -import java.security.cert.X509Certificate; -import java.util.Date; -import java.util.Set; - -/** - * The KeyVault certificate. - */ -class KeyVaultCertificate extends X509Certificate { - - /** - * Stores the delegate. - */ - private final X509Certificate delegate; - - /** - * Constructor. - * - * @param delegate the delegate. - */ - KeyVaultCertificate(X509Certificate delegate) { - super(); - this.delegate = delegate; - } - - /** - * @see X509Certificate#checkValidity() - */ - @Override - public void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException { - delegate.checkValidity(); - } - - /** - * @see X509Certificate#checkValidity(java.util.Date) - */ - @Override - public void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException { - delegate.checkValidity(date); - } - - /** - * @see X509Certificate#getBasicConstraints() - */ - @Override - public int getBasicConstraints() { - return delegate.getBasicConstraints(); - } - - /** - * @see X509Certificate#getCriticalExtensionOIDs() - */ - @Override - public Set getCriticalExtensionOIDs() { - return delegate.getCriticalExtensionOIDs(); - } - - /** - * @see X509Certificate#getEncoded() - */ - @Override - public byte[] getEncoded() throws CertificateEncodingException { - return delegate.getEncoded(); - } - - /** - * @see X509Certificate#getExtensionValue(java.lang.String) - */ - @Override - public byte[] getExtensionValue(String oid) { - return delegate.getExtensionValue(oid); - } - - /** - * @see X509Certificate#getIssuerDN() - */ - @Override - public Principal getIssuerDN() { - return delegate.getIssuerDN(); - } - - /** - * @see X509Certificate#getIssuerUniqueID() - */ - @Override - public boolean[] getIssuerUniqueID() { - return delegate.getIssuerUniqueID(); - } - - /** - * @see X509Certificate#getKeyUsage() - */ - @Override - public boolean[] getKeyUsage() { - return delegate.getKeyUsage(); - } - - /** - * @see X509Certificate#getNonCriticalExtensionOIDs() - */ - @Override - public Set getNonCriticalExtensionOIDs() { - return delegate.getNonCriticalExtensionOIDs(); - } - - /** - * @see X509Certificate#getNotAfter() - */ - @Override - public Date getNotAfter() { - return delegate.getNotAfter(); - } - - /** - * @see X509Certificate#getNotBefore() - */ - @Override - public Date getNotBefore() { - return delegate.getNotBefore(); - } - - /** - * @see X509Certificate#getPublicKey() - */ - @Override - public PublicKey getPublicKey() { - return delegate.getPublicKey(); - } - - /** - * @see X509Certificate#getSerialNumber() - */ - @Override - public BigInteger getSerialNumber() { - return delegate.getSerialNumber(); - } - - /** - * @see X509Certificate#getSigAlgName() - */ - @Override - public String getSigAlgName() { - return delegate.getSigAlgName(); - } - - /** - * @see X509Certificate#getSigAlgOID() - */ - @Override - public String getSigAlgOID() { - return delegate.getSigAlgOID(); - } - - /** - * @see X509Certificate#getSigAlgParams() - */ - @Override - public byte[] getSigAlgParams() { - return delegate.getSigAlgParams(); - } - - /** - * @see X509Certificate#getSignature() - */ - @Override - public byte[] getSignature() { - return delegate.getSignature(); - } - - /** - * @see X509Certificate#getSubjectDN() - */ - @Override - public Principal getSubjectDN() { - return delegate.getSubjectDN(); - } - - /** - * @see X509Certificate#getSubjectUniqueID() - */ - @Override - public boolean[] getSubjectUniqueID() { - return delegate.getSubjectUniqueID(); - } - - /** - * @see X509Certificate#getTBSCertificate() - */ - @Override - public byte[] getTBSCertificate() throws CertificateEncodingException { - return delegate.getTBSCertificate(); - } - - /** - * @see X509Certificate#getVersion() - */ - @Override - public int getVersion() { - return delegate.getVersion(); - } - - /** - * @see X509Certificate#hasUnsupportedCriticalExtension() - */ - @Override - public boolean hasUnsupportedCriticalExtension() { - return delegate.hasUnsupportedCriticalExtension(); - } - - /** - * @see X509Certificate#toString() - */ - @Override - public String toString() { - return delegate.toString(); - } - - /** - * @see X509Certificate#verify(java.security.PublicKey) - */ - @Override - public void verify(PublicKey key) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, - NoSuchProviderException, SignatureException { - delegate.verify(key); - } - - /** - * @see X509Certificate#verify(java.security.PublicKey, java.security.Provider) - */ - @Override - public void verify(PublicKey key, String sigProvider) throws CertificateException, NoSuchAlgorithmException, - InvalidKeyException, NoSuchProviderException, SignatureException { - delegate.verify(key, sigProvider); - } -} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java index 0bb01049216b..d11a7ae0386a 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultClient.java @@ -34,7 +34,7 @@ import static java.util.logging.Level.WARNING; /** - * The REST client specific to Azure KeyVault. + * The REST client specific to Azure Key Vault. */ class KeyVaultClient extends DelegateRestClient { @@ -49,9 +49,9 @@ class KeyVaultClient extends DelegateRestClient { private static final String API_VERSION_POSTFIX = "?api-version=7.1"; /** - * Stores the KeyVault URI. + * Stores the Azure Key Vault URL. */ - private final String keyVaultUri; + private final String keyVaultUrl; /** * Stores the tenant ID. @@ -71,21 +71,21 @@ class KeyVaultClient extends DelegateRestClient { /** * Constructor. * - * @param keyVaultUri the KeyVault URI. + * @param keyVaultUri the Azure Key Vault URI. */ KeyVaultClient(String keyVaultUri) { super(RestClientFactory.createClient()); - LOGGER.log(INFO, "Using KeyVault: {0}", keyVaultUri); + LOGGER.log(INFO, "Using Azure Key Vault: {0}", keyVaultUri); if (!keyVaultUri.endsWith("/")) { keyVaultUri = keyVaultUri + "/"; } - this.keyVaultUri = keyVaultUri; + this.keyVaultUrl = keyVaultUri; } /** * Constructor. * - * @param keyVaultUri the KeyVault URI. + * @param keyVaultUri the Azure Key Vault URI. * @param tenantId the tenant ID. * @param clientId the client ID. * @param clientSecret the client secret. @@ -125,11 +125,11 @@ private String getAccessToken() { * * @return the list of aliases. */ - public List getAliases() { + List getAliases() { ArrayList result = new ArrayList<>(); HashMap headers = new HashMap<>(); headers.put("Authorization", "Bearer " + getAccessToken()); - String url = String.format("%scertificates%s", keyVaultUri, API_VERSION_POSTFIX); + String url = String.format("%scertificates%s", keyVaultUrl, API_VERSION_POSTFIX); String response = get(url, headers); CertificateListResult certificateListResult = null; if (response != null) { @@ -156,7 +156,7 @@ private CertificateBundle getCertificateBundle(String alias) { CertificateBundle result = null; HashMap headers = new HashMap<>(); headers.put("Authorization", "Bearer " + getAccessToken()); - String url = String.format("%scertificates/%s%s", keyVaultUri, alias, API_VERSION_POSTFIX); + String url = String.format("%scertificates/%s%s", keyVaultUrl, alias, API_VERSION_POSTFIX); String response = get(url, headers); if (response != null) { JsonConverter converter = JsonConverterFactory.createJsonConverter(); @@ -171,7 +171,7 @@ private CertificateBundle getCertificateBundle(String alias) { * @param alias the alias. * @return the certificate, or null if not found. */ - public Certificate getCertificate(String alias) { + Certificate getCertificate(String alias) { LOGGER.entering("KeyVaultClient", "getCertificate", alias); LOGGER.log(INFO, "Getting certificate for alias: {0}", alias); X509Certificate certificate = null; @@ -182,7 +182,7 @@ public Certificate getCertificate(String alias) { try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); certificate = (X509Certificate) cf.generateCertificate( - new ByteArrayInputStream(Base64.getDecoder().decode(certificateBundle.getCer())) + new ByteArrayInputStream(Base64.getDecoder().decode(certificateString)) ); } catch (CertificateException ce) { LOGGER.log(WARNING, "Certificate error", ce); @@ -200,20 +200,20 @@ public Certificate getCertificate(String alias) { * @param password the password. * @return the key. */ - public Key getKey(String alias, char[] password) { + Key getKey(String alias, char[] password) { LOGGER.entering("KeyVaultClient", "getKey", new Object[] { alias, password }); LOGGER.log(INFO, "Getting key for alias: {0}", alias); Key key = null; CertificateBundle certificateBundle = getCertificateBundle(alias); boolean isExportable = Optional.ofNullable(certificateBundle) .map(CertificateBundle::getPolicy) - .map(CertificatePolicy::getKey_props) + .map(CertificatePolicy::getKeyProperties) .map(KeyProperties::isExportable) .orElse(false); if (isExportable) { // Because the certificate is exportable the private key is - // available. So we'll use the KeyVault Secrets API to get the - // private key. + // available. So we'll use the Azure Key Vault Secrets API to get + // the private key. String certificateSecretUri = certificateBundle.getSid(); HashMap headers = new HashMap<>(); headers.put("Authorization", "Bearer " + getAccessToken()); diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java index c91b441867ac..36ab7044ec82 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultJcaProvider.java @@ -10,7 +10,7 @@ import java.util.Collections; /** - * The Azure KeyVault security provider. + * The Azure Key Vault security provider. */ public class KeyVaultJcaProvider extends Provider { @@ -22,7 +22,7 @@ public class KeyVaultJcaProvider extends Provider { /** * Stores the information. */ - private static final String INFO = "Azure KeyVault JCA Provider"; + private static final String INFO = "Azure Key Vault JCA Provider"; /** * Stores the name. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java index 247f61bcd71a..1cf099d84b0f 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManager.java @@ -22,7 +22,7 @@ import static java.util.logging.Level.WARNING; /** - * The KeyVault variant of the X509ExtendedKeyManager. + * The Azure Key Vault variant of the X509ExtendedKeyManager. */ public class KeyVaultKeyManager extends X509ExtendedKeyManager { @@ -63,8 +63,8 @@ public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket so String alias = null; try { /* - * If we only have one alias and the keystore type is not 'AzureKeyVault' - * return that alias as a match. + * If we only have one alias and the keystore type is not + * 'AzureKeyVault' return that alias as a match. */ if (!keystore.getProvider().getName().equals("AzureKeyVault") && keystore.size() == 1) { @@ -87,8 +87,8 @@ public String chooseServerAlias(String keyType, Principal[] issuers, Socket sock String alias = null; try { /* - * If we only have one alias and the keystore type is not 'AzureKeyVault' - * return that alias as a match. + * If we only have one alias and the keystore type is not + * 'AzureKeyVault' return that alias as a match. */ if (!keystore.getProvider().getName().equals("AzureKeyVault") && keystore.size() == 1) { @@ -127,6 +127,8 @@ public X509Certificate[] getCertificateChain(String alias) { chain.add((X509Certificate) certificate); } } + } else { + LOGGER.log(WARNING, "No certificate chain found for alias: {0}", alias); } } catch (KeyStoreException kse) { LOGGER.log(WARNING, "Unable to get certificate chain for alias: " + alias, kse); diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java index 7f1bf1e43648..d9a51c48d9b7 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyManagerFactory.java @@ -12,7 +12,7 @@ import java.util.logging.Logger; /** - * The KeyVault variant of the KeyManagerFactory. + * The Azure Key Vault variant of the KeyManagerFactory. */ public class KeyVaultKeyManagerFactory extends KeyManagerFactorySpi { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java index 46e12d87f41f..634a6e1924fe 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultKeyStore.java @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. - package com.azure.security.keyvault.jca; import java.io.BufferedReader; @@ -32,7 +31,7 @@ import static java.util.logging.Level.WARNING; /** - * The Azure KeyVault implementation of the KeyStoreSpi. + * The Azure Key Vault implementation of the KeyStoreSpi. */ public class KeyVaultKeyStore extends KeyStoreSpi { @@ -64,7 +63,7 @@ public class KeyVaultKeyStore extends KeyStoreSpi { /** * Stores the key vault client. */ - private KeyVaultClient keyVault; + private KeyVaultClient keyVaultClient; /** * Constructor. @@ -83,13 +82,13 @@ public KeyVaultKeyStore() { String tenantId = System.getProperty("azure.keyvault.tenantId"); String clientId = System.getProperty("azure.keyvault.clientId"); String clientSecret = System.getProperty("azure.keyvault.clientSecret"); - keyVault = new KeyVaultClient(keyVaultUri, tenantId, clientId, clientSecret); + keyVaultClient = new KeyVaultClient(keyVaultUri, tenantId, clientId, clientSecret); } @Override public Enumeration engineAliases() { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } return Collections.enumeration(aliases); } @@ -114,7 +113,7 @@ public Certificate engineGetCertificate(String alias) { if (certificates.containsKey(alias)) { certificate = certificates.get(alias); } else { - certificate = keyVault.getCertificate(alias); + certificate = keyVaultClient.getCertificate(alias); if (certificate != null) { certificates.put(alias, certificate); if (!aliases.contains(alias)) { @@ -130,7 +129,7 @@ public String engineGetCertificateAlias(Certificate cert) { String alias = null; if (cert != null) { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } for (String candidateAlias : aliases) { Certificate certificate = engineGetCertificate(candidateAlias); @@ -170,7 +169,7 @@ public Key engineGetKey(String alias, char[] password) { if (certificateKeys.containsKey(alias)) { key = certificateKeys.get(alias); } else { - key = keyVault.getKey(alias, password); + key = keyVaultClient.getKey(alias, password); if (key != null) { certificateKeys.put(alias, key); if (!aliases.contains(alias)) { @@ -184,7 +183,7 @@ public Key engineGetKey(String alias, char[] password) { @Override public boolean engineIsCertificateEntry(String alias) { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } return aliases.contains(alias); } @@ -198,11 +197,11 @@ public boolean engineIsKeyEntry(String alias) { public void engineLoad(KeyStore.LoadStoreParameter param) { if (param instanceof KeyVaultLoadStoreParameter) { KeyVaultLoadStoreParameter parameter = (KeyVaultLoadStoreParameter) param; - keyVault = new KeyVaultClient( - parameter.getUri(), - parameter.getTenantId(), - parameter.getClientId(), - parameter.getClientSecret()); + keyVaultClient = new KeyVaultClient( + parameter.getUri(), + parameter.getTenantId(), + parameter.getClientId(), + parameter.getClientSecret()); } sideLoad(); } @@ -215,7 +214,7 @@ public void engineLoad(InputStream stream, char[] password) { @Override public void engineSetCertificateEntry(String alias, Certificate certificate) { if (aliases == null) { - aliases = keyVault.getAliases(); + aliases = keyVaultClient.getAliases(); } if (!aliases.contains(alias)) { aliases.add(alias); @@ -258,12 +257,14 @@ public void engineStore(KeyStore.LoadStoreParameter param) { */ private String[] getFilenames(String path) throws IOException { List filenames = new ArrayList<>(); - InputStream in = getClass().getResourceAsStream(path); - if (in != null) { - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - String resource; - while ((resource = br.readLine()) != null) { - filenames.add(resource); + try (InputStream in = getClass().getResourceAsStream(path)) { + if (in != null) { + try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) { + String resource; + while ((resource = br.readLine()) != null) { + filenames.add(resource); + } + } } } return filenames.toArray(new String[0]); @@ -277,16 +278,19 @@ private String[] getFilenames(String path) throws IOException { * @throws IOException when an I/O error occurs. */ private byte[] readAllBytes(InputStream inputStream) throws IOException { - ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - while (true) { - int r = inputStream.read(buffer); - if (r == -1) { - break; + byte[] bytes; + try (ByteArrayOutputStream byteOutput = new ByteArrayOutputStream()) { + byte[] buffer = new byte[1024]; + while (true) { + int r = inputStream.read(buffer); + if (r == -1) { + break; + } + byteOutput.write(buffer, 0, r); } - byteOutput.write(buffer, 0, r); + bytes = byteOutput.toByteArray(); } - return byteOutput.toByteArray(); + return bytes; } /** @@ -307,12 +311,12 @@ private void sideLoad() { try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate certificate = (X509Certificate) cf.generateCertificate( - new ByteArrayInputStream(bytes)); + new ByteArrayInputStream(bytes)); engineSetCertificateEntry(alias, certificate); LOGGER.log(INFO, "Side loaded certificate: {0} from: {1}", - new Object[] { alias, filename }); + new Object[]{alias, filename}); } catch (CertificateException e) { - LOGGER.log(WARNING, "Unable to side-load certificate", e); + LOGGER.log(WARNING, "Unable to side-load certificate from: " + filename, e); } } } diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java index 5a1e616eb168..b7900e044c62 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameter.java @@ -6,7 +6,7 @@ import java.security.KeyStore; /** - * The Azure KeyVault LoadStoreParameter of the KeyStoreSpi. + * The Azure Key Vault LoadStoreParameter of the KeyStoreSpi. */ public class KeyVaultLoadStoreParameter implements KeyStore.LoadStoreParameter { @@ -33,7 +33,7 @@ public class KeyVaultLoadStoreParameter implements KeyStore.LoadStoreParameter { /** * Constructor. * - * @param uri the KeyVault URI. + * @param uri the Azure Key Vault URI. * @param tenantId the tenant ID. * @param clientId the client ID. * @param clientSecret the client secret. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java index 0a35624aeb87..69db2137ee90 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManager.java @@ -17,9 +17,9 @@ import javax.net.ssl.X509ExtendedTrustManager; /** - * The KeyVault variant of the X509TrustManager. + * The Azure Key Vault variant of the X509TrustManager. */ -public class KeyVaultTrustManager extends X509ExtendedTrustManager implements X509TrustManager { +public class KeyVaultTrustManager extends X509ExtendedTrustManager { /** * Stores the default trust manager. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java index 73d1e4abe696..1ac87af72425 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactory.java @@ -12,7 +12,7 @@ import java.util.logging.Logger; /** - * The KeyVault variant of the TrustManagerFactory. + * The Azure Key Vault variant of the TrustManagerFactory. */ public class KeyVaultTrustManagerFactory extends TrustManagerFactorySpi { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java index a70efe2ca1e6..9c2b5bb44c91 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/KeyVaultTrustManagerFactoryProvider.java @@ -8,7 +8,7 @@ import java.security.Provider; /** - * The Azure KeyVault TrustManagerFactory provider. + * The Azure Key Vault TrustManagerFactory provider. */ public class KeyVaultTrustManagerFactoryProvider extends Provider { @@ -20,7 +20,7 @@ public class KeyVaultTrustManagerFactoryProvider extends Provider { /** * Stores the information. */ - private static final String INFO = "Azure KeyVault TrustManagerFactory Provider"; + private static final String INFO = "Azure Key Vault TrustManagerFactory Provider"; /** * Stores the name. diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java index e40cd274cf58..8fcebe98b355 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/package-info.java @@ -2,6 +2,6 @@ // Licensed under the MIT License. /** - * The Azure KeyVault JCA Provider package. + * The Azure Key Vault JCA Provider package. */ package com.azure.security.keyvault.jca; diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java index e678c296b6bb..871d73500038 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/CertificatePolicy.java @@ -3,6 +3,7 @@ package com.azure.security.keyvault.jca.rest; +import com.fasterxml.jackson.annotation.JsonProperty; import java.io.Serializable; /** @@ -13,6 +14,7 @@ public class CertificatePolicy implements Serializable { /** * Stores the key properties. */ + @JsonProperty("key_props") private KeyProperties keyProperties; /** @@ -20,7 +22,7 @@ public class CertificatePolicy implements Serializable { * * @return the key properties. */ - public KeyProperties getKey_props() { + public KeyProperties getKeyProperties() { return keyProperties; } @@ -29,7 +31,7 @@ public KeyProperties getKey_props() { * * @param keyProperties the key properties. */ - public void setKey_props(KeyProperties keyProperties) { + public void setKeyProperties(KeyProperties keyProperties) { this.keyProperties = keyProperties; } } diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java index e394baaa5591..55206bc4070a 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/main/java/com/azure/security/keyvault/jca/rest/OAuthToken.java @@ -2,6 +2,7 @@ // Licensed under the MIT License. package com.azure.security.keyvault.jca.rest; +import com.fasterxml.jackson.annotation.JsonProperty; import java.io.Serializable; /** @@ -12,15 +13,16 @@ public class OAuthToken implements Serializable { /** * Stores the access token. */ - private String access_token; + @JsonProperty("access_token") + private String accessToken; /** * Get the access token. * * @return the access token. */ - public String getAccess_token() { - return access_token; + public String getAccessToken() { + return accessToken; } /** @@ -28,7 +30,7 @@ public String getAccess_token() { * * @param accessToken the access token. */ - public void setAccess_token(String accessToken) { - this.access_token = accessToken; + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; } } diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ClientSSLSample.java b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ClientSSLSample.java new file mode 100644 index 000000000000..5d9ad11792ea --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ClientSSLSample.java @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package sample; + +import com.azure.security.keyvault.jca.KeyVaultJcaProvider; +import com.azure.security.keyvault.jca.KeyVaultLoadStoreParameter; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder; +import org.apache.hc.client5.http.ssl.TrustSelfSignedStrategy; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.io.HttpClientResponseHandler; +import org.apache.hc.core5.ssl.SSLContexts; + +import javax.net.ssl.SSLContext; +import java.io.IOException; +import java.security.KeyStore; +import java.security.Security; + +/** + * The ClientSSL sample. + */ +public class ClientSSLSample { + + public void clientSSLSample() throws Exception { + KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); + Security.addProvider(provider); + + KeyStore ks = KeyStore.getInstance("AzureKeyVault"); + KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); + ks.load(parameter); + + SSLContext sslContext = SSLContexts + .custom() + .loadTrustMaterial(ks, new TrustSelfSignedStrategy()) + .build(); + + SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder + .create() + .setSslContext(sslContext) + .setHostnameVerifier((hostname, session) -> { + return true; + }) + .build(); + + PoolingHttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder + .create() + .setSSLSocketFactory(sslSocketFactory) + .build(); + + String result = null; + + try (CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build()) { + HttpGet httpGet = new HttpGet("https://localhost:8766"); + HttpClientResponseHandler responseHandler = (ClassicHttpResponse response) -> { + int status = response.getCode(); + String result1 = "Not success"; + if (status == 204) { + result1 = "Success"; + } + return result1; + }; + result = client.execute(httpGet, responseHandler); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } +} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ServerSSLSample.java b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ServerSSLSample.java new file mode 100644 index 000000000000..e5e0a7ea40a6 --- /dev/null +++ b/sdk/keyvault/azure-security-keyvault-jca/src/samples/java/sample/ServerSSLSample.java @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package sample; + +import com.azure.security.keyvault.jca.KeyVaultJcaProvider; +import com.azure.security.keyvault.jca.KeyVaultLoadStoreParameter; + +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLServerSocket; +import javax.net.ssl.SSLServerSocketFactory; +import java.security.KeyStore; +import java.security.Security; + +/** + * The ServerSSL sample. + */ +public class ServerSSLSample { + + public void serverSSLSample() throws Exception { + KeyVaultJcaProvider provider = new KeyVaultJcaProvider(); + Security.addProvider(provider); + + KeyStore ks = KeyStore.getInstance("AzureKeyVault"); + KeyVaultLoadStoreParameter parameter = new KeyVaultLoadStoreParameter( + System.getProperty("azure.keyvault.uri"), + System.getProperty("azure.tenant.id"), + System.getProperty("azure.client.id"), + System.getProperty("azure.client.secret")); + ks.load(parameter); + + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(ks, "".toCharArray()); + + SSLContext context = SSLContext.getInstance("TLS"); + context.init(kmf.getKeyManagers(), null, null); + + SSLServerSocketFactory factory = context.getServerSocketFactory(); + SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(8765); + } +} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java index c77edab01251..8c37367078c6 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/AuthClientTest.java @@ -11,8 +11,6 @@ /** * The JUnit test for the AuthClient. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class AuthClientTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java index 94d534680dfe..fdcf6a250846 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/DelegateRestClientTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the DelegateRestClient class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class DelegateRestClientTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java index 5ad5273d2f7d..2a4ea9e39708 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/JacksonJsonConverterTest.java @@ -12,8 +12,6 @@ /** * The JUnit tests for the JsonbJsonConverter class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class JacksonJsonConverterTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultCertificateTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultCertificateTest.java deleted file mode 100644 index ee521e308f08..000000000000 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultCertificateTest.java +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.jca; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.io.ByteArrayInputStream; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.ProviderException; -import java.security.PublicKey; -import java.security.SignatureException; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateFactory; -import java.security.cert.CertificateNotYetValidException; -import java.security.cert.X509Certificate; -import java.util.Base64; -import java.util.Calendar; -import java.util.Date; -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -/** - * The JUnit tests for the KeyVaultCertificate class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) - */ -public class KeyVaultCertificateTest { - - /** - * Stores the CER test certificate (which is valid til 2120). - */ - private static final String TEST_CERTIFICATE - = "MIIDeDCCAmCgAwIBAgIQGghBu97rQJKNnUHPWU7xjDANBgkqhkiG9w0BAQsFADAk" - + "MSIwIAYDVQQDExlodW5kcmVkLXllYXJzLmV4YW1wbGUuY29tMCAXDTIwMDkwMjE3" - + "NDUyNFoYDzIxMjAwOTAyMTc1NTI0WjAkMSIwIAYDVQQDExlodW5kcmVkLXllYXJz" - + "LmV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuU14" - + "btkN5wmcO2WKXqm1NUKXzi79EtqiFFkrLgPAwj5NNwMw2Akm3GpdEpwkJ8/q3l7d" - + "frDEVOO9gwZbz7xppyqutjxjllw8CCgjFdfK02btz56CGgh3X25ZZtzPbuMZJM0j" - + "o4mVEdaFNJ0eUeMppS0DcbbuTWCF7Jf1gvr8GVqx+E0IJUFkE+D4kdTbnJSaeK0A" - + "KEt94z88MPX18h8ud14uRVmUCYVZrZeswdE2tO1BpazrXELHuXCtrjGxsDDjDzeP" - + "98aFI9kblkqoJS4TsmloLEjwZLm80cyJDEmpXXMtR7C0FFXFI1BAtIa4mxSgBLsT" - + "L4GVPEGNANR8COYkHQIDAQABo4GjMIGgMA4GA1UdDwEB/wQEAwIFoDAJBgNVHRME" - + "AjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAkBgNVHREEHTAbghlo" - + "dW5kcmVkLXllYXJzLmV4YW1wbGUuY29tMB8GA1UdIwQYMBaAFOGTt4H3ho30O4e+" - + "hebwJjm2VMvIMB0GA1UdDgQWBBThk7eB94aN9DuHvoXm8CY5tlTLyDANBgkqhkiG" - + "9w0BAQsFAAOCAQEAGp8mCioVCmM+kZv6r+K2j2uog1k4HBwN1NfRoSsibDB8+QXF" - + "bmNf3M0imiuR/KJgODyuROwaa/AalxNFMOP8XTL2YmP7XsddBs9ONHHQXKjY/Ojl" - + "PsIPR7vZjwYPfEB+XEKl2fOIxDQQ921POBV7M6DdTC49T5X+FsLR1AIIfinVetT9" - + "QmNuvzulBX0T0rea/qpcPK4HTj7ToyImOaf8sXRv2s2ODLUrKWu5hhTNH2l6RIkQ" - + "U/aIAdQRfDaSE9jhtcVu5d5kCgBs7nz5AzeCisDPo5zIt4Mxej3iVaAJ79oEbHOE" - + "p192KLXLV/pscA4Wgb+PJ8AAEa5B6xq8p9JO+Q=="; - - /** - * Stores the X.509 certificate. - */ - private X509Certificate x509Certificate; - - /** - * Setup before each test. - * - */ - @BeforeEach - public void setUp() { - try { - byte[] certificateBytes = Base64.getDecoder().decode(TEST_CERTIFICATE); - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - x509Certificate = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certificateBytes)); - } catch (CertificateException e) { - throw new ProviderException(e); - } - } - - /** - * Test checkValidity method. - */ - @Test - public void testCheckValidity() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - certificate.checkValidity(); - } catch (CertificateExpiredException | CertificateNotYetValidException cnyve) { - fail(); - } - } - - /** - * Test checkValidity method. - */ - @Test - public void testCheckValidity2() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - certificate.checkValidity(new Date(100, Calendar.FEBRUARY, 1)); - fail(); - } catch (CertificateExpiredException ex) { - fail(); - } catch (CertificateNotYetValidException exception) { - // expecting this as the TEST_CERTIFICATE is not valid against given date. - } - } - - /** - * Test checkValidity method. - */ - @Test - public void testCheckValidity3() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - certificate.checkValidity(new Date(200, Calendar.FEBRUARY, 1)); - } catch (CertificateExpiredException | CertificateNotYetValidException exception) { - fail(); - } - } - - /** - * Test getBasicConstraints method. - */ - @Test - public void testGetBasicConstraints() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals(-1, certificate.getBasicConstraints()); - } - - /** - * Test getCriticalExtensionOIDs method. - */ - @Test - public void testGetCriticalExtensionOIDs() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Set criticalExtensions = certificate.getCriticalExtensionOIDs(); - assertFalse(criticalExtensions.isEmpty()); - assertTrue(criticalExtensions.contains("2.5.29.15")); - } - - /** - * Test getEncoded method. - */ - @Test - public void testGetEncoded() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getEncoded()); - } catch (CertificateEncodingException cee) { - fail(); - } - } - - /** - * Test getExtensionValue method. - */ - @Test - public void testGetExtensionValue() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getExtensionValue("2.5.29.15")); - } - - /** - * Test getIssuerDN method. - */ - @Test - public void testGetIssuerDN() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("CN=hundred-years.example.com", certificate.getIssuerDN().getName()); - } - - /** - * Test getIssuerUniqueID method. - */ - @Test - public void testGetIssuerUniqueID() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNull(certificate.getIssuerUniqueID()); - } - - /** - * Test getKeyUsage method. - */ - @Test - public void testGetKeyUsage() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getKeyUsage()); - } - - /** - * Test getNonCriticalExtensionOIDs method. - */ - @Test - public void testGetNonCriticalExtensionOIDs() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Set nonCriticalExtensions = certificate.getNonCriticalExtensionOIDs(); - assertFalse(nonCriticalExtensions.isEmpty()); - } - - /** - * Test getNotAfter method. - */ - @Test - public void testGetNotAfter() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Date notAfter = certificate.getNotAfter(); - assertTrue(new Date().before(notAfter)); - } - - /** - * Test getNotBefore method. - */ - @Test - public void testGetNotBefore() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - Date notBefore = certificate.getNotBefore(); - assertTrue(new Date().after(notBefore)); - } - - /** - * Test getPublicKey method. - */ - @Test - public void testGetPublicKey() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getPublicKey()); - } - - /** - * Test getSerialNumber method. - */ - @Test - public void testGetSerialNumber() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getSerialNumber()); - } - - /** - * Test getSigAlgName method. - */ - @Test - public void testGetSigAlgName() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("SHA256withRSA", certificate.getSigAlgName()); - } - - /** - * Test getSigAlgOID method. - */ - @Test - public void testGetSigAlgOID() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("1.2.840.113549.1.1.11", certificate.getSigAlgOID()); - } - - /** - * Test getSigAlgParams method. - */ - @Test - public void testGetSigAlgParams() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNull(certificate.getSigAlgParams()); - } - - /** - * Test getSignature method. - */ - @Test - public void testGetSignature() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getSignature()); - } - - /** - * Test getSubjectDN method. - */ - @Test - public void testGetSubjectDN() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals("CN=hundred-years.example.com", certificate.getSubjectDN().getName()); - } - - /** - * Test getSubjectUniqueID method. - */ - @Test - public void testGetSubjectUniqueID() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNull(certificate.getSubjectUniqueID()); - } - - /** - * Test getTBSCertificate method. - */ - @Test - public void testGetTBSCertificate() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.getTBSCertificate()); - } catch (CertificateEncodingException cee) { - fail(); - } - } - - /** - * Test getVersion method. - */ - @Test - public void testGetVersion() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertEquals(3, certificate.getVersion()); - } - - /** - * Test hasUnsupportedCriticalExtension method. - */ - @Test - public void testHasUnsupportedCriticalExtension() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertFalse(certificate.hasUnsupportedCriticalExtension()); - } - - /** - * Test toString method. - */ - @Test - public void testToString() { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - assertNotNull(certificate.toString()); - } - - /** - * Test verify method. - */ - @Test - public void testVerify() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - PublicKey publicKey = certificate.getPublicKey(); - certificate.verify(publicKey); - } catch (CertificateException | NoSuchAlgorithmException - | InvalidKeyException | NoSuchProviderException - | SignatureException e) { - fail(); - } - } - - /** - * Test verify method. - */ - @Test - public void testVerify2() { - try { - KeyVaultCertificate certificate = new KeyVaultCertificate(x509Certificate); - PublicKey publicKey = certificate.getPublicKey(); - certificate.verify(publicKey, "SunRsaSign"); - } catch (CertificateException | NoSuchAlgorithmException - | InvalidKeyException | NoSuchProviderException - | SignatureException e) { - fail(); - } - } -} diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java index 7940baa2c917..4fdd9ceaed87 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultJcaProviderTest.java @@ -13,8 +13,6 @@ /** * The JUnit tests for the KeyVaultProvider class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class KeyVaultJcaProviderTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java index 1d016bf85f0a..073cfb99a4b4 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultKeyStoreTest.java @@ -19,8 +19,6 @@ /** * The JUnit tests for the KeyVaultKeyStore class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class KeyVaultKeyStoreTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java index 727dca026e32..68912a740c48 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/KeyVaultLoadStoreParameterTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the KeyVaultLoadStoreParameter class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class KeyVaultLoadStoreParameterTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java index 730a6867f19e..643930bbe643 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/LegacyRestClientTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the LegacyRestClient class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class LegacyRestClientTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java index c99550db7609..c22b88ebad91 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/RestClientFactoryTest.java @@ -9,8 +9,6 @@ /** * The JUnit tests for the RestClientFactory class. - * - * @author Manfred Riem (manfred.riem@microsoft.com) */ public class RestClientFactoryTest { diff --git a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java index 4b2f4c1e9f50..13690522dfb7 100644 --- a/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java +++ b/sdk/keyvault/azure-security-keyvault-jca/src/test/java/com/azure/security/keyvault/jca/ServerSocketTest.java @@ -30,9 +30,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; /** - * The unit test validating the ServerSocket is created using a certificate from Azure KeyVault. - * - * @author Manfred Riem (manfred.riem@microsoft.com) + * The unit test validating the ServerSocket is created using a certificate + * from Azure Key Vault. */ public class ServerSocketTest { @@ -53,7 +52,7 @@ public void testServerSocket() throws Exception { /* * Setup server side. * - * - Create an Azure KeyVault specific instance of a KeyStore. + * - Create an Azure Key Vault specific instance of a KeyStore. * - Set the KeyManagerFactory to use that KeyStore. * - Set the SSL context to use the KeyManagerFactory. * - Create the SSLServerSocket using th SSL context. @@ -158,7 +157,7 @@ public void testServerSocketWithSelfSignedClientTrust() throws Exception { /* * Setup server side. * - * - Create an Azure KeyVault specific instance of a KeyStore. + * - Create an Azure Key Vault specific instance of a KeyStore. * - Set the KeyManagerFactory to use that KeyStore. * - Set the SSL context to use the KeyManagerFactory. * - Create the SSLServerSocket using th SSL context. diff --git a/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java b/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java index e600066f9633..1d6af96dad10 100644 --- a/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java +++ b/sdk/resourcemanager/azure-resourcemanager-appplatform/src/test/java/com/azure/resourcemanager/appplatform/SpringCloudLiveOnlyTest.java @@ -3,21 +3,19 @@ package com.azure.resourcemanager.appplatform; +import com.azure.core.management.Region; import com.azure.core.test.annotation.DoNotRecord; import com.azure.resourcemanager.appplatform.models.RuntimeVersion; import com.azure.resourcemanager.appplatform.models.SpringApp; import com.azure.resourcemanager.appplatform.models.SpringAppDeployment; import com.azure.resourcemanager.appplatform.models.SpringService; -import com.azure.resourcemanager.appservice.models.AppServiceCertificateOrder; import com.azure.resourcemanager.appservice.models.AppServiceDomain; import com.azure.resourcemanager.dns.models.DnsZone; import com.azure.resourcemanager.keyvault.models.CertificatePermissions; -import com.azure.resourcemanager.keyvault.models.Secret; import com.azure.resourcemanager.keyvault.models.SecretPermissions; import com.azure.resourcemanager.keyvault.models.Vault; import com.azure.resourcemanager.resources.fluentcore.arm.CountryIsoCode; import com.azure.resourcemanager.resources.fluentcore.arm.CountryPhoneCode; -import com.azure.core.management.Region; import com.azure.security.keyvault.certificates.CertificateClient; import com.azure.security.keyvault.certificates.CertificateClientBuilder; import com.azure.security.keyvault.certificates.models.ImportCertificateOptions; @@ -28,19 +26,33 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; import javax.xml.bind.DatatypeConverter; +import java.io.BufferedReader; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; import java.security.KeyStore; import java.security.MessageDigest; -import java.util.Base64; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; +import java.util.List; public class SpringCloudLiveOnlyTest extends AppPlatformTest { private static final String PIGGYMETRICS_CONFIG_URL = "https://github.com/Azure-Samples/piggymetrics-config"; @@ -150,6 +162,14 @@ public void canCreateCustomDomainWithSsl() throws Exception { String appName = "gateway"; Region region = Region.US_EAST; + allowAllSSL(); + String cerPassword = password(); + String cerPath = this.getClass().getResource("/").getPath() + domainName + ".cer"; + String pfxPath = this.getClass().getResource("/").getPath() + domainName + ".pfx"; + createCertificate(cerPath, pfxPath, domainName, cerPassword, "ssl." + domainName, "ssl." + domainName); + + byte[] certificate = readAllBytes(new FileInputStream(pfxPath)); + appPlatformManager.resourceManager().resourceGroups().define(rgName) .withRegion(region) .create(); @@ -178,17 +198,9 @@ public void canCreateCustomDomainWithSsl() throws Exception { .withExistingDnsZone(dnsZone) .create(); - AppServiceCertificateOrder certificateOrder = appServiceManager.certificateOrders().define(certOrderName) + Vault vault = keyVaultManager.vaults().define(vaultName) + .withRegion(region) .withExistingResourceGroup(rgName) - .withHostName(String.format("*.%s", domainName)) - .withWildcardSku() - .withDomainVerification(domain) - .withNewKeyVault(vaultName, region) - .withAutoRenew(true) - .create(); - - Vault vault = keyVaultManager.vaults().getByResourceGroup(rgName, vaultName); - vault.update() .defineAccessPolicy() .forServicePrincipal(clientIdFromFile()) .allowSecretAllPermissions() @@ -199,11 +211,7 @@ public void canCreateCustomDomainWithSsl() throws Exception { .allowCertificatePermissions(CertificatePermissions.GET, CertificatePermissions.LIST) .allowSecretPermissions(SecretPermissions.GET, SecretPermissions.LIST) .attach() - .apply(); - - Secret secret = vault.secrets().getByName(certOrderName); - - byte[] certificate = Base64.getDecoder().decode(secret.getValue()); + .create(); // upload certificate CertificateClient certificateClient = new CertificateClientBuilder() @@ -213,12 +221,13 @@ public void canCreateCustomDomainWithSsl() throws Exception { certificateClient.importCertificate( new ImportCertificateOptions(certName, certificate) + .setPassword(cerPassword) .setEnabled(true) ); // get thumbprint KeyStore store = KeyStore.getInstance("PKCS12"); - store.load(new ByteArrayInputStream(certificate), null); + store.load(new ByteArrayInputStream(certificate), cerPassword.toCharArray()); String alias = Collections.list(store.aliases()).get(0); String thumbprint = DatatypeConverter.printHexBinary(MessageDigest.getInstance("SHA-1").digest(store.getCertificate(alias).getEncoded())); @@ -275,4 +284,123 @@ private void extraTarGzSource(File folder, URL url) throws IOException { connection.disconnect(); } } + + private byte[] readAllBytes(InputStream inputStream) throws IOException { + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + byte[] data = new byte[4096]; + while (true) { + int size = inputStream.read(data); + if (size > 0) { + outputStream.write(data, 0, size); + } else { + return outputStream.toByteArray(); + } + } + } + } + + public static void createCertificate(String certPath, String pfxPath, + String alias, String password, String cnName, String dnsName) throws IOException { + if (new File(pfxPath).exists()) { + return; + } + String validityInDays = "3650"; + String keyAlg = "RSA"; + String sigAlg = "SHA1withRSA"; + String keySize = "2048"; + String storeType = "pkcs12"; + String command = "keytool"; + String jdkPath = System.getProperty("java.home"); + if (jdkPath != null && !jdkPath.isEmpty()) { + jdkPath = jdkPath.concat("\\bin"); + if (new File(jdkPath).isDirectory()) { + command = String.format("%s%s%s", jdkPath, File.separator, command); + } + } else { + return; + } + + // Create Pfx file + String[] commandArgs = {command, "-genkey", "-alias", alias, + "-keystore", pfxPath, "-storepass", password, "-validity", + validityInDays, "-keyalg", keyAlg, "-sigalg", sigAlg, "-keysize", keySize, + "-storetype", storeType, "-dname", "CN=" + cnName, "-ext", "EKU=1.3.6.1.5.5.7.3.1"}; + if (dnsName != null) { + List args = new ArrayList<>(Arrays.asList(commandArgs)); + args.add("-ext"); + args.add("san=dns:" + dnsName); + commandArgs = args.toArray(new String[0]); + } + cmdInvocation(commandArgs, true); + + // Create cer file i.e. extract public key from pfx + File pfxFile = new File(pfxPath); + if (pfxFile.exists()) { + String[] certCommandArgs = {command, "-export", "-alias", alias, + "-storetype", storeType, "-keystore", pfxPath, + "-storepass", password, "-rfc", "-file", certPath}; + // output of keytool export command is going to error stream + // although command is + // executed successfully, hence ignoring error stream in this case + cmdInvocation(certCommandArgs, true); + + // Check if file got created or not + File cerFile = new File(pfxPath); + if (!cerFile.exists()) { + throw new IOException( + "Error occurred while creating certificate" + + String.join(" ", certCommandArgs)); + } + } else { + throw new IOException("Error occurred while creating certificates" + + String.join(" ", commandArgs)); + } + } + + public static String cmdInvocation(String[] command, + boolean ignoreErrorStream) throws IOException { + String result = ""; + String error = ""; + + Process process = new ProcessBuilder(command).start(); + try ( + InputStream inputStream = process.getInputStream(); + InputStream errorStream = process.getErrorStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + BufferedReader ebr = new BufferedReader(new InputStreamReader(errorStream, StandardCharsets.UTF_8)); + ) { + result = br.readLine(); + process.waitFor(); + error = ebr.readLine(); + if (error != null && (!error.equals(""))) { + // To do - Log error message + + if (!ignoreErrorStream) { + throw new IOException(error, null); + } + } + } catch (Exception e) { + throw new RuntimeException("Exception occurred while invoking command", e); + } + return result; + } + + private static void allowAllSSL() throws NoSuchAlgorithmException, KeyManagementException { + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + public void checkServerTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + } + }; + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, trustAllCerts, new SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); + } } diff --git a/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java b/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java index 48a1a772f2db..b9687f8d558b 100644 --- a/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java +++ b/sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/fluentcore/AzureServiceClient.java @@ -54,10 +54,15 @@ public abstract class AzureServiceClient { protected AzureServiceClient(HttpPipeline httpPipeline, SerializerAdapter serializerAdapter, AzureEnvironment environment) { - sdkName = this.getClass().getPackage().getName(); - this.httpPipeline = httpPipeline; this.serializerAdapter = serializerAdapter; + + String packageName = this.getClass().getPackage().getName(); + String implementationSegment = ".implementation"; + if (packageName.endsWith(implementationSegment)) { + packageName = packageName.substring(0, packageName.length() - implementationSegment.length()); + } + this.sdkName = packageName; } /** diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java index 4cce0601d20c..5d477cfde58e 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appplatform/samples/ManageSpringCloud.java @@ -187,19 +187,17 @@ // .withCNameRecordSet("ssl", gateway.fqdn()) // .apply(); // -// System.out.printf("Purchasing a certificate for *.%s and save to %s in key vault named %s ...%n", domainName, certOrderName, vaultName); -// AppServiceCertificateOrder certificateOrder = azureResourceManager.appServiceCertificateOrders().define(certOrderName) -// .withExistingResourceGroup(rgName) -// .withHostName(String.format("*.%s", domainName)) -// .withWildcardSku() -// .withDomainVerification(domain) -// .withNewKeyVault(vaultName, region) -// .withAutoRenew(true) -// .create(); -// System.out.printf("Purchased certificate: *.%s ...%n", domain.name()); -// Utils.print(certificateOrder); +// // Please use a trusted certificate for actual use +// System.out.printf("Generate a self-signed certificate for ssl.%s %n", domainName); +// allowAllSSL(); +// String cerPassword = password(); +// String cerPath = ManageSpringCloud.class.getResource("/").getPath() + domainName + ".cer"; +// String pfxPath = ManageSpringCloud.class.getClass().getResource("/").getPath() + domainName + ".pfx"; +// createCertificate(cerPath, pfxPath, domainName, cerPassword, "ssl." + domainName, "ssl." + domainName); +// +// byte[] certificate = readAllBytes(new FileInputStream(pfxPath)); // -// System.out.printf("Updating key vault %s with access from %s, %s%n", vaultName, clientId, SPRING_CLOUD_SERVICE_PRINCIPAL); +// System.out.printf("Creating key vault %s with access from %s, %s%n", vaultName, clientId, SPRING_CLOUD_SERVICE_PRINCIPAL); // Vault vault = azureResourceManager.vaults().getByResourceGroup(rgName, vaultName); // vault.update() // .defineAccessPolicy() @@ -213,20 +211,13 @@ // .allowSecretPermissions(SecretPermissions.GET, SecretPermissions.LIST) // .attach() // .apply(); -// System.out.printf("Updated key vault %s%n", vault.name()); +// System.out.printf("Created key vault %s%n", vault.name()); // Utils.print(vault); // -// Secret secret = vault.secrets().getByName(certOrderName); -// -// byte[] certificate = Base64.getDecoder().decode(secret.getValue()); -// -// String thumbprint = secret.tags().get("Thumbprint"); -// if (thumbprint == null || thumbprint.isEmpty()) { -// KeyStore store = KeyStore.getInstance("PKCS12"); -// store.load(new ByteArrayInputStream(certificate), null); -// String alias = Collections.list(store.aliases()).get(0); -// thumbprint = DatatypeConverter.printHexBinary(MessageDigest.getInstance("SHA-1").digest(store.getCertificate(alias).getEncoded())); -// } +// KeyStore store = KeyStore.getInstance("PKCS12"); +// store.load(new ByteArrayInputStream(certificate), cerPassword.toCharArray()); +// String alias = Collections.list(store.aliases()).get(0); +// thumbprint = DatatypeConverter.printHexBinary(MessageDigest.getInstance("SHA-1").digest(store.getCertificate(alias).getEncoded())); // // System.out.printf("Get certificate: %s%n", secret.getValue()); // System.out.printf("Certificate Thumbprint: %s%n", thumbprint); @@ -240,6 +231,7 @@ // System.out.printf("Uploading certificate to %s in key vault ...%n", certName); // certificateClient.importCertificate( // new ImportCertificateOptions(certName, certificate) +// .setPassword(cerPassword) // .setEnabled(true) // ); // @@ -323,4 +315,23 @@ // connection.disconnect(); // } // } +// +// private static void allowAllSSL() throws NoSuchAlgorithmException, KeyManagementException { +// TrustManager[] trustAllCerts = new TrustManager[]{ +// new X509TrustManager() { +// public java.security.cert.X509Certificate[] getAcceptedIssuers() { +// return null; +// } +// public void checkClientTrusted( +// java.security.cert.X509Certificate[] certs, String authType) { +// } +// public void checkServerTrusted( +// java.security.cert.X509Certificate[] certs, String authType) { +// } +// } +// }; +// SSLContext sslContext = SSLContext.getInstance("SSL"); +// sslContext.init(null, trustAllCerts, new SecureRandom()); +// HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); +// } //} diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java index 6dff00bf7722..95b966ac3ea8 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageFunctionAppWithDomainSsl.java @@ -120,7 +120,7 @@ public static boolean runSample(AzureResourceManager azureResourceManager) throw System.out.println("Creating a self-signed certificate " + pfxPath + "..."); - Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName); + Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName, null); System.out.println("Created self-signed certificate " + pfxPath); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java index 5f76377120ac..1b6278ba7d3c 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageLinuxWebAppWithDomainSsl.java @@ -127,7 +127,7 @@ public static boolean runSample(AzureResourceManager azureResourceManager) throw System.out.println("Creating a self-signed certificate " + pfxPath + "..."); - Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName); + Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName, null); System.out.println("Created self-signed certificate " + pfxPath); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java index 6f778547430c..d60972ed3e07 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/appservice/samples/ManageWebAppWithDomainSsl.java @@ -124,7 +124,7 @@ public static boolean runSample(AzureResourceManager azureResourceManager) throw System.out.println("Creating a self-signed certificate " + pfxPath + "..."); - Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName); + Utils.createCertificate(cerPath, pfxPath, domainName, certPassword, "*." + domainName, null); System.out.println("Created self-signed certificate " + pfxPath); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java index bc9e9671934f..533c501cb135 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployUsingARMTemplateWithTags.java @@ -144,7 +144,7 @@ private static String getTemplate(AzureResourceManager azureResourceManager) thr final String hostingPlanName = Utils.randomResourceName(azureResourceManager, "hpRSAT", 24); final String webappName = Utils.randomResourceName(azureResourceManager, "wnRSAT", 24); - try (InputStream embeddedTemplate = DeployUsingARMTemplateWithProgress.class.getResourceAsStream("/templateValue.json")) { + try (InputStream embeddedTemplate = DeployUsingARMTemplateWithTags.class.getResourceAsStream("/templateValue.json")) { final ObjectMapper mapper = new ObjectMapper(); final JsonNode tmp = mapper.readTree(embeddedTemplate); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java index 15fbd29c37b1..742864ffea64 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/resources/samples/DeployVirtualMachineUsingARMTemplate.java @@ -126,7 +126,7 @@ private static String getTemplate(AzureResourceManager azureResourceManager) thr final String adminPassword = Utils.password(); final String osDiskName = Utils.randomResourceName(azureResourceManager, "osdisk-", 24); - try (InputStream embeddedTemplate = DeployUsingARMTemplateWithProgress.class.getResourceAsStream("/virtualMachineWithManagedDisksTemplate.json")) { + try (InputStream embeddedTemplate = DeployVirtualMachineUsingARMTemplate.class.getResourceAsStream("/virtualMachineWithManagedDisksTemplate.json")) { final ObjectMapper mapper = new ObjectMapper(); final JsonNode tmp = mapper.readTree(embeddedTemplate); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java index f4e3e407c3e7..93a3eb756d96 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java +++ b/sdk/resourcemanager/azure-resourcemanager-samples/src/main/java/com/azure/resourcemanager/samples/Utils.java @@ -166,6 +166,7 @@ import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -1589,11 +1590,12 @@ public static String getSecondaryServicePrincipalSecret(String envSecondaryServi * @param alias User alias * @param password alias password * @param cnName domain name + * @param dnsName dns name in subject alternate name * @throws Exception exceptions from the creation * @throws IOException IO Exception */ - public static void createCertificate(String certPath, String pfxPath, - String alias, String password, String cnName) throws IOException { + public static void createCertificate(String certPath, String pfxPath, String alias, + String password, String cnName, String dnsName) throws IOException { if (new File(pfxPath).exists()) { return; } @@ -1618,6 +1620,12 @@ public static void createCertificate(String certPath, String pfxPath, "-keystore", pfxPath, "-storepass", password, "-validity", validityInDays, "-keyalg", keyAlg, "-sigalg", sigAlg, "-keysize", keySize, "-storetype", storeType, "-dname", "CN=" + cnName, "-ext", "EKU=1.3.6.1.5.5.7.3.1"}; + if (dnsName != null) { + List args = new ArrayList<>(Arrays.asList(commandArgs)); + args.add("-ext"); + args.add("san=dns:" + dnsName); + commandArgs = args.toArray(new String[0]); + } Utils.cmdInvocation(commandArgs, true); // Create cer file i.e. extract public key from pfx diff --git a/sdk/resourcemanager/docs/SAMPLE.md b/sdk/resourcemanager/docs/SAMPLE.md index 6a803f651f7a..38aa49b76a5d 100644 --- a/sdk/resourcemanager/docs/SAMPLE.md +++ b/sdk/resourcemanager/docs/SAMPLE.md @@ -84,46 +84,46 @@ You can create a virtual machine scale set instance by using a `define() … cre Virtual Machines Virtual Machines - parallel execution Virtual Machine Scale Sets @@ -208,20 +208,20 @@ ApplicationGateway applicationGateway = azure.applicationGateways().define("myFi Networking @@ -229,22 +229,22 @@ ApplicationGateway applicationGateway = azure.applicationGateways().define("myFi DNS Application Gateway Express Route @@ -277,30 +277,30 @@ WebApp webApp = azure.webApps() Web Apps on Windows Web Apps on Linux @@ -309,11 +309,11 @@ WebApp webApp = azure.webApps() Functions @@ -378,9 +378,9 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase") Storage @@ -405,11 +405,11 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase") Cosmos DB @@ -426,10 +426,10 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase") Active Directory @@ -438,9 +438,9 @@ SqlDatabase database = azure.sqlServers().databases().define("myNewDatabase")
  • Manage container registry
  • Manage container registry with Web hooks
  • -
  • Manage Kubernetes cluster (AKS)
  • +
  • Manage Kubernetes cluster (AKS)
  • Deploy an image from container registry to Kubernetes cluster (AKS)
  • -
  • Manage Kubernetes clusters with advanced networking
  • +
  • Manage Kubernetes clusters with advanced networking
  • Key Vault Monitor diff --git a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java index f17af46fda28..4a2f001b5186 100644 --- a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java +++ b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-active-directory/src/main/java/com/azure/spring/sample/aad/controller/TodoListController.java @@ -5,7 +5,7 @@ import com.azure.spring.sample.aad.model.TodoItem; import com.azure.spring.autoconfigure.aad.AADAuthenticationProperties; -import com.azure.spring.autoconfigure.aad.MemberShip; +import com.azure.spring.autoconfigure.aad.Membership; import com.azure.spring.autoconfigure.aad.UserPrincipal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -96,11 +96,11 @@ public ResponseEntity updateTodoItem(@RequestBody TodoItem item) { public ResponseEntity deleteTodoItem(@PathVariable("id") int id, PreAuthenticatedAuthenticationToken authToken) { final UserPrincipal current = (UserPrincipal) authToken.getPrincipal(); - MemberShip memberShip = new MemberShip( + Membership membership = new Membership( "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", - MemberShip.OBJECT_TYPE_GROUP, + Membership.OBJECT_TYPE_GROUP, "group1"); - if (current.isMemberOf(aadAuthenticationProperties, memberShip.getDisplayName())) { + if (current.isMemberOf(aadAuthenticationProperties, membership.getDisplayName())) { return todoList.stream() .filter(i -> i.getID() == id) .findFirst() diff --git a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties index 932545d08d83..5f83c4b43b25 100644 --- a/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties +++ b/sdk/spring/azure-spring-boot-samples/azure-spring-boot-sample-keyvault-certificates/src/main/resources/application.properties @@ -1,20 +1,20 @@ -# The URI to the Azure KeyVault used +# The URI to the Azure Key Vault used azure.keyvault.uri=${AZURE_KEYVAULT_URI} -# The alias corresponding to the certificate in Azure KeyVault. +# The alias corresponding to the certificate in Azure Key Vault. server.ssl.key-alias=${SERVER_SSL_KEY_ALIAS} -# The keystore type that enables the use of Azure KeyVault for your server-side +# The keystore type that enables the use of Azure Key Vault for your server-side # SSL certificate. server.ssl.key-store-type=AzureKeyVault -# The truststore type that enables the use of Azure KeyVault for trusted +# The truststore type that enables the use of Azure Key Vault for trusted # certificates, a.k.a the ones you trust when making an outbound SSL connection # server.ssl.trust-store-type=AzureKeyVault -# The Tenant ID for your Azure KeyVault (needed if you are not using managed +# The Tenant ID for your Azure Key Vault (needed if you are not using managed # identity). azure.keyvault.tenantId=${AZURE_KEYVAULT_TENTANT_ID} -# The Client ID that has been setup with access to your Azure KeyVault (needed +# The Client ID that has been setup with access to your Azure Key Vault (needed # if you are not using managed identity). azure.keyvault.clientId=${AZURE_KEYVAULT_CLIENT_ID} -# The Client Secret that will be used for accessing your Azure KeyVault (needed +# The Client Secret that will be used for accessing your Azure Key Vault (needed # if you are not using managed identity). azure.keyvault.clientSecret=${AZURE_KEYVAULT_CLIENT_SECRET} # The server port. diff --git a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md index e32959f329f4..24f5341cc998 100644 --- a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md +++ b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/README.md @@ -5,16 +5,16 @@ ### Using a managed identity To use the starter for server side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= -server.ssl.key-alias= +azure.keyvault.uri= +server.ssl.key-alias= server.ssl.key-store-type=AzureKeyVault ``` -Note: make sure the managed identity has access to the Azure KeyVault to access +Note: make sure the managed identity has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -29,19 +29,19 @@ Add then add the following Maven dependency to your POM file. ### Using a client ID and client secret To use the starter for server side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= +azure.keyvault.uri= azure.keyvault.tenantId= -azure.keyvault.clientId= +azure.keyvault.clientId= azure.keyvault.clientSecret= -server.ssl.key-alias= +server.ssl.key-alias= server.ssl.key-store-type=AzureKeyVault ``` -Note: make sure the client ID has access to the Azure KeyVault to access +Note: make sure the client ID has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -58,13 +58,13 @@ Add then add the following Maven dependency to your POM file. ### Using a managed identity To use the starter for client side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= +azure.keyvault.uri= ``` -Note: make sure the managed identity has access to the Azure KeyVault to access +Note: make sure the managed identity has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -76,7 +76,7 @@ Add then add the following Maven dependency to your POM file. ``` -If you are using RestTemplate use code similar to the example below. +If you are using `RestTemplate` use code similar to the example below. ```java @Bean @@ -104,17 +104,17 @@ If you are using RestTemplate use code similar to the example below. ### Using a client ID and client secret To use the starter for client side SSL, you will need to add the following to -your application.properties (if the application is using Spring Cloud Config -Server for its configuration add it to the bootstrap.yml of the application) +your `application.properties` (if the application is using Spring Cloud Config +Server for its configuration add it to the `bootstrap.yml` of the application) ``` -azure.keyvault.uri= +azure.keyvault.uri= azure.keyvault.tenantId= -azure.keyvault.clientId= +azure.keyvault.clientId= azure.keyvault.clientSecret= ``` -Note: make sure the client ID has access to the Azure KeyVault to access +Note: make sure the client ID has access to the Azure Key Vault to access keys, secrets and certificates. Add then add the following Maven dependency to your POM file. @@ -126,7 +126,7 @@ Add then add the following Maven dependency to your POM file. ``` -Then if you are using RestTemplate use the code below as a starting +Then if you are using `RestTemplate` use the code below as a starting point: ```java @@ -161,7 +161,7 @@ to add the following configuration: ```yaml azure: keyvault: - uri: + uri: jca: overrideTrustManagerFactory: true ``` @@ -180,8 +180,8 @@ azure: ``` If you are developing you can completely disable the certificate and hostname -validation altogether by using the configuration below. Note this is NOT -recommended for production! +validation altogether by using the configuration below. **Note this is NOT +recommended for production!** ```yaml spring: @@ -194,7 +194,7 @@ spring: ## Creating an Azure Key Vault -To create an Azure KeyVault use the command line below: +To create an Azure Key Vault use the command line below: ```shell export KEY_VAULT=mykeyvault @@ -246,14 +246,14 @@ Notes: 1. The alias (certificate name) is constructed from the filename of the certificate (minus the extension). So if your filename is `mycert.x509` the certificate will be added with the alias of `mycert`. -2. Certificates coming from Azure KeyVault take precedence over +2. Certificates coming from Azure Key Vault take precedence over side-loaded certificates. ## Testing the current version under development If you want to test the current version under development you will have to -1. Build and install the [Microsoft Azure JCA Provider] for KeyVault +1. Build and install the [Azure Key Vault JCA client library for Java](https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/keyvault/azure-security-keyvault-jca/README.md) 1. Build and install this starter. To build and install the starter use the following command line: @@ -263,7 +263,7 @@ To build and install the starter use the following command line: ``` -# Azure KeyVault Certificates client library for Java +# Azure Key Vault Certificates client library for Java # Getting started diff --git a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java index 6d76e12b4619..b1e9a2504ac7 100644 --- a/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java +++ b/sdk/spring/azure-spring-boot-starter-keyvault-certificates/src/main/java/com/azure/spring/security/keyvault/certificates/starter/KeyVaultCertificatesEnvironmentPostProcessor.java @@ -7,7 +7,6 @@ import java.security.Security; import java.util.Properties; -import java.util.logging.Logger; import javax.net.ssl.HttpsURLConnection; import org.springframework.boot.SpringApplication; @@ -22,11 +21,6 @@ @Order(LOWEST_PRECEDENCE) public class KeyVaultCertificatesEnvironmentPostProcessor implements EnvironmentPostProcessor { - /** - * Stores the logger. - */ - private static final Logger LOGGER = Logger.getLogger(KeyVaultCertificatesEnvironmentPostProcessor.class.getName()); - @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { @@ -100,9 +94,7 @@ public void postProcessEnvironment(ConfigurableEnvironment environment, enabled = environment.getProperty("azure.keyvault.jca.disableHostnameVerification"); if (Boolean.parseBoolean(enabled)) { - HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> { - return true; - }); + HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); } } } diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java index 02cce164facd..9f02a1d0e583 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AADAuthenticationProperties.java @@ -136,7 +136,7 @@ public static class UserGroupProperties { * Node is a UserGroup. */ @NotEmpty - private String value = MemberShip.OBJECT_TYPE_GROUP; + private String value = Membership.OBJECT_TYPE_GROUP; /** * Key of the JSON Node containing the Azure Object ID for the {@code UserGroup}. diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java index c85e50a73f85..9fe91e8ea36d 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/AzureADGraphClient.java @@ -122,22 +122,22 @@ public Set getGroups(String graphApiToken) throws IOException { String aadMembershipRestUri = serviceEndpoints.getAadMembershipRestUri(); while (aadMembershipRestUri != null) { String membershipsJson = getUserMemberships(graphApiToken, aadMembershipRestUri); - MemberShips memberShips = objectMapper.readValue(membershipsJson, MemberShips.class); - memberShips.getValue() + Memberships memberships = objectMapper.readValue(membershipsJson, Memberships.class); + memberships.getValue() .stream() .filter(this::isGroupObject) - .map(MemberShip::getDisplayName) + .map(Membership::getDisplayName) .forEach(groups::add); - aadMembershipRestUri = Optional.of(memberShips) - .map(MemberShips::getOdataNextLink) + aadMembershipRestUri = Optional.of(memberships) + .map(Memberships::getOdataNextLink) .map(this::getUrlStringFromODataNextLink) .orElse(null); } return groups; } - private boolean isGroupObject(final MemberShip memberShip) { - return memberShip.getObjectType().equals(aadAuthenticationProperties.getUserGroup().getValue()); + private boolean isGroupObject(final Membership membership) { + return membership.getObjectType().equals(aadAuthenticationProperties.getUserGroup().getValue()); } /** diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShip.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java similarity index 91% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShip.java rename to sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java index 043f9650f66f..9911094a1ab8 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShip.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Membership.java @@ -16,7 +16,7 @@ * Refs: https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/api-catalog */ @JsonIgnoreProperties(ignoreUnknown = true) -public class MemberShip implements Serializable { +public class Membership implements Serializable { private static final long serialVersionUID = 9064197572478554735L; public static final String OBJECT_TYPE_GROUP = "Group"; @@ -25,7 +25,7 @@ public class MemberShip implements Serializable { private final String displayName; @JsonCreator - public MemberShip( + public Membership( @JsonProperty("objectId") @JsonAlias("id") String objectID, @JsonProperty("objectType") @JsonAlias("@odata.type") String objectType, @JsonProperty("displayName") String displayName) { @@ -51,10 +51,10 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (!(o instanceof MemberShip)) { + if (!(o instanceof Membership)) { return false; } - final MemberShip group = (MemberShip) o; + final Membership group = (Membership) o; return this.getDisplayName().equals(group.getDisplayName()) && this.getObjectID().equals(group.getObjectID()) && this.getObjectType().equals(group.getObjectType()); diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShips.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java similarity index 81% rename from sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShips.java rename to sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java index 6f6e3ba66925..08be48301dce 100644 --- a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/MemberShips.java +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/autoconfigure/aad/Memberships.java @@ -15,15 +15,15 @@ * Refs: https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/api-catalog */ @JsonIgnoreProperties(ignoreUnknown = true) -public class MemberShips { +public class Memberships { private final String odataNextLink; - private final List value; + private final List value; @JsonCreator - public MemberShips( + public Memberships( @JsonProperty("odata.nextLink") String odataNextLink, - @JsonProperty("value") List value) { + @JsonProperty("value") List value) { this.odataNextLink = odataNextLink; this.value = value; } @@ -32,7 +32,7 @@ public String getOdataNextLink() { return odataNextLink; } - public List getValue() { + public List getValue() { return value; } @@ -41,10 +41,10 @@ public boolean equals(Object o) { if (o == this) { return true; } - if (!(o instanceof MemberShips)) { + if (!(o instanceof Memberships)) { return false; } - final MemberShips groups = (MemberShips) o; + final Memberships groups = (Memberships) o; return this.getOdataNextLink().equals(groups.getOdataNextLink()) && this.getValue().equals(groups.getValue()); } diff --git a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MemberShipTest.java b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java similarity index 63% rename from sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MemberShipTest.java rename to sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java index 0dafd27e0abd..8c27525c463e 100644 --- a/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MemberShipTest.java +++ b/sdk/spring/azure-spring-boot/src/test/java/com/azure/spring/autoconfigure/aad/MembershipTest.java @@ -6,8 +6,8 @@ import org.junit.Assert; import org.junit.Test; -public class MemberShipTest { - private static final MemberShip GROUP_1 = new MemberShip("12345", MemberShip.OBJECT_TYPE_GROUP, "test"); +public class MembershipTest { + private static final Membership GROUP_1 = new Membership("12345", Membership.OBJECT_TYPE_GROUP, "test"); @Test public void getDisplayName() { @@ -16,7 +16,7 @@ public void getDisplayName() { @Test public void getObjectType() { - Assert.assertEquals(MemberShip.OBJECT_TYPE_GROUP, GROUP_1.getObjectType()); + Assert.assertEquals(Membership.OBJECT_TYPE_GROUP, GROUP_1.getObjectType()); } @Test @@ -26,13 +26,13 @@ public void getObjectID() { @Test public void equals() { - final MemberShip group2 = new MemberShip("12345", MemberShip.OBJECT_TYPE_GROUP, "test"); + final Membership group2 = new Membership("12345", Membership.OBJECT_TYPE_GROUP, "test"); Assert.assertEquals(GROUP_1, group2); } @Test public void hashCodeTest() { - final MemberShip group2 = new MemberShip("12345", MemberShip.OBJECT_TYPE_GROUP, "test"); + final Membership group2 = new Membership("12345", Membership.OBJECT_TYPE_GROUP, "test"); Assert.assertEquals(GROUP_1.hashCode(), group2.hashCode()); } } diff --git a/sdk/storage/azure-storage-blob/CHANGELOG.md b/sdk/storage/azure-storage-blob/CHANGELOG.md index b37dd0b02439..e4d89e6be650 100644 --- a/sdk/storage/azure-storage-blob/CHANGELOG.md +++ b/sdk/storage/azure-storage-blob/CHANGELOG.md @@ -1,7 +1,7 @@ # Release History ## 12.9.0-beta.3 (Unreleased) - +- Fixed a bug where interspersed element types returned by page listing would deserialize incorrectly. ## 12.9.0-beta.2 (2020-10-08) - Added support to specify whether or not a pipeline policy should be added per call or per retry. diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java index 6df08b4bc9af..c2f1729e5b6d 100644 --- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java @@ -6,7 +6,9 @@ import com.azure.core.annotation.Fluent; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; + import java.util.ArrayList; import java.util.List; @@ -15,6 +17,7 @@ */ @JacksonXmlRootElement(localName = "PageList") @Fluent +@JsonDeserialize(using = PageListDeserializer.class) public final class PageList { /* * The pageRange property. diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java new file mode 100644 index 000000000000..d2832b599581 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.blob.models; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.JsonTokenId; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.util.ArrayList; + +/** + * Custom Jackson JsonDeserializer that handles deserializing PageList responses. + *

    + * PageList responses intersperse PageRange and ClearRange elements, without this deserializer if we received the + * following response the resulting PageList would only contain one PageRange element and one ClearRange element. + * + *

    + * {@code
    + * 
    + * 
    + *    
    + *       Start Byte
    + *       End Byte
    + *    
    + *    
    + *       Start Byte
    + *       End Byte
    + *    
    + *    
    + *       Start Byte
    + *       End Byte
    + *    
    + * 
    + * }
    + * 
    + * + * With the custom deserializer the response correctly returns two PageRange elements and one ClearRange element. + */ +final class PageListDeserializer extends JsonDeserializer { + @Override + public PageList deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + ArrayList pageRanges = new ArrayList<>(); + ArrayList clearRanges = new ArrayList<>(); + + // Get the deserializer that handles PageRange. + JsonDeserializer pageRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(PageRange.class)); + + // Get the deserializer that handles ClearRange. + JsonDeserializer clearRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(ClearRange.class)); + + for (JsonToken currentToken = p.nextToken(); currentToken.id() != JsonTokenId.ID_END_OBJECT; + currentToken = p.nextToken()) { + // Get to the root element of the next item. + p.nextToken(); + + if (p.getCurrentName().equals("PageRange")) { + // Current token is the node that begins a PageRange object. + pageRanges.add((PageRange) pageRangeDeserializer.deserialize(p, ctxt)); + } else if (p.getCurrentName().equals("ClearRange")) { + // Current token is the node that begins a ClearRange object. + clearRanges.add((ClearRange) clearRangeDeserializer.deserialize(p, ctxt)); + } + } + + return new PageList().setPageRange(pageRanges).setClearRange(clearRanges); + } +} diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy index 5fe929e0804f..f4fe36c310be 100644 --- a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy +++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy @@ -3,11 +3,14 @@ package com.azure.storage.blob.specialized +import com.azure.core.util.serializer.JacksonAdapter +import com.azure.core.util.serializer.SerializerEncoding import com.azure.storage.blob.APISpec import com.azure.storage.blob.BlobContainerAsyncClient import com.azure.storage.blob.BlobUrlParts import com.azure.storage.blob.implementation.util.BlobSasImplUtil import com.azure.storage.blob.models.BlobRange +import com.azure.storage.blob.models.PageList import com.azure.storage.blob.sas.BlobSasPermission import com.azure.storage.blob.sas.BlobSasServiceVersion import com.azure.storage.blob.sas.BlobServiceSasSignatureValues @@ -142,4 +145,30 @@ class HelperTest extends APISpec { .assertNext(){buffer -> assert buffer.compareTo(ByteBuffer.wrap(data)) == 0 } .verifyComplete() } + + def "PageList custom deserializer"() { + setup: + def responseXml = " \n" + + " \n" + + " \n" + + " 0 \n" + + " 511 \n" + + " \n" + + " \n" + + " 512 \n" + + " 1023 \n" + + " \n" + + " \n" + + " 1024 \n" + + " 2047 \n" + + " \n" + + "" + + when: + def pageList = (PageList) new JacksonAdapter().deserialize(responseXml, PageList.class, SerializerEncoding.XML) + + then: + pageList.getPageRange().size() == 2 + pageList.getClearRange().size() == 1 + } } diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy index e4973a38e9c8..e593df2d90e6 100644 --- a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy +++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy @@ -4,22 +4,25 @@ package com.azure.storage.blob.specialized import com.azure.core.exception.UnexpectedLengthException +import com.azure.core.util.CoreUtils import com.azure.storage.blob.APISpec import com.azure.storage.blob.BlobContainerClient -import com.azure.storage.blob.models.PageBlobCopyIncrementalRequestConditions import com.azure.storage.blob.models.BlobErrorCode import com.azure.storage.blob.models.BlobHttpHeaders import com.azure.storage.blob.models.BlobRange import com.azure.storage.blob.models.BlobRequestConditions import com.azure.storage.blob.models.BlobStorageException +import com.azure.storage.blob.models.ClearRange import com.azure.storage.blob.models.CopyStatusType -import com.azure.storage.blob.options.BlobGetTagsOptions -import com.azure.storage.blob.options.PageBlobCopyIncrementalOptions -import com.azure.storage.blob.options.PageBlobCreateOptions +import com.azure.storage.blob.models.PageBlobCopyIncrementalRequestConditions import com.azure.storage.blob.models.PageBlobRequestConditions import com.azure.storage.blob.models.PageRange import com.azure.storage.blob.models.PublicAccessType import com.azure.storage.blob.models.SequenceNumberActionType +import com.azure.storage.blob.options.BlobGetTagsOptions +import com.azure.storage.blob.options.PageBlobCopyIncrementalOptions +import com.azure.storage.blob.options.PageBlobCreateOptions +import com.azure.storage.common.implementation.Constants import spock.lang.Ignore import spock.lang.Unroll @@ -196,7 +199,7 @@ class PageBlobAPITest extends APISpec { null | null | garbageEtag | null | null | null null | null | null | receivedEtag | null | null null | null | null | null | garbageLeaseID | null - null | null | null | null | null | "\"notfoo\" = 'notbar'" + null | null | null | null | null | "\"notfoo\" = 'notbar'" } def "Create error"() { @@ -756,7 +759,7 @@ class PageBlobAPITest extends APISpec { null | null | garbageEtag | null | null | null null | null | null | receivedEtag | null | null null | null | null | null | garbageLeaseID | null - null | null | null | null | null | "\"notfoo\" = 'notbar'" + null | null | null | null | null | "\"notfoo\" = 'notbar'" } def "Get page ranges error"() { @@ -770,32 +773,81 @@ class PageBlobAPITest extends APISpec { thrown(BlobStorageException) } + @Unroll def "Get page ranges diff"() { setup: - bc.create(PageBlobClient.PAGE_BYTES * 2, true) + bc.create(4 * Constants.MB, true) - bc.uploadPages(new PageRange().setStart(PageBlobClient.PAGE_BYTES).setEnd(PageBlobClient.PAGE_BYTES * 2 - 1), - new ByteArrayInputStream(getRandomByteArray(PageBlobClient.PAGE_BYTES))) + bc.uploadPages(new PageRange().setStart(0).setEnd(4 * Constants.MB - 1), + new ByteArrayInputStream(getRandomByteArray(4 * Constants.MB))) def snapId = bc.createSnapshot().getSnapshotId() - bc.uploadPages(new PageRange().setStart(0).setEnd(PageBlobClient.PAGE_BYTES - 1), - new ByteArrayInputStream(getRandomByteArray(PageBlobClient.PAGE_BYTES))) + rangesToUpdate.forEach({ + bc.uploadPages(it, new ByteArrayInputStream(getRandomByteArray((int) (it.getEnd() - it.getStart()) + 1))) + }) - bc.clearPages(new PageRange().setStart(PageBlobClient.PAGE_BYTES).setEnd(PageBlobClient.PAGE_BYTES * 2 - 1)) + rangesToClear.forEach({ bc.clearPages(it) }) when: - def response = bc.getPageRangesDiffWithResponse(new BlobRange(0, PageBlobClient.PAGE_BYTES * 2), snapId, null, null, null) + def response = bc.getPageRangesDiffWithResponse(new BlobRange(0, 4 * Constants.MB), snapId, null, null, null) then: - response.getValue().getPageRange().size() == 1 - response.getValue().getPageRange().get(0).getStart() == 0 - response.getValue().getPageRange().get(0).getEnd() == PageBlobClient.PAGE_BYTES - 1 - response.getValue().getClearRange().size() == 1 - response.getValue().getClearRange().get(0).getStart() == PageBlobClient.PAGE_BYTES - response.getValue().getClearRange().get(0).getEnd() == PageBlobClient.PAGE_BYTES * 2 - 1 validateBasicHeaders(response.getHeaders()) - Integer.parseInt(response.getHeaders().getValue("x-ms-blob-content-length")) == PageBlobClient.PAGE_BYTES * 2 + response.getValue().getPageRange().size() == expectedPageRanges.size() + response.getValue().getClearRange().size() == expectedClearRanges.size() + + for (def i = 0; i < expectedPageRanges.size(); i++) { + def actualRange = response.getValue().getPageRange().get(i) + def expectedRange = expectedPageRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + for (def i = 0; i < expectedClearRanges.size(); i++) { + def actualRange = response.getValue().getClearRange().get(i) + def expectedRange = expectedClearRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + Integer.parseInt(response.getHeaders().getValue("x-ms-blob-content-length")) == 4 * Constants.MB + + where: + rangesToUpdate | rangesToClear | expectedPageRanges | expectedClearRanges + createPageRanges() | createPageRanges() | createPageRanges() | createClearRanges() + createPageRanges(0, 511) | createPageRanges() | createPageRanges(0, 511) | createClearRanges() + createPageRanges() | createPageRanges(0, 511) | createPageRanges() | createClearRanges(0, 511) + createPageRanges(0, 511) | createPageRanges(512, 1023) | createPageRanges(0, 511) | createClearRanges(512, 1023) + createPageRanges(0, 511, 1024, 1535) | createPageRanges(512, 1023, 1536, 2047) | createPageRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047) + } + + static def createPageRanges(long... offsets) { + def pageRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return pageRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + pageRanges.add(new PageRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return pageRanges + } + + static def createClearRanges(long... offsets) { + def clearRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return clearRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + clearRanges.add(new ClearRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return clearRanges } def "Get page ranges diff min"() { @@ -867,7 +919,7 @@ class PageBlobAPITest extends APISpec { null | null | garbageEtag | null | null | null null | null | null | receivedEtag | null | null null | null | null | null | garbageLeaseID | null - null | null | null | null | null | "\"notfoo\" = 'notbar'" + null | null | null | null | null | "\"notfoo\" = 'notbar'" } def "Get page ranges diff error"() { @@ -1178,13 +1230,13 @@ class PageBlobAPITest extends APISpec { bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac), null, null).getStatusCode() == 202 where: - modified | unmodified | match | noneMatch | tags - null | null | null | null | null - oldDate | null | null | null | null - null | newDate | null | null | null - null | null | receivedEtag | null | null - null | null | null | garbageEtag | null - null | null | null | null | "\"foo\" = 'bar'" + modified | unmodified | match | noneMatch | tags + null | null | null | null | null + oldDate | null | null | null | null + null | newDate | null | null | null + null | null | receivedEtag | null | null + null | null | null | garbageEtag | null + null | null | null | null | "\"foo\" = 'bar'" } @Unroll @@ -1204,18 +1256,18 @@ class PageBlobAPITest extends APISpec { .setTagsConditions(tags) when: - bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac),null, null) + bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac), null, null) then: thrown(BlobStorageException) where: - modified | unmodified | match | noneMatch | tags - newDate | null | null | null | null - null | oldDate | null | null | null - null | null | garbageEtag | null | null - null | null | null | receivedEtag | null - null | null | null | null | "\"notfoo\" = 'notbar'" + modified | unmodified | match | noneMatch | tags + newDate | null | null | null | null + null | oldDate | null | null | null + null | null | garbageEtag | null | null + null | null | null | receivedEtag | null + null | null | null | null | "\"notfoo\" = 'notbar'" } def "Start incremental copy error"() { diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json new file mode 100644 index 000000000000..e78a62326efc --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json @@ -0,0 +1,67 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcpagelistcustomdeserializer0983603c0fdf6584964d?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "966b1253-e957-4f27-84fb-c3c9d9cfb539" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D876CD36648A7A", + "Last-Modified" : "Thu, 22 Oct 2020 20:58:22 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "46435c5d-d01e-00f3-80b6-a8e31f000000", + "Date" : "Thu, 22 Oct 2020 20:58:21 GMT", + "x-ms-client-request-id" : "966b1253-e957-4f27-84fb-c3c9d9cfb539" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcpagelistcustomdeserializer&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e38068eb-1e45-4701-848f-4919f2cfeefe" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "4643a2d6-d01e-00f3-51b6-a8e31f000000", + "Body" : "jtcpagelistcustomdeserializerjtcpagelistcustomdeserializer0983603c0fdf6584964dThu, 22 Oct 2020 20:58:22 GMT\"0x8D876CD36648A7A\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Thu, 22 Oct 2020 21:00:23 GMT", + "x-ms-client-request-id" : "e38068eb-1e45-4701-848f-4919f2cfeefe", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcpagelistcustomdeserializer0983603c0fdf6584964d?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a372d6b7-71ea-47d7-8dda-6d87d2ed519d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "4643a2e2-d01e-00f3-59b6-a8e31f000000", + "Date" : "Thu, 22 Oct 2020 21:00:23 GMT", + "x-ms-client-request-id" : "a372d6b7-71ea-47d7-8dda-6d87d2ed519d" + }, + "Exception" : null + } ], + "variables" : [ "jtcpagelistcustomdeserializer0983603c0fdf6584964d" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json new file mode 100644 index 000000000000..a1a912a26659 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json @@ -0,0 +1,185 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d8ace183-1be6-46cf-9013-e4c3da9b923e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A1464F0F", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c4c5e-c01e-00ce-5c6a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:29:50 GMT", + "x-ms-client-request-id" : "d8ace183-1be6-46cf-9013-e4c3da9b923e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "5496780e-cb50-41af-af74-80e3a8796ac4" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A16D1110", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c4cb2-c01e-00ce-216a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:50 GMT", + "x-ms-client-request-id" : "5496780e-cb50-41af-af74-80e3a8796ac4" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e69f7a0f-93be-47b6-a6ff-c6cdf742ac5d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A1774CC0", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c4cc2-c01e-00ce-316a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:50 GMT", + "x-ms-client-request-id" : "e69f7a0f-93be-47b6-a6ff-c6cdf742ac5d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a5732c34-8b6f-4c50-a106-40765456c596", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "KLABNSKwPwQ=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "ETag" : "0x8D87781A4E7F5C3", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c4cdf-c01e-00ce-456a-a95639000000", + "x-ms-client-request-id" : "a5732c34-8b6f-4c50-a106-40765456c596" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ae42281e-c199-4087-b22e-e925d47d15d3" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:29:57.4867608Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A4E7F5C3", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c53e8-c01e-00ce-566a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "x-ms-client-request-id" : "ae42281e-c199-4087-b22e-e925d47d15d3" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?prevsnapshot=2020-10-23T18%3A29%3A57.4867608Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e68ba305-e8b6-4fbe-a2cc-a0b33ebd1f85" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781A4E7F5C3", + "x-ms-request-id" : "ee1c53fe-c01e-00ce-676a-a95639000000", + "Body" : "", + "x-ms-client-request-id" : "e68ba305-e8b6-4fbe-a2cc-a0b33ebd1f85", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c5cafb87-bc16-4515-838f-1aff3cce6c5f" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c5432-c01e-00ce-106a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775Fri, 23 Oct 2020 18:29:51 GMT\"0x8D87781A1464F0F\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "x-ms-client-request-id" : "c5cafb87-bc16-4515-838f-1aff3cce6c5f", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "5c5ce396-94be-4687-8080-690a99e4ef3b" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c544a-c01e-00ce-236a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:29:56 GMT", + "x-ms-client-request-id" : "5c5ce396-94be-4687-8080-690a99e4ef3b" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775", "javablobgetpagerangesdiff1414537ab5c849b3ff44b0", "ef2297af-747d-4e79-ac2b-9e1896da1144" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json new file mode 100644 index 000000000000..30e4a7ed9e2c --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json @@ -0,0 +1,210 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "25cf2a8e-d21a-4f91-8dbe-930000aa6879" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A52604CF", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c545f-c01e-00ce-356a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:29:57 GMT", + "x-ms-client-request-id" : "25cf2a8e-d21a-4f91-8dbe-930000aa6879" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a1f02e09-4c16-4f1f-a613-84a589658efb" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A52CFED6", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5476-c01e-00ce-466a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:57 GMT", + "x-ms-client-request-id" : "a1f02e09-4c16-4f1f-a613-84a589658efb" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a92fb514-37b9-4df6-b89f-0ee20cc6ec5d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A5342C7E", + "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5487-c01e-00ce-556a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:29:57 GMT", + "x-ms-client-request-id" : "a92fb514-37b9-4df6-b89f-0ee20cc6ec5d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "9cd58e52-0b6d-4b8d-974b-72ff1f336796", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "HKzsv2qN0jc=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "ETag" : "0x8D87781A89C6F02", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c54b3-c01e-00ce-796a-a95639000000", + "x-ms-client-request-id" : "9cd58e52-0b6d-4b8d-974b-72ff1f336796" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "813f95c7-3b0e-4937-a7f0-ae8e072769c8" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:03.6956707Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A89C6F02", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5ddd-c01e-00ce-6a6a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "x-ms-client-request-id" : "813f95c7-3b0e-4937-a7f0-ae8e072769c8" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "34f58426-2c6a-480b-a363-6cc5359a19b1", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "PIjD7cc1O88=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "ETag" : "0x8D87781A8AFAD8A", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c5e00-c01e-00ce-056a-a95639000000", + "x-ms-client-request-id" : "34f58426-2c6a-480b-a363-6cc5359a19b1" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?prevsnapshot=2020-10-23T18%3A30%3A03.6956707Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "f0026ab8-1a03-4c33-a380-f0ef22c4b5b1" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:02 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781A8AFAD8A", + "x-ms-request-id" : "ee1c5e12-c01e-00ce-136a-a95639000000", + "Body" : "0511", + "x-ms-client-request-id" : "f0026ab8-1a03-4c33-a380-f0ef22c4b5b1", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "3363f50a-64b6-4cf7-bd69-944488e8e028" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c5e2a-c01e-00ce-276a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127Fri, 23 Oct 2020 18:29:57 GMT\"0x8D87781A52604CF\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "3363f50a-64b6-4cf7-bd69-944488e8e028", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8f00712a-a24c-41be-b85e-29c1f56db346" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c5e37-c01e-00ce-326a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "8f00712a-a24c-41be-b85e-29c1f56db346" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127", "javablobgetpagerangesdiff115541f331cc6cbd2745dc", "c55fe123-ffa3-48ab-9811-859f9991d7fb", "f7eeeee4-265b-4367-a01b-cd84c150ed83" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json new file mode 100644 index 000000000000..e78d0a87ede8 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json @@ -0,0 +1,207 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0868ce82-a562-437c-a384-a43137148a9a" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A8CBB041", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5e52-c01e-00ce-496a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "0868ce82-a562-437c-a384-a43137148a9a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "44236b6d-9cb3-4de2-aa4b-6436c68fe838" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A8D23213", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5e61-c01e-00ce-566a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "44236b6d-9cb3-4de2-aa4b-6436c68fe838" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a2427a9c-4eba-419e-b201-3bc28441c425" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781A8D89C48", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:04 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c5e76-c01e-00ce-666a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:03 GMT", + "x-ms-client-request-id" : "a2427a9c-4eba-419e-b201-3bc28441c425" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "da64ee1e-e915-4076-afe4-d01a65e1f12e", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "4XsU0IKECEc=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:08 GMT", + "ETag" : "0x8D87781AC3A9BB3", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c5e91-c01e-00ce-7b6a-a95639000000", + "x-ms-client-request-id" : "da64ee1e-e915-4076-afe4-d01a65e1f12e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ab4776b7-5acb-41fa-907a-2a4b7bfa2241" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:09.7634469Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC3A9BB3", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c6875-c01e-00ce-1d6a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:08 GMT", + "x-ms-client-request-id" : "ab4776b7-5acb-41fa-907a-2a4b7bfa2241" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "983f8c53-9ecf-46b9-81a6-3012a534b288" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC4C050C", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c688c-c01e-00ce-336a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:08 GMT", + "x-ms-client-request-id" : "983f8c53-9ecf-46b9-81a6-3012a534b288" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?prevsnapshot=2020-10-23T18%3A30%3A09.7634469Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "80a2da27-820a-41ca-9336-6c5ea92644f2" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781AC4C050C", + "x-ms-request-id" : "ee1c689c-c01e-00ce-436a-a95639000000", + "Body" : "0511", + "x-ms-client-request-id" : "80a2da27-820a-41ca-9336-6c5ea92644f2", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8636f340-98e1-40d6-ab18-295f66022566" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c68bd-c01e-00ce-626a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384bFri, 23 Oct 2020 18:30:03 GMT\"0x8D87781A8CBB041\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "8636f340-98e1-40d6-ab18-295f66022566", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "1c5f19c1-249f-498f-94b2-8914b9480300" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c68d5-c01e-00ce-766a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "1c5f19c1-249f-498f-94b2-8914b9480300" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b", "javablobgetpagerangesdiff1196179d8ab59ce69d47ed", "a35d2b8f-23e4-4788-b4c9-92f0b7bafba7" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json new file mode 100644 index 000000000000..3c3d10af29fc --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json @@ -0,0 +1,232 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e883719a-2424-42f7-8dca-f6e48af1b577" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC67E3B9", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c68ee-c01e-00ce-0b6a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "e883719a-2424-42f7-8dca-f6e48af1b577" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "6580cdd2-3eef-42e1-a380-e23e406f518f" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC6E89B2", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:10 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c6901-c01e-00ce-1b6a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "6580cdd2-3eef-42e1-a380-e23e406f518f" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e0a6bad4-5f13-4cdd-a94c-c55bdcee623a" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AC7541F4", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:10 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c6920-c01e-00ce-326a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:09 GMT", + "x-ms-client-request-id" : "e0a6bad4-5f13-4cdd-a94c-c55bdcee623a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b1bd7265-e5b0-4193-81e9-e9f303cca680", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "yNKI+KPfNUQ=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:14 GMT", + "ETag" : "0x8D87781AFD7B6F0", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c6950-c01e-00ce-5c6a-a95639000000", + "x-ms-client-request-id" : "b1bd7265-e5b0-4193-81e9-e9f303cca680" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b390e77e-9453-4c63-b7e8-d1b2a736eaf9" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:15.8302279Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AFD7B6F0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c733a-c01e-00ce-5f6a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "b390e77e-9453-4c63-b7e8-d1b2a736eaf9" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "18a7c7df-3f79-4bf2-8a78-489473b3687a", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "7cBhePr62ZU=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "ETag" : "0x8D87781AFE9E3C2", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c7344-c01e-00ce-676a-a95639000000", + "x-ms-client-request-id" : "18a7c7df-3f79-4bf2-8a78-489473b3687a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b477f3f6-3a6c-4f8b-89aa-1965bced3586" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781AFEFB18C", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7356-c01e-00ce-766a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "b477f3f6-3a6c-4f8b-89aa-1965bced3586" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?prevsnapshot=2020-10-23T18%3A30%3A15.8302279Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "123383b8-f36d-483c-9430-ef57dc0f47d3" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781AFEFB18C", + "x-ms-request-id" : "ee1c736e-c01e-00ce-0a6a-a95639000000", + "Body" : "05115121023", + "x-ms-client-request-id" : "123383b8-f36d-483c-9430-ef57dc0f47d3", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "96294756-3d23-41d4-aafb-3b024d5e6c8d" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c7382-c01e-00ce-196a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895Fri, 23 Oct 2020 18:30:09 GMT\"0x8D87781AC67E3B9\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "96294756-3d23-41d4-aafb-3b024d5e6c8d", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "cd0b7899-15c9-4899-be4e-d69649fd676b" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c738f-c01e-00ce-246a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "cd0b7899-15c9-4899-be4e-d69649fd676b" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895", "javablobgetpagerangesdiff189414bcfecd4ea50f4ff7", "f344e7b0-c396-42b0-bd4b-1d970e75d57a", "fd8c4c6b-b8c6-4cbf-9328-c9e52741ccaf" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json new file mode 100644 index 000000000000..0b035d2e3061 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json @@ -0,0 +1,279 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "5616519c-16d5-4be0-9993-31cde0e36158" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B00B6BD2", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c73a2-c01e-00ce-366a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "5616519c-16d5-4be0-9993-31cde0e36158" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a666f0a2-dd07-4034-af48-e994ee20630d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B01347C6", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c73ac-c01e-00ce-3f6a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "a666f0a2-dd07-4034-af48-e994ee20630d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c864d31f-85ac-4a29-8e30-f19b79e2135a" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B01C71C1", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c73cc-c01e-00ce-5b6a-a95639000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:15 GMT", + "x-ms-client-request-id" : "c864d31f-85ac-4a29-8e30-f19b79e2135a" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "00370d0d-ca07-4f7d-90c8-f8dba82314bc", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "SkN3THoGiP0=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:21 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "ETag" : "0x8D87781B383C9A8", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c73e5-c01e-00ce-6e6a-a95639000000", + "x-ms-client-request-id" : "00370d0d-ca07-4f7d-90c8-f8dba82314bc" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "4af1b117-6092-46c1-9db9-ec23b4e462c5" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T18:30:21.9920928Z", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B383C9A8", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:21 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7d99-c01e-00ce-546a-a95639000000", + "x-ms-request-server-encrypted" : "false", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "4af1b117-6092-46c1-9db9-ec23b4e462c5" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "92fe77b4-c37c-4c9d-863a-5b7b58b8c3d1", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "R+7y7u/mlmU=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "ETag" : "0x8D87781B395CF70", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c7dad-c01e-00ce-676a-a95639000000", + "x-ms-client-request-id" : "92fe77b4-c37c-4c9d-863a-5b7b58b8c3d1" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "9ab62d75-3b70-481b-871f-7c3fc71ed1a0", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-crc64" : "zpW0pVt4+9c=", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "ETag" : "0x8D87781B39C60B3", + "Content-Length" : "0", + "x-ms-request-id" : "ee1c7dc8-c01e-00ce-7e6a-a95639000000", + "x-ms-client-request-id" : "9ab62d75-3b70-481b-871f-7c3fc71ed1a0" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7702fa6d-8ebe-4972-9131-4b5b8604e068" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B3A38E61", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7dd9-c01e-00ce-0f6a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "7702fa6d-8ebe-4972-9131-4b5b8604e068" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "2f9966ee-c64d-4443-9bcc-82e56b05678f" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87781B3A9D17E", + "x-ms-blob-sequence-number" : "0", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "ee1c7ddf-c01e-00ce-156a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "2f9966ee-c64d-4443-9bcc-82e56b05678f" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?prevsnapshot=2020-10-23T18%3A30%3A21.9920928Z&comp=pagelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "11efcea2-b86b-454e-860c-5f8c366fc7e2" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-content-length" : "4194304", + "Access-Control-Allow-Origin" : "*", + "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "ETag" : "0x8D87781B3A9D17E", + "x-ms-request-id" : "ee1c7df1-c01e-00ce-256a-a95639000000", + "Body" : "051151210231024153515362047", + "x-ms-client-request-id" : "11efcea2-b86b-454e-860c-5f8c366fc7e2", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "df8cb1ba-7fcc-422e-af2f-ed06d04af5fd" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "Access-Control-Expose-Headers" : "x-ms-client-request-id", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "Access-Control-Allow-Origin" : "*", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ee1c7e08-c01e-00ce-386a-a95639000000", + "Body" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411eFri, 23 Oct 2020 18:30:16 GMT\"0x8D87781B00B6BD2\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "df8cb1ba-7fcc-422e-af2f-ed06d04af5fd", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e?restype=container", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "dcf7bcae-2017-456f-9bab-0e63fac6118f" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "ee1c7e1c-c01e-00ce-476a-a95639000000", + "Date" : "Fri, 23 Oct 2020 18:30:21 GMT", + "x-ms-client-request-id" : "dcf7bcae-2017-456f-9bab-0e63fac6118f" + }, + "Exception" : null + } ], + "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e", "javablobgetpagerangesdiff110215b26d03ead2e94975", "f0b8a9f3-02f0-48f7-9922-1c22951ef40e", "e1054127-05aa-4568-8571-e776cb204c7e", "6dde5b1e-8e0f-4f60-992a-b0c4adcc85d7" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-blob/swagger/README.md b/sdk/storage/azure-storage-blob/swagger/README.md index 70b01c2d531b..0d8b599f815d 100644 --- a/sdk/storage/azure-storage-blob/swagger/README.md +++ b/sdk/storage/azure-storage-blob/swagger/README.md @@ -894,6 +894,21 @@ directive: "@JsonDeserialize(using = CustomHierarchicalListingDeserializer.class)\npublic final class BlobHierarchyListSegment {"); ``` +### Add the PageListDeserializer attribute +``` yaml +directive: +- from: PageList.java + where: $ + transform: > + return $. + replace( + "import com.fasterxml.jackson.annotation.JsonProperty;", + "import com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;"). + replace( + "public final class PageList {", + "@JsonDeserialize(using = PageListDeserializer.class)\npublic final class PageList {"); +``` + ### Add EncryptionKeySha256 to PageBlobUploadPagesFromURLHeaders ``` yaml directive: diff --git a/sdk/storage/azure-storage-file-share/CHANGELOG.md b/sdk/storage/azure-storage-file-share/CHANGELOG.md index 6b5c3d7f4f0f..3c36c8a58832 100644 --- a/sdk/storage/azure-storage-file-share/CHANGELOG.md +++ b/sdk/storage/azure-storage-file-share/CHANGELOG.md @@ -4,15 +4,17 @@ - Added support to specify whether or not a pipeline policy should be added per call or per retry. - Added support for setting access tier on a share through ShareClient.create, ShareClient.setAccessTier. - Added support for getting access tier on a share through ShareClient.getProperties, ShareServiceClient.listShares +- Fixed a bug where interspersed element types returned by range diff listing would deserialize incorrectly. - Renamed setAccessTier to setProperties and deprecated setQuotaInGb in favor of setProperties. - Renamed DeleteSnapshotsOptionType to ShareSnapshotsDeleteOptionType in ShareClient.delete +- Removed ability to create a ShareLeaseClient for a Share or Share Snapshot. This feature has been rescheduled for future release. ## 12.7.0-beta.1 (2020-10-01) - Added support for the 2020-02-10 service version. - Added support to getFileRanges on a previous snapshot by adding the getFileRangesDiff API. - Added support to set whether or not smb multichannel is enabled. - Added support to lease shares and snapshot shares. -- Added support to specify a lease id for share operations. +- Added support to specify a lease id for share operations. - Fixed a bug where getProperties on a file client would throw a HttpResponseException instead of ShareStorageException. - Fixed a bug where snapshot would be appended to a share snapshot instead of sharesnapshot. - Fixed a bug that would cause auth failures when building a client by passing an endpoint which had a sas token with protocol set to https,http diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java index cedb2f7987d8..94cc8d543036 100644 --- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java @@ -6,6 +6,7 @@ import com.azure.core.annotation.Fluent; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import java.util.ArrayList; import java.util.List; @@ -15,6 +16,7 @@ */ @JacksonXmlRootElement(localName = "ShareFileRangeList") @Fluent +@JsonDeserialize(using = ShareFileRangeListDeserializer.class) public final class ShareFileRangeList { /* * The ranges property. diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java new file mode 100644 index 000000000000..a6e912f49a57 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.storage.file.share.models; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.JsonTokenId; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.util.ArrayList; + +/** + * Custom Jackson JsonDeserializer that handles deserializing ShareFileRangeList responses. + *

    + * ShareFileRangeList responses intersperse FileRange and ClearRange elements, without this deserializer if we received + * the following response the resulting ShareFileRangeList would only contain one FileRange element and one ClearRange + * element. + * + *

    + * {@code
    + * 
    + * 
    + *    
    + *       Start Byte
    + *       End Byte
    + *    
    + *    
    + *       Start Byte
    + *       End Byte
    + *    
    + *    
    + *       Start Byte
    + *       End Byte
    + *    
    + * 
    + * }
    + * 
    + * + * With the custom deserializer the response correctly returns two FileRange elements and one ClearRange element. + */ +final class ShareFileRangeListDeserializer extends JsonDeserializer { + @Override + public ShareFileRangeList deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + ArrayList pageRanges = new ArrayList<>(); + ArrayList clearRanges = new ArrayList<>(); + + // Get the deserializer that handles PageRange. + JsonDeserializer pageRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(FileRange.class)); + + // Get the deserializer that handles ClearRange. + JsonDeserializer clearRangeDeserializer = + ctxt.findRootValueDeserializer(ctxt.constructType(ClearRange.class)); + + for (JsonToken currentToken = p.nextToken(); currentToken.id() != JsonTokenId.ID_END_OBJECT; + currentToken = p.nextToken()) { + // Get to the root element of the next item. + p.nextToken(); + + if (p.getCurrentName().equals("Range")) { + // Current token is the node that begins a FileRange object. + pageRanges.add((FileRange) pageRangeDeserializer.deserialize(p, ctxt)); + } else if (p.getCurrentName().equals("ClearRange")) { + // Current token is the node that begins a ClearRange object. + clearRanges.add((ClearRange) clearRangeDeserializer.deserialize(p, ctxt)); + } + } + + return new ShareFileRangeList().setRanges(pageRanges).setClearRanges(clearRanges); + } +} diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java index cce3a5c8954c..1dae3d679e44 100644 --- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/specialized/ShareLeaseClientBuilder.java @@ -112,7 +112,7 @@ public ShareLeaseClientBuilder fileAsyncClient(ShareFileAsyncClient fileAsyncCli * @return the updated ShareLeaseClientBuilder object * @throws NullPointerException If {@code fileClient} is {@code null}. */ - public ShareLeaseClientBuilder shareClient(ShareClient shareClient) { + ShareLeaseClientBuilder shareClient(ShareClient shareClient) { Objects.requireNonNull(shareClient); this.pipeline = shareClient.getHttpPipeline(); this.url = shareClient.getShareUrl(); @@ -130,7 +130,7 @@ public ShareLeaseClientBuilder shareClient(ShareClient shareClient) { * @return the updated ShareLeaseClientBuilder object * @throws NullPointerException If {@code fileAsyncClient} is {@code null}. */ - public ShareLeaseClientBuilder shareAsyncClient(ShareAsyncClient shareAsyncClient) { + ShareLeaseClientBuilder shareAsyncClient(ShareAsyncClient shareAsyncClient) { Objects.requireNonNull(shareAsyncClient); this.pipeline = shareAsyncClient.getHttpPipeline(); this.url = shareAsyncClient.getShareUrl(); diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy index 38cb162e7920..935f2fe1e52e 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy @@ -31,6 +31,16 @@ import java.time.LocalDateTime import java.time.OffsetDateTime import java.time.ZoneOffset +import static com.azure.storage.file.share.FileTestHelper.assertExceptionStatusCodeAndMessage +import static com.azure.storage.file.share.FileTestHelper.assertResponseStatusCode +import static com.azure.storage.file.share.FileTestHelper.compareFiles +import static com.azure.storage.file.share.FileTestHelper.createClearRanges +import static com.azure.storage.file.share.FileTestHelper.createFileRanges +import static com.azure.storage.file.share.FileTestHelper.createRandomFileWithLength +import static com.azure.storage.file.share.FileTestHelper.deleteFilesIfExists +import static com.azure.storage.file.share.FileTestHelper.getRandomBuffer +import static com.azure.storage.file.share.FileTestHelper.getRandomFile + class FileAPITests extends APISpec { ShareFileClient primaryFileClient ShareClient shareClient @@ -53,7 +63,7 @@ class FileAPITests extends APISpec { testMetadata = Collections.singletonMap("testmetadata", "value") httpHeaders = new ShareFileHttpHeaders().setContentLanguage("en") .setContentType("application/octet-stream") - smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet.of(NtfsFileAttributes.NORMAL)) + smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet. of(NtfsFileAttributes.NORMAL)) } def "Get file URL"() { @@ -112,12 +122,12 @@ class FileAPITests extends APISpec { def "Create file"() { expect: - FileTestHelper.assertResponseStatusCode(primaryFileClient.createWithResponse(1024, null, null, null, null, null, null), 201) + assertResponseStatusCode(primaryFileClient.createWithResponse(1024, null, null, null, null, null, null), 201) } def "Create file 4TB"() { expect: - FileTestHelper.assertResponseStatusCode(primaryFileClient.createWithResponse(4 * Constants.TB, null, null, null, null, null, null), 201) + assertResponseStatusCode(primaryFileClient.createWithResponse(4 * Constants.TB, null, null, null, null, null, null), 201) } def "Create file error"() { @@ -126,7 +136,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } def "Create file with args fpk"() { @@ -139,7 +149,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.createWithResponse(1024, httpHeaders, smbProperties, null, testMetadata, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 201) + assertResponseStatusCode(resp, 201) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -158,7 +168,7 @@ class FileAPITests extends APISpec { .setFileLastWriteTime(getUTCNow()) def resp = primaryFileClient.createWithResponse(1024, httpHeaders, smbProperties, filePermission, testMetadata, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 201) + assertResponseStatusCode(resp, 201) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -176,7 +186,7 @@ class FileAPITests extends APISpec { primaryFileClient.createWithResponse(-1, null, null, null, testMetadata, null, null) then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } @Unroll @@ -189,7 +199,7 @@ class FileAPITests extends APISpec { where: filePermissionKey | permission "filePermissionKey" | filePermission - null | new String(FileTestHelper.getRandomBuffer(9 * Constants.KB)) + null | new String(getRandomBuffer(9 * Constants.KB)) } def "Upload and download data"() { @@ -203,9 +213,9 @@ class FileAPITests extends APISpec { def headers = downloadResponse.getDeserializedHeaders() then: - FileTestHelper.assertResponseStatusCode(uploadResponse, 201) - FileTestHelper.assertResponseStatusCode(downloadResponse, 200) - headers.getContentLength() == dataLength + assertResponseStatusCode(uploadResponse, 201) + assertResponseStatusCode(downloadResponse, 200) + headers.getContentLength() == (long) dataLength headers.getETag() headers.getLastModified() headers.getFilePermissionKey() @@ -229,9 +239,9 @@ class FileAPITests extends APISpec { def downloadResponse = primaryFileClient.downloadWithResponse(stream, new ShareFileRange(1, dataLength), true, null, null) then: - FileTestHelper.assertResponseStatusCode(uploadResponse, 201) - FileTestHelper.assertResponseStatusCode(downloadResponse, 206) - downloadResponse.getDeserializedHeaders().getContentLength() == dataLength + assertResponseStatusCode(uploadResponse, 201) + assertResponseStatusCode(downloadResponse, 206) + downloadResponse.getDeserializedHeaders().getContentLength() == (long) dataLength data == stream.toByteArray() } @@ -247,9 +257,9 @@ class FileAPITests extends APISpec { def downloadResponse = primaryFileClient.downloadWithResponse(stream, new ShareFileRange(fileSize - dataLength, fileSize), true, null, null) then: - FileTestHelper.assertResponseStatusCode(uploadResponse, 201) - FileTestHelper.assertResponseStatusCode(downloadResponse, 206) - downloadResponse.getDeserializedHeaders().getContentLength() == dataLength + assertResponseStatusCode(uploadResponse, 201) + assertResponseStatusCode(downloadResponse, 206) + downloadResponse.getDeserializedHeaders().getContentLength() == (long) dataLength } def "Upload data error"() { @@ -258,10 +268,10 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } - def "Upload and clear range" () { + def "Upload and clear range"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -279,7 +289,7 @@ class FileAPITests extends APISpec { } } - def "Upload and clear range with args" () { + def "Upload and clear range with args"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -297,7 +307,7 @@ class FileAPITests extends APISpec { } } - def "Clear range error" () { + def "Clear range error"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -309,10 +319,10 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) } - def "Clear range error args" () { + def "Clear range error args"() { given: def fullInfoString = "please clear the range" def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8)) @@ -324,7 +334,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE) } @Unroll @@ -341,8 +351,8 @@ class FileAPITests extends APISpec { where: size | errMsg - 6 | "more than" - 8 | "less than" + 6 | "more than" + 8 | "less than" } def "Download data error"() { @@ -351,7 +361,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } def "Upload file does not exist"() { @@ -370,12 +380,13 @@ class FileAPITests extends APISpec { ex.getCause() instanceof NoSuchFileException cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } /* * Tests downloading a file using a default client that doesn't have a HttpClient passed to it. */ + @Requires({ liveMode() }) @Unroll def "Download file buffer copy"() { @@ -387,7 +398,7 @@ class FileAPITests extends APISpec { def fileClient = shareServiceClient.getShareClient(shareName) .createFile(filePath, fileSize) - def file = FileTestHelper.getRandomFile(fileSize) + def file = getRandomFile(fileSize) fileClient.uploadFromFile(file.toPath().toString()) def outFile = new File(testResourceName.randomName(methodName, 60) + ".txt") if (outFile.exists()) { @@ -398,7 +409,7 @@ class FileAPITests extends APISpec { fileClient.downloadToFile(outFile.toPath().toString()) then: - FileTestHelper.compareFiles(file, outFile, 0, fileSize) + compareFiles(file, outFile, 0, fileSize) cleanup: shareServiceClient.deleteShare(shareName) @@ -434,7 +445,7 @@ class FileAPITests extends APISpec { ex.getCause() instanceof FileAlreadyExistsException cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload and download to file does not exist"() { @@ -458,7 +469,7 @@ class FileAPITests extends APISpec { scanner.close() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } @Unroll @@ -487,14 +498,14 @@ class FileAPITests extends APISpec { .buildFileClient() client.create(1024) - client.uploadRangeFromUrl(length, destinationOffset, sourceOffset, primaryFileClient.getFileUrl() +"?" + sasToken) + client.uploadRangeFromUrl(length, destinationOffset, sourceOffset, primaryFileClient.getFileUrl() + "?" + sasToken) then: def stream = new ByteArrayOutputStream() client.download(stream) def result = new String(stream.toByteArray()) - for(int i = 0; i < length; i++) { + for (int i = 0; i < length; i++) { result.charAt(destinationOffset + i) == data.charAt(sourceOffset + i) } where: @@ -514,8 +525,8 @@ class FileAPITests extends APISpec { when: SyncPoller poller = primaryFileClient.beginCopy(sourceURL, - null, - null) + null, + null) def pollResponse = poller.poll() @@ -566,13 +577,13 @@ class FileAPITests extends APISpec { when: SyncPoller poller = primaryFileClient.beginCopy("some url", - testMetadata, - null) + testMetadata, + null) poller.waitForCompletion() then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.INVALID_HEADER_VALUE) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.INVALID_HEADER_VALUE) } @Ignore @@ -585,7 +596,7 @@ class FileAPITests extends APISpec { primaryFileClient.createWithResponse(1024, null, null, null, null, null, null) expect: - FileTestHelper.assertResponseStatusCode(primaryFileClient.deleteWithResponse(null, null), 202) + assertResponseStatusCode(primaryFileClient.deleteWithResponse(null, null), 202) } def "Delete file error"() { @@ -594,7 +605,7 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } def "Get properties"() { @@ -607,7 +618,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.getPropertiesWithResponse(null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 200) + assertResponseStatusCode(resp, 200) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -639,7 +650,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, null, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 200) + assertResponseStatusCode(resp, 200) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -661,7 +672,7 @@ class FileAPITests extends APISpec { def resp = primaryFileClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, filePermission, null, null) then: - FileTestHelper.assertResponseStatusCode(resp, 200) + assertResponseStatusCode(resp, 200) resp.getValue().getETag() resp.getValue().getLastModified() resp.getValue().getSmbProperties() @@ -681,7 +692,7 @@ class FileAPITests extends APISpec { primaryFileClient.setPropertiesWithResponse(-1, null, null, null, null, null) then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } def "Set metadata"() { @@ -696,7 +707,7 @@ class FileAPITests extends APISpec { then: testMetadata == getPropertiesBefore.getMetadata() - FileTestHelper.assertResponseStatusCode(setPropertiesResponse, 200) + assertResponseStatusCode(setPropertiesResponse, 200) updatedMetadata == getPropertiesAfter.getMetadata() } @@ -710,14 +721,14 @@ class FileAPITests extends APISpec { then: def e = thrown(ShareStorageException) - FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.EMPTY_METADATA_KEY) + assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.EMPTY_METADATA_KEY) } def "List ranges"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) expect: @@ -727,14 +738,14 @@ class FileAPITests extends APISpec { } cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges with range"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) expect: @@ -744,14 +755,14 @@ class FileAPITests extends APISpec { } cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges snapshot"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -767,14 +778,14 @@ class FileAPITests extends APISpec { } cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges snapshot fail"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) primaryFileClient = fileBuilderHelper(interceptorManager, shareName, filePath) @@ -791,38 +802,64 @@ class FileAPITests extends APISpec { def e = thrown(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } - @Requires( { playbackMode() } ) + @Unroll def "List ranges diff"() { - given: - primaryFileClient.create(1024) - primaryFileClient.uploadWithResponse(new ByteArrayInputStream(FileTestHelper.getRandomBuffer(512)),512, 512, null, null) - def snapInfo = shareClient.createSnapshot() - primaryFileClient.uploadWithResponse(new ByteArrayInputStream(FileTestHelper.getRandomBuffer(512)),512, 0, null, null) - - primaryFileClient.clearRangeWithResponse(512, 512, null, null) + setup: + primaryFileClient.create(4 * Constants.MB) + primaryFileClient.upload(new ByteArrayInputStream(getRandomBuffer(4 * Constants.MB)), 4 * Constants.MB) + def snapshotId = primaryFileServiceClient.getShareClient(primaryFileClient.getShareName()) + .createSnapshot() + .getSnapshot() + + rangesToUpdate.forEach({ + def size = it.getEnd() - it.getStart() + 1 + primaryFileClient.uploadWithResponse(new ByteArrayInputStream(getRandomBuffer((int) size)), size, + it.getStart(), null, null) + }) + + rangesToClear.forEach({ + def size = it.getEnd() - it.getStart() + 1 + primaryFileClient.clearRangeWithResponse(size, it.getStart(), null, null) + }) when: - def response = primaryFileClient.listRangesDiffWithResponse(new ShareFileListRangesDiffOptions(snapInfo.getSnapshot()).setRange(new ShareFileRange(0, 1024)), null, null) + def rangeDiff = primaryFileClient.listRangesDiff(snapshotId) then: - response.getValue().getRanges().size() == 1 - response.getValue().getRanges().get(0).getStart() == 0 - response.getValue().getRanges().get(0).getEnd() == 511 - response.getValue().getClearRanges().size() == 1 - response.getValue().getClearRanges().get(0).getStart() == 512 - response.getValue().getClearRanges().get(0).getEnd() == 1023 - validateBasicHeaders(response.getHeaders()) - Integer.parseInt(response.getHeaders().getValue("x-ms-content-length")) == 1024 + rangeDiff.getRanges().size() == expectedRanges.size() + rangeDiff.getClearRanges().size() == expectedClearRanges.size() + + for (def i = 0; i < expectedRanges.size(); i++) { + def actualRange = rangeDiff.getRanges().get(i) + def expectedRange = expectedRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + for (def i = 0; i < expectedClearRanges.size(); i++) { + def actualRange = rangeDiff.getClearRanges().get(i) + def expectedRange = expectedClearRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + where: + rangesToUpdate | rangesToClear | expectedRanges | expectedClearRanges + createFileRanges() | createFileRanges() | createFileRanges() | createClearRanges() + createFileRanges(0, 511) | createFileRanges() | createFileRanges(0, 511) | createClearRanges() + createFileRanges() | createFileRanges(0, 511) | createFileRanges() | createClearRanges(0, 511) + createFileRanges(0, 511) | createFileRanges(512, 1023) | createFileRanges(0, 511) | createClearRanges(512, 1023) + createFileRanges(0, 511, 1024, 1535) | createFileRanges(512, 1023, 1536, 2047) | createFileRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047) } def "List ranges diff with range"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024 + dataLength) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -837,15 +874,15 @@ class FileAPITests extends APISpec { range.getEnd() == 1026 cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } - @Requires( { playbackMode() } ) + @Requires({ playbackMode() }) def "List ranges diff lease"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024 + dataLength) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -861,14 +898,14 @@ class FileAPITests extends APISpec { range.getEnd() == 1030 cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges diff lease fail"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024 + dataLength) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) def snapInfo = shareClient.createSnapshot() @@ -882,15 +919,15 @@ class FileAPITests extends APISpec { thrown(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } - @Requires( { playbackMode() } ) + @Requires({ playbackMode() }) def "List ranges diff fail"() { given: def fileName = testResourceName.randomName("file", 60) primaryFileClient.create(1024) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileClient.uploadFromFile(uploadFile) when: @@ -900,7 +937,7 @@ class FileAPITests extends APISpec { thrown(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List handles"() { diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy index c1c29ac8c2d8..df527fc925a3 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy @@ -33,6 +33,8 @@ import java.time.LocalDateTime import java.time.OffsetDateTime import java.time.ZoneOffset +import static com.azure.storage.file.share.FileTestHelper.* + class FileAsyncAPITests extends APISpec { ShareFileAsyncClient primaryFileAsyncClient ShareClient shareClient @@ -52,7 +54,7 @@ class FileAsyncAPITests extends APISpec { testMetadata = Collections.singletonMap("testmetadata", "value") httpHeaders = new ShareFileHttpHeaders().setContentLanguage("en") .setContentType("application/octet-stream") - smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet.of(NtfsFileAttributes.NORMAL)) + smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet. of(NtfsFileAttributes.NORMAL)) } def "Get file URL"() { @@ -71,7 +73,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, null, null, null, null)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) }.verifyComplete() } @@ -81,7 +83,7 @@ class FileAsyncAPITests extends APISpec { then: createFileErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } } @@ -95,7 +97,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, httpHeaders, smbProperties, null, testMetadata)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) assert it.getValue().getLastModified() assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() @@ -116,7 +118,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, httpHeaders, smbProperties, filePermission, testMetadata)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) assert it.getValue().getLastModified() assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() @@ -135,7 +137,7 @@ class FileAsyncAPITests extends APISpec { then: createFileErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } } @@ -168,6 +170,7 @@ class FileAsyncAPITests extends APISpec { /* * Tests downloading a file using a default client that doesn't have a HttpClient passed to it. */ + @Requires({ liveMode() }) @Unroll def "Download file buffer copy"() { @@ -179,7 +182,7 @@ class FileAsyncAPITests extends APISpec { def fileClient = shareServiceAsyncClient.getShareAsyncClient(shareName) .createFile(filePath, fileSize).block() - def file = FileTestHelper.getRandomFile(fileSize) + def file = getRandomFile(fileSize) fileClient.uploadFromFile(file.toPath().toString()).block() def outFile = new File(testResourceName.randomName(methodName, 60) + ".txt") if (outFile.exists()) { @@ -190,7 +193,7 @@ class FileAsyncAPITests extends APISpec { fileClient.downloadToFile(outFile.toPath().toString()).block() then: - FileTestHelper.compareFiles(file, outFile, 0, fileSize) + compareFiles(file, outFile, 0, fileSize) cleanup: shareServiceAsyncClient.deleteShare(shareName).block() @@ -216,11 +219,11 @@ class FileAsyncAPITests extends APISpec { then: uploadVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) }.verifyComplete() downloadVerifier.assertNext({ response -> - assert FileTestHelper.assertResponseStatusCode(response, 200) + assert assertResponseStatusCode(response, 200) def headers = response.getDeserializedHeaders() assert headers.getContentLength() == defaultDataLength assert headers.getETag() @@ -252,14 +255,14 @@ class FileAsyncAPITests extends APISpec { then: uploadVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 201) + assert assertResponseStatusCode(it, 201) }.verifyComplete() downloadVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 206) + assert assertResponseStatusCode(it, 206) assert it.getDeserializedHeaders().getContentLength() == defaultDataLength FluxUtil.collectBytesInByteBufferStream(it.getValue()) - .flatMap({ data -> assert data == defaultData.array()}) + .flatMap({ data -> assert data == defaultData.array() }) }.verifyComplete() cleanup: @@ -272,7 +275,7 @@ class FileAsyncAPITests extends APISpec { then: updateDataErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } cleanup: @@ -335,7 +338,7 @@ class FileAsyncAPITests extends APISpec { then: downloadDataErrorVerifier.verifyErrorSatisfies({ - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) }) } @@ -376,7 +379,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeVerifier.assertNext { - FileTestHelper.assertResponseStatusCode(it, 201) + assertResponseStatusCode(it, 201) }.verifyComplete() downloadResponseVerifier.assertNext { @@ -402,7 +405,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeVerifier.assertNext { - FileTestHelper.assertResponseStatusCode(it, 201) + assertResponseStatusCode(it, 201) }.verifyComplete() downloadResponseVerifier.assertNext { @@ -430,7 +433,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeErrorVerifier.verifyErrorSatisfies { - FileTestHelper.assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) } } @@ -446,7 +449,7 @@ class FileAsyncAPITests extends APISpec { then: clearRangeErrorVerifier.verifyErrorSatisfies { - FileTestHelper.assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) + assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE) } cleanup: @@ -492,7 +495,7 @@ class FileAsyncAPITests extends APISpec { uploadFromFileErrorVerifier.verifyErrorSatisfies({ it instanceof NoSuchFileException }) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload and download file exists"() { @@ -516,7 +519,7 @@ class FileAsyncAPITests extends APISpec { downloadToFileErrorVerifier.verifyErrorSatisfies({ it instanceof FileAlreadyExistsException }) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload and download to file does not exist"() { @@ -543,7 +546,7 @@ class FileAsyncAPITests extends APISpec { scanner.close() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload from file lease"() { @@ -551,7 +554,7 @@ class FileAsyncAPITests extends APISpec { primaryFileAsyncClient.create(1024).block() def leaseId = createLeaseClient(primaryFileAsyncClient).acquireLease().block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) when: def verifier = StepVerifier.create(primaryFileAsyncClient.uploadFromFile(uploadFile, new ShareRequestConditions().setLeaseId(leaseId))) @@ -560,7 +563,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload from file lease fail"() { @@ -568,7 +571,7 @@ class FileAsyncAPITests extends APISpec { primaryFileAsyncClient.create(defaultDataLength).block() createLeaseClient(primaryFileAsyncClient).acquireLease().block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) when: @@ -579,7 +582,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Download to file lease"() { @@ -598,7 +601,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Download to file lease fail"() { @@ -616,7 +619,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload range from URL"() { @@ -688,7 +691,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Upload range from URL lease fail"() { @@ -722,7 +725,7 @@ class FileAsyncAPITests extends APISpec { verifier.verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "Start copy"() { @@ -846,7 +849,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.deleteWithResponse()) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 202) + assert assertResponseStatusCode(it, 202) }.verifyComplete() } @@ -856,7 +859,7 @@ class FileAsyncAPITests extends APISpec { then: deleteFileErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) + assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND) } } @@ -868,7 +871,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.deleteWithResponse(new ShareRequestConditions().setLeaseId(leaseId))) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 202) + assert assertResponseStatusCode(it, 202) }.verifyComplete() } @@ -891,7 +894,7 @@ class FileAsyncAPITests extends APISpec { then: getPropertiesVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) assert it.getValue().getETag() assert it.getValue().getLastModified() assert it.getValue().getLastModified() @@ -952,7 +955,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, null)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() assert it.getValue().getSmbProperties().getNtfsFileAttributes() @@ -973,7 +976,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, filePermission)) .assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) assert it.getValue().getSmbProperties() assert it.getValue().getSmbProperties().getFilePermissionKey() assert it.getValue().getSmbProperties().getNtfsFileAttributes() @@ -1015,7 +1018,7 @@ class FileAsyncAPITests extends APISpec { then: setHttpHeaderVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT) } } @@ -1034,7 +1037,7 @@ class FileAsyncAPITests extends APISpec { assert testMetadata == it.getMetadata() }.verifyComplete() setPropertiesVerifier.assertNext { - assert FileTestHelper.assertResponseStatusCode(it, 200) + assert assertResponseStatusCode(it, 200) }.verifyComplete() getPropertiesAfterVerifier.assertNext { assert updatedMetadata == it.getMetadata() @@ -1051,7 +1054,7 @@ class FileAsyncAPITests extends APISpec { then: setMetadataErrorVerifier.verifyErrorSatisfies { - assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.EMPTY_METADATA_KEY) + assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.EMPTY_METADATA_KEY) } } @@ -1087,7 +1090,7 @@ class FileAsyncAPITests extends APISpec { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() expect: @@ -1098,14 +1101,14 @@ class FileAsyncAPITests extends APISpec { }.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges with range"() { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() expect: @@ -1116,14 +1119,14 @@ class FileAsyncAPITests extends APISpec { }.verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges lease"() { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() def leaseId = createLeaseClient(primaryFileAsyncClient).acquireLease().block() @@ -1132,14 +1135,14 @@ class FileAsyncAPITests extends APISpec { .expectNextCount(1).verifyComplete() cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) } def "List ranges lease fail"() { given: primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block() def fileName = testResourceName.randomName("file", 60) - def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName) + def uploadFile = createRandomFileWithLength(1024, testFolder, fileName) primaryFileAsyncClient.uploadFromFile(uploadFile).block() createLeaseClient(primaryFileAsyncClient).acquireLease().block() @@ -1148,7 +1151,60 @@ class FileAsyncAPITests extends APISpec { .verifyError(ShareStorageException) cleanup: - FileTestHelper.deleteFilesIfExists(testFolder.getPath()) + deleteFilesIfExists(testFolder.getPath()) + } + + @Unroll + def "List ranges diff"() { + setup: + def snapshotId = primaryFileAsyncClient.create(4 * Constants.MB) + .then(primaryFileAsyncClient.upload(Flux.just(getRandomByteBuffer(4 * Constants.MB)), 4 * Constants.MB)) + .then(primaryFileServiceAsyncClient.getShareAsyncClient(primaryFileAsyncClient.getShareName()) + .createSnapshot() + .map({ it.getSnapshot() })) + .block() + + Flux.fromIterable(rangesToUpdate) + .flatMap({ + def size = it.getEnd() - it.getStart() + 1 + primaryFileAsyncClient.uploadWithResponse(Flux.just(getRandomByteBuffer((int) size)), size, it.getStart()) + }).blockLast() + + Flux.fromIterable(rangesToClear) + .flatMap({ + primaryFileAsyncClient.clearRangeWithResponse(it.getEnd() - it.getStart() + 1, it.getStart()) + }) + .blockLast() + + expect: + StepVerifier.create(primaryFileAsyncClient.listRangesDiff(snapshotId)) + .assertNext({ + it.getRanges().size() == expectedRanges.size() + it.getClearRanges().size() == expectedClearRanges.size() + + for (def i = 0; i < expectedRanges.size(); i++) { + def actualRange = it.getRanges().get(i) + def expectedRange = expectedRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + + for (def i = 0; i < expectedClearRanges.size(); i++) { + def actualRange = it.getClearRanges().get(i) + def expectedRange = expectedClearRanges.get(i) + expectedRange.getStart() == actualRange.getStart() + expectedRange.getEnd() == actualRange.getEnd() + } + }) + .verifyComplete() + + where: + rangesToUpdate | rangesToClear | expectedRanges | expectedClearRanges + createFileRanges() | createFileRanges() | createFileRanges() | createClearRanges() + createFileRanges(0, 511) | createFileRanges() | createFileRanges(0, 511) | createClearRanges() + createFileRanges() | createFileRanges(0, 511) | createFileRanges() | createClearRanges(0, 511) + createFileRanges(0, 511) | createFileRanges(512, 1023) | createFileRanges(0, 511) | createClearRanges(512, 1023) + createFileRanges(0, 511, 1024, 1535) | createFileRanges(512, 1023, 1536, 2047) | createFileRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047) } def "List handles"() { @@ -1187,7 +1243,7 @@ class FileAsyncAPITests extends APISpec { expect: StepVerifier.create(primaryFileAsyncClient.forceCloseHandle("invalidHandleId")) - .verifyErrorSatisfies({ it instanceof ShareStorageException }) + .verifyErrorSatisfies({ it instanceof ShareStorageException }) } def "Force close all handles min"() { diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy index db4f916cabce..a2cb7721d1ab 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy @@ -4,8 +4,11 @@ package com.azure.storage.file.share import com.azure.core.http.rest.Response +import com.azure.core.util.CoreUtils import com.azure.core.util.logging.ClientLogger import com.azure.storage.common.implementation.Constants +import com.azure.storage.file.share.models.ClearRange +import com.azure.storage.file.share.models.FileRange import com.azure.storage.file.share.models.ShareCorsRule import com.azure.storage.file.share.models.ShareErrorCode import com.azure.storage.file.share.models.ShareItem @@ -14,6 +17,7 @@ import com.azure.storage.file.share.models.ShareRetentionPolicy import com.azure.storage.file.share.models.ShareServiceProperties import com.azure.storage.file.share.models.ShareStorageException +import java.nio.ByteBuffer import java.nio.file.Files import java.nio.file.Path @@ -178,6 +182,10 @@ class FileTestHelper { return file } + static ByteBuffer getRandomByteBuffer(int length) { + return ByteBuffer.wrap(getRandomBuffer(length)) + } + // TODO : Move this into a common package test class? static byte[] getRandomBuffer(int length) { final Random randGenerator = new Random() @@ -219,4 +227,32 @@ class FileTestHelper { stream2.close() } } + + static def createFileRanges(long ... offsets) { + def fileRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return fileRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + fileRanges.add(new FileRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return fileRanges + } + + static def createClearRanges(long ... offsets) { + def clearRanges = [] as List + + if (CoreUtils.isNullOrEmpty(offsets)) { + return clearRanges + } + + for (def i = 0; i < offsets.length / 2; i++) { + clearRanges.add(new ClearRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1])) + } + + return clearRanges + } } diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy index cb45eabd81d9..c66d1f7b520a 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/ShareAPITests.groovy @@ -24,7 +24,7 @@ import com.azure.storage.file.share.options.ShareGetStatisticsOptions import com.azure.storage.file.share.options.ShareSetAccessPolicyOptions import com.azure.storage.file.share.options.ShareSetPropertiesOptions import com.azure.storage.file.share.options.ShareSetMetadataOptions - +import spock.lang.Requires import spock.lang.Unroll import java.time.LocalDateTime @@ -236,6 +236,7 @@ class ShareAPITests extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Delete share lease"() { setup: primaryShareClient.create() @@ -245,6 +246,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(primaryShareClient.deleteWithResponse(new ShareDeleteOptions().setRequestConditions(new ShareRequestConditions().setLeaseId(leaseID)), null, null), 202) } + @Requires( { playbackMode() } ) def "Delete share lease error"() { setup: primaryShareClient.create() @@ -279,6 +281,7 @@ class ShareAPITests extends APISpec { getPropertiesResponse.getValue().getQuota() == 1 } + @Requires( { playbackMode() } ) def "Get properties lease"() { setup: primaryShareClient.create() @@ -288,6 +291,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(primaryShareClient.getPropertiesWithResponse(new ShareGetPropertiesOptions().setRequestConditions(new ShareRequestConditions().setLeaseId(leaseID)),null, null), 200) } + @Requires( { playbackMode() } ) def "Get properties lease error"() { setup: primaryShareClient.create() @@ -381,6 +385,7 @@ class ShareAPITests extends APISpec { id1.getAccessPolicy().getPermissions() == identifier2.getAccessPolicy().getPermissions() } + @Requires( { playbackMode() } ) def "Set access policy lease"() { setup: primaryShareClient.create() @@ -390,6 +395,7 @@ class ShareAPITests extends APISpec { primaryShareClient.setAccessPolicyWithResponse(new ShareSetAccessPolicyOptions().setRequestConditions(new ShareRequestConditions().setLeaseId(leaseID)), null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Set access policy lease error"() { setup: primaryShareClient.create() @@ -434,6 +440,7 @@ class ShareAPITests extends APISpec { id.getAccessPolicy().getPermissions() == identifier.getAccessPolicy().getPermissions() } + @Requires( { playbackMode() } ) def "Get access policy lease"() { setup: primaryShareClient.create() @@ -446,6 +453,7 @@ class ShareAPITests extends APISpec { !response.iterator().hasNext() } + @Requires( { playbackMode() } ) def "Get access policy lease error"() { setup: primaryShareClient.create() @@ -501,6 +509,7 @@ class ShareAPITests extends APISpec { getAccessTierAfterResponse.getAccessTierTransitionState() == "pending-from-hot" } + @Requires( { playbackMode() } ) def "Set properties lease"() { given: primaryShareClient.createWithResponse(new ShareCreateOptions().setAccessTier(ShareAccessTier.HOT), null, null) @@ -514,6 +523,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(setAccessTierResponse, 200) } + @Requires( { playbackMode() } ) def "Set properties lease error"() { given: primaryShareClient.createWithResponse(new ShareCreateOptions().setAccessTier(ShareAccessTier.HOT), null, null) @@ -551,6 +561,7 @@ class ShareAPITests extends APISpec { metadataAfterSet == getMetadataAfterResponse.getMetadata() } + @Requires( { playbackMode() } ) def "Set metadata lease"() { given: primaryShareClient.createWithResponse(null, 1, null, null) @@ -563,6 +574,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(resp, 200) } + @Requires( { playbackMode() } ) def "Set metadata lease error"() { given: primaryShareClient.createWithResponse(null, 1, null, null) @@ -607,6 +619,7 @@ class ShareAPITests extends APISpec { (long) 3 * Constants.GB || 3 } + @Requires( { playbackMode() } ) def "Get statistics lease"() { setup: primaryShareClient.create() @@ -619,6 +632,7 @@ class ShareAPITests extends APISpec { FileTestHelper.assertResponseStatusCode(resp, 200) } + @Requires( { playbackMode() } ) def "Get statistics lease error"() { setup: primaryShareClient.create() diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy index 6d973daf52ad..d68c70a53786 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/specialized/LeaseAPITest.groovy @@ -11,6 +11,7 @@ import com.azure.storage.file.share.models.LeaseStateType import com.azure.storage.file.share.models.ShareStorageException import com.azure.storage.file.share.options.ShareAcquireLeaseOptions import com.azure.storage.file.share.options.ShareBreakLeaseOptions +import spock.lang.Requires import spock.lang.Unroll import java.time.Duration @@ -159,6 +160,7 @@ class LeaseAPITest extends APISpec { } @Unroll + @Requires( { playbackMode() } ) def "Acquire share lease"() { setup: def leaseResponse = createLeaseClient(shareClient, proposedID).acquireLeaseWithResponse(new ShareAcquireLeaseOptions().setDuration(leaseTime), null, null) @@ -179,11 +181,13 @@ class LeaseAPITest extends APISpec { UUID.randomUUID().toString() | -1 || LeaseStateType.LEASED | LeaseDurationType.INFINITE } + @Requires( { playbackMode() } ) def "Acquire share lease min"() { expect: createLeaseClient(shareClient).acquireLeaseWithResponse(null, null, null).getStatusCode() == 201 } + @Requires( { playbackMode() } ) def "Acquire share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -197,6 +201,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, resp.getValue()).releaseLeaseWithResponse(null, null) } + @Requires( { playbackMode() } ) def "Acquire share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -210,6 +215,7 @@ class LeaseAPITest extends APISpec { } @Unroll + @Requires( { playbackMode() } ) def "Acquire share lease duration fail"() { setup: def leaseClient = createLeaseClient(shareClient) @@ -227,6 +233,7 @@ class LeaseAPITest extends APISpec { 70 | _ } + @Requires( { playbackMode() } ) def "Acquire share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -238,6 +245,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Renew share lease"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -251,6 +259,7 @@ class LeaseAPITest extends APISpec { validateBasicHeaders(renewLeaseResponse.getHeaders()) } + @Requires( { playbackMode() } ) def "Renew share lease min"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -259,6 +268,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).renewLeaseWithResponse(null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Renew share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -273,6 +283,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, resp.getValue()).releaseLeaseWithResponse(null, null) } + @Requires( { playbackMode() } ) def "Renew share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -285,6 +296,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Renew share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -296,6 +308,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Release share lease"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -307,6 +320,7 @@ class LeaseAPITest extends APISpec { validateBasicHeaders(releaseLeaseResponse.getHeaders()) } + @Requires( { playbackMode() } ) def "Release share lease min"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -315,6 +329,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).releaseLeaseWithResponse(null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Release share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -325,6 +340,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).releaseLeaseWithResponse(null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Release share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -337,6 +353,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Release share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -349,6 +366,7 @@ class LeaseAPITest extends APISpec { } @Unroll + @Requires( { playbackMode() } ) def "Break share lease"() { setup: def leaseClient = createLeaseClient(shareClient, getRandomUUID()) @@ -374,6 +392,7 @@ class LeaseAPITest extends APISpec { } + @Requires( { playbackMode() } ) def "Break share lease min"() { setup: setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -382,6 +401,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient).breakLeaseWithResponse(new ShareBreakLeaseOptions(), null, null).getStatusCode() == 202 } + @Requires( { playbackMode() } ) def "Break share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -396,6 +416,7 @@ class LeaseAPITest extends APISpec { } + @Requires( { playbackMode() } ) def "Break share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -408,6 +429,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Break share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() @@ -419,6 +441,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Change share lease"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -431,6 +454,7 @@ class LeaseAPITest extends APISpec { validateBasicHeaders(changeLeaseResponse.getHeaders()) } + @Requires( { playbackMode() } ) def "Change share lease min"() { setup: def leaseID = setupShareLeaseCondition(shareClient, receivedLeaseID) @@ -439,6 +463,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, leaseID).changeLeaseWithResponse(getRandomUUID(), null, null).getStatusCode() == 200 } + @Requires( { playbackMode() } ) def "Change share lease snapshot"() { setup: def shareSnapshot = shareClient.createSnapshot().getSnapshot() @@ -453,6 +478,7 @@ class LeaseAPITest extends APISpec { createLeaseClient(shareClient, resp.getValue()).releaseLeaseWithResponse(null, null) } + @Requires( { playbackMode() } ) def "Change share lease snapshot fail"() { setup: def shareSnapshot = "2020-08-19T19:26:08.0000000Z" @@ -465,6 +491,7 @@ class LeaseAPITest extends APISpec { thrown(ShareStorageException) } + @Requires( { playbackMode() } ) def "Change share lease error"() { setup: shareClient = shareBuilderHelper(interceptorManager, generateShareName()).buildClient() diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json new file mode 100644 index 000000000000..2a9b960ce33e --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json @@ -0,0 +1,124 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e792dd6c-e987-4c92-8ab9-2c35df85a857" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ACEBEA2F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd11-601a-0004-1c73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:32 GMT", + "x-ms-client-request-id" : "e792dd6c-e987-4c92-8ab9-2c35df85a857" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a9a5800f-76fc-42f1-8aca-78e61abb4e63" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:33.4561852Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:32 GMT", + "ETag" : "0x8D8778ACEF94C3C", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:33.4561852Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd14-601a-0004-1d73-a9c5f4000000", + "x-ms-client-request-id" : "a9a5800f-76fc-42f1-8aca-78e61abb4e63", + "x-ms-file-last-write-time" : "2020-10-23T19:35:33.4561852Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "fff0abc7-171e-4f96-916c-a8c74df3020f", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD2B9FF6A", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:39 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd16-601a-0004-1e73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:39 GMT", + "x-ms-client-request-id" : "fff0abc7-171e-4f96-916c-a8c74df3020f", + "Content-MD5" : "MgQDh41UFaq3Gg+VfMUSbQ==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7d93098d-f6ad-4720-9977-3dc96a40d2d6" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:35:40.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ACEBEA2F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd1f-601a-0004-2173-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:41 GMT", + "x-ms-client-request-id" : "7d93098d-f6ad-4720-9977-3dc96a40d2d6" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646?prevsharesnapshot=2020-10-23T19%3A35%3A40.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8b8f04f7-a5ce-4724-bcfc-a2146462b5f0" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:39 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:35:42 GMT", + "ETag" : "0x8D8778AD2B9FF6A", + "x-ms-request-id" : "0b80fd23-601a-0004-2373-a9c5f4000000", + "Body" : "", + "x-ms-client-request-id" : "8b8f04f7-a5ce-4724-bcfc-a2146462b5f0", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff0971801727945a710044", "fileapitestslistrangesdiff0917599b270cd1e34646" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json new file mode 100644 index 000000000000..4ad6595fe2f0 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json @@ -0,0 +1,148 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "de075f54-5bc7-4fa6-bb3a-2bc228ce2464" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD4C608C0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd25-601a-0004-2473-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:42 GMT", + "x-ms-client-request-id" : "de075f54-5bc7-4fa6-bb3a-2bc228ce2464" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "24c4bc70-6df9-4b72-827f-f6a9fcb5b92c" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:43.2515840Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:42 GMT", + "ETag" : "0x8D8778AD4CFF500", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:43.2515840Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd27-601a-0004-2573-a9c5f4000000", + "x-ms-client-request-id" : "24c4bc70-6df9-4b72-827f-f6a9fcb5b92c", + "x-ms-file-last-write-time" : "2020-10-23T19:35:43.2515840Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c14e3f84-2e5b-4e92-8c2b-43380fbd0c37", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD85193E9", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd28-601a-0004-2673-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "c14e3f84-2e5b-4e92-8c2b-43380fbd0c37", + "Content-MD5" : "2it+8RrlSjbf0Nji0z53pA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "aff54343-7cf5-418c-80dd-ef48ed6b54cc" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:35:49.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD4C608C0", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd35-601a-0004-2973-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "aff54343-7cf5-418c-80dd-ef48ed6b54cc" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "04eafe15-8807-4305-ab3a-7526ed405c67", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD86807A3", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd38-601a-0004-2a73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "04eafe15-8807-4305-ab3a-7526ed405c67", + "Content-MD5" : "RykPAEIXETChfv9QuDbC+w==" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?prevsharesnapshot=2020-10-23T19%3A35%3A49.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d3918e72-cd22-4d4d-b27d-0e02ff3a0839" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "ETag" : "0x8D8778AD86807A3", + "x-ms-request-id" : "0b80fd39-601a-0004-2b73-a9c5f4000000", + "Body" : "0511", + "x-ms-client-request-id" : "d3918e72-cd22-4d4d-b27d-0e02ff3a0839", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff1319141ec76abaf1be42", "fileapitestslistrangesdiff117588ed300b26df5b41" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json new file mode 100644 index 000000000000..7d794c632bd9 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json @@ -0,0 +1,145 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "fc0d2430-55b1-45ab-83d8-7eb615cbec4e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD888BB85", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd3b-601a-0004-2c73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "x-ms-client-request-id" : "fc0d2430-55b1-45ab-83d8-7eb615cbec4e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "787ce6e1-09cc-411b-affc-7ec6023d4de8" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:49.5606402Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:48 GMT", + "ETag" : "0x8D8778AD892A482", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:49.5606402Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd3d-601a-0004-2d73-a9c5f4000000", + "x-ms-client-request-id" : "787ce6e1-09cc-411b-affc-7ec6023d4de8", + "x-ms-file-last-write-time" : "2020-10-23T19:35:49.5606402Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e981af9c-88a9-41dc-a567-6d95a0d9f832", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC1358D1", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd3e-601a-0004-2e73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "x-ms-client-request-id" : "e981af9c-88a9-41dc-a567-6d95a0d9f832", + "Content-MD5" : "Q2Vj31zCIHQI23xIHDX31g==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a0e97407-e7f1-47f2-b9e0-a51aa0a4b0b1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:35:55.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AD888BB85", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd46-601a-0004-3073-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "x-ms-client-request-id" : "a0e97407-e7f1-47f2-b9e0-a51aa0a4b0b1" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "13312b50-cc36-455b-840b-8a8158780a6e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC32F687", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd48-601a-0004-3273-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "x-ms-client-request-id" : "13312b50-cc36-455b-840b-8a8158780a6e" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?prevsharesnapshot=2020-10-23T19%3A35%3A55.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "3ef484e4-e96a-4ff4-ba44-44bd5dda04d0" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:35:54 GMT", + "ETag" : "0x8D8778ADC32F687", + "x-ms-request-id" : "0b80fd49-601a-0004-3373-a9c5f4000000", + "Body" : "0511", + "x-ms-client-request-id" : "3ef484e4-e96a-4ff4-ba44-44bd5dda04d0", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff2222061495944aac5046", "fileapitestslistrangesdiff208495e147e9cf965f43" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json new file mode 100644 index 000000000000..f2eee160fc07 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json @@ -0,0 +1,169 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d2901544-75a0-44ac-a773-9c5bf9d83790" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC52C39A", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd4b-601a-0004-3473-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:35:55 GMT", + "x-ms-client-request-id" : "d2901544-75a0-44ac-a773-9c5bf9d83790" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7a7a6d53-1c5e-45d6-9e72-494488834d80" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:35:55.9107350Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:35:55 GMT", + "ETag" : "0x8D8778ADC5B9716", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:35:55.9107350Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd4d-601a-0004-3573-a9c5f4000000", + "x-ms-client-request-id" : "7a7a6d53-1c5e-45d6-9e72-494488834d80", + "x-ms-file-last-write-time" : "2020-10-23T19:35:55.9107350Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a30d4c60-9504-48c3-b1d7-c14455bec7b2", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADFD2D337", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd4f-601a-0004-3773-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "a30d4c60-9504-48c3-b1d7-c14455bec7b2", + "Content-MD5" : "ZwbgIHaMJ41wNdywuwKuEA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "334f1d3b-c2a1-48e9-9481-176799ab96ad" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:36:01.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADC52C39A", + "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd5a-601a-0004-3a73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "334f1d3b-c2a1-48e9-9481-176799ab96ad" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "86f54045-0990-4e52-a633-306d33c7398b", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADFF1381B", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd5b-601a-0004-3b73-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "86f54045-0990-4e52-a633-306d33c7398b", + "Content-MD5" : "M8TGtFtK+E9gEf7aAk0TeA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "7a273d3f-8de4-4561-aafd-40cbaecef67e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778ADFF97786", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd5d-601a-0004-3c73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "7a273d3f-8de4-4561-aafd-40cbaecef67e" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?prevsharesnapshot=2020-10-23T19%3A36%3A01.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "2f7e27fd-e9dc-42f8-8b26-69a0ed196df8" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "ETag" : "0x8D8778ADFF97786", + "x-ms-request-id" : "0b80fd5e-601a-0004-3d73-a9c5f4000000", + "Body" : "05115121023", + "x-ms-client-request-id" : "2f7e27fd-e9dc-42f8-8b26-69a0ed196df8", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff3566829989544019f841", "fileapitestslistrangesdiff3860919fba80a59d1941" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json new file mode 100644 index 000000000000..7e3589c88825 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json @@ -0,0 +1,214 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "95a30f0c-ffe4-4e26-8db4-1bec196de3eb" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE01772F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd60-601a-0004-3e73-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "x-ms-client-request-id" : "95a30f0c-ffe4-4e26-8db4-1bec196de3eb" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "45574bf2-bf18-41eb-b26a-6e5dc8626eaf" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:36:02.2688384Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:01 GMT", + "ETag" : "0x8D8778AE025C280", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:36:02.2688384Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "0b80fd62-601a-0004-3f73-a9c5f4000000", + "x-ms-client-request-id" : "45574bf2-bf18-41eb-b26a-6e5dc8626eaf", + "x-ms-file-last-write-time" : "2020-10-23T19:36:02.2688384Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "95109ad8-1c78-4d55-9755-f29e613ddfae", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE390C698", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd63-601a-0004-4073-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "95109ad8-1c78-4d55-9755-f29e613ddfae", + "Content-MD5" : "fn0MIQfr1C2U60ck5C1Fkg==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0fb44088-dc97-4ee8-897b-1481bf3824b7" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:36:08.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE01772F0", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6c-601a-0004-4373-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "0fb44088-dc97-4ee8-897b-1481bf3824b7" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "1114d039-08a9-4928-9397-3b14d67090b6", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3AA6F6E", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6d-601a-0004-4473-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "1114d039-08a9-4928-9397-3b14d67090b6", + "Content-MD5" : "vz7foak6A9Pwv0HjmPKA4w==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0a719f51-38a2-4518-ba0b-275cd18b8eea", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3B17603", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6e-601a-0004-4573-a9c5f4000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "0a719f51-38a2-4518-ba0b-275cd18b8eea", + "Content-MD5" : "psgyztntF/eWt6iDy2Cgbw==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ed7ac37b-a3f6-4bcd-92c6-29a01cf10961" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3B98E52", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd6f-601a-0004-4673-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "ed7ac37b-a3f6-4bcd-92c6-29a01cf10961" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "ba648583-dcec-4f50-a346-3767c8d49f73" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778AE3C094E7", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "0b80fd70-601a-0004-4773-a9c5f4000000", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "x-ms-client-request-id" : "ba648583-dcec-4f50-a346-3767c8d49f73" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?prevsharesnapshot=2020-10-23T19%3A36%3A08.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "3b8f9dd4-6522-4776-8516-e799d6fe1728" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:36:07 GMT", + "ETag" : "0x8D8778AE3C094E7", + "x-ms-request-id" : "0b80fd71-601a-0004-4873-a9c5f4000000", + "Body" : "051151210231024153515362047", + "x-ms-client-request-id" : "3b8f9dd4-6522-4776-8516-e799d6fe1728", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileapitestslistrangesdiff44520981b52588f8394d", "fileapitestslistrangesdiff43708734f80127cef246" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json new file mode 100644 index 000000000000..6983442e406f --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json @@ -0,0 +1,124 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "48d4dccc-5e16-44e4-b2f9-bccba2ee4107" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877895FA5A2FA", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d814-f01a-0023-2372-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:16 GMT", + "x-ms-client-request-id" : "48d4dccc-5e16-44e4-b2f9-bccba2ee4107" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e4356993-57c0-41f4-bc96-41198da234a1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:17.8266993Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:17 GMT", + "ETag" : "0x8D877896007B171", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:17.8266993Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d818-f01a-0023-2472-a95fbd000000", + "x-ms-client-request-id" : "e4356993-57c0-41f4-bc96-41198da234a1", + "x-ms-file-last-write-time" : "2020-10-23T19:25:17.8266993Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "6c24d715-bd62-4511-821b-9b3400f87094", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778963D38AE0", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:24 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d81a-f01a-0023-2572-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:23 GMT", + "x-ms-client-request-id" : "6c24d715-bd62-4511-821b-9b3400f87094", + "Content-MD5" : "el6sFbI5QpqgPcmPL3zvLg==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "57221a69-cb30-42b3-9f80-5c791e0c7645" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:24.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877895FA5A2FA", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d823-f01a-0023-2972-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:23 GMT", + "x-ms-client-request-id" : "57221a69-cb30-42b3-9f80-5c791e0c7645" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e?prevsharesnapshot=2020-10-23T19%3A25%3A24.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0fed3537-9eb5-4303-a5dc-c51453e1bd63" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:24 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:24 GMT", + "ETag" : "0x8D8778963D38AE0", + "Content-Length" : "51", + "x-ms-request-id" : "c6a9d824-f01a-0023-2a72-a95fbd000000", + "Body" : "", + "x-ms-client-request-id" : "0fed3537-9eb5-4303-a5dc-c51453e1bd63", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff027689f25c969f76c", "fileasyncapitestslistrangesdiff0855387618dad0f0e" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json new file mode 100644 index 000000000000..2d41ac60a92a --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json @@ -0,0 +1,148 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "81756ff9-32a2-465a-841b-e0378b8bc5f7" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778964AED1F1", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d827-f01a-0023-2b72-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:25 GMT", + "x-ms-client-request-id" : "81756ff9-32a2-465a-841b-e0378b8bc5f7" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "a3a19d1f-17a1-42be-aa4d-fd2ff56584f2" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:25.7192738Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:25 GMT", + "ETag" : "0x8D8778964BC0122", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:25.7192738Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d829-f01a-0023-2c72-a95fbd000000", + "x-ms-client-request-id" : "a3a19d1f-17a1-42be-aa4d-fd2ff56584f2", + "x-ms-file-last-write-time" : "2020-10-23T19:25:25.7192738Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e6ea8046-b212-4d65-b80e-d459a99e77fe", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896893EB83", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d82a-f01a-0023-2d72-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "x-ms-client-request-id" : "e6ea8046-b212-4d65-b80e-d459a99e77fe", + "Content-MD5" : "qCbPVCEbWSw22ZTay26hzQ==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "16922d1d-0dd1-4d9b-945c-9499778deec1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:32.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778964AED1F1", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d837-f01a-0023-3072-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "x-ms-client-request-id" : "16922d1d-0dd1-4d9b-945c-9499778deec1" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "f56d56c6-73a3-4c8e-93ea-63ef9e708e53", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778968CD5912", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d839-f01a-0023-3172-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "x-ms-client-request-id" : "f56d56c6-73a3-4c8e-93ea-63ef9e708e53", + "Content-MD5" : "UIGBXvZJYGrxPzCcPAXlUg==" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?prevsharesnapshot=2020-10-23T19%3A25%3A32.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "043551a8-10db-48df-9e5e-94cc070cf19e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:31 GMT", + "ETag" : "0x8D8778968CD5912", + "Content-Length" : "103", + "x-ms-request-id" : "c6a9d83a-f01a-0023-3272-a95fbd000000", + "Body" : "0511", + "x-ms-client-request-id" : "043551a8-10db-48df-9e5e-94cc070cf19e", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff109485c713b811a48", "fileasyncapitestslistrangesdiff15159784db21a3643" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json new file mode 100644 index 000000000000..82edb39a3b3b --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json @@ -0,0 +1,145 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d421326c-cf92-40c2-b923-bab1350da7fa" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778968EE8DB4", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d83d-f01a-0023-3472-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:32 GMT", + "x-ms-client-request-id" : "d421326c-cf92-40c2-b923-bab1350da7fa" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "0a20da02-0177-44c3-a3c2-d7a5ec6c1fd1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:32.8671333Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:32 GMT", + "ETag" : "0x8D8778968FEAE65", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:32.8671333Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d840-f01a-0023-3572-a95fbd000000", + "x-ms-client-request-id" : "0a20da02-0177-44c3-a3c2-d7a5ec6c1fd1", + "x-ms-file-last-write-time" : "2020-10-23T19:25:32.8671333Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "24d7064e-3fc8-4a6a-8482-24f0ef3f0cfd", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896C8DBE20", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d841-f01a-0023-3672-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "24d7064e-3fc8-4a6a-8482-24f0ef3f0cfd", + "Content-MD5" : "V3X8GGqXIMZBdjhQfO007Q==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d0470b67-9df7-419c-962d-c4723cdc1472" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:38.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778968EE8DB4", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d847-f01a-0023-3872-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "d0470b67-9df7-419c-962d-c4723cdc1472" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "22d9ecf3-fa72-489c-aeb3-76b28ebe375d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896CA25C98", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d848-f01a-0023-3972-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "22d9ecf3-fa72-489c-aeb3-76b28ebe375d" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?prevsharesnapshot=2020-10-23T19%3A25%3A38.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "c6bb85fa-f34d-4c53-ac75-3a82783171cc" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "ETag" : "0x8D877896CA25C98", + "Content-Length" : "113", + "x-ms-request-id" : "c6a9d849-f01a-0023-3a72-a95fbd000000", + "Body" : "0511", + "x-ms-client-request-id" : "c6bb85fa-f34d-4c53-ac75-3a82783171cc", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff244353c3fd45e11b0", "fileasyncapitestslistrangesdiff236099c4aa0b70d0d" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json new file mode 100644 index 000000000000..9a0bd79879c1 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json @@ -0,0 +1,169 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "df51cc6b-f182-4c29-8b1c-8097a65c8086" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896CC24F09", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d84c-f01a-0023-3c72-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "x-ms-client-request-id" : "df51cc6b-f182-4c29-8b1c-8097a65c8086" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d52ca394-05de-423b-a776-c67ef01bb5c7" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:39.2642730Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:38 GMT", + "ETag" : "0x8D877896CCECEAA", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:39.2642730Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d84e-f01a-0023-3d72-a95fbd000000", + "x-ms-client-request-id" : "d52ca394-05de-423b-a776-c67ef01bb5c7", + "x-ms-file-last-write-time" : "2020-10-23T19:25:39.2642730Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "d849648b-237f-40d0-bf42-cd6ac7838aa7", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970ACADF4", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:45 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d84f-f01a-0023-3e72-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "d849648b-237f-40d0-bf42-cd6ac7838aa7", + "Content-MD5" : "mK+H17R2gJMhDlqjSmcZBA==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "272d000b-53b5-43d2-add7-4caef294f26e" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:45.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877896CC24F09", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d873-f01a-0023-5772-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "272d000b-53b5-43d2-add7-4caef294f26e" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "1dcf079c-0d59-43bb-bb96-6f135590ac48", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970DAF542", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d874-f01a-0023-5872-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "1dcf079c-0d59-43bb-bb96-6f135590ac48", + "Content-MD5" : "o7mDXQ2eBH1fnqg4a1M9jw==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "fb14c38e-0bd1-4454-9359-5fdaf93bd297" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970E222F3", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d875-f01a-0023-5972-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "fb14c38e-0bd1-4454-9359-5fdaf93bd297" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?prevsharesnapshot=2020-10-23T19%3A25%3A45.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "02e376bb-9c1f-4dee-b513-f4a8514ddb57" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "ETag" : "0x8D8778970E222F3", + "Content-Length" : "161", + "x-ms-request-id" : "c6a9d876-f01a-0023-5a72-a95fbd000000", + "Body" : "05115121023", + "x-ms-client-request-id" : "02e376bb-9c1f-4dee-b513-f4a8514ddb57", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff3991527c5b6a0bc2c", "fileasyncapitestslistrangesdiff391949086f13c2af9" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json new file mode 100644 index 000000000000..2fff2a41d7a5 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json @@ -0,0 +1,214 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976?restype=share", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "681d9fe0-83fa-4f40-94be-ffac49a45ed8" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970FE6074", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d878-f01a-0023-5b72-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "x-ms-client-request-id" : "681d9fe0-83fa-4f40-94be-ffac49a45ed8" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "64dc7fc5-3d01-4f7d-be77-8e175d63549c" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2020-10-23T19:25:46.3640874Z", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:45 GMT", + "ETag" : "0x8D87789710A272A", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2020-10-23T19:25:46.3640874Z", + "x-ms-file-parent-id" : "0", + "Content-Length" : "0", + "x-ms-request-id" : "c6a9d87b-f01a-0023-5c72-a95fbd000000", + "x-ms-client-request-id" : "64dc7fc5-3d01-4f7d-be77-8e175d63549c", + "x-ms-file-last-write-time" : "2020-10-23T19:25:46.3640874Z" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e38a2b41-c477-47f4-be0e-2986727d0de8", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87789749ABDDB", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d87c-f01a-0023-5d72-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:51 GMT", + "x-ms-client-request-id" : "e38a2b41-c477-47f4-be0e-2986727d0de8", + "Content-MD5" : "fumkz1IO6/Z3xiWdH4nUTQ==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976?restype=share&comp=snapshot", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "e534b91e-54d0-4d2c-96e8-2ef59b87733d" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "x-ms-snapshot" : "2020-10-23T19:25:52.0000000Z", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778970FE6074", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d889-f01a-0023-6372-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:51 GMT", + "x-ms-client-request-id" : "e534b91e-54d0-4d2c-96e8-2ef59b87733d" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "b5d24903-f55f-44df-8753-54357e94cf2e", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778974B41874", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d88b-f01a-0023-6472-a95fbd000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:51 GMT", + "x-ms-client-request-id" : "b5d24903-f55f-44df-8753-54357e94cf2e", + "Content-MD5" : "jDgJRT9kgYsJHaSBYWcvcg==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "4695b74b-ec1d-4381-8a23-ca3691ad2ddc", + "Content-Type" : "application/octet-stream" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D8778974E25FC3", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "7a93ddd8-201a-00c4-5b72-a94fb0000000", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Oct 2020 19:25:52 GMT", + "x-ms-client-request-id" : "4695b74b-ec1d-4381-8a23-ca3691ad2ddc", + "Content-MD5" : "24qkYSCoEUBF8bVKj/E8Hw==" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8c4eb5a1-6729-4877-8f83-8494b170be09" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D877897508B5DE", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "c6a9d88c-f01a-0023-6572-a95fbd000000", + "Date" : "Fri, 23 Oct 2020 19:25:52 GMT", + "x-ms-client-request-id" : "8c4eb5a1-6729-4877-8f83-8494b170be09" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "8d062fb2-b996-429b-9ee8-9792129417af" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D87789750F9565", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "7a93dddc-201a-00c4-5c72-a94fb0000000", + "Date" : "Fri, 23 Oct 2020 19:25:53 GMT", + "x-ms-client-request-id" : "8d062fb2-b996-429b-9ee8-9792129417af" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?prevsharesnapshot=2020-10-23T19%3A25%3A52.0000000Z&comp=rangelist", + "Headers" : { + "x-ms-version" : "2020-02-10", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)", + "x-ms-client-request-id" : "4d683e83-f918-4161-912b-b3b17a2a27c1" + }, + "Response" : { + "x-ms-version" : "2020-02-10", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-content-length" : "4194304", + "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Oct 2020 19:25:54 GMT", + "ETag" : "0x8D87789750F9565", + "Content-Length" : "269", + "x-ms-request-id" : "7a93ddde-201a-00c4-5d72-a94fb0000000", + "Body" : "051151210231024153515362047", + "x-ms-client-request-id" : "4d683e83-f918-4161-912b-b3b17a2a27c1", + "Content-Type" : "application/xml" + }, + "Exception" : null + } ], + "variables" : [ "fileasyncapitestslistrangesdiff49440340b8d5b2976", "fileasyncapitestslistrangesdiff450097881e6a738e5" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/swagger/README.md b/sdk/storage/azure-storage-file-share/swagger/README.md index 4879103fce26..077465e80907 100644 --- a/sdk/storage/azure-storage-file-share/swagger/README.md +++ b/sdk/storage/azure-storage-file-share/swagger/README.md @@ -857,5 +857,20 @@ directive: delete $["x-ms-parameter-grouping"]; ``` +### Add the ShareFileRangeListDeserializer attribute +``` yaml +directive: +- from: ShareFileRangeList.java + where: $ + transform: > + return $. + replace( + "import com.fasterxml.jackson.annotation.JsonProperty;", + "import com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;"). + replace( + "public final class ShareFileRangeList {", + "@JsonDeserialize(using = ShareFileRangeListDeserializer.class)\npublic final class ShareFileRangeList {"); +``` + ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Fstorage%2Fazure-storage-file-share%2Fswagger%2FREADME.png)