CrackMe.apk
Download file
package com.google.common.collect;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.RandomAccess;
@ElementTypesAreNonnullByDefault
final class SortedLists {
enum KeyAbsentBehavior {
NEXT_LOWER {
/* access modifiers changed from: package-private */
public int resultIndex(int i) {
return i - 1;
}
},
NEXT_HIGHER {
public int resultIndex(int i) {
return i;
}
},
INVERTED_INSERTION_INDEX {
public int resultIndex(int i) {
return ~i;
}
};
/* access modifiers changed from: package-private */
public abstract int resultIndex(int i);
}
enum KeyPresentBehavior {
ANY_PRESENT {
/* access modifiers changed from: package-private */
public <E> int resultIndex(Comparator<? super E> comparator, @ParametricNullness E e, List<? extends E> list, int i) {
return i;
}
},
LAST_PRESENT {
/* access modifiers changed from: package-private */
public <E> int resultIndex(Comparator<? super E> comparator, @ParametricNullness E e, List<? extends E> list, int i) {
int size = list.size() - 1;
while (i < size) {
int i2 = ((i + size) + 1) >>> 1;
if (comparator.compare(list.get(i2), e) > 0) {
size = i2 - 1;
} else {
i = i2;
}
}
return i;
}
},
FIRST_PRESENT {
/* access modifiers changed from: package-private */
public <E> int resultIndex(Comparator<? super E> comparator, @ParametricNullness E e, List<? extends E> list, int i) {
int i2 = 0;
while (i2 < i) {
int i3 = (i2 + i) >>> 1;
if (comparator.compare(list.get(i3), e) < 0) {
i2 = i3 + 1;
} else {
i = i3;
}
}
return i2;
}
},
FIRST_AFTER {
public <E> int resultIndex(Comparator<? super E> comparator, @ParametricNullness E e, List<? extends E> list, int i) {
return LAST_PRESENT.resultIndex(comparator, e, list, i) + 1;
}
},
LAST_BEFORE {
public <E> int resultIndex(Comparator<? super E> comparator, @ParametricNullness E e, List<? extends E> list, int i) {
return FIRST_PRESENT.resultIndex(comparator, e, list, i) - 1;
}
};
/* access modifiers changed from: package-private */
public abstract <E> int resultIndex(Comparator<? super E> comparator, @ParametricNullness E e, List<? extends E> list, int i);
}
private SortedLists() {
}
public static <E extends Comparable> int binarySearch(List<? extends E> list, E e, KeyPresentBehavior keyPresentBehavior, KeyAbsentBehavior keyAbsentBehavior) {
Preconditions.checkNotNull(e);
return binarySearch(list, e, Ordering.natural(), keyPresentBehavior, keyAbsentBehavior);
}
public static <E, K extends Comparable> int binarySearch(List<E> list, Function<? super E, K> function, K k, KeyPresentBehavior keyPresentBehavior, KeyAbsentBehavior keyAbsentBehavior) {
Preconditions.checkNotNull(k);
return binarySearch(list, function, k, Ordering.natural(), keyPresentBehavior, keyAbsentBehavior);
}
public static <E, K> int binarySearch(List<E> list, Function<? super E, K> function, @ParametricNullness K k, Comparator<? super K> comparator, KeyPresentBehavior keyPresentBehavior, KeyAbsentBehavior keyAbsentBehavior) {
return binarySearch(Lists.transform(list, function), k, comparator, keyPresentBehavior, keyAbsentBehavior);
}
public static <E> int binarySearch(List<? extends E> list, @ParametricNullness E e, Comparator<? super E> comparator, KeyPresentBehavior keyPresentBehavior, KeyAbsentBehavior keyAbsentBehavior) {
Preconditions.checkNotNull(comparator);
Preconditions.checkNotNull(list);
Preconditions.checkNotNull(keyPresentBehavior);
Preconditions.checkNotNull(keyAbsentBehavior);
boolean z = list instanceof RandomAccess;
ArrayList<? extends E> arrayList = list;
if (!z) {
arrayList = Lists.newArrayList(list);
}
int i = 0;
int size = arrayList.size() - 1;
while (i <= size) {
int i2 = (i + size) >>> 1;
int compare = comparator.compare(e, arrayList.get(i2));
if (compare < 0) {
size = i2 - 1;
} else if (compare <= 0) {
return i + keyPresentBehavior.resultIndex(comparator, e, arrayList.subList(i, size + 1), i2 - i);
} else {
i = i2 + 1;
}
}
return keyAbsentBehavior.resultIndex(i);
}
}
Download file