// Generated by `RayCallGenerator.java`. DO NOT EDIT.

package io.ray.api;

import io.ray.api.call.ActorCreator;
import io.ray.api.call.CppActorCreator;
import io.ray.api.call.CppTaskCaller;
import io.ray.api.call.PyActorCreator;
import io.ray.api.call.PyTaskCaller;
import io.ray.api.call.TaskCaller;
import io.ray.api.call.VoidTaskCaller;
import io.ray.api.function.CppActorClass;
import io.ray.api.function.CppFunction;
import io.ray.api.function.PyActorClass;
import io.ray.api.function.PyFunction;
import io.ray.api.function.RayFunc0;
import io.ray.api.function.RayFunc1;
import io.ray.api.function.RayFunc2;
import io.ray.api.function.RayFunc3;
import io.ray.api.function.RayFunc4;
import io.ray.api.function.RayFunc5;
import io.ray.api.function.RayFunc6;
import io.ray.api.function.RayFuncVoid0;
import io.ray.api.function.RayFuncVoid1;
import io.ray.api.function.RayFuncVoid2;
import io.ray.api.function.RayFuncVoid3;
import io.ray.api.function.RayFuncVoid4;
import io.ray.api.function.RayFuncVoid5;
import io.ray.api.function.RayFuncVoid6;

/**
 * This class provides type-safe interfaces for `Ray.call` and `Ray.createActor`.
 **/
class RayCall {
  // =======================================
  // Methods for remote function invocation.
  // =======================================
  public static <R> TaskCaller<R> task(RayFunc0<R> f) {
    Object[] args = new Object[]{};
    return new TaskCaller<>(f, args);
  }

