/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
public class Sums {
  public int sum(int a) {
    return a;
  }

  public int sum(int a1, int a2) {
    return a1 + a2;
  }

  public int sum(int a1, int a2, int a3) {
    return a1 + a2 + a3;
  }

  public int sum(int a1, int a2, int a3, int a4) {
    return a1 + a2 + a3 + a4;
  }

  public int sum(int a1, int a2, int a3, int a4, int a5) {
    return a1 + a2 + a3 + a4 + a5;
  }

  public int sum(int a1, int a2, int a3, int a4, int a5, int a6) {
    return a1 + a2 + a3 + a4 + a5 + a6;
  }

  public int sum(int a1, int a2, int a3, int a4, int a5, int a6, int a7) {
    return a1 + a2 + a3 + a4 + a5 + a6 + a7;
  }

  public int sum(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
    return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8;
  }

  public int sum(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9) {
    return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9;
  }

  public int sum(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9,
                 int a10) {
    return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10;
  }

  public long sum(int a1, long a2) {
    return a1 + a2;
  }

  public long sum(int a1, long a2, int a3, long a4) {
    return a1 + a2 + a3 + a4;
  }

  public long sum(int a1, long a2, int a3, long a4, int a5, long a6) {
    return a1 + a2 + a3 + a4 + a5 + a6;
  }

  public long sum(int a1, long a2, int a3, long a4, int a5, long a6, int a7, long a8) {
    return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8;
  }

  public long sum(int a1, long a2, int a3, long a4, int a5, long a6, int a7, long a8, int a9,
                  long a10) {
    return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10;
  }
}
