Fix base64/binary access
diff --git a/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java b/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
index 0da1653..b810a21 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
@@ -479,7 +479,7 @@
         }
         return 0;
     }
-    
+
     @Override
     public byte[] getBinaryValue(Base64Variant b64variant) throws IOException
     {
@@ -3566,7 +3566,6 @@
     {
         ByteArrayBuilder builder = _getByteArrayBuilder();
 
-        //main_loop:
         while (true) {
             // first, we'll skip preceding white space, if any
             int ch;
diff --git a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java
index b718b09..29626b3 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.java
@@ -7,6 +7,7 @@
 import com.fasterxml.jackson.core.io.IOContext;
 import com.fasterxml.jackson.core.json.JsonReadContext;
 import com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer;
+import com.fasterxml.jackson.core.util.ByteArrayBuilder;
 
 import static com.fasterxml.jackson.core.JsonTokenId.*;
 
@@ -437,13 +438,28 @@
     @Override
     public byte[] getBinaryValue(Base64Variant b64variant) throws IOException
     {
-        if (_currToken != JsonToken.VALUE_EMBEDDED_OBJECT ) {
-            _reportError("Current token (%s) not VALUE_EMBEDDED_OBJECT, can not access as binary", _currToken);
+        if (_currToken != JsonToken.VALUE_STRING) {
+            _reportError("Current token (%s) not VALUE_STRING or VALUE_EMBEDDED_OBJECT, can not access as binary",
+                    _currToken);
+        }
+        if (_binaryValue == null) {
+            @SuppressWarnings("resource")
+            ByteArrayBuilder builder = _getByteArrayBuilder();
+            _decodeBase64(getText(), builder, b64variant);
+            _binaryValue = builder.toByteArray();
         }
         return _binaryValue;
     }
 
     @Override
+    public int readBinaryValue(Base64Variant b64variant, OutputStream out) throws IOException
+    {
+        byte[] b = getBinaryValue(b64variant);
+        out.write(b);
+        return b.length;
+    }
+
+    @Override
     public Object getEmbeddedObject() throws IOException
     {
         if (_currToken == JsonToken.VALUE_EMBEDDED_OBJECT ) {
@@ -452,16 +468,6 @@
         return null;
     }
 
-    @Override
-    public int readBinaryValue(Base64Variant b64variant, OutputStream out)
-            throws IOException {
-        if (_currToken != JsonToken.VALUE_EMBEDDED_OBJECT ) {
-            _reportError("Current token (%s) not VALUE_EMBEDDED_OBJECT, can not access as binary", _currToken);
-        }
-        out.write(_binaryValue);
-        return _binaryValue.length;
-    }
-
     /*
     /**********************************************************************
     /* Handling of nested scope, state
diff --git a/src/test/java/com/fasterxml/jackson/failing/async/AsyncBinaryParseTest.java b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncBinaryParseTest.java
similarity index 92%
rename from src/test/java/com/fasterxml/jackson/failing/async/AsyncBinaryParseTest.java
rename to src/test/java/com/fasterxml/jackson/core/json/async/AsyncBinaryParseTest.java
index e84a2e3..4ce01d2 100644
--- a/src/test/java/com/fasterxml/jackson/failing/async/AsyncBinaryParseTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/async/AsyncBinaryParseTest.java
@@ -1,4 +1,4 @@
-package com.fasterxml.jackson.failing.async;
+package com.fasterxml.jackson.core.json.async;
 
 import java.io.*;
 
@@ -72,8 +72,9 @@
 
             // and verify
             AsyncReaderWrapper p = asyncForBytes(f, readSize, smile, offset);
-            
-            assertToken(JsonToken.VALUE_EMBEDDED_OBJECT, p.nextToken());
+
+            // JSON has no native binary type so
+            assertToken(JsonToken.VALUE_STRING, p.nextToken());
             byte[] result = p.getBinaryValue();
             assertArrayEquals(binary, result);
             assertNull(p.nextToken());
@@ -81,7 +82,7 @@
 
             // and second time around, skipping
             p = asyncForBytes(f, readSize, smile, offset);
-            assertToken(JsonToken.VALUE_EMBEDDED_OBJECT, p.nextToken());
+            assertToken(JsonToken.VALUE_STRING, p.nextToken());
             assertNull(p.nextToken());
             p.close();
         }
@@ -103,7 +104,7 @@
             // and verify
             AsyncReaderWrapper p = asyncForBytes(f, readSize, smile, offset);
             assertToken(JsonToken.START_ARRAY, p.nextToken());
-            assertToken(JsonToken.VALUE_EMBEDDED_OBJECT, p.nextToken());
+            assertToken(JsonToken.VALUE_STRING, p.nextToken());
 
             byte[] result = p.getBinaryValue();
 
@@ -117,7 +118,7 @@
             // and second time around, skipping
             p = asyncForBytes(f, readSize, smile, offset);
             assertToken(JsonToken.START_ARRAY, p.nextToken());
-            assertToken(JsonToken.VALUE_EMBEDDED_OBJECT, p.nextToken());
+            assertToken(JsonToken.VALUE_STRING, p.nextToken());
             assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
             assertToken(JsonToken.END_ARRAY, p.nextToken());
             assertNull(p.nextToken());
@@ -143,7 +144,7 @@
 
             assertToken(JsonToken.FIELD_NAME, p.nextToken());
             assertEquals("binary", p.currentName());
-            assertToken(JsonToken.VALUE_EMBEDDED_OBJECT, p.nextToken());
+            assertToken(JsonToken.VALUE_STRING, p.nextToken());
             byte[] result = p.getBinaryValue();
             assertArrayEquals(data, result);
 
@@ -160,7 +161,7 @@
             p = asyncForBytes(f, readSize, smile, offset);
             assertToken(JsonToken.START_OBJECT, p.nextToken());
             assertToken(JsonToken.FIELD_NAME, p.nextToken());
-            assertToken(JsonToken.VALUE_EMBEDDED_OBJECT, p.nextToken());
+            assertToken(JsonToken.VALUE_STRING, p.nextToken());
             assertToken(JsonToken.END_OBJECT, p.nextToken());
             assertNull(p.nextToken());
             p.close();