CrackMe.apk
Download file
package kotlin.reflect.jvm.internal.impl.protobuf;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.NoSuchElementException;
import kotlin.reflect.jvm.internal.impl.protobuf.ByteString;
class LiteralByteString extends ByteString {
protected final byte[] bytes;
private int hash = 0;
/* access modifiers changed from: protected */
public int getOffsetIntoBytes() {
return 0;
}
/* access modifiers changed from: protected */
public int getTreeDepth() {
return 0;
}
/* access modifiers changed from: protected */
public boolean isBalanced() {
return true;
}
LiteralByteString(byte[] bArr) {
this.bytes = bArr;
}
public byte byteAt(int i) {
return this.bytes[i];
}
public int size() {
return this.bytes.length;
}
/* access modifiers changed from: protected */
public void copyToInternal(byte[] bArr, int i, int i2, int i3) {
System.arraycopy(this.bytes, i, bArr, i2, i3);
}
/* access modifiers changed from: package-private */
public void writeToInternal(OutputStream outputStream, int i, int i2) throws IOException {
outputStream.write(this.bytes, getOffsetIntoBytes() + i, i2);
}
public String toString(String str) throws UnsupportedEncodingException {
return new String(this.bytes, getOffsetIntoBytes(), size(), str);
}
public boolean isValidUtf8() {
int offsetIntoBytes = getOffsetIntoBytes();
return Utf8.isValidUtf8(this.bytes, offsetIntoBytes, size() + offsetIntoBytes);
}
/* access modifiers changed from: protected */
public int partialIsValidUtf8(int i, int i2, int i3) {
int offsetIntoBytes = getOffsetIntoBytes() + i2;
return Utf8.partialIsValidUtf8(i, this.bytes, offsetIntoBytes, i3 + offsetIntoBytes);
}
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof ByteString) || size() != ((ByteString) obj).size()) {
return false;
}
if (size() == 0) {
return true;
}
if (obj instanceof LiteralByteString) {
return equalsRange((LiteralByteString) obj, 0, size());
}
if (obj instanceof RopeByteString) {
return obj.equals(this);
}
String valueOf = String.valueOf(String.valueOf(obj.getClass()));
StringBuilder sb = new StringBuilder(valueOf.length() + 49);
sb.append("Has a new type of ByteString been created? Found ");
sb.append(valueOf);
throw new IllegalArgumentException(sb.toString());
}
/* access modifiers changed from: package-private */
public boolean equalsRange(LiteralByteString literalByteString, int i, int i2) {
if (i2 > literalByteString.size()) {
int size = size();
StringBuilder sb = new StringBuilder(40);
sb.append("Length too large: ");
sb.append(i2);
sb.append(size);
throw new IllegalArgumentException(sb.toString());
} else if (i + i2 <= literalByteString.size()) {
byte[] bArr = this.bytes;
byte[] bArr2 = literalByteString.bytes;
int offsetIntoBytes = getOffsetIntoBytes() + i2;
int offsetIntoBytes2 = getOffsetIntoBytes();
int offsetIntoBytes3 = literalByteString.getOffsetIntoBytes() + i;
while (offsetIntoBytes2 < offsetIntoBytes) {
if (bArr[offsetIntoBytes2] != bArr2[offsetIntoBytes3]) {
return false;
}
offsetIntoBytes2++;
offsetIntoBytes3++;
}
return true;
} else {
int size2 = literalByteString.size();
StringBuilder sb2 = new StringBuilder(59);
sb2.append("Ran off end of other: ");
sb2.append(i);
sb2.append(", ");
sb2.append(i2);
sb2.append(", ");
sb2.append(size2);
throw new IllegalArgumentException(sb2.toString());
}
}
public int hashCode() {
int i = this.hash;
if (i == 0) {
int size = size();
i = partialHash(size, 0, size);
if (i == 0) {
i = 1;
}
this.hash = i;
}
return i;
}
/* access modifiers changed from: protected */
public int peekCachedHashCode() {
return this.hash;
}
/* access modifiers changed from: protected */
public int partialHash(int i, int i2, int i3) {
return hashCode(i, this.bytes, getOffsetIntoBytes() + i2, i3);
}
static int hashCode(int i, byte[] bArr, int i2, int i3) {
for (int i4 = i2; i4 < i2 + i3; i4++) {
i = (i * 31) + bArr[i4];
}
return i;
}
public CodedInputStream newCodedInput() {
return CodedInputStream.newInstance(this);
}
public ByteString.ByteIterator iterator() {
return new LiteralByteIterator();
}
private class LiteralByteIterator implements ByteString.ByteIterator {
private final int limit;
private int position;
private LiteralByteIterator() {
this.position = 0;
this.limit = LiteralByteString.this.size();
}
public boolean hasNext() {
return this.position < this.limit;
}
public Byte next() {
return Byte.valueOf(nextByte());
}
public byte nextByte() {
try {
byte[] bArr = LiteralByteString.this.bytes;
int i = this.position;
this.position = i + 1;
return bArr[i];
} catch (ArrayIndexOutOfBoundsException e) {
throw new NoSuchElementException(e.getMessage());
}
}
public void remove() {
throw new UnsupportedOperationException();
}
}
}
Download file