// Signature format: 3.0
package androidx.ui.material.icons {

  public final class Icons {
    method public androidx.ui.material.icons.Icons.Filled getDefault();
    property public final androidx.ui.material.icons.Icons.Filled Default;
    field public static final androidx.ui.material.icons.Icons INSTANCE;
  }

  public static final class Icons.Filled {
    field public static final androidx.ui.material.icons.Icons.Filled INSTANCE;
  }

  public static final class Icons.Outlined {
    field public static final androidx.ui.material.icons.Icons.Outlined INSTANCE;
  }

  public static final class Icons.Rounded {
    field public static final androidx.ui.material.icons.Icons.Rounded INSTANCE;
  }

  public static final class Icons.Sharp {
    field public static final androidx.ui.material.icons.Icons.Sharp INSTANCE;
  }

  public static final class Icons.TwoTone {
    field public static final androidx.ui.material.icons.Icons.TwoTone INSTANCE;
  }

  public final class IconsKt {
    method public static kotlin.Lazy<androidx.compose.ui.graphics.vector.VectorAsset> lazyMaterialIcon(kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.VectorAssetBuilder,androidx.compose.ui.graphics.vector.VectorAssetBuilder> block);
    method public static androidx.compose.ui.graphics.vector.VectorAssetBuilder materialPath(androidx.compose.ui.graphics.vector.VectorAssetBuilder, float fillAlpha = 1f, float strokeAlpha = 1f, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.vector.PathBuilder,kotlin.Unit> pathBuilder);
  }

}

package androidx.ui.material.icons.filled {

  public final class AccountBoxKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Filled);
  }

  public final class AccountCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Filled);
  }

  public final class AddCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Filled);
  }

  public final class AddKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ArrowBackKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ArrowDropDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ArrowForwardKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Filled);
  }

  public final class BuildKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Filled);
  }

  public final class CallKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Filled);
  }

  public final class CheckCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Filled);
  }

  public final class CheckKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ClearKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Filled);
  }

  public final class CloseKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Filled);
  }

  public final class CreateKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Filled);
  }

  public final class DateRangeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Filled);
  }

  public final class DeleteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Filled);
  }

  public final class DoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Filled);
  }

  public final class EditKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Filled);
  }

  public final class EmailKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ExitToAppKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Filled);
  }

  public final class FaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Filled);
  }

  public final class FavoriteBorderKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Filled);
  }

  public final class FavoriteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Filled);
  }

  public final class HomeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Filled);
  }

  public final class InfoKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Filled);
  }

  public final class KeyboardArrowDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Filled);
  }

  public final class KeyboardArrowLeftKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Filled);
  }

  public final class KeyboardArrowRightKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Filled);
  }

  public final class KeyboardArrowUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ListKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Filled);
  }

  public final class LocationOnKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Filled);
  }

  public final class LockKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Filled);
  }

  public final class MailOutlineKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Filled);
  }

  public final class MenuKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Filled);
  }

  public final class MoreVertKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Filled);
  }

  public final class NotificationsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Filled);
  }

  public final class PersonKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Filled);
  }

  public final class PhoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Filled);
  }

  public final class PlaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Filled);
  }

  public final class PlayArrowKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Filled);
  }

  public final class RefreshKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Filled);
  }

  public final class SearchKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Filled);
  }

  public final class SendKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Filled);
  }

  public final class SettingsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ShareKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ShoppingCartKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Filled);
  }

  public final class StarKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Filled);
  }

  public final class ThumbUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Filled);
  }

  public final class WarningKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Filled);
  }

}

package androidx.ui.material.icons.outlined {

  public final class AccountBoxKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class AccountCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class AddCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class AddKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ArrowBackKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ArrowDropDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ArrowForwardKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class BuildKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class CallKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class CheckCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class CheckKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ClearKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class CloseKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class CreateKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class DateRangeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class DeleteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class DoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class EditKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class EmailKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ExitToAppKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class FaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class FavoriteBorderKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class FavoriteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class HomeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class InfoKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class KeyboardArrowDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class KeyboardArrowLeftKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class KeyboardArrowRightKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class KeyboardArrowUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ListKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class LocationOnKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class LockKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class MailOutlineKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class MenuKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class MoreVertKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class NotificationsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class PersonKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class PhoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class PlaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class PlayArrowKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class RefreshKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class SearchKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class SendKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class SettingsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ShareKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ShoppingCartKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class StarKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class ThumbUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Outlined);
  }

  public final class WarningKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Outlined);
  }

}

package androidx.ui.material.icons.rounded {

  public final class AccountBoxKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class AccountCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class AddCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class AddKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ArrowBackKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ArrowDropDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ArrowForwardKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class BuildKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class CallKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class CheckCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class CheckKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ClearKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class CloseKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class CreateKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class DateRangeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class DeleteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class DoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class EditKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class EmailKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ExitToAppKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class FaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class FavoriteBorderKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class FavoriteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class HomeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class InfoKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class KeyboardArrowDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class KeyboardArrowLeftKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class KeyboardArrowRightKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class KeyboardArrowUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ListKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class LocationOnKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class LockKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class MailOutlineKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class MenuKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class MoreVertKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class NotificationsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class PersonKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class PhoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class PlaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class PlayArrowKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class RefreshKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class SearchKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class SendKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class SettingsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ShareKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ShoppingCartKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class StarKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class ThumbUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Rounded);
  }

  public final class WarningKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Rounded);
  }

}

package androidx.ui.material.icons.sharp {

  public final class AccountBoxKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class AccountCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class AddCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class AddKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ArrowBackKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ArrowDropDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ArrowForwardKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class BuildKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class CallKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class CheckCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class CheckKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ClearKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class CloseKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class CreateKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class DateRangeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class DeleteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class DoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class EditKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class EmailKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ExitToAppKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class FaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class FavoriteBorderKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class FavoriteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class HomeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class InfoKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class KeyboardArrowDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class KeyboardArrowLeftKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class KeyboardArrowRightKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class KeyboardArrowUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ListKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class LocationOnKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class LockKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class MailOutlineKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class MenuKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class MoreVertKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class NotificationsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class PersonKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class PhoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class PlaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class PlayArrowKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class RefreshKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class SearchKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class SendKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class SettingsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ShareKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ShoppingCartKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class StarKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class ThumbUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Sharp);
  }

  public final class WarningKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Sharp);
  }

}

package androidx.ui.material.icons.twotone {

  public final class AccountBoxKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class AccountCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class AddCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class AddKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ArrowBackKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ArrowDropDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ArrowForwardKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class BuildKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class CallKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class CheckCircleKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class CheckKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ClearKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class CloseKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class CreateKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class DateRangeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class DeleteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class DoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class EditKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class EmailKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ExitToAppKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class FaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class FavoriteBorderKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class FavoriteKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class HomeKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class InfoKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class KeyboardArrowDownKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class KeyboardArrowLeftKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class KeyboardArrowRightKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class KeyboardArrowUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ListKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class LocationOnKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class LockKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class MailOutlineKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class MenuKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class MoreVertKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class NotificationsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class PersonKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class PhoneKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class PlaceKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class PlayArrowKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class RefreshKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class SearchKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class SendKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class SettingsKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ShareKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ShoppingCartKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class StarKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class ThumbUpKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.TwoTone);
  }

  public final class WarningKt {
    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.TwoTone);
  }

}

