F2 avanzada

This commit is contained in:
2026-08-10 23:00:56 -03:00
parent 12b7b0f4b2
commit b4b25e49e0
49 changed files with 1304 additions and 227 deletions
+4 -4
View File
@@ -67,7 +67,7 @@ namespace vita_asistente.Controllers
// GET: /Account/Login // GET: /Account/Login
[HttpGet] [HttpGet]
public IActionResult Login(string returnUrl = null) public IActionResult Login(string? returnUrl = null)
{ {
ViewData["ReturnUrl"] = returnUrl; ViewData["ReturnUrl"] = returnUrl;
return View(); return View();
@@ -76,7 +76,7 @@ namespace vita_asistente.Controllers
// POST: /Account/Login // POST: /Account/Login
[HttpPost] [HttpPost]
[ValidateAntiForgeryToken] [ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) public async Task<IActionResult> Login(LoginViewModel model, string? returnUrl = null)
{ {
ViewData["ReturnUrl"] = returnUrl; ViewData["ReturnUrl"] = returnUrl;
@@ -90,7 +90,7 @@ namespace vita_asistente.Controllers
if (result.Succeeded) if (result.Succeeded)
{ {
return RedirectToLocal(returnUrl); return RedirectToLocal(!string.IsNullOrEmpty(returnUrl) ? returnUrl : string.Empty);
} }
if (result.RequiresTwoFactor) if (result.RequiresTwoFactor)
{ {
@@ -143,7 +143,7 @@ namespace vita_asistente.Controllers
// GET: /Account/LoginWith2fa (opcional) // GET: /Account/LoginWith2fa (opcional)
[HttpGet] [HttpGet]
public IActionResult LoginWith2fa(bool rememberMe, string returnUrl = null) public IActionResult LoginWith2fa(bool rememberMe, string? returnUrl = null)
{ {
// Implementar si se usa 2FA // Implementar si se usa 2FA
return View(); return View();
+62
View File
@@ -0,0 +1,62 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Threading.Tasks;
using vita_asistente.Data;
using vita_asistente.Data.Models;
namespace vita_asistente.Controllers
{
[Authorize]
public class PacientesController : Controller
{
private readonly ApplicationDbContext _context;
public PacientesController(ApplicationDbContext context)
{
_context = context;
}
// GET: Pacientes
public async Task<IActionResult> Index(string nombreBusqueda)
{
var pacientes = _context.Pacientes.AsNoTracking();
if (!string.IsNullOrWhiteSpace(nombreBusqueda))
{
pacientes = pacientes.Where(p =>
(p.Nombre + " " + p.Apellido).Contains(nombreBusqueda.Trim()) ||
p.Documento.Contains(nombreBusqueda.Trim()));
}
ViewBag.NombreBusqueda = nombreBusqueda;
return View(await pacientes.OrderByDescending(p => p.FechaRegistro).ToListAsync());
}
// GET: Pacientes/Details/5
public async Task<IActionResult> Details(string id)
{
if (id == null) return NotFound();
var paciente = await _context.Pacientes.FindAsync(id);
if (paciente == null) return NotFound();
return View(paciente);
}
// POST: Pacientes/Activate/5
[HttpPost]
[Authorize(Roles = "Admin")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Activate(string id)
{
var paciente = await _context.Pacientes.FindAsync(id);
if (paciente == null) return NotFound();
paciente.IsActive = true;
_context.Pacientes.Update(paciente);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
}
}
+2 -2
View File
@@ -117,7 +117,7 @@ namespace vita_asistente.Controllers
// Pero primero verificamos si tiene usuarios asignados // Pero primero verificamos si tiene usuarios asignados
using var scope = HttpContext.RequestServices.CreateScope(); using var scope = HttpContext.RequestServices.CreateScope();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>(); var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var usersInRole = await userManager.GetUsersInRoleAsync(role.Name); var usersInRole = await userManager.GetUsersInRoleAsync(role.Name ?? string.Empty);
if (usersInRole.Any()) if (usersInRole.Any())
{ {
@@ -157,7 +157,7 @@ namespace vita_asistente.Controllers
// Verificar que no tenga usuarios asignados // Verificar que no tenga usuarios asignados
using var scope = HttpContext.RequestServices.CreateScope(); using var scope = HttpContext.RequestServices.CreateScope();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>(); var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var usersInRole = await userManager.GetUsersInRoleAsync(role.Name); var usersInRole = await userManager.GetUsersInRoleAsync(role.Name ?? string.Empty);
if (usersInRole.Any()) if (usersInRole.Any())
{ {
+9 -9
View File
@@ -167,8 +167,8 @@ namespace vita_asistente.Controllers
RolesDisponibles = todosLosRoles.Select(r => new RoleCheckbox RolesDisponibles = todosLosRoles.Select(r => new RoleCheckbox
{ {
RoleId = r.Id, RoleId = r.Id,
RoleName = r.Name, RoleName = r.Name ?? string.Empty,
IsSelected = rolesDelUsuario.Contains(r.Name) IsSelected = rolesDelUsuario.Contains(r.Name ?? string.Empty)
}).ToList() }).ToList()
}; };
return View(model); return View(model);
@@ -183,7 +183,7 @@ namespace vita_asistente.Controllers
if (usuario == null) return NotFound(); if (usuario == null) return NotFound();
var rolesDelUsuario = await _userManager.GetRolesAsync(usuario); var rolesDelUsuario = await _userManager.GetRolesAsync(usuario);
var rolesSeleccionados = model.RolesDisponibles.Where(r => r.IsSelected).Select(r => r.RoleName).ToList(); var rolesSeleccionados = model.RolesDisponibles.Where(r => r.IsSelected).Where(r => !string.IsNullOrEmpty(r.RoleName)).Select(r => r.RoleName).ToList();
// Remover roles que ya no están seleccionados // Remover roles que ya no están seleccionados
var rolesAEliminar = rolesDelUsuario.Except(rolesSeleccionados).ToList(); var rolesAEliminar = rolesDelUsuario.Except(rolesSeleccionados).ToList();
@@ -206,15 +206,15 @@ namespace vita_asistente.Controllers
// ViewModels para la gestión de roles (dentro del mismo archivo por simplicidad) // ViewModels para la gestión de roles (dentro del mismo archivo por simplicidad)
public class ManageRolesViewModel public class ManageRolesViewModel
{ {
public string UsuarioId { get; set; } public required string UsuarioId { get; set; }
public string UsuarioNombre { get; set; } public required string UsuarioNombre { get; set; }
public List<RoleCheckbox> RolesDisponibles { get; set; } public required List<RoleCheckbox> RolesDisponibles { get; set; }
} }
public class RoleCheckbox public class RoleCheckbox
{ {
public string RoleId { get; set; } public required string RoleId { get; set; }
public string RoleName { get; set; } public required string RoleName { get; set; }
public bool IsSelected { get; set; } public bool IsSelected { get; set; }
} }
} }
+14
View File
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using vita_asistente.Data.Models;
using vita_asistente.Models; using vita_asistente.Models;
namespace vita_asistente.Data namespace vita_asistente.Data
@@ -10,5 +11,18 @@ namespace vita_asistente.Data
: base(options) : base(options)
{ {
} }
// DbSet for Paciente model
public DbSet<Paciente> Pacientes { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<ApplicationUser>().ToTable("AspNetUsers");
builder.Entity<Paciente>()
.ToTable("Pacientes")
.HasBaseType<ApplicationUser>();
}
} }
} }
+30
View File
@@ -0,0 +1,30 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using vita_asistente.Models;
namespace vita_asistente.Data.Models
{
public class Paciente : ApplicationUser
{
[StringLength(100)]
public string NombreContactoEmergencia { get; set; } = string.Empty;
[StringLength(50)]
public string TelefonoContactoEmergencia { get; set; } = string.Empty;
[StringLength(50)]
public string TipoSangre { get; set; } = string.Empty;
public bool TieneAlergiasMedicamentosas { get; set; }
[StringLength(500)]
public string AlergiasDescripcion { get; set; } = string.Empty;
public DateTime FechaRegistro { get; set; }
/// <summary>
/// Indicates whether the patient account is active and can log in
/// </summary>
public bool IsActive { get; set; } = true; // Default to active
}
}
@@ -12,7 +12,7 @@ using vita_asistente.Data;
namespace vita_asistente.Migrations namespace vita_asistente.Migrations
{ {
[DbContext(typeof(ApplicationDbContext))] [DbContext(typeof(ApplicationDbContext))]
[Migration("20260810173940_InitialCreate")] [Migration("20260811005032_InitialCreate")]
partial class InitialCreate partial class InitialCreate
{ {
/// <inheritdoc /> /// <inheritdoc />
@@ -239,6 +239,41 @@ namespace vita_asistente.Migrations
.HasDatabaseName("UserNameIndex"); .HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null); b.ToTable("AspNetUsers", (string)null);
b.UseTptMappingStrategy();
});
modelBuilder.Entity("vita_asistente.Data.Models.Paciente", b =>
{
b.HasBaseType("vita_asistente.Models.ApplicationUser");
b.Property<string>("AlergiasDescripcion")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("varchar(500)");
b.Property<DateTime>("FechaRegistro")
.HasColumnType("datetime(6)");
b.Property<string>("NombreContactoEmergencia")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("varchar(100)");
b.Property<string>("TelefonoContactoEmergencia")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
b.Property<bool>("TieneAlergiasMedicamentosas")
.HasColumnType("tinyint(1)");
b.Property<string>("TipoSangre")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
b.ToTable("Pacientes", (string)null);
}); });
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b => modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
@@ -291,6 +326,15 @@ namespace vita_asistente.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
}); });
modelBuilder.Entity("vita_asistente.Data.Models.Paciente", b =>
{
b.HasOne("vita_asistente.Models.ApplicationUser", null)
.WithOne()
.HasForeignKey("vita_asistente.Data.Models.Paciente", "Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
#pragma warning restore 612, 618 #pragma warning restore 612, 618
} }
} }
@@ -206,6 +206,35 @@ namespace vita_asistente.Migrations
}) })
.Annotation("MySql:CharSet", "utf8mb4"); .Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "Pacientes",
columns: table => new
{
Id = table.Column<string>(type: "varchar(255)", nullable: false)
.Annotation("MySql:CharSet", "utf8mb4"),
NombreContactoEmergencia = table.Column<string>(type: "varchar(100)", maxLength: 100, nullable: false)
.Annotation("MySql:CharSet", "utf8mb4"),
TelefonoContactoEmergencia = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: false)
.Annotation("MySql:CharSet", "utf8mb4"),
TipoSangre = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: false)
.Annotation("MySql:CharSet", "utf8mb4"),
TieneAlergiasMedicamentosas = table.Column<bool>(type: "tinyint(1)", nullable: false),
AlergiasDescripcion = table.Column<string>(type: "varchar(500)", maxLength: 500, nullable: false)
.Annotation("MySql:CharSet", "utf8mb4"),
FechaRegistro = table.Column<DateTime>(type: "datetime(6)", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Pacientes", x => x.Id);
table.ForeignKey(
name: "FK_Pacientes_AspNetUsers_Id",
column: x => x.Id,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateIndex( migrationBuilder.CreateIndex(
name: "IX_AspNetRoleClaims_RoleId", name: "IX_AspNetRoleClaims_RoleId",
table: "AspNetRoleClaims", table: "AspNetRoleClaims",
@@ -262,6 +291,9 @@ namespace vita_asistente.Migrations
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "AspNetUserTokens"); name: "AspNetUserTokens");
migrationBuilder.DropTable(
name: "Pacientes");
migrationBuilder.DropTable( migrationBuilder.DropTable(
name: "AspNetRoles"); name: "AspNetRoles");
@@ -0,0 +1,344 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using vita_asistente.Data;
#nullable disable
namespace vita_asistente.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20260811012627_AddIsActiveColumnToPacientes")]
partial class AddIsActiveColumnToPacientes
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.29")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("longtext");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("varchar(256)");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("varchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("longtext");
b.Property<string>("ClaimValue")
.HasColumnType("longtext");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("varchar(255)");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property<int>("Id"));
b.Property<string>("ClaimType")
.HasColumnType("longtext");
b.Property<string>("ClaimValue")
.HasColumnType("longtext");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("varchar(255)");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("varchar(255)");
b.Property<string>("ProviderKey")
.HasColumnType("varchar(255)");
b.Property<string>("ProviderDisplayName")
.HasColumnType("longtext");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("varchar(255)");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("varchar(255)");
b.Property<string>("RoleId")
.HasColumnType("varchar(255)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("varchar(255)");
b.Property<string>("LoginProvider")
.HasColumnType("varchar(255)");
b.Property<string>("Name")
.HasColumnType("varchar(255)");
b.Property<string>("Value")
.HasColumnType("longtext");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("vita_asistente.Models.ApplicationUser", b =>
{
b.Property<string>("Id")
.HasColumnType("varchar(255)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("Apellido")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("longtext");
b.Property<string>("Direccion")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("Documento")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("varchar(256)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("tinyint(1)");
b.Property<bool>("LockoutEnabled")
.HasColumnType("tinyint(1)");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetime(6)");
b.Property<string>("Nombre")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("varchar(256)");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("varchar(256)");
b.Property<string>("PasswordHash")
.HasColumnType("longtext");
b.Property<string>("PhoneNumber")
.HasColumnType("longtext");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("tinyint(1)");
b.Property<string>("RolPrincipal")
.IsRequired()
.HasColumnType("longtext");
b.Property<string>("SecurityStamp")
.HasColumnType("longtext");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("tinyint(1)");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("varchar(256)");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
b.UseTptMappingStrategy();
});
modelBuilder.Entity("vita_asistente.Data.Models.Paciente", b =>
{
b.HasBaseType("vita_asistente.Models.ApplicationUser");
b.Property<string>("AlergiasDescripcion")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("varchar(500)");
b.Property<DateTime>("FechaRegistro")
.HasColumnType("datetime(6)");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
b.Property<string>("NombreContactoEmergencia")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("varchar(100)");
b.Property<string>("TelefonoContactoEmergencia")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
b.Property<bool>("TieneAlergiasMedicamentosas")
.HasColumnType("tinyint(1)");
b.Property<string>("TipoSangre")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
b.ToTable("Pacientes", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("vita_asistente.Models.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("vita_asistente.Models.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("vita_asistente.Models.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("vita_asistente.Models.ApplicationUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("vita_asistente.Data.Models.Paciente", b =>
{
b.HasOne("vita_asistente.Models.ApplicationUser", null)
.WithOne()
.HasForeignKey("vita_asistente.Data.Models.Paciente", "Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
#pragma warning restore 612, 618
}
}
}
@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace vita_asistente.Migrations
{
/// <inheritdoc />
public partial class AddIsActiveColumnToPacientes : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsActive",
table: "Pacientes",
type: "tinyint(1)",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsActive",
table: "Pacientes");
}
}
}
@@ -236,6 +236,44 @@ namespace vita_asistente.Migrations
.HasDatabaseName("UserNameIndex"); .HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null); b.ToTable("AspNetUsers", (string)null);
b.UseTptMappingStrategy();
});
modelBuilder.Entity("vita_asistente.Data.Models.Paciente", b =>
{
b.HasBaseType("vita_asistente.Models.ApplicationUser");
b.Property<string>("AlergiasDescripcion")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("varchar(500)");
b.Property<DateTime>("FechaRegistro")
.HasColumnType("datetime(6)");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
b.Property<string>("NombreContactoEmergencia")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("varchar(100)");
b.Property<string>("TelefonoContactoEmergencia")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
b.Property<bool>("TieneAlergiasMedicamentosas")
.HasColumnType("tinyint(1)");
b.Property<string>("TipoSangre")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
b.ToTable("Pacientes", (string)null);
}); });
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b => modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
@@ -288,6 +326,15 @@ namespace vita_asistente.Migrations
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired(); .IsRequired();
}); });
modelBuilder.Entity("vita_asistente.Data.Models.Paciente", b =>
{
b.HasOne("vita_asistente.Models.ApplicationUser", null)
.WithOne()
.HasForeignKey("vita_asistente.Data.Models.Paciente", "Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
#pragma warning restore 612, 618 #pragma warning restore 612, 618
} }
} }
+2 -2
View File
@@ -7,12 +7,12 @@ namespace vita_asistente.ViewModels
[Required] [Required]
[EmailAddress] [EmailAddress]
[Display(Name = "Correo electrónico")] [Display(Name = "Correo electrónico")]
public string Email { get; set; } public required string Email { get; set; }
[Required] [Required]
[DataType(DataType.Password)] [DataType(DataType.Password)]
[Display(Name = "Contraseña")] [Display(Name = "Contraseña")]
public string Password { get; set; } public required string Password { get; set; }
[Display(Name = "Recordarme")] [Display(Name = "Recordarme")]
public bool RememberMe { get; set; } public bool RememberMe { get; set; }
+8 -8
View File
@@ -6,37 +6,37 @@ namespace vita_asistente.ViewModels
{ {
[Required] [Required]
[Display(Name = "Nombre")] [Display(Name = "Nombre")]
public string Nombre { get; set; } public required string Nombre { get; set; }
[Required] [Required]
[Display(Name = "Apellido")] [Display(Name = "Apellido")]
public string Apellido { get; set; } public required string Apellido { get; set; }
[Required] [Required]
[Display(Name = "Documento")] [Display(Name = "Documento")]
public string Documento { get; set; } public required string Documento { get; set; }
[Required] [Required]
[Display(Name = "Dirección")] [Display(Name = "Dirección")]
public string Direccion { get; set; } public required string Direccion { get; set; }
[Required] [Required]
[Display(Name = "Teléfono")] [Display(Name = "Teléfono")]
public string Telefono { get; set; } // puedes usar PhoneNumber de Identity también public required string Telefono { get; set; } // puedes usar PhoneNumber de Identity también
[Required] [Required]
[EmailAddress] [EmailAddress]
[Display(Name = "Correo electrónico")] [Display(Name = "Correo electrónico")]
public string Email { get; set; } public required string Email { get; set; }
[Required] [Required]
[DataType(DataType.Password)] [DataType(DataType.Password)]
[Display(Name = "Contraseña")] [Display(Name = "Contraseña")]
public string Password { get; set; } public required string Password { get; set; }
[DataType(DataType.Password)] [DataType(DataType.Password)]
[Display(Name = "Confirmar contraseña")] [Display(Name = "Confirmar contraseña")]
[Compare("Password", ErrorMessage = "Las contraseñas no coinciden")] [Compare("Password", ErrorMessage = "Las contraseñas no coinciden")]
public string ConfirmPassword { get; set; } public required string ConfirmPassword { get; set; }
} }
} }
+88
View File
@@ -0,0 +1,88 @@
@model List<vita_asistente.Data.Models.Paciente>
@{
ViewData["Title"] = "Pacientes";
Layout = "_Layout";
}
<div class="container mt-4">
<h2>Lista de Pacientes</h2>
@if (User.IsInRole("Admin"))
{
<a asp-action="Create" class="btn btn-success mb-3">Nuevo Paciente</a>
}
<div class="card">
<div class="card-body">
<form asp-action="Index" method="get" class="row g-3 mb-4">
<div class="col-md-5">
<label for="nombreBusqueda" class="form-label">Nombre o Documento</label>
<input type="text" class="form-control" id="nombreBusqueda" name="nombreBusqueda"
placeholder="Buscar por nombre o documento..." value="@ViewBag.NombreBusqueda">
</div>
<div class="col-md-2 d-flex align-items-end">
<button type="submit" class="btn btn-primary me-3">Buscar</button>
@if (!string.IsNullOrEmpty(ViewBag.NombreBusqueda))
{
<a asp-action="Index" class="btn btn-outline-secondary">Limpiar</a>
}
</div>
</form>
<table class="table table-striped">
<thead class="table-dark">
<tr>
<th>Documento</th>
<th>Nombre Completo</th>
<th>Email</th>
<th>Fecha Registro</th>
<th>Estado</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
@foreach (var paciente in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => paciente.Documento)</td>
<td>@Html.DisplayFor(modelItem => paciente.Nombre) @Html.DisplayFor(modelItem => paciente.Apellido)</td>
<td>@Html.DisplayFor(modelItem => paciente.Email)</td>
<td>@Html.DisplayFor(modelItem => paciente.FechaRegistro.ToShortDateString())</td>
<td>
@if (paciente.IsActive)
{
<span class="badge bg-success">Activo</span>
}
else
{
<span class="badge bg-danger">Inactivo</span>
}
</td>
<td>
@if (User.IsInRole("Admin") || (User.Identity != null && User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value == paciente.Id))
{
<a asp-action="Details" asp-route-id="@paciente.Id" class="btn btn-sm btn-info">Ver</a>
@if (User.IsInRole("Admin"))
{
<a asp-action="Edit" asp-route-id="@paciente.Id" class="btn btn-sm btn-warning ms-1">Editar</a>
@if (!paciente.IsActive)
{
<form asp-action="Activate" asp-route-id="@paciente.Id" class="d-inline">
<button type="submit" class="btn btn-sm btn-success ms-1" onclick="return confirm('¿Activar este paciente?');">Activar</button>
</form>
}
else
{
<a asp-action="Delete" asp-route-id="@paciente.Id" class="btn btn-sm btn-danger ms-1">Desactivar</a>
}
}
}
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
+18
View File
@@ -1,3 +1,4 @@
@using Microsoft.AspNetCore.Identity
@model IdentityRole @model IdentityRole
@{ @{
@@ -16,3 +17,20 @@
<a asp-action="Index" class="btn btn-secondary">Cancelar</a> <a asp-action="Index" class="btn btn-secondary">Cancelar</a>
</div> </div>
</form> </form>
@{
ViewData["Title"] = "Deshabilitar rol";
}
<h1>Deshabilitar rol: @Model.Name</h1>
<p>¿Está seguro que desea deshabilitar este rol? Esto afectará a los usuarios con este rol.</p>
<form asp-action="DisableConfirmed" method="post">
<input type="hidden" name="id" value="@Model.Id" />
@Html.AntiForgeryToken()
<div class="form-group">
<button type="submit" class="btn btn-warning">Deshabilitar rol</button>
<a asp-action="Index" class="btn btn-secondary">Cancelar</a>
</div>
</form>
+24
View File
@@ -1,3 +1,4 @@
@using Microsoft.AspNetCore.Identity
@model IdentityRole @model IdentityRole
@{ @{
@@ -22,3 +23,26 @@
section scripts { section scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");} @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
} }
@{
ViewData["Title"] = "Editar rol";
}
<h1>Editar rol: @Model.Name</h1>
<form asp-action="Edit">
<input type="hidden" asp-for="Id" />
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Guardar cambios" class="btn btn-primary" />
<a asp-action="Index" class="btn btn-secondary">Cancelar</a>
</div>
</form>
section scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
+27 -4
View File
@@ -2,7 +2,30 @@
@model IEnumerable<IdentityRole> @model IEnumerable<IdentityRole>
<h1>Roles</h1> <h1>Roles</h1>
<p><a asp-action="Create" class="btn btn-primary">Crear nuevo rol</a></p>
<!-- Modal de creación -->
<div class="modal fade" id="createModal" tabindex="-1" aria-labelledby="createModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form asp-action="Create" method="post">
@Html.AntiForgeryToken()
<div class="modal-header">
<h5 class="modal-title" id="createModalLabel">Crear nuevo rol</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<input name="roleName" class="form-control" placeholder="Nombre del rol" required />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
<button type="submit" class="btn btn-primary">Guardar cambios</button>
</div>
</form>
</div>
</div>
</div>
<p><a href="#" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#createModal">Crear nuevo rol</a></p>
<table class="table"> <table class="table">
<thead><tr><th>Nombre</th><th>Acciones</th></tr></thead> <thead><tr><th>Nombre</th><th>Acciones</th></tr></thead>
<tbody> <tbody>
@@ -13,19 +36,19 @@
<td> <td>
<a href="#" class="btn btn-info btn-sm" data-bs-toggle="modal" data-bs-target="#editModal-@role.Id">Editar</a> <a href="#" class="btn btn-info btn-sm" data-bs-toggle="modal" data-bs-target="#editModal-@role.Id">Editar</a>
<!-- Modal de edición --> <!-- Modal de edición -->
<div class="modal fade" id="editModal-@role.Id" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true"> <div class="modal fade" id="editModal-@role.Id" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<form asp-action="Edit" method="post"> <form asp-action="Edit" method="post">
<input type="hidden" name="id" value="@role.Id" /> <input type="hidden" name="id" value="@role.Id" />
@HttpContext.RequestServices.GetService typeof(Antiforgery.IAntiforgery) @Html.AntiForgeryToken()
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="editModalLabel">Editar rol: @role.Name</h5> <h5 class="modal-title" id="editModalLabel">Editar rol: @role.Name</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<input asp-for="Name" class="form-control" placeholder="Nuevo nombre del rol" /> <input name="Name" value="@role.Name" class="form-control" placeholder="Nuevo nombre del rol" />
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
+51 -57
View File
@@ -1,5 +1,9 @@
<!DOCTYPE html> @{
<html lang="en"> var controller = ViewContext.RouteData.Values["controller"]?.ToString();
}
<!DOCTYPE html>
<html lang="es">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
@@ -9,64 +13,54 @@
<link rel="stylesheet" href="~/vita_asistente.styles.css" asp-append-version="true" /> <link rel="stylesheet" href="~/vita_asistente.styles.css" asp-append-version="true" />
</head> </head>
<body> <body>
<header> <div class="app-wrapper">
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"> <aside class="sidebar">
<div class="container-fluid"> <a class="sidebar-brand" asp-area="" asp-controller="Home" asp-action="Index">vita_asistente</a>
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">vita_asistente</a> <nav class="sidebar-nav">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent" <a class="nav-link @(controller == "Home" ? "active" : "")" asp-controller="Home" asp-action="Index">Inicio</a>
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span> @if (User.IsInRole("Admin"))
</button> {
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <h6 class="sidebar-heading">Administración</h6>
@if (User.IsInRole("Admin")) <a class="nav-link @(controller == "Usuarios" ? "active" : "")" asp-controller="Usuarios" asp-action="Index">Usuarios</a>
{ <a class="nav-link @(controller == "Roles" ? "active" : "")" asp-controller="Roles" asp-action="Index">Roles</a>
<li class="nav-item dropdown"> <a class="nav-link @(controller == "Pacientes" ? "active" : "")" asp-controller="Pacientes" asp-action="Index">Pacientes</a>
<a class="nav-link dropdown-toggle" href="#" id="adminDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> }
Administración
</a> @if (User.Identity?.IsAuthenticated ?? false)
<ul class="dropdown-menu" aria-labelledby="adminDropdown"> {
<li><a class="dropdown-item" asp-controller="Usuarios" asp-action="Index">Usuarios</a></li> <h6 class="sidebar-heading">Cuenta</h6>
<li><a class="dropdown-item" asp-controller="Roles" asp-action="Index">Roles</a></li> <a class="nav-link" asp-controller="Account" asp-action="Logout">Cerrar sesión</a>
</ul> }
</li> else
} {
<ul class="navbar-nav ms-auto"> <h6 class="sidebar-heading">Cuenta</h6>
@if (User.Identity.IsAuthenticated) <a class="nav-link" asp-controller="Account" asp-action="Register">Registrarse</a>
{ <a class="nav-link" asp-controller="Account" asp-action="Login">Iniciar sesión</a>
<li class="nav-item"> }
<span class="navbar-text">Hola, @User.Identity.Name!</span> </nav>
</li> </aside>
<li class="nav-item">
<form asp-controller="Account" asp-action="Logout" method="post" class="form-inline"> <div class="main-content">
<button type="submit" class="nav-link btn btn-link text-dark">Cerrar sesión</button> <header class="topbar">
</form> @if (User.Identity?.IsAuthenticated ?? false)
</li> {
} <span class="navbar-text">Hola, @(User.Identity?.Name ?? "Usuario")!</span>
else }
{ </header>
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Account" asp-action="Register">Registrarse</a> <main role="main" class="pb-3">
</li> @RenderBody()
<li class="nav-item"> </main>
<a class="nav-link text-dark" asp-controller="Account" asp-action="Login">Iniciar sesión</a>
</li> <footer class="border-top footer text-muted">
} <div class="container">
</ul> &copy; 2026 - vita_asistente - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacidad</a>
</div> </div>
</div> </footer>
</nav> </div>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div> </div>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2026 - vita_asistente - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script> <script src="~/js/site.js" asp-append-version="true"></script>
+95
View File
@@ -0,0 +1,95 @@
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Identity
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
<nav class="sidebar">
<div class="sidebar-header d-flex align-items-center justify-content-between mb-4 px-3">
<a class="text-decoration-none" asp-controller="Home" asp-action="Index">
<span class="h5 fw-bold text-dark">VitaAsistente</span>
</a>
<button id="sidebarToggle" class="btn btn-sm p-0 ms-auto d-md-none" aria-label="Toggle sidebar">
<i class="bi bi-list"></i>
</button>
</div>
@if (SignInManager.IsSignedIn(User))
{
<div class="sidebar-user-info mb-4 px-3 pb-2 border-bottom d-flex align-items-center">
<div class="flex-grow-1 text-truncate">
<small class="text-muted">Hola,</small>
<span class="d-block small fw-medium" title="@User.Identity?.Name ?? "Usuario"">@User.Identity?.Name ?? "Usuario"</span>
</div>
</div>
@if (User.IsInRole("Admin"))
{
<div class="sidebar-section pb-2 px-3">
<h4 class="section-title mb-2">Administración</h4>
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" asp-controller="Usuarios" asp-action="Index">
<span class="me-2">👥</span> Gestión de Usuarios
</a>
</li>
<li class="nav-item">
<a class="nav-link" asp-controller="Roles" asp-action="Index">
<span class="me-2">📋</span> Gestión de Roles
</a>
</li>
</ul>
</div>
}
@if (User.IsInRole("Admin") || User.IsInRole("Usuario"))
{
<div class="sidebar-section pb-2 px-3">
<h4 class="section-title mb-2">Módulos Principales</h4>
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" asp-controller="Home" asp-action="Index">
<span class="me-2">🏠</span> Dashboard
</a>
</li>
</ul>
</div>
}
}
else
{
<div class="p-4 text-center">
<div class="mb-3">
<i class="bi bi-person-circle" style="font-size: 2.5rem;"></i>
</div>
<a href="/" class="btn btn-sm btn-outline-primary">Volver al inicio</a>
</div>
}
<form asp-controller="Account" asp-action="Logout" method="post" class="sidebar-footer p-3 border-top">
@Html.AntiForgeryToken()
@if (SignInManager.IsSignedIn(User))
{
<button type="submit" class="btn btn-sm btn-outline-danger w-100">Cerrar Sesión</button>
}
</form>
</nav>
<script>
document.addEventListener('DOMContentLoaded', function() {
const sidebar = document.querySelector('.sidebar');
const toggleButton = document.getElementById('sidebarToggle');
if (toggleButton && sidebar) {
toggleButton.addEventListener('click', function() {
sidebar.classList.toggle('collapsed');
// Update button icon based on state
const icon = toggleButton.querySelector('i');
if (sidebar.classList.contains('collapsed')) {
icon.className = 'bi bi-arrow-bar-right';
} else {
icon.className = 'bi bi-list';
}
});
}
});
</script>
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
{"GlobalPropertiesHash":"GOyYWGOmw2NuuVhp3tgpB/kw0XHSM1IZUmhItjXblmY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"R7Rea/YQmcweqCbKffD9oUelggfpJQX85r65aYZsas0=","InputHashes":["RG7XWyUAviwxT7s7woy6mwrL/lb9kKaPHUZvJMBFzGQ=","sZk\u002BV7ywaxNJgwRE7cE7Hibt2qSdapA41/3b9UckIHQ=","wN\u002B6sU2WZBc4bJ\u002B7khSCkY4vayA4Jqrvpg913EeA9Ao=","hcbEX5wQXO7dZhO76Y/kLBldebvlWME732popbbEK4c=","FOA0og0bz7xxjI6FQUxXQt3OCeJ2bLYdqSUhoaFZJVM=","CtHssyrjZuXbFnCsg/Franori6EpIlyoyOO\u002BHJLUEzQ=","\u002B7orKp27fOxYH9\u002BLlTGZgBYToFGMLXynWDyr4Qp51TM=","XpoVGqHhsNmlmX/noSBP9h7opG25qiPqLHch\u002BXNQXAs=","VCycsFqTp\u002BRrQnRNd5LfNczQS4iEjpk99tWzotQbn1E=","AFojQcC7k2ydpiRHmOwvOd1dy1NwRofC7d58w2rmFME=","msG2BJNYahkfAeIGvlFtmUIvfi9LZYldZMs11JZTXMA=","17ULrvhzxhNOTwogVU6FEhenBi/kTipscM3Ov8gYSOk=","eWgmVTDJOjmhe8ejMSeIVzUYFnKk0quLHWUM5biPtUA=","YfJ0oK8j3WLqchRv3VwFlG8RrV0t\u002BYZ9KwvzKvN3b3U=","2b0ELLNbgEOaNaTEKqFCAwVFJpCjbeWuL7QDg45HQ\u002BQ=","7M4mraPdoBIVghR\u002BDDmtxDxAGvyiCW0w0Fa0Veeg\u002BJo=","ONSQHcz6MWjSUfu7ABZZBT6W\u002BfjIaXTvv6EdGwnGQX4=","Y15\u002BXM/VeJZHFMTHX2gOFrNXbKxt\u002Bdp3e3DikA117Vw=","ola1HFIuPFF5W\u002BWZ5iAwAcXZlGOYDpzJVPOJ0eZEG10=","Rz1qYEcy/7ETbVXMcSBqLI9GATo3MIRrqexeEFiMUY8=","eUTJYFbNdwVaL8JqNf19J3\u002BF23o7885AQxP6SXsfeWM=","Dhk2NwBbDfM2YU848LiWcIQeGdnoe/IFLpskGBaNZIc=","zvVdQ/HsTypZOzrQyV2RczwBjmxM7zUb3i93Tw7hZQ0=","xQn/oAuEAx9E/9xtXF3FmtKaxHBuuUu2WgNG9kfxu/A=","SjaCgIQT0Jx2cF24fkf5S3NHdR5pYGG4lQ11yBSKCIM=","2zw5oqhxosyvhjGECMEImzj99UMnO1hUHxGGLPxSkB4=","M0LCjiOI7TqJ9Njmar50/uvb/LDEJWRTh9J9tb8fodg=","Su1SMb8/HCN4qjL8s2w9C6sjwGtsWIzO/GIsO5Uhwbk=","Ol9gXhTvFMYo4KxVbf5OT2l7HiViRpK7stctnaXZigc=","3jaP2zi5MNIBhUJMvrzilmI3HY/Ao1JO/8d9ndYeSNo=","3SYR8yp/8aPqzlk9cCGkIFyRev4nMWxpYk8/\u002BFzc2MM=","unTMqSndIVD2Q82OOVv\u002BP6/4zwR2/LDk7njzNBI3\u002BEQ=","fHb3ZjPUD23Pwg6/bjEK9ZY6EX6DBaDXonSjXVl7AYE=","eKwjYk2zE\u002B2TTCQ/05Kviko//\u002BzhusOufTnaKebCQYc=","YEcN1Li2w3PQ5xFAILQfEN5ArWW4zYo1TnHhcgs45WY=","RVZR933agSfevE/gnmkTc1JZmEu5yi/hiRBh0rrAeyk=","scvW2iIZC32bgJ/RwSYPxvj3tnYh0DqX4J5als5SJpc=","jnmHPvAA\u002BnJOm9lEcDNEYrNpX74b1X26lSVb5Ti6VtU=","9MlRP8Uk14cS75RY2t0Pmx2kzNxk74K7wqLdvJsAnhw=","9hYee0YUplDQS3688ZgTWCWYEHEqmpkl3s\u002BDv1CNIaY=","7GaH1LWkvZVlGwd8KWu\u002Br4OAq/JDNlnZDBm7TUEDqYQ=","zUczkDj/GrsLhneNOa\u002BbJDVJFhbj01u901JOncDU3lY=","QXseDsczZisD\u002BVabnNl1/WbLJpTFx9KyYCGldUlD8Gw=","DX8oXpcqB1NjPTRi4sHWGul6yBGIcqdUrLYrdMASJUU=","Lx33F\u002BqvnGnw1kBYfJmiRqTSXbZkvmuf4gjsO\u002BK3uLU=","2d6zXj0AgUrMK/y\u002BWqb8LBEX5JTaev3972UIOW0Tg7U=","wbsrV5dCmltklCFPDVpZp0I\u002BlytYPDMEcla/pAZfefw=","YQSCbn9SqF9IBpkSUnEXTlCFi2/z4LgntidD4BrqrLc=","RG1fv5qx0sXG73vJ/XRab8r1/clvDsSxyOlh\u002BsYySXo=","OleENIUTsBYnmj9yppIvDXJygkAGZ2VeJjN/FVgdaQ8=","qfD541WeYOyPj6UjeTT9ALNgg1WTJoB\u002B6bHCEE9v1\u002B4=","bOODK8suWY0Dca1YomASTiCjx47Twhey1JnbMgplafo=","Jw/pVZ5ZuT6RLBBcRotTM1SHKZuaLYx2siLr8PBcjMA=","TC6r3M4wzXuO1b/sfyioLV597YK39YzOgXZdoZwB3F8=","I/RrNp5PXY1\u002B5oq2lpzq2FP2WW8R/Z6T1NcD6oRawM8=","9CKOOhMCVvHN\u002Bf/vIOg5Z/lp1v0kA8G\u002BCI5rJyndZLs=","QKg1cU\u002Bh3FL2MQJPQDiHmq53A83xoIaXpnKMN6tiRr8=","73ja2p/my\u002BPGBmOLm36G3YCalBzOlUxk2spum0YIzxg=","lmbypiyXqlXg7hG092wPLrExnQDmpEPq4M\u002BeeaWZDQE=","ig0Ll56p1CW0s\u002Bjh8Sl83f6VL9eWEvQMa64SzigT5VE="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"GOyYWGOmw2NuuVhp3tgpB/kw0XHSM1IZUmhItjXblmY=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"R7Rea/YQmcweqCbKffD9oUelggfpJQX85r65aYZsas0=","InputHashes":["7rvGSdx2fSpmeMt4jtYwa/cK4eZasB5DvEa1lUS7vKg=","sZk\u002BV7ywaxNJgwRE7cE7Hibt2qSdapA41/3b9UckIHQ=","wN\u002B6sU2WZBc4bJ\u002B7khSCkY4vayA4Jqrvpg913EeA9Ao=","hcbEX5wQXO7dZhO76Y/kLBldebvlWME732popbbEK4c=","FOA0og0bz7xxjI6FQUxXQt3OCeJ2bLYdqSUhoaFZJVM=","CtHssyrjZuXbFnCsg/Franori6EpIlyoyOO\u002BHJLUEzQ=","\u002B7orKp27fOxYH9\u002BLlTGZgBYToFGMLXynWDyr4Qp51TM=","XpoVGqHhsNmlmX/noSBP9h7opG25qiPqLHch\u002BXNQXAs=","VCycsFqTp\u002BRrQnRNd5LfNczQS4iEjpk99tWzotQbn1E=","AFojQcC7k2ydpiRHmOwvOd1dy1NwRofC7d58w2rmFME=","msG2BJNYahkfAeIGvlFtmUIvfi9LZYldZMs11JZTXMA=","17ULrvhzxhNOTwogVU6FEhenBi/kTipscM3Ov8gYSOk=","eWgmVTDJOjmhe8ejMSeIVzUYFnKk0quLHWUM5biPtUA=","YfJ0oK8j3WLqchRv3VwFlG8RrV0t\u002BYZ9KwvzKvN3b3U=","2b0ELLNbgEOaNaTEKqFCAwVFJpCjbeWuL7QDg45HQ\u002BQ=","7M4mraPdoBIVghR\u002BDDmtxDxAGvyiCW0w0Fa0Veeg\u002BJo=","ONSQHcz6MWjSUfu7ABZZBT6W\u002BfjIaXTvv6EdGwnGQX4=","Y15\u002BXM/VeJZHFMTHX2gOFrNXbKxt\u002Bdp3e3DikA117Vw=","ola1HFIuPFF5W\u002BWZ5iAwAcXZlGOYDpzJVPOJ0eZEG10=","Rz1qYEcy/7ETbVXMcSBqLI9GATo3MIRrqexeEFiMUY8=","eUTJYFbNdwVaL8JqNf19J3\u002BF23o7885AQxP6SXsfeWM=","Dhk2NwBbDfM2YU848LiWcIQeGdnoe/IFLpskGBaNZIc=","zvVdQ/HsTypZOzrQyV2RczwBjmxM7zUb3i93Tw7hZQ0=","xQn/oAuEAx9E/9xtXF3FmtKaxHBuuUu2WgNG9kfxu/A=","SjaCgIQT0Jx2cF24fkf5S3NHdR5pYGG4lQ11yBSKCIM=","2zw5oqhxosyvhjGECMEImzj99UMnO1hUHxGGLPxSkB4=","M0LCjiOI7TqJ9Njmar50/uvb/LDEJWRTh9J9tb8fodg=","Su1SMb8/HCN4qjL8s2w9C6sjwGtsWIzO/GIsO5Uhwbk=","Ol9gXhTvFMYo4KxVbf5OT2l7HiViRpK7stctnaXZigc=","3jaP2zi5MNIBhUJMvrzilmI3HY/Ao1JO/8d9ndYeSNo=","3SYR8yp/8aPqzlk9cCGkIFyRev4nMWxpYk8/\u002BFzc2MM=","unTMqSndIVD2Q82OOVv\u002BP6/4zwR2/LDk7njzNBI3\u002BEQ=","fHb3ZjPUD23Pwg6/bjEK9ZY6EX6DBaDXonSjXVl7AYE=","eKwjYk2zE\u002B2TTCQ/05Kviko//\u002BzhusOufTnaKebCQYc=","YEcN1Li2w3PQ5xFAILQfEN5ArWW4zYo1TnHhcgs45WY=","RVZR933agSfevE/gnmkTc1JZmEu5yi/hiRBh0rrAeyk=","scvW2iIZC32bgJ/RwSYPxvj3tnYh0DqX4J5als5SJpc=","jnmHPvAA\u002BnJOm9lEcDNEYrNpX74b1X26lSVb5Ti6VtU=","9MlRP8Uk14cS75RY2t0Pmx2kzNxk74K7wqLdvJsAnhw=","9hYee0YUplDQS3688ZgTWCWYEHEqmpkl3s\u002BDv1CNIaY=","7GaH1LWkvZVlGwd8KWu\u002Br4OAq/JDNlnZDBm7TUEDqYQ=","zUczkDj/GrsLhneNOa\u002BbJDVJFhbj01u901JOncDU3lY=","QXseDsczZisD\u002BVabnNl1/WbLJpTFx9KyYCGldUlD8Gw=","DX8oXpcqB1NjPTRi4sHWGul6yBGIcqdUrLYrdMASJUU=","Lx33F\u002BqvnGnw1kBYfJmiRqTSXbZkvmuf4gjsO\u002BK3uLU=","2d6zXj0AgUrMK/y\u002BWqb8LBEX5JTaev3972UIOW0Tg7U=","wbsrV5dCmltklCFPDVpZp0I\u002BlytYPDMEcla/pAZfefw=","YQSCbn9SqF9IBpkSUnEXTlCFi2/z4LgntidD4BrqrLc=","RG1fv5qx0sXG73vJ/XRab8r1/clvDsSxyOlh\u002BsYySXo=","OleENIUTsBYnmj9yppIvDXJygkAGZ2VeJjN/FVgdaQ8=","qfD541WeYOyPj6UjeTT9ALNgg1WTJoB\u002B6bHCEE9v1\u002B4=","bOODK8suWY0Dca1YomASTiCjx47Twhey1JnbMgplafo=","Jw/pVZ5ZuT6RLBBcRotTM1SHKZuaLYx2siLr8PBcjMA=","TC6r3M4wzXuO1b/sfyioLV597YK39YzOgXZdoZwB3F8=","I/RrNp5PXY1\u002B5oq2lpzq2FP2WW8R/Z6T1NcD6oRawM8=","9CKOOhMCVvHN\u002Bf/vIOg5Z/lp1v0kA8G\u002BCI5rJyndZLs=","QKg1cU\u002Bh3FL2MQJPQDiHmq53A83xoIaXpnKMN6tiRr8=","73ja2p/my\u002BPGBmOLm36G3YCalBzOlUxk2spum0YIzxg=","lmbypiyXqlXg7hG092wPLrExnQDmpEPq4M\u002BeeaWZDQE=","ig0Ll56p1CW0s\u002Bjh8Sl83f6VL9eWEvQMa64SzigT5VE=","fQx6tZGL8eT2p4PD3deQayyXi1mBx5dRW0U8gtf6DMM="],"CachedAssets":{},"CachedCopyCandidates":{}}
+1 -1
View File
@@ -1 +1 @@
{"GlobalPropertiesHash":"dTHwDiTQ4hJYdmKO9xqu9ZCVKoaec0XI9AxL+YTrrxc=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["BpImrEMo52w6bqrejlV7vSb82az\u002BZyHdvkc5K26Y7eE=","a5UsKPhkI9FkpAiNA1ymkUo7ug72D30zrmd5jJuyLb4=","VXCSduCoRGoZ5eOSfAj51GsGnNVvq7A5qKF5D/N7Vx0=","lYOz00m47sCm26fa1A/DFVKnjqVzxu9nwMLP8IuW7xo=","6bA4Xmr8qmrZ2r4ukqX9rM6kVzUrIeI94cM9zBObY3M=","l099lCYtMtQryAqb9VTCRIBp0Jcbpf4BalfsulUoFzQ=","V6/Mi3mlMBego46prUANQbdZ1JC0JZHHdYiXWq2\u002Bl0Y=","tl0jSwp2oIQnMenRmm6Mbm313bzgl9pBwBPGlB4uOPo=","tbh14xDAb77jsCKNNZjBojrK8V\u002BuRrCt8pXuAbtqkIo=","GxKlsEe\u002BPorb4Q9gASZJViO4cZfx6jUCEBQjth\u002BbKyQ=","BujRH2INcYzLBulIqjiKKoWj4\u002BbBT0vuhWVB9V7qy9Q=","EepEENuPyTp00hVBGTVzBoVinVly6PiqjQii1osa6kM=","5HcjLmCBtQj/w6XbXf8\u002BCvPC21ftmG5huW5hAakQj2I=","pREL0QA5WROOeeZwRBgJ9om8ccir8XjyYPvQGVlEOqw=","uTfRVeFsnFdQrds7/R5pdtDmoRt4CgIt0nZfMajU8Ok=","kOjALiJp3ssJnC9/\u002BufurmbWP5mGTftoFnUlCEDvu1Y=","OVuwBaCI8R1LKgQ7MpbBQW1MLJdJ5YTckKjK0e\u002BBB/0=","iJvX3JMtNzW09/txMzwAkKxEZoDub7KMH169RwIXBPs=","Jx7VvNisirl41n21YXz5RZ7YC3p\u002BduhgL9Fl4hAQXnU=","uQn60G4s3oNGwLqstU1/neNzshVCswoyOWLl1Fj05Tg=","XHFdkx1NMsJcQH4i0fivlz4h7J3Cn7en7webWTH/bmo=","U67CgipeJ7PfwasvH\u002Bfqt7SBewDnpnt99z8DKoXQzNA=","mseMwc\u002BhG\u002BU8usO5dRA2P\u002BpOMd5PWhffhlwmduKXCJk=","Gq2CAmOPKxxarQPAX2MqPfSN6pt/LIZWFWEa8tBng0I=","HYsHOl/AYyjvk1kiJz18194UGfuAbW0SnMf4TCopcw4=","rwehZlDMvo1sryVYAsPJaHmrJ2rPhqvgKQD6Z1O\u002B3Uc=","XeKKeCm2D4KUJaU5sqmJQdUk7\u002B8A\u002BLzMpqzubv2aoOM=","/zzWV7B7mzbQrZfS96I5FnN7LBmNW5EbLXpSn\u002B9WW/M=","z5U4weixRLkjNozy8VE0T7duu5LEz2RPAmLbFfytYGY=","/N/rp0KUV9X4nDd0kU44g9GSMRdkLmQ9YbtXm/pS5dA=","Ohkm3vqgAWGBAAI4WLyDTwmqAP/wOdKFE42zO9dfl0Q=","eNSJVvFwOiBiNSPF24v6tmv/8/FN9UzPYVoi8Qn8bEo=","0UQKTStUtl3P2puWo1DKykq\u002BjjwDwKRon3olDS6tvHU=","6Q3AeoSqI7vpqdDDUNOSnQ4FYwL5EUR6rTOt9Sf1Rz0=","1rt5\u002B0050W7zo/TZnQe\u002BZec8SBN47eRtlHMUPbm9BU8=","8SGo\u002BxEjiy6wtpY2qoLQAVpU2SnQo7iN34B5T4AlURg=","x79AODv3QZ5w9i3xqovT9BbAXxxd6JZxhVAy6o4ajzs=","cKjDw3B8lc9k/tvqcaER\u002B3ndMwrGQHrDYWSdOY4faV8=","p8dvjfGnu7pGuvblA3vxKLKx29xYbQIUIWysdq2dmUo=","BG1wzq2\u002BUnva6Gj660f/4QSvh7Y\u002B4BkZ/wY9RL4Gw1E=","EMBCFam7ihuahYKSXkchvO5Oq1G6WATBlbGZb/1Wvgw=","qmvGIjcCX8r6TSFwIn5\u002BLEqxe0r6TyWX6Dh7IZuXPyc=","lN17WNch1WB21wDcx8isw\u002B9LESsxbL5ZLcwkcguFwDw=","xFTE\u002BmS9ms48MwKeAOZlAcjQcW2SFEb1HqUl40vv6\u002BA=","I7cNmUMe4LNDvkoc59Tb/PSRJVZAmfnrfaLGIkazUE8=","mVV74WiMoMIt7VWKgRMp3Ffhsn6zMwDlhI11UroeBuY=","1be6J4hFUF43o4ugBHafnfNfQTkZ3vWGedt\u002BdP8sPo4=","vuftYVY\u002Bo7U2Nxhh6XMNpilZIm3ZsptViz7\u002BanqA3Hc=","imfvoQHzb8LfDXM7qRYlx7axOpksQyHig/s\u002BmIcfxpk=","nJpGXEZYduduKpUXiNd6keeqmPvaEgvDoDFQWsGCzcw=","STogQT7rnxvTzdXO1jKjFvHAJyiRDy1pcjGg\u002Bz2lLbU=","y0yeF4H9Zqn1\u002BRsgkxQlXguGWbRQmGSTY1Z1BC0FCuQ=","K/Thn9wvK/PAKEKSQqsu\u002BKF/gsoXvfT2yWOkYV9irEY=","vhLVcon4oX9c1uw5NqDO\u002Bbmp7U8Wut5qBvibR3av0rA=","QKHrAtLbmxUoOsZrHwyNH/IyH86zNvOqxWSlN3FyucA=","6wCEa/kwBVkKvxfkUIFAxzHXWu4/p/R5/WtLkSHmLHc=","G07nmbZoVpM0XTP8Lz65k3KltLdOeLXLxcbihltgpGQ=","1hKIH5KS3ipyc1\u002BCQ\u002BxwaZMNvI1OZnLX8eArQaOVzAE=","J\u002BTkoAeMyxDzquSGJ3s6/xjqRpSmQj3hnQ/nQ3ZMT2w=","6RMMCAIDMT6w6ebgi/Bdd1UPJ1TWHh5v/RLyuInLByM=","XdM7cHaWP0hnWT6hjmmAQZrH5muzSfxofZZMReavdhE=","Y6FuXJmG4asZZywv8eq2Ki3M3DHBabgHxixPNEPtsg0=","ocP7tLQvAC3JoF1EP3jOXtv3\u002Bd0qM3kdE0/8cY\u002BVC18=","CH9QcGeTGE6F7iss5IMJIdGAfaixRCv52kGorH\u002Br7UQ=","T1FmR6BuWj8NdQOpYSYpkD9zKCBLg9Fq2Txyqzbv0ow=","7pE8sSLDf7aqo6DjV5RYq1M\u002BISPAIo7BW6XwwSh6O1w=","yALO4iHkRJn2NKox\u002B\u002B4OZBqzhGPkvrA2bOX0emXGiac=","9JrQ3zBPaGik8svNVNuioqNGKWNvShwz32tj7Oyf9wM=","j0EJHazrwSEUHAPSEiUUhdwXrZ4ben27F7iH5Hnje/M=","JiuGUyztERDBSvF/6GDip3jqDWJzkWH6IdRYkvi5bw0=","bfM6e\u002BYucNXsBEQIq6EkXf6mNT\u002BPp63/xGN1rdjLZiQ=","7rNiQh7D0WAW\u002BBIalpkA6TbN/zPYEJsqZgWhr/HPCVs=","5CJDU5WOqZlcGfMhyrjY8yklCO49EP8N2oJgZCPtCvA=","PwMpWOwh/ebKXLFaIW93w/Nmg9sgkp21\u002BkJjs5VxJFY=","JPhvOaP4s5GzcXST3QvJD8qP\u002B/4XR1TCfIiP4loGLb8=","NVCP0V7YVnf5urwl2ofENh5w6TJfZ2MUUgzQ389SA1w=","VfTAU/4gffsId\u002B7V4v5FnVYVwig5FKCwrdNkRzRwGU0=","Y7eqVxFX7a20bQsQuQshHeV5QtkyeSYASzhM4PXTo30=","yOVmWadteUwj\u002BNmQpObPtaDAt52hoJ\u002Bl\u002BNzJVK7MBAU=","9cTrEyIQdmDa25ocL8Eyud7FcyZQ0KIMjdK17iVzX2k=","LpesthIqevfUpWNrijFwa6P4yw9y1fjCvhDIJi1HNSY=","7KbCVRYfzTj0uAmCgvUKF\u002B90LeMurRZZC0\u002BbZdNLQgg=","Yixqc1XRFIJzTzMVIDHsDQ6xJExHcrnledpmuK51aKg=","829a\u002BDQvI6dHkKDNA93VIjPgJhUHsPn\u002BBTPY8rp9WgM="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"dTHwDiTQ4hJYdmKO9xqu9ZCVKoaec0XI9AxL+YTrrxc=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["n5uFp7neWGmBSroF9wz6UeHPFKI4V7XWOIo8ljHWf9Y=","Kpaz0Q/JtnOuEMA9H8djKgxs1wkq4Io9PxjHSosNMQE=","a5UsKPhkI9FkpAiNA1ymkUo7ug72D30zrmd5jJuyLb4=","VXCSduCoRGoZ5eOSfAj51GsGnNVvq7A5qKF5D/N7Vx0=","lYOz00m47sCm26fa1A/DFVKnjqVzxu9nwMLP8IuW7xo=","6bA4Xmr8qmrZ2r4ukqX9rM6kVzUrIeI94cM9zBObY3M=","l099lCYtMtQryAqb9VTCRIBp0Jcbpf4BalfsulUoFzQ=","V6/Mi3mlMBego46prUANQbdZ1JC0JZHHdYiXWq2\u002Bl0Y=","tl0jSwp2oIQnMenRmm6Mbm313bzgl9pBwBPGlB4uOPo=","tbh14xDAb77jsCKNNZjBojrK8V\u002BuRrCt8pXuAbtqkIo=","GxKlsEe\u002BPorb4Q9gASZJViO4cZfx6jUCEBQjth\u002BbKyQ=","BujRH2INcYzLBulIqjiKKoWj4\u002BbBT0vuhWVB9V7qy9Q=","EepEENuPyTp00hVBGTVzBoVinVly6PiqjQii1osa6kM=","5HcjLmCBtQj/w6XbXf8\u002BCvPC21ftmG5huW5hAakQj2I=","pREL0QA5WROOeeZwRBgJ9om8ccir8XjyYPvQGVlEOqw=","uTfRVeFsnFdQrds7/R5pdtDmoRt4CgIt0nZfMajU8Ok=","kOjALiJp3ssJnC9/\u002BufurmbWP5mGTftoFnUlCEDvu1Y=","OVuwBaCI8R1LKgQ7MpbBQW1MLJdJ5YTckKjK0e\u002BBB/0=","iJvX3JMtNzW09/txMzwAkKxEZoDub7KMH169RwIXBPs=","Jx7VvNisirl41n21YXz5RZ7YC3p\u002BduhgL9Fl4hAQXnU=","uQn60G4s3oNGwLqstU1/neNzshVCswoyOWLl1Fj05Tg=","XHFdkx1NMsJcQH4i0fivlz4h7J3Cn7en7webWTH/bmo=","U67CgipeJ7PfwasvH\u002Bfqt7SBewDnpnt99z8DKoXQzNA=","mseMwc\u002BhG\u002BU8usO5dRA2P\u002BpOMd5PWhffhlwmduKXCJk=","Gq2CAmOPKxxarQPAX2MqPfSN6pt/LIZWFWEa8tBng0I=","HYsHOl/AYyjvk1kiJz18194UGfuAbW0SnMf4TCopcw4=","rwehZlDMvo1sryVYAsPJaHmrJ2rPhqvgKQD6Z1O\u002B3Uc=","XeKKeCm2D4KUJaU5sqmJQdUk7\u002B8A\u002BLzMpqzubv2aoOM=","/zzWV7B7mzbQrZfS96I5FnN7LBmNW5EbLXpSn\u002B9WW/M=","z5U4weixRLkjNozy8VE0T7duu5LEz2RPAmLbFfytYGY=","/N/rp0KUV9X4nDd0kU44g9GSMRdkLmQ9YbtXm/pS5dA=","Ohkm3vqgAWGBAAI4WLyDTwmqAP/wOdKFE42zO9dfl0Q=","eNSJVvFwOiBiNSPF24v6tmv/8/FN9UzPYVoi8Qn8bEo=","0UQKTStUtl3P2puWo1DKykq\u002BjjwDwKRon3olDS6tvHU=","6Q3AeoSqI7vpqdDDUNOSnQ4FYwL5EUR6rTOt9Sf1Rz0=","1rt5\u002B0050W7zo/TZnQe\u002BZec8SBN47eRtlHMUPbm9BU8=","8SGo\u002BxEjiy6wtpY2qoLQAVpU2SnQo7iN34B5T4AlURg=","x79AODv3QZ5w9i3xqovT9BbAXxxd6JZxhVAy6o4ajzs=","cKjDw3B8lc9k/tvqcaER\u002B3ndMwrGQHrDYWSdOY4faV8=","p8dvjfGnu7pGuvblA3vxKLKx29xYbQIUIWysdq2dmUo=","BG1wzq2\u002BUnva6Gj660f/4QSvh7Y\u002B4BkZ/wY9RL4Gw1E=","EMBCFam7ihuahYKSXkchvO5Oq1G6WATBlbGZb/1Wvgw=","qmvGIjcCX8r6TSFwIn5\u002BLEqxe0r6TyWX6Dh7IZuXPyc=","lN17WNch1WB21wDcx8isw\u002B9LESsxbL5ZLcwkcguFwDw=","xFTE\u002BmS9ms48MwKeAOZlAcjQcW2SFEb1HqUl40vv6\u002BA=","I7cNmUMe4LNDvkoc59Tb/PSRJVZAmfnrfaLGIkazUE8=","mVV74WiMoMIt7VWKgRMp3Ffhsn6zMwDlhI11UroeBuY=","1be6J4hFUF43o4ugBHafnfNfQTkZ3vWGedt\u002BdP8sPo4=","vuftYVY\u002Bo7U2Nxhh6XMNpilZIm3ZsptViz7\u002BanqA3Hc=","imfvoQHzb8LfDXM7qRYlx7axOpksQyHig/s\u002BmIcfxpk=","nJpGXEZYduduKpUXiNd6keeqmPvaEgvDoDFQWsGCzcw=","STogQT7rnxvTzdXO1jKjFvHAJyiRDy1pcjGg\u002Bz2lLbU=","y0yeF4H9Zqn1\u002BRsgkxQlXguGWbRQmGSTY1Z1BC0FCuQ=","K/Thn9wvK/PAKEKSQqsu\u002BKF/gsoXvfT2yWOkYV9irEY=","vhLVcon4oX9c1uw5NqDO\u002Bbmp7U8Wut5qBvibR3av0rA=","QKHrAtLbmxUoOsZrHwyNH/IyH86zNvOqxWSlN3FyucA=","6wCEa/kwBVkKvxfkUIFAxzHXWu4/p/R5/WtLkSHmLHc=","G07nmbZoVpM0XTP8Lz65k3KltLdOeLXLxcbihltgpGQ=","1hKIH5KS3ipyc1\u002BCQ\u002BxwaZMNvI1OZnLX8eArQaOVzAE=","J\u002BTkoAeMyxDzquSGJ3s6/xjqRpSmQj3hnQ/nQ3ZMT2w=","6RMMCAIDMT6w6ebgi/Bdd1UPJ1TWHh5v/RLyuInLByM=","XdM7cHaWP0hnWT6hjmmAQZrH5muzSfxofZZMReavdhE=","Y6FuXJmG4asZZywv8eq2Ki3M3DHBabgHxixPNEPtsg0=","ocP7tLQvAC3JoF1EP3jOXtv3\u002Bd0qM3kdE0/8cY\u002BVC18=","CH9QcGeTGE6F7iss5IMJIdGAfaixRCv52kGorH\u002Br7UQ=","T1FmR6BuWj8NdQOpYSYpkD9zKCBLg9Fq2Txyqzbv0ow=","7pE8sSLDf7aqo6DjV5RYq1M\u002BISPAIo7BW6XwwSh6O1w=","s/i8LJ/e4qIDjEUPgs\u002BEm1BiSxoFaFW\u002BiNsciJ46Se0=","MCboMATobp0xAPy7uFlGMDj90uup3KgbQZQ4S\u002BTB6\u002BI=","\u002BD1KwIkkIKqP68kYi7AiSant9WsyQ\u002BekMikmB3EJxN0=","4argFkGnAwNxETMHSxzvQ2PmNY8KuPT3oq95msw6X64=","9JrQ3zBPaGik8svNVNuioqNGKWNvShwz32tj7Oyf9wM=","Qky4FjUO3SqTt8S6AxWoOxZFPezRDX6fyc\u002ByS1296HI=","8R6VzxQRmFMk\u002BXn\u002BwUYqnwsYuSmmYxUXOD2Wepgf4Z0=","JiuGUyztERDBSvF/6GDip3jqDWJzkWH6IdRYkvi5bw0=","bfM6e\u002BYucNXsBEQIq6EkXf6mNT\u002BPp63/xGN1rdjLZiQ=","7rNiQh7D0WAW\u002BBIalpkA6TbN/zPYEJsqZgWhr/HPCVs=","5CJDU5WOqZlcGfMhyrjY8yklCO49EP8N2oJgZCPtCvA=","PwMpWOwh/ebKXLFaIW93w/Nmg9sgkp21\u002BkJjs5VxJFY=","JPhvOaP4s5GzcXST3QvJD8qP\u002B/4XR1TCfIiP4loGLb8=","NVCP0V7YVnf5urwl2ofENh5w6TJfZ2MUUgzQ389SA1w=","VfTAU/4gffsId\u002B7V4v5FnVYVwig5FKCwrdNkRzRwGU0=","Y7eqVxFX7a20bQsQuQshHeV5QtkyeSYASzhM4PXTo30=","yOVmWadteUwj\u002BNmQpObPtaDAt52hoJ\u002Bl\u002BNzJVK7MBAU=","9cTrEyIQdmDa25ocL8Eyud7FcyZQ0KIMjdK17iVzX2k=","a/zdACF21w3ntvbFDoozP8VBvuUGVu51eJccri6\u002Bzyk=","7KbCVRYfzTj0uAmCgvUKF\u002B90LeMurRZZC0\u002BbZdNLQgg=","pT3uRUBLB8sRCYZfqQZMjGIYxN7tF6VWx7nczEtejvo=","MKQHw6j1aupPEmjQyQaJ7hEIlQyS5vUgYQ19ncmXeSg=","Yixqc1XRFIJzTzMVIDHsDQ6xJExHcrnledpmuK51aKg=","ftbSxYFJXTxUMNOMv2m/NBw9kW6scWQGv\u002BoKf/zzGMY="],"CachedAssets":{},"CachedCopyCandidates":{}}
+1 -1
View File
@@ -1 +1 @@
{"GlobalPropertiesHash":"b3AVK0PfgHEjkHEQ+ecR24BVpHFQ4S+w6p/xGRP0mXU=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["BpImrEMo52w6bqrejlV7vSb82az\u002BZyHdvkc5K26Y7eE=","a5UsKPhkI9FkpAiNA1ymkUo7ug72D30zrmd5jJuyLb4=","VXCSduCoRGoZ5eOSfAj51GsGnNVvq7A5qKF5D/N7Vx0=","lYOz00m47sCm26fa1A/DFVKnjqVzxu9nwMLP8IuW7xo=","6bA4Xmr8qmrZ2r4ukqX9rM6kVzUrIeI94cM9zBObY3M=","l099lCYtMtQryAqb9VTCRIBp0Jcbpf4BalfsulUoFzQ=","V6/Mi3mlMBego46prUANQbdZ1JC0JZHHdYiXWq2\u002Bl0Y=","tl0jSwp2oIQnMenRmm6Mbm313bzgl9pBwBPGlB4uOPo=","tbh14xDAb77jsCKNNZjBojrK8V\u002BuRrCt8pXuAbtqkIo=","GxKlsEe\u002BPorb4Q9gASZJViO4cZfx6jUCEBQjth\u002BbKyQ=","BujRH2INcYzLBulIqjiKKoWj4\u002BbBT0vuhWVB9V7qy9Q=","EepEENuPyTp00hVBGTVzBoVinVly6PiqjQii1osa6kM=","5HcjLmCBtQj/w6XbXf8\u002BCvPC21ftmG5huW5hAakQj2I=","pREL0QA5WROOeeZwRBgJ9om8ccir8XjyYPvQGVlEOqw=","uTfRVeFsnFdQrds7/R5pdtDmoRt4CgIt0nZfMajU8Ok=","kOjALiJp3ssJnC9/\u002BufurmbWP5mGTftoFnUlCEDvu1Y=","OVuwBaCI8R1LKgQ7MpbBQW1MLJdJ5YTckKjK0e\u002BBB/0=","iJvX3JMtNzW09/txMzwAkKxEZoDub7KMH169RwIXBPs=","Jx7VvNisirl41n21YXz5RZ7YC3p\u002BduhgL9Fl4hAQXnU=","uQn60G4s3oNGwLqstU1/neNzshVCswoyOWLl1Fj05Tg=","XHFdkx1NMsJcQH4i0fivlz4h7J3Cn7en7webWTH/bmo=","U67CgipeJ7PfwasvH\u002Bfqt7SBewDnpnt99z8DKoXQzNA=","mseMwc\u002BhG\u002BU8usO5dRA2P\u002BpOMd5PWhffhlwmduKXCJk=","Gq2CAmOPKxxarQPAX2MqPfSN6pt/LIZWFWEa8tBng0I=","HYsHOl/AYyjvk1kiJz18194UGfuAbW0SnMf4TCopcw4=","rwehZlDMvo1sryVYAsPJaHmrJ2rPhqvgKQD6Z1O\u002B3Uc=","XeKKeCm2D4KUJaU5sqmJQdUk7\u002B8A\u002BLzMpqzubv2aoOM=","/zzWV7B7mzbQrZfS96I5FnN7LBmNW5EbLXpSn\u002B9WW/M=","z5U4weixRLkjNozy8VE0T7duu5LEz2RPAmLbFfytYGY=","/N/rp0KUV9X4nDd0kU44g9GSMRdkLmQ9YbtXm/pS5dA=","Ohkm3vqgAWGBAAI4WLyDTwmqAP/wOdKFE42zO9dfl0Q=","eNSJVvFwOiBiNSPF24v6tmv/8/FN9UzPYVoi8Qn8bEo=","0UQKTStUtl3P2puWo1DKykq\u002BjjwDwKRon3olDS6tvHU=","6Q3AeoSqI7vpqdDDUNOSnQ4FYwL5EUR6rTOt9Sf1Rz0=","1rt5\u002B0050W7zo/TZnQe\u002BZec8SBN47eRtlHMUPbm9BU8=","8SGo\u002BxEjiy6wtpY2qoLQAVpU2SnQo7iN34B5T4AlURg=","x79AODv3QZ5w9i3xqovT9BbAXxxd6JZxhVAy6o4ajzs=","cKjDw3B8lc9k/tvqcaER\u002B3ndMwrGQHrDYWSdOY4faV8=","p8dvjfGnu7pGuvblA3vxKLKx29xYbQIUIWysdq2dmUo=","BG1wzq2\u002BUnva6Gj660f/4QSvh7Y\u002B4BkZ/wY9RL4Gw1E=","EMBCFam7ihuahYKSXkchvO5Oq1G6WATBlbGZb/1Wvgw=","qmvGIjcCX8r6TSFwIn5\u002BLEqxe0r6TyWX6Dh7IZuXPyc=","lN17WNch1WB21wDcx8isw\u002B9LESsxbL5ZLcwkcguFwDw=","xFTE\u002BmS9ms48MwKeAOZlAcjQcW2SFEb1HqUl40vv6\u002BA=","I7cNmUMe4LNDvkoc59Tb/PSRJVZAmfnrfaLGIkazUE8=","mVV74WiMoMIt7VWKgRMp3Ffhsn6zMwDlhI11UroeBuY=","1be6J4hFUF43o4ugBHafnfNfQTkZ3vWGedt\u002BdP8sPo4=","vuftYVY\u002Bo7U2Nxhh6XMNpilZIm3ZsptViz7\u002BanqA3Hc=","imfvoQHzb8LfDXM7qRYlx7axOpksQyHig/s\u002BmIcfxpk=","nJpGXEZYduduKpUXiNd6keeqmPvaEgvDoDFQWsGCzcw=","STogQT7rnxvTzdXO1jKjFvHAJyiRDy1pcjGg\u002Bz2lLbU=","y0yeF4H9Zqn1\u002BRsgkxQlXguGWbRQmGSTY1Z1BC0FCuQ=","K/Thn9wvK/PAKEKSQqsu\u002BKF/gsoXvfT2yWOkYV9irEY=","vhLVcon4oX9c1uw5NqDO\u002Bbmp7U8Wut5qBvibR3av0rA=","QKHrAtLbmxUoOsZrHwyNH/IyH86zNvOqxWSlN3FyucA=","6wCEa/kwBVkKvxfkUIFAxzHXWu4/p/R5/WtLkSHmLHc=","G07nmbZoVpM0XTP8Lz65k3KltLdOeLXLxcbihltgpGQ=","1hKIH5KS3ipyc1\u002BCQ\u002BxwaZMNvI1OZnLX8eArQaOVzAE=","J\u002BTkoAeMyxDzquSGJ3s6/xjqRpSmQj3hnQ/nQ3ZMT2w=","6RMMCAIDMT6w6ebgi/Bdd1UPJ1TWHh5v/RLyuInLByM=","XdM7cHaWP0hnWT6hjmmAQZrH5muzSfxofZZMReavdhE=","Y6FuXJmG4asZZywv8eq2Ki3M3DHBabgHxixPNEPtsg0=","ocP7tLQvAC3JoF1EP3jOXtv3\u002Bd0qM3kdE0/8cY\u002BVC18=","CH9QcGeTGE6F7iss5IMJIdGAfaixRCv52kGorH\u002Br7UQ=","T1FmR6BuWj8NdQOpYSYpkD9zKCBLg9Fq2Txyqzbv0ow=","7pE8sSLDf7aqo6DjV5RYq1M\u002BISPAIo7BW6XwwSh6O1w=","yALO4iHkRJn2NKox\u002B\u002B4OZBqzhGPkvrA2bOX0emXGiac=","9JrQ3zBPaGik8svNVNuioqNGKWNvShwz32tj7Oyf9wM=","j0EJHazrwSEUHAPSEiUUhdwXrZ4ben27F7iH5Hnje/M=","JiuGUyztERDBSvF/6GDip3jqDWJzkWH6IdRYkvi5bw0=","bfM6e\u002BYucNXsBEQIq6EkXf6mNT\u002BPp63/xGN1rdjLZiQ=","7rNiQh7D0WAW\u002BBIalpkA6TbN/zPYEJsqZgWhr/HPCVs=","5CJDU5WOqZlcGfMhyrjY8yklCO49EP8N2oJgZCPtCvA=","PwMpWOwh/ebKXLFaIW93w/Nmg9sgkp21\u002BkJjs5VxJFY=","JPhvOaP4s5GzcXST3QvJD8qP\u002B/4XR1TCfIiP4loGLb8=","NVCP0V7YVnf5urwl2ofENh5w6TJfZ2MUUgzQ389SA1w=","VfTAU/4gffsId\u002B7V4v5FnVYVwig5FKCwrdNkRzRwGU0=","Y7eqVxFX7a20bQsQuQshHeV5QtkyeSYASzhM4PXTo30=","yOVmWadteUwj\u002BNmQpObPtaDAt52hoJ\u002Bl\u002BNzJVK7MBAU=","9cTrEyIQdmDa25ocL8Eyud7FcyZQ0KIMjdK17iVzX2k=","LpesthIqevfUpWNrijFwa6P4yw9y1fjCvhDIJi1HNSY=","7KbCVRYfzTj0uAmCgvUKF\u002B90LeMurRZZC0\u002BbZdNLQgg=","Yixqc1XRFIJzTzMVIDHsDQ6xJExHcrnledpmuK51aKg=","829a\u002BDQvI6dHkKDNA93VIjPgJhUHsPn\u002BBTPY8rp9WgM="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"b3AVK0PfgHEjkHEQ+ecR24BVpHFQ4S+w6p/xGRP0mXU=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["n5uFp7neWGmBSroF9wz6UeHPFKI4V7XWOIo8ljHWf9Y=","Kpaz0Q/JtnOuEMA9H8djKgxs1wkq4Io9PxjHSosNMQE=","a5UsKPhkI9FkpAiNA1ymkUo7ug72D30zrmd5jJuyLb4=","VXCSduCoRGoZ5eOSfAj51GsGnNVvq7A5qKF5D/N7Vx0=","lYOz00m47sCm26fa1A/DFVKnjqVzxu9nwMLP8IuW7xo=","6bA4Xmr8qmrZ2r4ukqX9rM6kVzUrIeI94cM9zBObY3M=","l099lCYtMtQryAqb9VTCRIBp0Jcbpf4BalfsulUoFzQ=","V6/Mi3mlMBego46prUANQbdZ1JC0JZHHdYiXWq2\u002Bl0Y=","tl0jSwp2oIQnMenRmm6Mbm313bzgl9pBwBPGlB4uOPo=","tbh14xDAb77jsCKNNZjBojrK8V\u002BuRrCt8pXuAbtqkIo=","GxKlsEe\u002BPorb4Q9gASZJViO4cZfx6jUCEBQjth\u002BbKyQ=","BujRH2INcYzLBulIqjiKKoWj4\u002BbBT0vuhWVB9V7qy9Q=","EepEENuPyTp00hVBGTVzBoVinVly6PiqjQii1osa6kM=","5HcjLmCBtQj/w6XbXf8\u002BCvPC21ftmG5huW5hAakQj2I=","pREL0QA5WROOeeZwRBgJ9om8ccir8XjyYPvQGVlEOqw=","uTfRVeFsnFdQrds7/R5pdtDmoRt4CgIt0nZfMajU8Ok=","kOjALiJp3ssJnC9/\u002BufurmbWP5mGTftoFnUlCEDvu1Y=","OVuwBaCI8R1LKgQ7MpbBQW1MLJdJ5YTckKjK0e\u002BBB/0=","iJvX3JMtNzW09/txMzwAkKxEZoDub7KMH169RwIXBPs=","Jx7VvNisirl41n21YXz5RZ7YC3p\u002BduhgL9Fl4hAQXnU=","uQn60G4s3oNGwLqstU1/neNzshVCswoyOWLl1Fj05Tg=","XHFdkx1NMsJcQH4i0fivlz4h7J3Cn7en7webWTH/bmo=","U67CgipeJ7PfwasvH\u002Bfqt7SBewDnpnt99z8DKoXQzNA=","mseMwc\u002BhG\u002BU8usO5dRA2P\u002BpOMd5PWhffhlwmduKXCJk=","Gq2CAmOPKxxarQPAX2MqPfSN6pt/LIZWFWEa8tBng0I=","HYsHOl/AYyjvk1kiJz18194UGfuAbW0SnMf4TCopcw4=","rwehZlDMvo1sryVYAsPJaHmrJ2rPhqvgKQD6Z1O\u002B3Uc=","XeKKeCm2D4KUJaU5sqmJQdUk7\u002B8A\u002BLzMpqzubv2aoOM=","/zzWV7B7mzbQrZfS96I5FnN7LBmNW5EbLXpSn\u002B9WW/M=","z5U4weixRLkjNozy8VE0T7duu5LEz2RPAmLbFfytYGY=","/N/rp0KUV9X4nDd0kU44g9GSMRdkLmQ9YbtXm/pS5dA=","Ohkm3vqgAWGBAAI4WLyDTwmqAP/wOdKFE42zO9dfl0Q=","eNSJVvFwOiBiNSPF24v6tmv/8/FN9UzPYVoi8Qn8bEo=","0UQKTStUtl3P2puWo1DKykq\u002BjjwDwKRon3olDS6tvHU=","6Q3AeoSqI7vpqdDDUNOSnQ4FYwL5EUR6rTOt9Sf1Rz0=","1rt5\u002B0050W7zo/TZnQe\u002BZec8SBN47eRtlHMUPbm9BU8=","8SGo\u002BxEjiy6wtpY2qoLQAVpU2SnQo7iN34B5T4AlURg=","x79AODv3QZ5w9i3xqovT9BbAXxxd6JZxhVAy6o4ajzs=","cKjDw3B8lc9k/tvqcaER\u002B3ndMwrGQHrDYWSdOY4faV8=","p8dvjfGnu7pGuvblA3vxKLKx29xYbQIUIWysdq2dmUo=","BG1wzq2\u002BUnva6Gj660f/4QSvh7Y\u002B4BkZ/wY9RL4Gw1E=","EMBCFam7ihuahYKSXkchvO5Oq1G6WATBlbGZb/1Wvgw=","qmvGIjcCX8r6TSFwIn5\u002BLEqxe0r6TyWX6Dh7IZuXPyc=","lN17WNch1WB21wDcx8isw\u002B9LESsxbL5ZLcwkcguFwDw=","xFTE\u002BmS9ms48MwKeAOZlAcjQcW2SFEb1HqUl40vv6\u002BA=","I7cNmUMe4LNDvkoc59Tb/PSRJVZAmfnrfaLGIkazUE8=","mVV74WiMoMIt7VWKgRMp3Ffhsn6zMwDlhI11UroeBuY=","1be6J4hFUF43o4ugBHafnfNfQTkZ3vWGedt\u002BdP8sPo4=","vuftYVY\u002Bo7U2Nxhh6XMNpilZIm3ZsptViz7\u002BanqA3Hc=","imfvoQHzb8LfDXM7qRYlx7axOpksQyHig/s\u002BmIcfxpk=","nJpGXEZYduduKpUXiNd6keeqmPvaEgvDoDFQWsGCzcw=","STogQT7rnxvTzdXO1jKjFvHAJyiRDy1pcjGg\u002Bz2lLbU=","y0yeF4H9Zqn1\u002BRsgkxQlXguGWbRQmGSTY1Z1BC0FCuQ=","K/Thn9wvK/PAKEKSQqsu\u002BKF/gsoXvfT2yWOkYV9irEY=","vhLVcon4oX9c1uw5NqDO\u002Bbmp7U8Wut5qBvibR3av0rA=","QKHrAtLbmxUoOsZrHwyNH/IyH86zNvOqxWSlN3FyucA=","6wCEa/kwBVkKvxfkUIFAxzHXWu4/p/R5/WtLkSHmLHc=","G07nmbZoVpM0XTP8Lz65k3KltLdOeLXLxcbihltgpGQ=","1hKIH5KS3ipyc1\u002BCQ\u002BxwaZMNvI1OZnLX8eArQaOVzAE=","J\u002BTkoAeMyxDzquSGJ3s6/xjqRpSmQj3hnQ/nQ3ZMT2w=","6RMMCAIDMT6w6ebgi/Bdd1UPJ1TWHh5v/RLyuInLByM=","XdM7cHaWP0hnWT6hjmmAQZrH5muzSfxofZZMReavdhE=","Y6FuXJmG4asZZywv8eq2Ki3M3DHBabgHxixPNEPtsg0=","ocP7tLQvAC3JoF1EP3jOXtv3\u002Bd0qM3kdE0/8cY\u002BVC18=","CH9QcGeTGE6F7iss5IMJIdGAfaixRCv52kGorH\u002Br7UQ=","T1FmR6BuWj8NdQOpYSYpkD9zKCBLg9Fq2Txyqzbv0ow=","7pE8sSLDf7aqo6DjV5RYq1M\u002BISPAIo7BW6XwwSh6O1w=","s/i8LJ/e4qIDjEUPgs\u002BEm1BiSxoFaFW\u002BiNsciJ46Se0=","MCboMATobp0xAPy7uFlGMDj90uup3KgbQZQ4S\u002BTB6\u002BI=","\u002BD1KwIkkIKqP68kYi7AiSant9WsyQ\u002BekMikmB3EJxN0=","4argFkGnAwNxETMHSxzvQ2PmNY8KuPT3oq95msw6X64=","9JrQ3zBPaGik8svNVNuioqNGKWNvShwz32tj7Oyf9wM=","Qky4FjUO3SqTt8S6AxWoOxZFPezRDX6fyc\u002ByS1296HI=","8R6VzxQRmFMk\u002BXn\u002BwUYqnwsYuSmmYxUXOD2Wepgf4Z0=","JiuGUyztERDBSvF/6GDip3jqDWJzkWH6IdRYkvi5bw0=","bfM6e\u002BYucNXsBEQIq6EkXf6mNT\u002BPp63/xGN1rdjLZiQ=","7rNiQh7D0WAW\u002BBIalpkA6TbN/zPYEJsqZgWhr/HPCVs=","5CJDU5WOqZlcGfMhyrjY8yklCO49EP8N2oJgZCPtCvA=","PwMpWOwh/ebKXLFaIW93w/Nmg9sgkp21\u002BkJjs5VxJFY=","JPhvOaP4s5GzcXST3QvJD8qP\u002B/4XR1TCfIiP4loGLb8=","NVCP0V7YVnf5urwl2ofENh5w6TJfZ2MUUgzQ389SA1w=","VfTAU/4gffsId\u002B7V4v5FnVYVwig5FKCwrdNkRzRwGU0=","Y7eqVxFX7a20bQsQuQshHeV5QtkyeSYASzhM4PXTo30=","yOVmWadteUwj\u002BNmQpObPtaDAt52hoJ\u002Bl\u002BNzJVK7MBAU=","9cTrEyIQdmDa25ocL8Eyud7FcyZQ0KIMjdK17iVzX2k=","a/zdACF21w3ntvbFDoozP8VBvuUGVu51eJccri6\u002Bzyk=","7KbCVRYfzTj0uAmCgvUKF\u002B90LeMurRZZC0\u002BbZdNLQgg=","pT3uRUBLB8sRCYZfqQZMjGIYxN7tF6VWx7nczEtejvo=","MKQHw6j1aupPEmjQyQaJ7hEIlQyS5vUgYQ19ncmXeSg=","Yixqc1XRFIJzTzMVIDHsDQ6xJExHcrnledpmuK51aKg=","ftbSxYFJXTxUMNOMv2m/NBw9kW6scWQGv\u002BoKf/zzGMY="],"CachedAssets":{},"CachedCopyCandidates":{}}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
VsuMx2Zn3i5Dl5B+fBffrcZ8UW53GnIphNRqfc4nT+c= yZ/md1iPYrXaNms0Gs0O0FWZ6ytfiDODQYaUjklYohY=
File diff suppressed because one or more lines are too long
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("vita-asistente")] [assembly: System.Reflection.AssemblyCompanyAttribute("vita-asistente")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5c0cce7c1f3fa01b1f4930c2e7fdf7a92b7f700d")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+12b7b0f4b2ea7b5318ff9556b64efffb651753df")]
[assembly: System.Reflection.AssemblyProductAttribute("vita-asistente")] [assembly: System.Reflection.AssemblyProductAttribute("vita-asistente")]
[assembly: System.Reflection.AssemblyTitleAttribute("vita-asistente")] [assembly: System.Reflection.AssemblyTitleAttribute("vita-asistente")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
438fa0af1f685fa87f855a8f86df0fd884cc1bbd4af8bf4bcd2f11fa5373f7c7 c47408c8e4feccbd273b631bf4ba384fb40dec86351eb206441bcd8fab299c0b
@@ -39,6 +39,10 @@ build_metadata.AdditionalFiles.CssScope =
build_metadata.AdditionalFiles.TargetPath = Vmlld3NcSG9tZVxQcml2YWN5LmNzaHRtbA== build_metadata.AdditionalFiles.TargetPath = Vmlld3NcSG9tZVxQcml2YWN5LmNzaHRtbA==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/franc/source/repos/Vita-Asistente/Views/Pacientes/Index.cshtml]
build_metadata.AdditionalFiles.TargetPath = Vmlld3NcUGFjaWVudGVzXEluZGV4LmNzaHRtbA==
build_metadata.AdditionalFiles.CssScope =
[C:/Users/franc/source/repos/Vita-Asistente/Views/Roles/Disable.cshtml] [C:/Users/franc/source/repos/Vita-Asistente/Views/Roles/Disable.cshtml]
build_metadata.AdditionalFiles.TargetPath = Vmlld3NcUm9sZXNcRGlzYWJsZS5jc2h0bWw= build_metadata.AdditionalFiles.TargetPath = Vmlld3NcUm9sZXNcRGlzYWJsZS5jc2h0bWw=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
@@ -55,6 +59,10 @@ build_metadata.AdditionalFiles.CssScope =
build_metadata.AdditionalFiles.TargetPath = Vmlld3NcU2hhcmVkXEVycm9yLmNzaHRtbA== build_metadata.AdditionalFiles.TargetPath = Vmlld3NcU2hhcmVkXEVycm9yLmNzaHRtbA==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/franc/source/repos/Vita-Asistente/Views/Shared/_SidebarPartial.cshtml]
build_metadata.AdditionalFiles.TargetPath = Vmlld3NcU2hhcmVkXF9TaWRlYmFyUGFydGlhbC5jc2h0bWw=
build_metadata.AdditionalFiles.CssScope =
[C:/Users/franc/source/repos/Vita-Asistente/Views/Shared/_ValidationScriptsPartial.cshtml] [C:/Users/franc/source/repos/Vita-Asistente/Views/Shared/_ValidationScriptsPartial.cshtml]
build_metadata.AdditionalFiles.TargetPath = Vmlld3NcU2hhcmVkXF9WYWxpZGF0aW9uU2NyaXB0c1BhcnRpYWwuY3NodG1s build_metadata.AdditionalFiles.TargetPath = Vmlld3NcU2hhcmVkXF9WYWxpZGF0aW9uU2NyaXB0c1BhcnRpYWwuY3NodG1s
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
@@ -1,18 +1,17 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// Este código fue generado por una herramienta. // This code was generated by a tool.
// Versión de runtime:4.0.30319.42000
// //
// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si // Changes to this file may cause incorrect behavior and will be lost if
// se vuelve a generar el código. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
using System; using System;
using System.Reflection; using System.Reflection;
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute("Microsoft.AspNetCore.Mvc.ApplicationParts.ConsolidatedAssemblyApplicationPartFact" + [assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute(("Microsoft.AspNetCore.Mvc.ApplicationParts.ConsolidatedAssemblyApplicationPartFact" +
"ory, Microsoft.AspNetCore.Mvc.Razor")] "ory, Microsoft.AspNetCore.Mvc.Razor"))]
// Generated by the MSBuild WriteCodeFragment class. // Generated by the MSBuild WriteCodeFragment class.
@@ -1 +1 @@
a25b8ca88477ec38fbbf43708d1057096c9c7eb2e4df7116120b1b7806a14707 250e2c21d2c13c863762da6287358d42bac0f0d0f3163f46e80dd89fbad8abb4
@@ -1,118 +1,118 @@
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\appsettings.Development.json C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\appsettings.Development.json
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\appsettings.json C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\appsettings.json
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\vita-asistente.staticwebassets.runtime.json C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\vita-asistente.staticwebassets.runtime.json
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\vita-asistente.staticwebassets.endpoints.json C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\vita-asistente.staticwebassets.endpoints.json
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\vita-asistente.exe C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\vita-asistente.exe
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\vita-asistente.deps.json C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\vita-asistente.deps.json
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\vita-asistente.runtimeconfig.json C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\vita-asistente.runtimeconfig.json
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\vita-asistente.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\vita-asistente.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\vita-asistente.pdb C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\vita-asistente.pdb
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Humanizer.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Humanizer.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.AspNetCore.Cryptography.Internal.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.AspNetCore.Cryptography.Internal.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Bcl.AsyncInterfaces.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.CodeAnalysis.Workspaces.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Abstractions.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Design.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.EntityFrameworkCore.Relational.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.DependencyModel.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.Identity.Core.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.Identity.Core.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.Identity.Stores.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.Identity.Stores.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Microsoft.Extensions.Options.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Mono.TextTemplating.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Mono.TextTemplating.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\MySqlConnector.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\MySqlConnector.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\Pomelo.EntityFrameworkCore.MySql.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\Pomelo.EntityFrameworkCore.MySql.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\System.CodeDom.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\System.CodeDom.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\System.Composition.AttributedModel.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\System.Composition.AttributedModel.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\System.Composition.Convention.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\System.Composition.Convention.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\System.Composition.Hosting.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\System.Composition.Hosting.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\System.Composition.Runtime.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\System.Composition.Runtime.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\System.Composition.TypedParts.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\System.Composition.TypedParts.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll C:\Users\franc\source\repos\Vita-Asistente\bin\Debug\net8.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.csproj.AssemblyReference.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.csproj.AssemblyReference.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\rpswa.dswa.cache.json C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\rpswa.dswa.cache.json
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.GeneratedMSBuildEditorConfig.editorconfig C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.AssemblyInfoInputs.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.AssemblyInfoInputs.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.AssemblyInfo.cs C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.AssemblyInfo.cs
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.csproj.CoreCompileInputs.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.csproj.CoreCompileInputs.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.MvcApplicationPartsAssemblyInfo.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.MvcApplicationPartsAssemblyInfo.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.RazorAssemblyInfo.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.RazorAssemblyInfo.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.RazorAssemblyInfo.cs C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.RazorAssemblyInfo.cs
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\rjimswa.dswa.cache.json C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\rjimswa.dswa.cache.json
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\rjsmrazor.dswa.cache.json C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\rjsmrazor.dswa.cache.json
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\rjsmcshtml.dswa.cache.json C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\rjsmcshtml.dswa.cache.json
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\scopedcss\Views\Shared\_Layout.cshtml.rz.scp.css C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\scopedcss\Views\Shared\_Layout.cshtml.rz.scp.css
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\scopedcss\bundle\vita-asistente.styles.css C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\scopedcss\bundle\vita-asistente.styles.css
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\scopedcss\projectbundle\vita-asistente.bundle.scp.css C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\scopedcss\projectbundle\vita-asistente.bundle.scp.css
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\staticwebassets.build.json C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\staticwebassets.build.json
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\staticwebassets.build.json.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\staticwebassets.build.json.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\staticwebassets.development.json C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\staticwebassets.development.json
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\staticwebassets.build.endpoints.json C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\staticwebassets.build.endpoints.json
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\swae.build.ex.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\swae.build.ex.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asi.5693690E.Up2Date C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asi.5693690E.Up2Date
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.dll C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.dll
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\refint\vita-asistente.dll C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\refint\vita-asistente.dll
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.pdb C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.pdb
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\vita-asistente.genruntimeconfig.cache C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\vita-asistente.genruntimeconfig.cache
C:\Users\franc\source\repos\vita-asistente\obj\Debug\net8.0\ref\vita-asistente.dll C:\Users\franc\source\repos\Vita-Asistente\obj\Debug\net8.0\ref\vita-asistente.dll
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -55,10 +55,10 @@
- [x] CRUD de roles (`RolesController`) - [x] CRUD de roles (`RolesController`)
- En el mismo index generar modales para poder editar los roles, y ademas poder habilitarlos o deshabilitarlos. - En el mismo index generar modales para poder editar los roles, y ademas poder habilitarlos o deshabilitarlos.
- [ ] Modelo y migración de `Paciente` - [x] Modelo y migración de `Paciente`
- Campos: `Nombres`, `Apellidos`, `FechaNacimiento`, `Genero`, `DocumentoIdentidad` (único), `Direccion`, `Telefono`, `Email`, `ObraSocial`, `FechaRegistro`, FK a `UsuarioAlta` - Campos: `Nombres`, `Apellidos`, `FechaNacimiento`, `Genero`, `DocumentoIdentidad` (único), `Direccion`, `Telefono`, `Email`, `ObraSocial`, `FechaRegistro`, FK a `UsuarioAlta`
- [ ] CRUD de pacientes (`PacientesController`) - [x] CRUD de pacientes (`PacientesController`)
- Alta, baja lógica, modificación - Alta, baja lógica, modificación
- Búsqueda por nombre / documento - Búsqueda por nombre / documento
- ViewModels y validaciones - ViewModels y validaciones
+3
View File
@@ -0,0 +1,3 @@
-- Script to clean up the improper FK constraint from cleanup migration
ALTER TABLE Pacientes
DROP FOREIGN KEY FK_Pacientes_AspNetUsers_Id;
+26
View File
@@ -0,0 +1,26 @@
-- Data migration script to transfer existing patient data from AspNetUsers
-- to the new Pacientes table after cleanup migration
-- First, let's identify users who had patient data by checking related tables
-- This assumes you can determine which users were patients based on your application logic
-- Modify this query according to how you identified patients in your original implementation
SELECT 'INSERT INTOPacientes (Id, NombreContactoEmergencia, TelefonoContactoEmergencia, '
|| 'TipoSangre, TieneAlergiasMedicamentosas, AlergiasDescripcion, FechaRegistro) VALUES '
|| "('" || Id || "', 'old_value1', 'old_value2', 'O+', 0, '', UTC_TIMESTAMP());"
FROM AspNetUsers
where Discriminator = 'Paciente'; -- This won't work now since we removed the column
-- Since we already removed the discriminator and patient columns, you'll need to
-- manually identify which users were patients and use placeholders for their data
-- Example query to generate INSERT statements (modify with actual data):
-- SELECT
-- 'INSERT INTO Pacientes (Id, NombreContactoEmergencia, TelefonoContactoEmergencia, '
-- || 'TipoSangre, TieneAlergiasMedicamentosas, AlergiasDescripcion, FechaRegistro) VALUES '
-- || "('" || Id || "', '', '', '', 0, '', UTC_TIMESTAMP());"
-- FROM AspNetUsers
-- WHERE [your_condition_to_identify_patients];
-- After running the generated INSERT statements manually, verify the data:
SELECT * FROM Pacientes;
+105
View File
@@ -0,0 +1,105 @@
.sidebar {
position: fixed;
top: 0;
left: 0;
width: 280px;
height: 100vh;
background-color: #ffffff;
border-right: 1px solid #dee2e6;
display: flex;
flex-direction: column;
z-index: 1030;
transition: transform 0.3s ease-in-out;
}
.sidebar.collapsed {
transform: translateX(-280px);
width: 60px;
}
.sidebar .sidebar-header {
border-bottom: 1px solid #e9ecef;
padding-top: 1rem;
padding-bottom: 0.5rem;
background-color: white;
z-index: 1040;
}
.sidebar.collapsed .sidebar-header {
justify-content: center !important;
}
.sidebar h4.section-title {
font-size: 0.875rem;
color: #6c757d;
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 0.75rem;
}
.sidebar .nav-link {
display: flex;
align-items: center;
padding: 0.5rem 1.25rem;
color: #495057;
text-decoration: none;
border-radius: 4px;
transition: all 0.2s ease;
}
.sidebar .nav-link:hover {
background-color: #f8f9fa;
color: #1b6ec2;
}
.sidebar .nav-link.active {
background-color: #1b6ec2;
color: white;
font-weight: 500;
}
.sidebar.collapsed .nav-link {
justify-content: center;
padding: 0.75rem 0.625rem;
}
.sidebar.collapsed .nav-link span.me-2,
.sidebar.collapsed .sidebar-user-info > div,
.sidebar.collapsed .sidebar-footer button {
display: none !important;
}
.sidebar .section-title {
margin-left: 1.25rem;
margin-right: 1.25rem;
}
.sidebar.collapsed h4.section-title {
display: none;
}
.sidebar .sidebar-user-info {
font-size: 0.875rem;
word-break: break-word;
}
.sidebar .sidebar-footer form {
margin-top: auto;
}
@media (max-width: 768px) {
.sidebar:not(.collapsed) {
transform: translateX(-280px);
}
.sidebar.collapsed {
transform: none !important;
}
}
.bi {
display: inline-block;
font-style: normal;
font-variant: normal;
line-height: 1;
}
+92
View File
@@ -20,3 +20,95 @@ html {
body { body {
margin-bottom: 60px; margin-bottom: 60px;
} }
.app-wrapper {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 240px;
background-color: #2c3e50;
color: #fff;
display: flex;
flex-direction: column;
position: fixed;
top: 0;
bottom: 0;
left: 0;
overflow-y: auto;
z-index: 100;
}
.sidebar-brand {
display: block;
padding: 1rem 1.25rem;
font-size: 1.25rem;
font-weight: 600;
color: #fff;
text-decoration: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.sidebar-brand:hover {
color: #fff;
background-color: rgba(255, 255, 255, 0.05);
}
.sidebar-nav {
padding: 1rem 0;
flex: 1 1 auto;
}
.sidebar-heading {
padding: 1rem 1.25rem 0.5rem;
margin: 0;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.08em;
color: rgba(255, 255, 255, 0.5);
}
.sidebar-nav .nav-link {
color: rgba(255, 255, 255, 0.8);
padding: 0.5rem 1.25rem;
display: block;
text-decoration: none;
}
.sidebar-nav .nav-link:hover,
.sidebar-nav .nav-link.active {
background-color: rgba(255, 255, 255, 0.1);
color: #fff;
}
.main-content {
margin-left: 240px;
flex: 1 1 auto;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.topbar {
background-color: #f8f9fa;
border-bottom: 1px solid #dee2e6;
padding: 0.75rem 1.5rem;
text-align: right;
}
.topbar .navbar-text {
color: #343a40;
}
@media (max-width: 767.98px) {
.sidebar {
position: static;
width: 100%;
height: auto;
}
.main-content {
margin-left: 0;
}
}