  public static VoidTaskCaller task(RayFuncVoid0 f) {
    Object[] args = new Object[]{};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, R> TaskCaller<R> task(RayFunc1<T0, R> f, T0 t0) {
    Object[] args = new Object[]{t0};
    return new TaskCaller<>(f, args);
  }

  public static <T0, R> TaskCaller<R> task(RayFunc1<T0, R> f, ObjectRef<T0> t0) {
    Object[] args = new Object[]{t0};
    return new TaskCaller<>(f, args);
  }

  public static <T0> VoidTaskCaller task(RayFuncVoid1<T0> f, T0 t0) {
    Object[] args = new Object[]{t0};
    return new VoidTaskCaller(f, args);
  }

  public static <T0> VoidTaskCaller task(RayFuncVoid1<T0> f, ObjectRef<T0> t0) {
    Object[] args = new Object[]{t0};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, R> TaskCaller<R> task(RayFunc2<T0, T1, R> f, T0 t0, T1 t1) {
    Object[] args = new Object[]{t0, t1};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, R> TaskCaller<R> task(RayFunc2<T0, T1, R> f, T0 t0, ObjectRef<T1> t1) {
    Object[] args = new Object[]{t0, t1};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, R> TaskCaller<R> task(RayFunc2<T0, T1, R> f, ObjectRef<T0> t0, T1 t1) {
    Object[] args = new Object[]{t0, t1};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, R> TaskCaller<R> task(RayFunc2<T0, T1, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1) {
    Object[] args = new Object[]{t0, t1};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1> VoidTaskCaller task(RayFuncVoid2<T0, T1> f, T0 t0, T1 t1) {
    Object[] args = new Object[]{t0, t1};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1> VoidTaskCaller task(RayFuncVoid2<T0, T1> f, T0 t0, ObjectRef<T1> t1) {
    Object[] args = new Object[]{t0, t1};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1> VoidTaskCaller task(RayFuncVoid2<T0, T1> f, ObjectRef<T0> t0, T1 t1) {
    Object[] args = new Object[]{t0, t1};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1> VoidTaskCaller task(RayFuncVoid2<T0, T1> f, ObjectRef<T0> t0, ObjectRef<T1> t1) {
    Object[] args = new Object[]{t0, t1};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, T0 t0, T1 t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, T0 t0, T1 t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, T0 t0, ObjectRef<T1> t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, ObjectRef<T0> t0, T1 t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, R> TaskCaller<R> task(RayFunc3<T0, T1, T2, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, T0 t0, T1 t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, T0 t0, T1 t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, T0 t0, ObjectRef<T1> t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, ObjectRef<T0> t0, T1 t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2> VoidTaskCaller task(RayFuncVoid3<T0, T1, T2> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, T1 t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, R> TaskCaller<R> task(RayFunc4<T0, T1, T2, T3, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, T1 t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3> VoidTaskCaller task(RayFuncVoid4<T0, T1, T2, T3> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, R> TaskCaller<R> task(RayFunc5<T0, T1, T2, T3, T4, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4> VoidTaskCaller task(RayFuncVoid5<T0, T1, T2, T3, T4> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, R> TaskCaller<R> task(RayFunc6<T0, T1, T2, T3, T4, T5, R> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new TaskCaller<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5> VoidTaskCaller task(RayFuncVoid6<T0, T1, T2, T3, T4, T5> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new VoidTaskCaller(f, args);
  }

  // ===========================
  // Methods for actor creation.
  // ===========================
  public static <A> ActorCreator<A> actor(RayFunc0<A> f) {
    Object[] args = new Object[]{};
    return new ActorCreator<>(f, args);
  }

  public static <T0, A> ActorCreator<A> actor(RayFunc1<T0, A> f, T0 t0) {
    Object[] args = new Object[]{t0};
    return new ActorCreator<>(f, args);
  }

  public static <T0, A> ActorCreator<A> actor(RayFunc1<T0, A> f, ObjectRef<T0> t0) {
    Object[] args = new Object[]{t0};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, A> ActorCreator<A> actor(RayFunc2<T0, T1, A> f, T0 t0, T1 t1) {
    Object[] args = new Object[]{t0, t1};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, A> ActorCreator<A> actor(RayFunc2<T0, T1, A> f, T0 t0, ObjectRef<T1> t1) {
    Object[] args = new Object[]{t0, t1};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, A> ActorCreator<A> actor(RayFunc2<T0, T1, A> f, ObjectRef<T0> t0, T1 t1) {
    Object[] args = new Object[]{t0, t1};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, A> ActorCreator<A> actor(RayFunc2<T0, T1, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1) {
    Object[] args = new Object[]{t0, t1};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, T0 t0, T1 t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, T0 t0, T1 t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, T0 t0, ObjectRef<T1> t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, ObjectRef<T0> t0, T1 t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, A> ActorCreator<A> actor(RayFunc3<T0, T1, T2, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2) {
    Object[] args = new Object[]{t0, t1, t2};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, T1 t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, A> ActorCreator<A> actor(RayFunc4<T0, T1, T2, T3, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3) {
    Object[] args = new Object[]{t0, t1, t2, t3};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, A> ActorCreator<A> actor(RayFunc5<T0, T1, T2, T3, T4, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, T0 t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, T1 t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, T2 t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, T3 t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, T4 t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, T5 t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  public static <T0, T1, T2, T3, T4, T5, A> ActorCreator<A> actor(RayFunc6<T0, T1, T2, T3, T4, T5, A> f, ObjectRef<T0> t0, ObjectRef<T1> t1, ObjectRef<T2> t2, ObjectRef<T3> t3, ObjectRef<T4> t4, ObjectRef<T5> t5) {
    Object[] args = new Object[]{t0, t1, t2, t3, t4, t5};
    return new ActorCreator<>(f, args);
  }

  // ===========================
  // Cross-language methods.
  // ===========================
  public static <R> PyTaskCaller<R> task(PyFunction<R> pyFunction) {
    Object[] args = new Object[]{};
    return new PyTaskCaller<>(pyFunction, args);
  }

  public static <R> PyTaskCaller<R> task(PyFunction<R> pyFunction, Object obj0) {
    Object[] args = new Object[]{obj0};
    return new PyTaskCaller<>(pyFunction, args);
  }

  public static <R> PyTaskCaller<R> task(PyFunction<R> pyFunction, Object obj0, Object obj1) {
    Object[] args = new Object[]{obj0, obj1};
    return new PyTaskCaller<>(pyFunction, args);
  }

  public static <R> PyTaskCaller<R> task(PyFunction<R> pyFunction, Object obj0, Object obj1, Object obj2) {
    Object[] args = new Object[]{obj0, obj1, obj2};
    return new PyTaskCaller<>(pyFunction, args);
  }

  public static <R> PyTaskCaller<R> task(PyFunction<R> pyFunction, Object obj0, Object obj1, Object obj2, Object obj3) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3};
    return new PyTaskCaller<>(pyFunction, args);
  }

  public static <R> PyTaskCaller<R> task(PyFunction<R> pyFunction, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4};
    return new PyTaskCaller<>(pyFunction, args);
  }

  public static <R> PyTaskCaller<R> task(PyFunction<R> pyFunction, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4, Object obj5) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4, obj5};
    return new PyTaskCaller<>(pyFunction, args);
  }

  public static PyActorCreator actor(PyActorClass pyActorClass) {
    Object[] args = new Object[]{};
    return new PyActorCreator(pyActorClass, args);
  }

  public static PyActorCreator actor(PyActorClass pyActorClass, Object obj0) {
    Object[] args = new Object[]{obj0};
    return new PyActorCreator(pyActorClass, args);
  }

  public static PyActorCreator actor(PyActorClass pyActorClass, Object obj0, Object obj1) {
    Object[] args = new Object[]{obj0, obj1};
    return new PyActorCreator(pyActorClass, args);
  }

  public static PyActorCreator actor(PyActorClass pyActorClass, Object obj0, Object obj1, Object obj2) {
    Object[] args = new Object[]{obj0, obj1, obj2};
    return new PyActorCreator(pyActorClass, args);
  }

  public static PyActorCreator actor(PyActorClass pyActorClass, Object obj0, Object obj1, Object obj2, Object obj3) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3};
    return new PyActorCreator(pyActorClass, args);
  }

  public static PyActorCreator actor(PyActorClass pyActorClass, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4};
    return new PyActorCreator(pyActorClass, args);
  }

  public static PyActorCreator actor(PyActorClass pyActorClass, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4, Object obj5) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4, obj5};
    return new PyActorCreator(pyActorClass, args);
  }

  public static <R> CppTaskCaller<R> task(CppFunction<R> cppFunction) {
    Object[] args = new Object[]{};
    return new CppTaskCaller<>(cppFunction, args);
  }

  public static <R> CppTaskCaller<R> task(CppFunction<R> cppFunction, Object obj0) {
    Object[] args = new Object[]{obj0};
    return new CppTaskCaller<>(cppFunction, args);
  }

  public static <R> CppTaskCaller<R> task(CppFunction<R> cppFunction, Object obj0, Object obj1) {
    Object[] args = new Object[]{obj0, obj1};
    return new CppTaskCaller<>(cppFunction, args);
  }

  public static <R> CppTaskCaller<R> task(CppFunction<R> cppFunction, Object obj0, Object obj1, Object obj2) {
    Object[] args = new Object[]{obj0, obj1, obj2};
    return new CppTaskCaller<>(cppFunction, args);
  }

  public static <R> CppTaskCaller<R> task(CppFunction<R> cppFunction, Object obj0, Object obj1, Object obj2, Object obj3) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3};
    return new CppTaskCaller<>(cppFunction, args);
  }

  public static <R> CppTaskCaller<R> task(CppFunction<R> cppFunction, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4};
    return new CppTaskCaller<>(cppFunction, args);
  }

  public static <R> CppTaskCaller<R> task(CppFunction<R> cppFunction, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4, Object obj5) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4, obj5};
    return new CppTaskCaller<>(cppFunction, args);
  }

  public static CppActorCreator actor(CppActorClass cppActorClass) {
    Object[] args = new Object[]{};
    return new CppActorCreator(cppActorClass, args);
  }

  public static CppActorCreator actor(CppActorClass cppActorClass, Object obj0) {
    Object[] args = new Object[]{obj0};
    return new CppActorCreator(cppActorClass, args);
  }

  public static CppActorCreator actor(CppActorClass cppActorClass, Object obj0, Object obj1) {
    Object[] args = new Object[]{obj0, obj1};
    return new CppActorCreator(cppActorClass, args);
  }

  public static CppActorCreator actor(CppActorClass cppActorClass, Object obj0, Object obj1, Object obj2) {
    Object[] args = new Object[]{obj0, obj1, obj2};
    return new CppActorCreator(cppActorClass, args);
  }

  public static CppActorCreator actor(CppActorClass cppActorClass, Object obj0, Object obj1, Object obj2, Object obj3) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3};
    return new CppActorCreator(cppActorClass, args);
  }

  public static CppActorCreator actor(CppActorClass cppActorClass, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4};
    return new CppActorCreator(cppActorClass, args);
  }

  public static CppActorCreator actor(CppActorClass cppActorClass, Object obj0, Object obj1, Object obj2, Object obj3, Object obj4, Object obj5) {
    Object[] args = new Object[]{obj0, obj1, obj2, obj3, obj4, obj5};
    return new CppActorCreator(cppActorClass, args);
  }

}
