{"version":3,"sources":["services/util.js","services/constant.js","assets/img/logo-2.svg","services/url.js","services/index.js","services/auth.service.js","AppContext.js","components/withRoleAccess.js","components/ImpersonateUser.js","components/UnauthorizedAccess.js","pages/UserManagement.js","components/Paginacion.js","components/CarreraConsulta.js","components/Icon.js","components/EvaluacionDetalle.js","pages/CarreraEvaluacion.js","components/NavMenu.js","components/RevertImpersonationBanner.js","layouts/AuthLayout.js","components/Home.js","components/MisParalelos.js","components/UnidadConsulta.js","components/UnidadEvaluacion.js","components/AdmisionesConsulta.js","components/AdmisionesEvaluacion.js","components/Accion.js","components/ProgramaConsulta.js","components/Datepicker.js","components/ProgramaEvaluacion.js","components/UnidadParalelos.js","components/MateriasConsulta.js","components/Materias.js","components/ParalelosMateria.js","components/ProfesoresConsulta.js","components/Profesores.js","components/ParalelosProfesor.js","components/TablaCabecera.js","components/TablaPromedios.js","components/GraficoBarras.js","components/GraficoBarrasApiladas.js","components/Paralelo.js","components/TablaCabeceraPractica.js","components/Practica.js","components/TablaComentarios.js","components/Comentarios.js","components/ComentariosPractica.js","components/ReportesConsolidados.js","components/GraficoParaleloArea.js","App.js","registerServiceWorker.js","index.js"],"names":["isEmpty","obj","undefined","toString","replace","throwError","err","Error","getCurrentUrl","withoutTicket","url","window","location","href","getParamFromCurrentUrl","param","URL","searchParams","get","getFullProtocol","protocol","includes","isParamExistsInUrl","CAS_VERSION_2_0","CAS_VERSION_3_0","CAS_VERSIONS","CAS_STATUS_IN_PROCESS","CAS_ERROR_FETCH","CAS_ERROR_PARSE_RESPONSE","CAS_ERROR_AUTH_ERROR","module","exports","buildUrl","require","constant","util","getLoginUrl","cas","gateway","baseUrl","_getCasBaseUrl","queryParams","redirectUrl","service","status","version","path","getLogoutUrl","redirectPath","origin","params","Object","keys","length","getValidateUrl","ticket","format","proxy_callback_url","pgtUrl","withProxyIfExists","validation_proxy","validation_proxy_protocol","endpoint","validation_proxy_endpoint","validation_proxy_path","fetch","xml2js","urls","MySwal","withReactContent","Swal","defaultOptions","CasClient","options","this","Promise","resolve","reject","_handleFailsValdiate","type","message","_validateTicket","user","pgtIou","response","currentUrl","pathname","currentPath","content_type","fire","title","text","allowOutsideClick","showConfirmButton","willOpen","showLoading","headers","then","close","jsonResponse","JSON","parse","parseStringPromise","xmlContent","result","successes","token","_handleSuccessValdiate","failures","code","$","trim","_","bind","catch","error","exception","json","serviceResponse","authenticationSuccess","proxyGrantingTicket","authenticationFailure","description","callback","_getSuccessResponse","cookies","Cookies","currentUserSubject","BehaviorSubject","usuario","numeroidentificacion","roles","process","split","CAS_PROTOCOL","CAS_SERVER","PROXY_PROTOCOL","PROXY_SERVER","casClient","authService","login","history","casLogin","logout","remove","next","validateToken","decodedToken","isImpersonating","signinUser","username","identificacion","tipoidentificacion","apellidos","nombres","rolesObj","Array","isArray","map","roleObj","role","Role","scope","Scope","scopeName","ScopeName","isImpersonated","setGlobalFetch","currentUser","asObservable","value","auth","successRes","signin","errorRes","data","netId","realFetch","opts","assign","indexOf","set","AppContext","React","createContext","updateUser","withRoleAccess","WrappedComponent","allowedRoles","props","useContext","some","to","useHistory","document","TITLE","useState","searchCriteria","setSearchCriteria","searchResults","setSearchResults","currentPage","setCurrentPage","startImpersonation","handleSearchCriteriaChange","e","target","name","prevState","impersonate","emailAddress","a","targetUsername","didOpen","method","body","stringify","TargetUserId","ok","r","icon","isConfirmed","push","console","indexOfLastUser","indexOfFirstUser","paginatedUsers","slice","Card","CardHeader","CardBody","style","display","justifyContent","className","htmlFor","id","onChange","Button","color","onClick","payload","Table","responsive","striped","index","key","previousLabel","nextLabel","pageCount","Math","ceil","onPageChange","selectedPage","selected","containerClassName","activeClassName","previousLinkClassName","nextLinkClassName","disabledClassName","UnauthorizedAccess","flexDirection","alignItems","margin","APIURL","users","setUsers","loading","setLoading","modalIsOpen","setModalIsOpen","idRole","idUnidad","idPrograma","setRoles","rolesLoading","setRolesLoading","refreshTable","setRefreshTable","roleNameSelected","setRoleNameSelected","unidadOptions","setUnidadOptions","programasOptions","setProgramasOptions","isCreateButtonDisabled","setIsCreateButtonDisabled","useEffect","adminRole","find","item","tipo","idhedrole","rolename","isCreateUserButtonDisabled","fetchUsers","toggleModal","selectedRole","parseInt","roleName","idunidad","dataProg","idprograma","contents","gap","Input","unidad","nombreunidad","programa","nombre","disabled","idheduser","email","idHedUser","handleDeleteRole","Modal","isOpen","toggle","centered","onClosed","maxWidth","width","ModalHeader","ModalBody","idpersona","handleSelectUser","ModalFooter","Paginacion","total","page","size","search1","search2","handle","last","pages","p","group","trunc","Pagination","PaginationItem","PaginationLink","String","fromCharCode","max","i","active","filter","min","CarreraConsulta","handleChange","event","setState","onInputChange","handleDocenteChange","handleSubmit","preventDefault","handleDocenteSubmit","state","carreras","carreraOptions","carrerasEtiqueta","carrerasLabel","anios","anioOptions","terminos","terminoOptions","carrera","carreraValue","anio","aniosValue","termino","terminosValue","onSubmit","Row","Col","md","placeholder","idx","anioValue","terminoValue","t","maxLength","Icon","Provider","EvaluacionDetalle","paralelo","estudiantes","verlista","ListGroup","numbered","ListGroupItem","estado","estudiante","BASEURL","CarreraEvaluacion","setTotal","paralelos","setParalelos","populateInitialData","carrerasRol","initialCarrera","match","initialAnios","initialPeriodos","responsePeriodos","dataPeriodos","datos","forEach","at","initialAnio","initialTerminos","initialTermino","initialPage","initialSize","populateData","apiUrl","encodeURIComponent","verpdf","datapdf","handlePage","codigo","prevParalelos","togglePDF","evaluados","sistema","idcurso","idprofesor","aria-labelledby","porcentaje","registrados","round","materia","docente","UncontrolledTooltip","placement","aria-label","src","height","pluginspage","colSpan","renderTable","NavMenu","toggleNavbar","collapsed","handleLogin","handleLogout","context","Navbar","light","Container","NavbarBrand","tag","Link","NavbarToggler","Collapse","navbar","NavItem","NavLink","data-bs-toggle","data-bs-target","aria-controls","aria-expanded","UncontrolledDropdown","nav","inNavbar","DropdownToggle","caret","DropdownMenu","right","DropdownItem","divider","Component","displayName","contextType","RevertImpersonationBanner","revertToOriginalUser","position","bottom","backgroundColor","padding","textAlign","zIndex","alignSelf","fontWeight","paddingLeft","marginLeft","createBrowserHistory","AuthLayout","logo","alt","children","Home","MisParalelos","handleDetalle","onBeforeOpen","cedula","idnivelformacion","valor","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","signDisplay","nivel","formatter","promedio","UnidadConsulta","unidades","unidadValue","uo","UnidadEvaluacion","periodos","unidadesRol","initialUnidad","AdmisionesConsulta","AdmisionesEvaluacion","terminoacad","Accion","action","tooltip","ProgramaConsulta","unidadesOptions","unidadesValue","defaultValue","label","programaValue","programaOptions","registerLocale","es","Datepicker","date","Date","log","toISOString","dateFormat","placeholderText","locale","dateOptions","year","month","day","ProgramaEvaluacion","dateformatter","fecha","DateTimeFormat","dateStyle","programas","handleDateChange","handleInputChange","toggleFormDate","toggleEstudiantes","downloadUnidadProgramaCohorteAnioTerminoExcel","downloadPlanificacionAnioExcel","paraleloState","dtFechaextendidaevaluacion","cohorte","findIndex","dtFechainicioevaluacion","fechainicioevaluacion","fechaextendidaevaluacion","fechafinevaluacion","dateMinValue","ultimoCambio","formDate","nivelformacion","tipocurso","grupo","fuente","fechainicio","fechafin","fechaextendida","res","pa","evaluacionfin","idprogramas","programascohortes","blob","createObjectURL","createElement","download","click","dtFechafinevaluacion","toLocaleString","programas_cohortes","every","pc","uniqueScopes","Set","filteredRoles","has","add","sort","b","localeCompare","u","pra","responseProgramasCohortes","dataProgramasCohortes","codunidad","programa_cohorte_seleccionados","UnidadParalelos","MateriasConsulta","Materias","materias","newUrl","ParalelosMateria","ProfesoresConsulta","Profesores","profesores","profesor","ParalelosProfesor","TablaCabecera","idparalelo","TablaPromedios","area","preguntas","idarea","idpregunta","pregunta","media","desviacionestandar","GraficoBarras","labels","values","transitions","animation","duration","indexAxis","elements","bar","borderWidth","plugins","legend","datalabels","datasets","borderColor","ChartJS","register","CategoryScale","LinearScale","BarElement","Title","Tooltip","Legend","GraficoBarrasApiladas","titulo","divRef","useRef","imgRef","scales","x","stacked","y","dataIndex","dataset","computeOptions","borderColorsL0","backgroundColorsL0","borderColorsL1","backgroundColorsL1","borderColorsL2","backgroundColorsL2","etiquetas","ordenAlternativa","alternativa","totalEtiquetas","d","frecuencia","toFixed","generateData","chartRef","useCallback","chart","div","current","divStyle","img","toBase64Image","ref","ChartDataLabels","Paralelo","areas","frecuencias","alternativas","modo","onDownloadPdf","comparativo","chunks","parts","aux","c","valoresFrecuencias","f","valoresPuntaje","UncontrolledCollapse","toggler","respuestas","dataResponse","dataParalelo","frecuenciasResponse","dataFrecuencias","TablaCabeceraPractica","practica","Practica","dataPractica","TablaComentarios","comentarios","Comentarios","populateData2","comentario","mantener","mejorar","cambiar","dataComentarios","ComentariosPractica","setPractica","setComentarios","yearEspae","setYearEspae","termEspae","setTermEspae","yearsEspae","setYearsEspae","yearGrado","setYearGrado","termGrado","setTermGrado","yearsGrado","setYearsGrado","anioAcademico","downloadReportEspae","requestBody","contentDisposition","filename","matches","exec","downloadReportGrado","form","FormGroup","Label","for","GraficoParaleloArea","ordenArea","ordenPregunta","publicRoutes_prefix","publicRoutes_exact","App","impersonationToken","jwt","decode","originalToken","errorInfo","authToken","tokenObj","exp","currentTime","floor","now","isTokenExpired","impToken","decodedImpToken","subscription","subscribe","pr","startsWith","unsubscribe","component","exact","UserManagement","ImpersonateUser","ReportesConsolidados","withRouter","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","controller","dotenv","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","addEventListener","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"oJAAA,sSAAMA,EAAU,SAACC,GACf,YACUC,IAARD,GACQ,OAARA,GACsC,KAAtCA,EAAIE,WAAWC,QAAQ,MAAO,KAI5BC,EAAa,SAACC,GAClB,MAAM,IAAIC,MAAM,gBAAkBD,IAG9BE,EAAgB,WAA2B,IAA1BC,IAAyB,yDAC1CC,EAAMC,OAAOC,SAASC,KAC1B,OAAIJ,EACKC,EAAIN,QAAQ,0BAA2B,IAEzCM,GAGHI,EAAyB,SAACC,GAC9B,OAAO,IAAIC,IAAIL,OAAOC,SAASC,MAAMI,aAAaC,IAAIH,IAGlDI,EAAkB,SAACC,GACvB,MAAO,CAAC,OAAQ,SAASC,SAASD,GAAY,UAAY,YAGtDE,EAAqB,SAACZ,EAAKK,GAE/B,OAAiB,OADH,IAAIC,IAAIN,GAAKO,aAAaC,IAAIH,K,iCC7B9C,4WAAMQ,EAAkB,MAClBC,EAAkB,MAElBC,EAAe,CAACF,EAAiBC,GAEjCE,EAAwB,aAYxBC,EAAkB,cAClBC,EAA2B,uBAC3BC,EAAuB,c,oBCnB7BC,EAAOC,QAAU,IAA0B,oC,+GCA3C,mJAAMC,EAAWC,EAAQ,KAEnBC,EAAWD,EAAQ,KACnBE,EAAOF,EAAQ,KAEfG,EAAc,SAACC,GAA0B,IAArBC,EAAoB,wDACxCC,EAAUC,EAAeH,GAEzBI,EAAeN,EAAKb,mBAAmBe,EAAIK,YAAa,UAMxD,CACEC,QAASX,EAASK,EAAIK,cANxB,CACEC,QAASX,EAASK,EAAIK,YAAa,CACjCD,YAAa,CAAEG,OAAQV,EAASR,0BAUxC,OAHIY,IACFG,EAAYH,SAAU,GAEhBD,EAAIQ,SACV,KAAKX,EAASX,gBACd,KAAKW,EAASV,gBACZ,OAAOQ,EAASO,EAAS,CACvBO,KAAM,QACNL,YAAaA,IAEjB,QACE,MAAMN,EAAK9B,WAAW,6BAItB0C,EAAe,SAACV,GAA4B,IAAvBW,EAAsB,uDAAP,GACpCT,EAAUC,EAAeH,GACzBK,EAAcV,EAASrB,OAAOC,SAASqC,OAAQ,CACjDH,KAAME,IAEJP,EAAc,GAElB,OAAQJ,EAAIQ,SACV,KAAKX,EAASX,gBACPY,EAAKnC,QAAQgD,KAChBP,EAAc,CACZ/B,IAAKgC,IAGT,MACF,KAAKR,EAASV,gBACPW,EAAKnC,QAAQgD,KAChBP,EAAc,CACZE,QAASD,IAGb,MACF,QACE,MAAMP,EAAK9B,WAAW,2BAG1B,IAAI6C,EAAS,CAAEJ,KAAM,UAKrB,OAJwC,IAApCK,OAAOC,KAAKX,GAAaY,SAC3BH,EAAOT,YAAcA,GAGhBT,EAASO,EAASW,IAGrBI,EAAiB,SAACjB,EAAKkB,GAC3B,IAAIhB,EAAUC,EAAeH,GAAK,GAC9BI,EAAc,CAChBE,QAASN,EAAIK,YACba,OAAQA,GAGNT,EAAO,GACX,OAAQT,EAAIQ,SACV,KAAKX,EAASX,gBACZuB,EAAO,kBACP,MACF,KAAKZ,EAASV,gBACZsB,EAAO,qBACPL,EAAYe,OAAS,OACrB,MACF,QACE,MAAMrB,EAAK9B,WAAW,2BAO1B,OAJK8B,EAAKnC,QAAQqC,EAAIoB,sBACpBhB,EAAYiB,OAASrB,EAAIoB,oBAGpBzB,EAASO,EAAS,CACvBO,KAAMA,EACNL,YAAaA,KAIXD,EAAiB,SAACH,GAAoC,IAA/BsB,EAA8B,wDACzD,GAAIA,GAAqBtB,EAAIuB,iBAAkB,CAC7C,IAAMxC,EAAYe,EAAKnC,QAAQqC,EAAIwB,2BAE/B1B,EAAKhB,gBAAgBR,OAAOC,SAASQ,UADrCe,EAAKhB,gBAAgBkB,EAAIwB,2BAE7BlD,OAAOC,SAASqC,OAAO7C,QAAQ,gBAAiB,IAChD,IAAM0D,EAAY3B,EAAKnC,QAAQqC,EAAI0B,2BAE/BpD,OAAOC,SAASqC,OAAO7C,QAAQ,gBAAiB,IADhDiC,EAAI0B,0BAER,OAAO3C,EAAW0C,EAAWzB,EAAI2B,sBAEjC,OAAO7B,EAAKhB,gBAAgBkB,EAAIjB,UAAYiB,EAAIyB,SAAWzB,EAAIS,O,6dCzG7DmB,EAAQhC,EAAQ,KAChBiC,EAASjC,EAAQ,KACjBE,EAAOF,EAAQ,KACfkC,EAAOlC,EAAQ,KACfC,EAAWD,EAAQ,KAEnBmC,EAASC,IAAiBC,KAE1BC,EAAiB,CACnBnD,SAAU,QACV0B,KAAM,OACND,QAASX,EAASV,gBAClBiC,mBAAoB,GACpBG,kBAAkB,EAClBC,0BAA2B,GAC3BE,0BAA2B,GAC3BC,sBAAuB,IAsOZQ,E,WAlOX,WAAYV,GAAyB,IAAfW,EAAc,uDAAJ,GAAI,oBAC5BtC,EAAKnC,QAAQ8D,IACb3B,EAAK9B,WAAW,oBAEpB,IAAIwC,EAAU4B,EAAQ5B,SAAW0B,EAAe1B,QAC3CX,EAAST,aAAaJ,SAASwB,IAChCV,EAAK9B,WAAW,2BAGpBqE,KAAKZ,SAAWA,EAChBY,KAAK5B,KAAO2B,EAAQ3B,MAAQyB,EAAezB,KAC3C4B,KAAKtD,SAAWqD,EAAQrD,UAAYmD,EAAenD,SACnDsD,KAAK7B,QAAU4B,EAAQ5B,SAAW0B,EAAe1B,QACjD6B,KAAKjB,mBACDgB,EAAQhB,oBAAsBc,EAAed,mBACjDiB,KAAKd,iBACDa,EAAQb,kBAAoBW,EAAeX,iBAC/Cc,KAAKb,0BACDY,EAAQZ,2BACRU,EAAeV,0BACnBa,KAAKX,0BACDU,EAAQV,2BACRQ,EAAeR,0BACnBW,KAAKV,sBACDS,EAAQT,uBAAyBO,EAAeP,sBAEpDU,KAAKhC,YAAcP,EAAK3B,gB,mDAGL,IAAD,OAAjB8B,EAAiB,wDAClB,OAAO,IAAIqC,SAAQ,SAACC,EAASC,GAIzB,IAAMtB,EAASpB,EAAKrB,uBAAuB,UACvCqB,EAAKnC,QAAQuD,GACApB,EAAKrB,uBAAuB,YAC1BoB,EAASR,sBACpB,EAAKoD,qBAAqBD,EAAQ,CAC9BE,KAAM7C,EAASL,qBACfmD,QAAS,mCAGbrE,OAAOC,SAASC,KAAOsD,EAAK/B,YAAY,EAAME,GAGlD,EAAK2C,gBAAgB1B,EAAQqB,EAASC,Q,+BAKvB,IAApB7B,EAAmB,uDAAJ,GAClBrC,OAAOC,SAASC,KAAOsD,EAAKpB,aAAa2B,KAAM1B,K,0CAG/BkC,GAAsB,IAAhBC,EAAe,uDAAN,KAC3BC,EAAW,CACXC,WAAY1E,OAAOC,SAASqC,OAAStC,OAAOC,SAAS0E,SACrDC,YAAa5E,OAAOC,SAAS0E,SAC7BJ,KAAMA,GAKV,OAHIC,IACAC,EAASD,OAASA,GAEfC,I,sCAGK7B,EAAQqB,EAASC,GAC7B,IACIW,EADA3C,EAAU6B,KAAK7B,QAEnB,OAAQA,GACJ,KAAKX,EAASX,gBACViE,EAAe,WACf,MACJ,KAAKtD,EAASV,gBACVgE,EAAe,mBACf,MACJ,QACI,MAAMrD,EAAK9B,WAAW,2BAG9B+D,EAAOqB,KAAK,CACRC,MAAO,aACPC,KAAM,uBACNC,mBAAmB,EACnBC,mBAAmB,EACnBC,SAAU,WACN1B,EAAO2B,iBAIf9B,EAAME,EAAKb,eAAeoB,KAAMnB,GAAS,CACrCyC,QAAS,CACL,eAAgBR,KAGnBS,KACG,SAAUb,GACNA,EACKO,OACAM,KACG,SAAUN,GAEN,OADAvB,EAAO8B,QACCrD,GACJ,KAAKX,EAASX,gBACV,IAAI4E,EAAeC,KAAKC,MAAMV,GAC9BzB,EACKoC,mBAAmBH,EAAaI,YAChCN,KACG,SAAUO,GACN,IAAIpB,EAAWoB,EAAO,uBACtB,GAAIpB,EAAS,6BAA8B,CACvC,IAAIqB,EACArB,EAAS,6BACb,GAAIqB,EAAUpD,OAAQ,CAClB8C,EAAajB,KAAKwB,MAAQP,EAAaO,MACvC,IAAIxB,EAAOiB,EAAajB,KAEpBC,EAAS,KACRhD,EAAKnC,QAAQ0E,KAAKjB,sBACnB0B,EACIsB,EAAU,GAAG,2BAA2B,IAEhD/B,KAAKiC,uBACD/B,EACAM,EACAC,GAGJT,KAAKiC,uBAAuB/B,EAASM,QAEtC,CACH,IAAI0B,EACAxB,EAAS,6BACTwB,EAASvD,QACTqB,KAAKI,qBAAqBD,EAAQ,CAC9BE,KAAM7C,EAASL,qBACfgF,KAAMD,EAAS,GAAGE,EAAED,KAAKE,OACzB/B,QAAS4B,EAAS,GAAGI,EAAED,WAIrCE,KAAKvC,OAEVwC,MACG,SAAUC,GACNzC,KAAKI,qBAAqBD,EAAQ,CAC9BE,KAAM7C,EAASN,yBACfoD,QAAS,2BACToC,UAAWD,KAEjBF,KAAKvC,OAEf,MACJ,KAAKxC,EAASV,gBACV,IACI,IAAI6F,EAAOjB,KAAKC,MAAMV,GACtB,GAAI0B,EAAKC,gBACL,GAAID,EAAKC,gBAAgBC,sBAAuB,CAC5C,IAAIrC,EACAmC,EAAKC,gBAAgBC,sBAAsBrC,KAC3CC,EAAS,KACRhD,EAAKnC,QAAQ0E,KAAKjB,sBACnB0B,EACIkC,EAAKC,gBAAgBC,sBAChBC,qBAEb9C,KAAKiC,uBAAuB/B,EAASM,EAAMC,QAE3CT,KAAKI,qBAAqBD,EAAQ,CAC9BE,KAAM7C,EAASL,qBACfgF,KAAMQ,EAAKC,gBAAgBG,sBACtBZ,KACL7B,QACIqC,EAAKC,gBAAgBG,sBAChBC,cAIvB,MAAOP,GACLzC,KAAKI,qBAAqBD,EAAQ,CAC9BE,KAAM7C,EAASN,yBACfoD,QAAS,2BACToC,UAAWD,IAGnB,MACJ,QACI,MAAMhF,EAAK9B,WAAW,2BAE9B,MAAM8B,EAAK9B,WAAW,YACxB4G,KAAKvC,OAEVwC,MACG,SAAUC,GACNzC,KAAKI,qBAAqBD,EAAQ,CAC9BE,KAAM7C,EAASN,yBACfoD,QAAS,2BACToC,UAAWD,KAEjBF,KAAKvC,QAEjBuC,KAAKvC,OAEVwC,MACG,SAAUC,GACNzC,KAAKI,qBAAqBD,EAAQ,CAC9BE,KAAM7C,EAASP,gBACfqD,QAAS,+BACToC,UAAWD,KAEjBF,KAAKvC,S,6CAIIiD,EAAUzC,GAAsB,IAAhBC,EAAe,uDAAN,KAC5CwC,EAASjD,KAAKkD,oBAAoB1C,EAAMC,M,2CAGvBwC,EAAUR,GAC3BA,EAAM9B,WAAa1E,OAAOC,SAASqC,OAAStC,OAAOC,SAAS0E,SAC5D6B,EAAM5B,YAAc5E,OAAOC,SAAS0E,SACpCqC,EAASR,O,cC/OXU,EAAU,IAAIC,IAQdC,EAAqB,IAAIC,IANX,CAChBC,QAAS,GACTC,qBAAsB,GACtBC,MAAO,K,EAIyBC,4BAA+BC,MAAM,O,mBAAlEC,E,KAAcC,E,OAXNH,wDAY+BC,MAAM,O,mBAA7CG,E,KAAgBC,E,KAOjBC,EAAY,IAAIlE,EAAU+D,EALb,CACf1F,QAASX,EAASX,gBAAiBuB,KAAM,IAAK1B,SAAUkH,EAAc1E,kBAAkB,EAAMC,0BAA2B2E,EACzHzE,0BAA2B0E,EAAczE,sBAAuB,kBAKvD2E,EAAc,CACvBC,MAQJ,SAAeC,GAA2B,IAAlBvG,EAAiB,wDACrCwG,EAASD,EAASvG,IARlByG,OAWJ,WAoGIlB,EAAQmB,OAAO,YAAa,CAAElG,KAAM,MACpC+E,EAAQmB,OAAO,mBAAoB,CAAElG,KAAM,MAC3CiF,EAAmBkB,KAAK,MAjFxBP,EAAUK,UA/BVG,cA4EJ,SAAuBxC,EAAOyC,GAAwC,IAA1BC,EAAyB,wDAC7DC,EAAa,CACbpB,QAASkB,EAAaG,SACtBpB,qBAAsBiB,EAAaI,eACnCC,mBAAoBL,EAAaK,mBACjCC,UAAWN,EAAaM,UACxBC,QAASP,EAAaO,QACtBvB,MAAOgB,EAAaQ,SACdC,MAAMC,QAAQV,EAAaQ,UACvBR,EAAaQ,SAASG,KAAI,SAAAC,GACxB,IAAMC,EAAO5D,KAAKC,MAAM0D,GACxB,MAAO,CACHC,KAAMA,EAAKC,KACXC,MAAOF,EAAKG,MACZC,UAAWJ,EAAKK,cAGtB,CAACjE,KAAKC,MAAM8C,EAAaQ,WAAWG,KAAI,SAAAC,GACtC,MAAO,CACHC,KAAMD,EAAQE,KACdC,MAAOH,EAAQI,MACfC,UAAWL,EAAQM,cAG7B,GACN3D,MAAOA,EACP4D,eAAgBlB,GAEpBrB,EAAmBkB,KAAKI,GAExBkB,KAzGAA,iBACAC,YAAazC,EAAmB0C,eAChC,uBAAyB,OAAO1C,EAAmB2C,QAYvD,SAAS5B,EAASD,GAA2B,IAAlBvG,EAAiB,wDAExCoG,EACKiC,KAAKrI,GACL2D,MAAK,SAAA2E,GAEF/B,EAAQzI,QAAQwK,EAAWrF,aAC3BsF,EAAOD,EAAW1F,SAErBgC,OAAM,SAAA4D,GAEHjC,EAAQzI,QAAQ0K,EAASvF,gBAQrC,SAASsF,EAAOE,GAEZ,GAAIA,EAAM,CACN,IAAI1B,EAAa,CACbpB,QAAS8C,EAAKC,MACd9C,qBAAsB6C,EAAK7C,qBAC3BsB,mBAAoBuB,EAAKvB,mBACzBC,UAAWsB,EAAKtB,UAChBC,QAASqB,EAAKrB,QACdvB,MAAO4C,EAAK5C,MACZzB,MAAOqE,EAAKrE,MACZ4D,gBAAgB,GAGhBW,EAAYtK,OAAOsD,MACvBtD,OAAOsD,MAAQ,SAAUvD,GAAmB,IAAdwK,EAAa,uDAAN,KACrB,MAARA,IAAcA,EAAO,IACzB,IAAIlF,EAAkB,MAARkF,QAAgChL,GAAhBgL,EAAKlF,QAAuBkF,EAAKlF,QAAU,GAEzE,OAAIqD,EAAW3C,OACXV,EAAU7C,OAAOgI,OAAO,GAAInF,EAAS,CAAE,cAAgB,UAAhB,OAA2BqD,EAAW3C,SAEzEhG,EAAI0K,QAAQ,cAAgB,QAAgClL,GAA3B8F,EAAQ,kBACzCA,EAAU7C,OAAOgI,OAAO,GAAInF,EAAS,CAAE,eAAgB,sBAE3DkF,EAAKlF,QAAUA,EACRiF,EAAUvK,EAAKwK,IAGfD,EAAUvK,EAAKwK,IAI9BrD,EAAQwD,IAAI,YAAahC,EAAW3C,MAAO,CACvC5D,KAAM,MAEV+E,EAAQmB,OAAO,mBAAoB,CAAElG,KAAM,MAC3CiF,EAAmBkB,KAAKI,IA4ChC,SAASkB,IACL,IAAIU,EAAYtK,OAAOsD,MACvBtD,OAAOsD,MAAQ,SAAUvD,GAAmB,IAAdwK,EAAa,uDAAN,KACrB,MAARA,IAAcA,EAAO,IACzB,IAAIlF,EAAkB,MAARkF,QAAgChL,GAAhBgL,EAAKlF,QAAuBkF,EAAKlF,QAAU,GAEnEU,EAAQmB,EAAQ3G,IAAI,qBAAuB2G,EAAQ3G,IAAI,aAE7D,OAAIwF,GACAV,EAAU7C,OAAOgI,OAAO,GAAInF,EAAS,CAAE,cAAgB,UAAhB,OAA2BU,KAE9DhG,EAAI0K,QAAQ,cAAgB,QAAgClL,GAA3B8F,EAAQ,kBACzCA,EAAU7C,OAAOgI,OAAO,GAAInF,EAAS,CAAE,eAAgB,sBAE3DkF,EAAKlF,QAAUA,EACRiF,EAAUvK,EAAKwK,IAEfD,EAAUvK,EAAKwK,I,YC9JrBI,EAAaC,IAAMC,cAAc,CAC5ChB,YAAa,KACbiB,WAAY,e,oGCiBCC,GAjBQ,SAACC,EAAkBC,GAEtC,OAAO,SAAAC,GAAU,IAELrB,EAAgBsB,qBAAWR,GAA3Bd,YAER,GAAIA,GAAeA,EAAYrC,QACTqC,EAAYrC,MAAM4D,MAAK,SAAA/B,GAAI,OAAI4B,EAAavK,SAAS2I,EAAKA,SAExE,OAAO,kBAAC,IAAD,CAAUgC,GAAG,kBAI5B,OAAO,kBAACL,EAAqBE,KCN/BzH,GAASC,IAAiBC,KAiOjBoH,OA9NS,WAEpB,IAAM7C,EAAUoD,cAChBC,SAASxG,MAAQyG,oEAHS,MAKkBC,mBAAS,CACjD1C,QAAS,GACTD,UAAW,GACXH,SAAU,GACVpB,qBAAsB,KATA,mBAKnBmE,EALmB,KAKHC,EALG,OAWgBF,mBAAS,IAXzB,mBAWnBG,EAXmB,KAWJC,EAXI,OAaYJ,mBAAS,GAbrB,mBAanBK,EAbmB,KAaNC,EAbM,KAgBlBC,EAAuBb,qBAAWR,GAAlCqB,mBACAnC,EAAgBsB,qBAAWR,GAA3Bd,YAEFoC,EAA6B,SAACC,GAAO,IAAD,EACdA,EAAEC,OAAlBC,EAD8B,EAC9BA,KAAMrC,EADwB,EACxBA,MACd4B,GAAkB,SAAAU,GAAS,kCACpBA,GADoB,kBAEtBD,EAAOrC,QAqCVuC,EAAW,uCAAG,WAAOC,GAAP,mBAAAC,EAAA,6DAEVC,EAAiBF,EAAa7E,MAAM,KAAK,GAF/B,SAIZjE,GAAOqB,KAAK,CACRC,MAAO,4BACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBARH,SAYW9B,MAAM,GAAD,OA1EzBmE,wDA0EyB,4BAAsC,CAC9DkF,OAAQ,OACRC,KAAMnH,KAAKoH,UAAU,CAAEC,aAAcL,MAd7B,WAYNhI,EAZM,QAiBEsI,GAjBF,sBAkBF,IAAInN,MAAM,gDAlBR,wBAqBI6E,EAASiC,OArBb,QAqBNsG,EArBM,OAsBZvJ,GAAOqB,KAAK,CACRC,MAAO,WACPC,KAAM,wDACNiI,KAAM,UACNhI,mBAAmB,IACpBK,MAAK,SAACO,GACDA,EAAOqH,cACPlB,EAAmBgB,EAAEjH,OACrBmC,EAAQiF,KAAK,SA9BT,kDAmCZ1J,GAAOqB,KAAK,QAAS,0DAA2D,SAChFsI,QAAQ5G,MAAM,mCAAd,MApCY,0DAAH,sDAwCX6G,EAtFe,IAsFIvB,EAAc,GACjCwB,EAAmBD,EAvFJ,GAwFfE,EAAiB3B,EAAc4B,MAAMF,EAAkBD,GAO7D,OACI,kBAACI,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,4BACA,kBAACC,EAAA,EAAD,KAEI,yBAAKC,MAAO,CAAEC,QAAS,OAAQC,eAAgB,kBAC3C,yBAAKC,UAAU,QACX,2BAAOC,QAAQ,WAAf,WACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,UACH7B,KAAK,UACLrC,MAAO2B,EAAe3C,QACtBmF,SAAUjC,KAGlB,yBAAK8B,UAAU,QACX,2BAAOC,QAAQ,aAAf,aACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,YACH7B,KAAK,YACLrC,MAAO2B,EAAe5C,UACtBoF,SAAUjC,KAGlB,yBAAK8B,UAAU,QACX,2BAAOC,QAAQ,YAAf,iBACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,WACH7B,KAAK,WACLrC,MAAO2B,EAAe/C,SACtBuF,SAAUjC,KAGlB,yBAAK8B,UAAU,QACX,2BAAOC,QAAQ,wBAAf,aACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,uBACH7B,KAAK,uBACLrC,MAAO2B,EAAenE,qBACtB2G,SAAUjC,MAKtB,yBAAK8B,UAAU,eACX,kBAACI,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAvInB,WACjB,IAAMC,EAAU,CACZvF,QAAS2C,EAAe3C,QACxBD,UAAW4C,EAAe5C,UAC1BvB,qBAAsBmE,EAAenE,qBACrCoB,SAAU+C,EAAe/C,UAG7BlF,GAAOqB,KAAK,CACRC,MAAO,uBACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OA5CEmE,wDA4CF,kCAA4C,CAC7CkF,OAAQ,OACRtH,QAAS,CACL,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAUyB,KAEpBhJ,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GACHyB,EAAiBzB,GACjB2B,EAAe,GACftI,GAAO8B,WAEVgB,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,2DAA4DA,QA0GtE,WAKJ,kBAAC+H,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BACI,wBAAIV,UAAU,oBAAoBxE,MAAM,OAAxC,WACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,aACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,UACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,qBACA,wBAAIwE,UAAU,QAAQxE,MAAM,OAAO,OAG3C,+BACKgE,EAAepE,KAAI,SAAC5E,EAAMmK,GAAP,OAChB,wBAAIC,IAAKD,GACL,wBAAIX,UAAU,eAAexJ,EAAKwE,SAClC,wBAAIgF,UAAU,eAAexJ,EAAKuE,WAClC,wBAAIiF,UAAU,eAAexJ,EAAKgI,cAClC,wBAAIwB,UAAU,eAAexJ,EAAKgD,sBAClC,4BACKsC,IAAgBA,EAAYF,gBACzB,kBAAC,IAAD,CACIoE,UAAU,kBACV1C,GAAG,IACHgD,QAAS,kBAAM/B,EAAY/H,EAAKgI,gBAHpC,mBAavBX,EAAclJ,OAAS,IACpB,kBAAC,KAAD,aACIkM,cAAe,kBACfC,UAAW,mBAEXC,UAAWC,KAAKC,KAAKpD,EAAclJ,OA9LlC,IAiMDuM,aAvGI,SAAC7E,GACrB,IAAM8E,EAAe9E,EAAK+E,SAC1BpD,EAAemD,IAsGCE,mBAAoB,aAEpBC,gBAAiB,SACjBC,sBAAuB,mBACvBC,kBAAmB,mBACnBC,kBAAmB,8BAbvB,kBAcqB,iCAQM,CAAC,UCnOjCC,GAPY,kBACvB,yBAAK7B,MAAO,CAAEC,QAAS,OAAQ6B,cAAe,SAAUC,WAAY,SAAUC,OAAQ,cAClF,+CACA,wI,kDCUFC,I,OAASpI,yDAEThE,GAASC,IAAiBC,KAumBjBoH,OArmBQ,WAEnBQ,SAASxG,MAAQyG,sEAFQ,MAICC,mBAAS,IAJV,mBAIlBqE,EAJkB,KAIXC,EAJW,OAKKtE,oBAAS,GALd,mBAKlBuE,EALkB,KAKTC,EALS,OAMaxE,oBAAS,GANtB,mBAMlByE,EANkB,KAMLC,EANK,OAOmB1E,mBAAS,CACjD1C,QAAS,GACTD,UAAW,GACXH,SAAU,GACVpB,qBAAsB,GACtB6I,OAAQ,EACRC,SAAU,EACVC,WAAY,IAdS,mBAOlB5E,EAPkB,KAOFC,EAPE,OAgBiBF,mBAAS,IAhB1B,mBAgBlBG,EAhBkB,KAgBHC,EAhBG,OAiBCJ,mBAAS,IAjBV,mBAiBlBjE,EAjBkB,KAiBX+I,EAjBW,OAkBe9E,oBAAS,GAlBxB,mBAkBlB+E,EAlBkB,KAkBJC,EAlBI,OAoBehF,oBAAS,GApBxB,mBAoBlBiF,EApBkB,KAoBJC,EApBI,OAqBuBlF,mBAAS,IArBhC,mBAqBlBmF,EArBkB,KAqBAC,EArBA,OAsBiBpF,mBAAS,IAtB1B,mBAsBlBqF,EAtBkB,KAsBHC,EAtBG,OAuBuBtF,mBAAS,IAvBhC,mBAuBlBuF,EAvBkB,KAuBAC,EAvBA,OAwBmCxF,oBAAS,GAxB5C,mBAwBlByF,GAxBkB,KAwBMC,GAxBN,QA0Ba1F,mBAAS,GA1BtB,qBA0BlBK,GA1BkB,MA0BLC,GA1BK,MA6BnBlC,GAAcsB,qBAAWR,GAAYd,YAE3CuH,qBAAU,WACFvH,SAA+BtK,IAAhBsK,IAAqD,KAAxBA,GAAYvC,UACxD7D,GAAO2B,cACP9B,MAAM,GAAD,OAAIuM,GAAJ,2BACAvK,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GAGH,GAFAmG,EAASnG,GACTqG,GAAgB,GACc,IAA1B/E,EAAe0E,QAAgBhG,EAAK1H,OAAS,EAAG,CAChD,IAAM2O,EAAYjH,EAAKkH,MAAK,SAAAC,GAAI,OAAkB,IAAdA,EAAKC,aACvBjS,IAAd8R,GACA1F,EAAkB,2BAAKD,GAAN,IAAsB0E,OAAQiB,EAAUI,UAAWpB,SAAU,EAAGC,WAAY,KAC7FO,EAAoBQ,EAAUK,YAE9B/F,EAAkB,2BAAKD,GAAN,IAAsB0E,OAAQhG,EAAK,GAAGqH,UAAWpB,SAAU,EAAGC,WAAY,KAC3FO,EAAoBzG,EAAK,GAAGsH,WAGpCjO,GAAO8B,WAEVgB,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,wBAAyBA,MAE/C2K,GAA0BQ,SAE/B,CAAC9H,KAEJuH,qBAAU,WACFvH,SAA+BtK,IAAhBsK,IAAqD,KAAxBA,GAAYvC,SAA4C,IAA1BoE,EAAe0E,SACzFe,GAA0BQ,MAC1BC,QAEL,CAAClG,EAAe0E,OAAQ1E,EAAe2E,SAAU3E,EAAe4E,WAAYI,IAE/E,IAAMkB,GAAa,WACf,IAAI7R,EAAG,UAAM8P,GAAN,4CAAgDnE,EAAe0E,QAE9C,uBAApBQ,GAA0E,GAA7BlF,EAAe4E,aAC5DvQ,GAAG,sBAAmB2L,EAAe4E,aAGjB,mBAApBM,GAAsE,GAA7BlF,EAAe4E,aACxDvQ,GAAG,sBAAmB2L,EAAe4E,aAGzChN,MAAMvD,GACDuF,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GACH2F,EAAS3F,GACT6F,GAAW,MAEd1J,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,wBAAyBA,OAgD7CmL,GAA6B,WAC/B,MAAyB,kBAArBf,IAE4B,oBAArBA,GAAsE,IAA5BlF,EAAe2E,UAEpC,wBAArBO,IAA2E,IAA5BlF,EAAe2E,UAAgD,IAA9B3E,EAAe4E,cAgIxGuB,GAAc,WAChB1B,GAAgBD,IAGdjE,GAA6B,SAACC,GAAO,IAAD,EAEdA,EAAEC,OAAlBC,EAF8B,EAE9BA,KAAMrC,EAFwB,EAExBA,MAEd,GAAa,WAATqC,EAAmB,CACnB,IAAM0F,EAAetK,EAAM8J,MAAK,SAACjI,GAAD,OAAUA,EAAKoI,YAAcM,SAAShI,MAChEiI,EAAWF,EAAeA,EAAaJ,SAAW,GACxDb,EAAoBmB,GAEH,oBAAbA,EAEA1O,MAAM,GAAD,OAAIuM,GAAJ,8BACAvK,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GACH2G,EAAiB3G,GACbA,EAAK1H,OAAS,EACdY,MAAM,GAAD,OAAIuM,GAAJ,8CAAgDzF,EAAK,GAAG6H,WACxD3M,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC4M,GACHjB,EAAoBiB,GAChBA,EAASxP,OAAS,EAClBiJ,EAAkB,2BAAKD,GAAN,IAAsB0E,OAAQrG,EAAOsG,SAAUjG,EAAK,GAAG6H,SAAU3B,WAAY4B,EAAS,GAAGC,cAE1GxG,EAAkB,2BAAKD,GAAN,IAAsB0E,OAAQrG,EAAOsG,SAAUjG,EAAK,GAAG6H,SAAU3B,WAAY,QAI1G3E,EAAkB,2BACXD,GADU,IAEb0E,OAAQrG,EACRsG,SAAU,EACVC,WAAY,QAIvB/J,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,2BAA4BA,MAE9B,wBAAbwL,EAEP1O,MAAM,GAAD,OAAIuM,GAAJ,8BACDvK,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GACF2G,EAAiB3G,GACbA,EAAK1H,OAAS,EACdY,MAAM,GAAD,OAAIuM,GAAJ,+CAAiDzF,EAAK,GAAG6H,WACzD3M,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC4M,GACHjB,EAAoBiB,GAChBA,EAASxP,OAAS,EAClBiJ,EAAkB,2BAAKD,GAAN,IAAsB0E,OAAQrG,EAAOsG,SAAUjG,EAAK,GAAG6H,SAAU3B,WAAY4B,EAAS,GAAGC,cAE1GxG,EAAkB,2BAAKD,GAAN,IAAsB0E,OAAQrG,EAAOsG,SAAUjG,EAAK,GAAG6H,SAAU3B,WAAY,QAI1G3E,EAAkB,2BACXD,GADU,IAEb0E,OAAQrG,EACRsG,SAAU,EACVC,WAAY,QAIxB/J,OAAM,SAACC,GACH4G,QAAQ5G,MAAM,2BAA4BA,OAGlDmF,EAAkB,2BACXD,GADU,IAEb0E,OAAQrG,EACRsG,SAAU,EACVC,WAAY,KAEhBS,EAAiB,IACjBE,EAAoB,UAErB,GAAa,aAAT7E,EAEP,GAAyB,wBAArBwE,EAEAtN,MAAM,GAAD,OAAIuM,GAAJ,+CAAiD9F,IACjDzE,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GAEmB,IAAD,EAMd,GAPP6G,EAAoB7G,GAChBA,EAAK1H,OAAS,GACdiJ,EAAkB,2BACXD,GADU,uBAEZU,EAAOrC,GAFK,2BAGAK,EAAK,GAAG+H,YAHR,KAMjBxG,EAAkB,2BACXD,GADU,uBAEZU,EAAOrC,GAFK,2BAGD,GAHC,QAOxBxD,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,4BAA6BA,WAEhD,GAAyB,oBAArBoK,EACPtN,MAAM,GAAD,OAAIuM,GAAJ,8CAAgD9F,IAChDzE,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GAEmB,IAAD,EAMd,GAPP6G,EAAoB7G,GAChBA,EAAK1H,OAAS,GACdiJ,EAAkB,2BACXD,GADU,uBAEZU,EAAOrC,GAFK,2BAGDK,EAAK,GAAG+H,YAHP,KAMjBxG,EAAkB,2BACXD,GADU,uBAEZU,EAAOrC,GAFK,2BAGD,GAHC,QAOxBxD,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,4BAA6BA,UAEhD,CAAC,IAAD,EACHmF,EAAkB,2BACXD,GADU,uBAEZU,EAAOrC,GAFK,2BAGD,GAHC,UAQrB4B,EADgB,eAATS,EACW,2BACXV,GADU,IAEb4E,WAAYvG,IAGE,2BAAK2B,GAAN,kBAAuBU,EAAOrC,MAmFjDqI,GAAWpC,EAAU,yCAnTnB,6BACI,yBAAKjC,UAAU,qBAAqBH,MAAO,CAAEyE,IAAK,SAC9C,kBAACC,GAAA,EAAD,CACIlO,KAAK,SACLgI,KAAK,SACLrC,MAAO2B,EAAe0E,OACtBlC,SAAUjC,IAETuE,EACG,4BAAQzG,MAAM,IAAd,qBAEAvC,EAAM2B,KAAI,SAACE,GAAD,OACN,4BAAQsF,IAAKtF,EAAKoI,UAAW1H,MAAOV,EAAKoI,WACpCpI,EAAKqI,cAnD9B,oCAC0B,wBAArBd,GAAmE,oBAArBA,EAC3C,yBAAK7C,UAAU,SAASH,MAAO,CAAEyE,IAAK,SAClC,kBAACC,GAAA,EAAD,CACIlO,KAAK,SACLgI,KAAK,WACLrC,MAAO2B,EAAe2E,SACtBnC,SAAUjC,IAET6E,EAAc3H,KAAI,SAACoJ,GAAD,OACf,4BAAQ5D,IAAK4D,EAAON,SAAUlI,MAAOwI,EAAON,UACvCM,EAAOC,mBAIG,wBAArB5B,GAAmE,oBAArBA,IAC5C,kBAAC0B,GAAA,EAAD,CACIlO,KAAK,SACLgI,KAAK,aACLrC,MAAO2B,EAAe4E,WACtBpC,SAAUjC,IAET+E,EAAiB7H,KAAI,SAACsJ,GAAD,OAClB,4BAAQ9D,IAAK8D,EAASN,WAAYpI,MAAO0I,EAASN,YAC7CM,EAASN,WAAa,MAAQM,EAASC,aAM5D,OA4BJ,yBAAK3E,UAAU,wCACX,kBAACI,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAASwD,GAAac,SAAUzB,IAAxD,oBAIJ,kBAAC3C,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BACI,wBAAIV,UAAU,oBAAoBxE,MAAM,OAAxC,WAGA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,WAGA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,UAGA,wBAAIwE,UAAU,QAAQxE,MAAM,OACvB,OAIb,+BACKuG,EAAM3G,KAAI,SAAC5E,EAAMmK,GAAP,OACP,wBAAIC,IAAKpK,EAAKqO,WACV,wBAAI7E,UAAU,eACTxJ,EAAKwE,QAAU,IAAMxE,EAAKuE,WAE/B,wBAAIiF,UAAU,eAAexJ,EAAKoE,UAClC,wBAAIoF,UAAU,eAAexJ,EAAKsO,OAClC,4BACI,yBAAK9E,UAAU,eAAeH,MAAO,CAAEyE,IAAK,WACxC,0BAAMpE,GAAI,cAAgBS,GACtB,kBAAC,IAAD,CACIX,UAAU,iBACV1C,GAAG,IACHgD,QAAS,kBAtJ5B,SAACuE,GAEtB,IAAMtE,EAAU,CACZwE,UAAWF,EACXxC,OAAQ1E,EAAe0E,OACvBE,WAAY5E,EAAe4E,YAG/B7M,GAAOqB,KAAK,CACRC,MAAO,wBACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OAAIuM,GAAJ,iCAA2C,CAC5ClD,OAAQ,OACRtH,QAAS,CACL,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAUyB,KAEpBhJ,MAAK,SAACb,GACHhB,GAAO8B,QACiB,MAApBd,EAASxC,QACTkO,GAAe,GACfxE,EAAkB,2BACXD,GADU,IAEb3C,QAAS,GACTD,UAAW,GACXH,SAAU,GACVpB,qBAAsB,MAE1BoJ,GAAiBD,IAEjBtD,QAAQ5G,MAAM,2CAGjBD,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,uCAAwCA,MA+GXuM,CAAiBxO,EAAKqO,aAHzC,sBAgQlCvF,GAhde,IAgdIvB,GAAc,GACjCwB,GAAmBD,GAjdJ,GAkdfE,GAAiB3B,EAAc4B,MAAMF,GAAkBD,IAO7D,OACI,6BACI,oDACC+E,GACD,kBAACY,GAAA,EAAD,CAAOC,OAAQ/C,EAAagD,OAAQrB,GAAasB,UAAQ,EAACC,SA3PxC,WACtBzH,EAAkB,2BACXD,GADU,IAEb3C,QAAS,GACTD,UAAW,GACXH,SAAU,GACVpB,qBAAsB,MAE1BsE,EAAiB,KAmP0E+B,MAAO,CAAEyF,SAAU,MAAOC,MAAO,QACpH,kBAACC,GAAA,EAAD,wBACA,kBAACC,GAAA,EAAD,KACI,yBAAK5F,MAAO,CAAEC,QAAS,OAAQC,eAAgB,kBAC3C,yBAAKC,UAAU,QACX,2BAAOC,QAAQ,WAAf,WACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,UACH7B,KAAK,UACLrC,MAAO2B,EAAe3C,QACtBmF,SAAUjC,MAGlB,yBAAK8B,UAAU,QACX,2BAAOC,QAAQ,aAAf,aACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,YACH7B,KAAK,YACLrC,MAAO2B,EAAe5C,UACtBoF,SAAUjC,MAGlB,yBAAK8B,UAAU,QACX,2BAAOC,QAAQ,YAAf,iBACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,WACH7B,KAAK,WACLrC,MAAO2B,EAAe/C,SACtBuF,SAAUjC,MAGlB,yBAAK8B,UAAU,QACX,2BAAOC,QAAQ,wBAAf,aACA,2BACI5J,KAAK,OACL2J,UAAU,eACVE,GAAG,uBACH7B,KAAK,uBACLrC,MAAO2B,EAAenE,qBACtB2G,SAAUjC,OAItB,yBAAK8B,UAAU,eACX,kBAACI,EAAA,EAAD,CAAQC,MAAM,UAAUC,QA/IvB,WACjB,IAAMC,EAAU,CACZvF,QAAS2C,EAAe3C,QACxBD,UAAW4C,EAAe5C,UAC1BvB,qBAAsBmE,EAAenE,qBACrCoB,SAAU+C,EAAe/C,SACzByH,OAAQ1E,EAAe0E,OACvBE,WAA0C,IAA9B5E,EAAe4E,WAAmB5E,EAAe4E,WAAa5E,EAAe2E,UAG7F5M,GAAOqB,KAAK,CACRC,MAAO,uBACPC,KAAM,oBACNC,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OAAIuM,GAAJ,kCAA4C,CAC7ClD,OAAQ,OACRtH,QAAS,CACL,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAUyB,KAEpBhJ,MAAK,SAACb,GAAD,OAAcA,EAASiC,UAC5BpB,MAAK,SAAC8E,GACHyB,EAAiBzB,GACjB2B,GAAe,GACftI,GAAO8B,WAEVgB,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,2CAA4CA,QA+GlD,WAIJ,kBAAC+H,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BACI,wBAAIV,UAAU,oBAAoBxE,MAAM,OAAxC,WACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,aACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,UACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,qBACA,wBAAIwE,UAAU,QAAQxE,MAAM,OAAO,OAG3C,+BACKgE,GAAepE,KAAI,SAAC5E,EAAMmK,GAAP,OAChB,wBAAIC,IAAKD,GACL,wBAAIX,UAAU,eAAexJ,EAAKwE,SAClC,wBAAIgF,UAAU,eAAexJ,EAAKuE,WAClC,wBAAIiF,UAAU,eAAexJ,EAAKgI,cAClC,wBAAIwB,UAAU,eAAexJ,EAAKgD,sBAClC,4BACI,kBAAC,IAAD,CACIwG,UAAU,kBACV1C,GAAG,IACHgD,QAAS,kBApIxB,SAACoF,GAEtB,IAAMnF,EAAU,CACZmF,UAAWA,EACXrD,OAAQ1E,EAAe0E,OACvBE,WAA0C,IAA9B5E,EAAe4E,WAAmB5E,EAAe4E,WAAa5E,EAAe2E,UAG7F5M,GAAOqB,KAAK,CACRC,MAAO,uBACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OAAIuM,GAAJ,4BAAsC,CACvClD,OAAQ,OACRtH,QAAS,CACL,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAUyB,KAEpBhJ,MAAK,SAACb,GACHhB,GAAO8B,QACiB,MAApBd,EAASxC,SACTkO,GAAe,GACfxE,EAAkB,2BACXD,GADU,IAEb3C,QAAS,GACTD,UAAW,GACXH,SAAU,GACVpB,qBAAsB,MAE1BsE,EAAiB,IACjB8E,GAAiBD,OAGxBnK,OAAM,SAACC,GACJ4G,QAAQ5G,MAAM,wBAAyBA,MA8FIkN,CAAiBnP,EAAKkP,aAHzC,kBAYnB7H,EAAclJ,OAAS,IACpB,kBAAC,KAAD,aACIkM,cAAe,kBACfC,UAAW,mBACXC,UAAWC,KAAKC,KAAKpD,EAAclJ,OArjBtC,IAsjBGuM,aAlGA,SAAC7E,GACrB,IAAM8E,EAAe9E,EAAK+E,SAC1BpD,GAAemD,IAiGKE,mBAAoB,aACpBC,gBAAiB,SACjBC,sBAAuB,mBACvBC,kBAAmB,mBACnBC,kBAAmB,8BATvB,kBAUqB,8BAI7B,kBAACmE,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAASwD,IAAnC,eAS0B,CAAC,U,yDCrnBxC,SAAS+B,GAAW1I,GAAO,IAExB2I,EAAqD3I,EAArD2I,MAAOC,EAA8C5I,EAA9C4I,KAAMC,EAAwC7I,EAAxC6I,KAAMC,EAAkC9I,EAAlC8I,QAASC,EAAyB/I,EAAzB+I,QAASlU,EAAgBmL,EAAhBnL,IAAKmU,EAAWhJ,EAAXgJ,OAE5CC,EAAOpF,KAAKC,KAAK6E,EAAQE,GACzBK,EAAQ,aAAInL,MAAMkL,GAAM1R,QAAQ0G,KAAI,SAAAkL,GAAC,OAAIA,EAAI,KAE7CC,EAAQvF,KAAKwF,OAAOT,EAAO,GADf,IAIlB,OAAQM,EAAM1R,OAAS,GACrB,kBAAC8R,GAAA,EAAD,CAAYT,KAAK,KAAKhG,UAAU,8BAC9B,kBAAC0G,GAAA,EAAD,CAAgB9F,IAAM,KACtB,kBAAC+F,GAAA,EAAD,CAAgBrG,QAAS,kBAAM6F,EAAOnU,EAV5B,EAUwCgU,EAAMC,EAASC,KAAYU,OAAOC,aAAa,OAEjG,kBAACH,GAAA,EAAD,CAAgB9F,IAAM,KACpB,kBAAC+F,GAAA,EAAD,CAAgBrG,QAAS,kBAAM6F,EAAOnU,EAAKgP,KAAK8F,IAAIf,EAAO,EAbnD,GAa8DC,EAAMC,EAASC,KAAYU,OAAOC,aAAa,MAErHR,EAAM1R,OAZM,GAYe0R,EAAMjL,KAAI,SAACkL,EAAGS,GAAJ,OACrC,kBAACL,GAAA,EAAD,CAAgB9F,IAAMmG,EAAIC,OAASjB,GAAQO,GACzC,kBAACK,GAAA,EAAD,CAAgBrG,QAAS,kBAAM6F,EAAOnU,EAAKsU,EAAGN,EAAMC,EAASC,KAC1DI,OAGLD,EAAMY,QAAO,SAACX,EAAGS,GAAJ,OAAUT,EAlBX,GAkBgBC,GAAsBD,GAlBtC,IAkB6CC,EAAM,MAAenL,KAAI,SAACkL,EAAGS,GAAJ,OACpF,kBAACL,GAAA,EAAD,CAAgB9F,IAAKmG,EAAGC,OAAQjB,GAAQO,GACtC,kBAACK,GAAA,EAAD,CAAgBrG,QAAS,kBAAM6F,EAAOnU,EAAKsU,EAAGN,EAAMC,EAASC,KAC1DI,OAIL,kBAACI,GAAA,EAAD,CAAgB9F,IAAK,KACnB,kBAAC+F,GAAA,EAAD,CAAgBrG,QAAS,kBAAM6F,EAAOnU,EAAKgP,KAAKkG,IAAInB,EAAO,EAAGK,GAAOJ,EAAMC,EAASC,KAAYU,OAAOC,aAAa,MAEtH,kBAACH,GAAA,EAAD,CAAgB9F,IAAK,KACnB,kBAAC+F,GAAA,EAAD,CAAgBrG,QAAS,kBAAM6F,EAAOnU,EAAKoU,EAAMJ,EAAMC,EAASC,KAAYU,OAAOC,aAAa,Q,iCCjC3FM,GAAb,kDACI,WAAYhK,GAAQ,IAAD,8BACf,cAAMA,IAUViK,aAAe,SAAAC,GACX,EAAKC,SAAS,CAAEvM,UAAW,GAAIC,QAAS,KACxC,EAAKmC,MAAMoK,cAAcF,IAbV,EAgBnBG,oBAAsB,SAAAH,GAClB,IAAIhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MACb,aAARqC,EACA,EAAKiJ,SAAS,CAAEvM,UAAWiB,IAEd,WAARqC,GACL,EAAKiJ,SAAS,CAAEtM,QAASgB,KAvBd,EA2BnByL,aAAe,SAAAJ,GACXA,EAAMK,iBACN,EAAKvK,MAAMwK,oBAAoB,EAAKC,MAAM7M,UAAW,EAAK6M,MAAM5M,UA3BhE,EAAK4M,MAAQ,CACTC,SAAU1K,EAAM2K,eAAgBC,iBAAkB5K,EAAM6K,cAAeC,MAAO9K,EAAM+K,YAAaC,SAAUhL,EAAMiL,eACjHC,QAASlL,EAAMmL,aAAcC,KAAMpL,EAAMqL,WAAYC,QAAStL,EAAMuL,cAAe3N,UAAW,GAAIC,QAAS,IAE/G,EAAKoM,aAAe,EAAKA,aAAa7O,KAAlB,iBACpB,EAAKiP,oBAAsB,EAAKA,oBAAoBjP,KAAzB,iBAC3B,EAAKkP,aAAe,EAAKA,aAAalP,KAAlB,iBARL,EADvB,qDAiCc,IAAD,OACL,OACI,2BACI,wBAAM8F,KAAK,WAAWsK,SAAU3S,KAAKyR,cACjC,gBAACmB,GAAA,EAAD,CAAK5I,UAAU,cACX,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,2BAClB,yBAAOA,UAAU,gBAAgBC,QAAQ,WAAzC,aAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,SACL0S,YAAY,0BACZ1K,KAAK,UACL6B,GAAG,UACHlE,MAAOhG,KAAKmH,MAAMmL,aAClBnI,SAAUnK,KAAKoR,cAEdpR,KAAKmH,MAAM2K,eAAe1M,KAAI,SAACiN,EAASW,GAAV,OAAkB,0BAAQpI,IAAKoI,EAAKhN,MAAOqM,GAAU,EAAKlL,MAAM6K,cAAcgB,SAGpHhT,KAAKmH,MAAM+K,aAAelS,KAAKmH,MAAM+K,YAAYvT,OAAS,EACvD,gCACI,gBAACkU,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,2BAClB,yBAAOA,UAAU,gBAAgBC,QAAQ,QAAzC,YAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,GACL,gBAACvE,GAAA,EAAD,CACIlO,KAAK,SACL2F,MAAOhG,KAAKmH,MAAM8L,UAClBF,YAAY,SACZ1K,KAAK,OACL6B,GAAG,OACHC,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAM+K,YAAY9M,KAAI,SAACqD,EAAGuK,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOyC,GAAIA,SAI/E,GACLzI,KAAKmH,MAAMiL,gBAAkBpS,KAAKmH,MAAMiL,eAAezT,OAAS,EAC7D,gCACI,gBAACkU,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,2BAClB,yBAAOA,UAAU,gBAAgBC,QAAQ,WAAzC,gBAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,SACLgI,KAAK,UACLrC,MAAOhG,KAAKmH,MAAM+L,aAClB/I,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAMiL,eAAehN,KAAI,SAAC+N,EAAGH,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOmN,GAAzB,IAA8BA,SAInF,IAEV,gBAACP,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACnB,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,2BAClB,yBAAOA,UAAU,gBAAgBC,QAAQ,aAAzC,eAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,OACL0S,YAAY,YACZ1K,KAAK,YACL6B,GAAG,YACHlE,MAAOhG,KAAK4R,MAAM7M,UAClBoF,SAAUnK,KAAKwR,oBACf4B,UAAW,MAInB,gBAACP,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,2BAClB,yBAAOA,UAAU,gBAAgBC,QAAQ,WAAzC,aAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,OACL0S,YAAY,UACZ1K,KAAK,UACL6B,GAAG,UACHlE,MAAOhG,KAAK4R,MAAM5M,QAClBmF,SAAUnK,KAAKwR,oBACf4B,UAAW,MAInB,gBAACP,GAAA,EAAD,CAAKC,GAAI,GAAG,gBAAC1I,EAAA,EAAD,CAAQ/J,KAAK,UAAb,0BAvHpC,GAAqCwG,a,QCF9B,SAASwM,GAAT,GAAgC,IAAhBnK,EAAe,EAAfA,KAAMW,EAAS,EAATA,MAK3B,OAJa,MAATA,IACFA,EAAQ,IAIR,kBAAC,KAAYyJ,SAAb,CAAsBtN,MAAO6D,GAC1BX,G,wBCLA,SAASqK,GAAT,GAAuD,IAA1BC,EAAyB,EAAzBA,SAAUC,EAAe,EAAfA,YAE5C,OACED,EAASE,UAAYD,EAAY9U,OAAS,GACvC,kBAACgV,GAAA,EAAD,CAAWC,SAAS,QACpBH,EAAYrO,KAAI,SAAC+C,EAAG4I,GAAJ,OACf,kBAAC8C,GAAA,EAAD,CAAejJ,IAAKmG,GACjBA,EAAI,EADP,MACyB,KAAZ5I,EAAE2L,OAAgB,kBAACT,GAAD,CAAMnK,KAAM,kBAAC,KAAD,MAA2BW,MAAO,CAAEQ,MAAO,WAA4B,KAAZlC,EAAE2L,OAAgB,kBAACT,GAAD,CAAMnK,KAAM,kBAAC,KAAD,MAA2BW,MAAO,CAAEQ,MAAO,YAAiB,kBAACgJ,GAAD,CAAMnK,KAAM,kBAAC,KAAD,QAAkB,IAAKf,EAAE4L,gBCE7O,IACMC,GAAUtQ,wDAEVhE,GAASC,IAAiBC,KAqYjBqU,GAnYW,SAAC9M,GAAW,IAAD,EAEPO,mBAAS,GAFF,mBAE1BoI,EAF0B,KAEnBoE,EAFmB,OAGHxM,oBAAS,GAHN,mBAG1BuE,EAH0B,KAGjBC,EAHiB,OAKPxE,mBAAS,CAC/B2K,QAAS,GACTE,KAAM,GACNE,QAAS,GACTzN,QAAS,GACTD,UAAW,GACXgL,KAAM,EACNC,KAAM,GACN6B,SAAU,GACVG,cAAe,GACfC,MAAO,GACPE,SAAU,KAhBmB,mBAK1BP,EAL0B,KAKnBN,EALmB,OAmBC5J,mBAAS,IAnBV,mBAmB1ByM,EAnB0B,KAmBfC,EAnBe,KAqB3BtO,EAAcsB,qBAAWR,GAAYd,YAErCuO,EAAmB,uCAAG,WAAO7T,GAAP,qCAAAiI,EAAA,yDAClB6L,EAAc9T,EAAKiD,MAAMwN,QAAO,SAAAhI,GAAC,MAAe,wBAAXA,EAAE3D,MAA6C,wBAAX2D,EAAE3D,QAAgCF,KAAI,SAAA6D,GAAC,OAAIA,EAAEzD,SAEtHuM,EAAmBvR,EAAKiD,MAAMwN,QAAO,SAAAhI,GAAC,MAAe,wBAAXA,EAAE3D,MAA6C,wBAAX2D,EAAE3D,QAAgCF,KAAI,SAAA6D,GAAC,OAAIA,EAAEvD,aAEtG,IAAvB4O,EAAY3V,OALQ,uBAMpBuN,GAAW,GANS,iCAUlBqI,EAAiBpN,EAAMqN,MAAMhW,OAAZ,SAAiC8V,EAAY,GAE9DG,EAAe,GACjBC,EAAkB,GAbE,UAeOnV,MAAM,GAAD,OAAIyU,GAAJ,iDAfZ,eAelBW,EAfkB,iBAgBGA,EAAiBhS,OAhBpB,QAgBlBiS,EAhBkB,QAkBxBF,EAAe,uBAAOA,GAAP,aAA2BE,EAAaC,SAEvCC,SAAQ,SAAAC,GACfN,EAAa9X,SAASoY,EAAGxC,OAC1BkC,EAAarL,KAAK2L,EAAGxC,SAIvByC,EAAc7N,EAAMqN,MAAMhW,OAAZ,OAA+BiW,EAAa9V,OAAS,EAAI8V,EAAa,GAAK,GACzFQ,EAAkB,GAExBP,EAAgBzD,QAAO,SAAAX,GAAC,OAAIA,EAAEiC,OAASyC,KAAaF,SAAQ,SAAAC,GACnDE,EAAgBtY,SAASoY,EAAGtC,UAC7BwC,EAAgB7L,KAAK2L,EAAGtC,YAI1ByC,EAAiB/N,EAAMqN,MAAMhW,OAAZ,UAAkCyW,EAAgBtW,OAAS,EAAIsW,EAAgB,GAAK,IACrGE,EAAchO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM7B,KAClDqF,EAAcjO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM5B,KAExDtQ,GAAO8B,QACP2F,EAAMhD,QAAQiF,KAAd,8BAA0CmL,EAA1C,YAA4DS,EAA5D,YAA2EE,EAA3E,YAA6FC,EAA7F,YAA4GC,IAC5G9D,GAAS,SAAAhJ,GAAS,kCACXA,GADW,IAEduJ,SAAUyC,EACVrC,MAAOwC,EACPtC,SAAU8C,EACV5C,QAASkC,EACTvC,cAAeD,EACfQ,KAAMyC,EACNvC,QAASyC,OAjDW,4CAAH,sDAqDnBG,EAAY,uCAAG,WAAO7U,GAAP,iCAAAiI,EAAA,yDACX4J,EAAUlL,EAAMqN,MAAMhW,OAAZ,SAAiCoT,EAAMS,QACnDE,EAAOpL,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAMW,KAC3CE,EAAUtL,EAAMqN,MAAMhW,OAAZ,SAAiCoT,EAAMa,QAE/C1C,EAAO/B,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM7B,KACrDC,EAAOhC,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM5B,KAE9C,IAATuC,GAA0B,KAAZF,GAA8B,KAAZI,EARnB,wDAUXzN,EAAU4M,EAAM5M,QAChBD,EAAY6M,EAAM7M,UAEpBuQ,EAba,UAaDtB,GAbC,8DAa4D3B,EAb5D,YAauEE,EAbvE,YAa+EE,EAb/E,YAa0F1C,EAb1F,YAakGC,GAC/GhL,GAA8B,KAAnBA,EAAQ3C,SACnBiT,GAAM,WAAQC,mBAAmBvQ,EAAQ3C,UAEzC0C,GAAkC,KAArBA,EAAU1C,SAClB2C,GAA8B,KAAnBA,EAAQ3C,SAAeiT,GAAM,WAAQC,mBAAmB,OACxED,GAAM,WAAQC,mBAAmBxQ,EAAU1C,UAnB9B,UAsBM9C,MAAM+V,GAtBZ,eAsBX5U,EAtBW,iBAuBEA,EAASiC,OAvBX,QAuBX0D,EAvBW,OAyBjB6F,GAAW,GACXxM,GAAO8B,QACH6E,GAAQA,EAAKyJ,OAASzJ,EAAKwO,OAC3BT,EAAa/N,EAAKwO,MAAMzP,KAAI,SAAAkL,GAAC,kCAAUA,GAAV,IAAaoD,UAAU,EAAO8B,QAAQ,EAAOC,QAAS,GAAIhC,YAAa,SACpGS,EAAS7N,EAAKyJ,SAEdsE,EAAa,IACbF,EAAS,IAhCI,4CAAH,sDAoClB7G,qBAAU,WACN7F,SAASxG,MAAQyG,0EACb3B,QAA+BtK,IAAhBsK,IACfpG,GAAOqB,KAAK,CACRC,MAAO,8BACPC,KAAM,oBACNC,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGfgT,EAAoBvO,MAEzB,CAACA,IAEJuH,qBAAU,WACFvH,QAA+BtK,IAAhBsK,IACfoG,GAAW,GACXxM,GAAOqB,KAAK,CACRC,MAAO,qBACPC,KAAM,oBACNC,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGfgU,EAAavP,MAElB,CAAC8L,IAEJ,IA8BM8D,EAAa,SAAC1Z,EAAK+T,EAAMC,GAC3B7I,EAAMhD,QAAQiF,KAAd,UAAsBpN,EAAtB,YAA6B+T,EAA7B,YAAqCC,IACrCsB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqByH,OAAMC,aAG3Cb,EAAS,SAACqE,GACZ,IAAMzC,EAAIoD,EAAUzN,QAAQ8M,IACvBA,EAASE,UAAYF,EAASC,aAA+C,IAAhCD,EAASC,YAAY9U,QACnEe,GAAOqB,KAAK,CACRC,MAAO,sBACPC,KAAM,oBACNC,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OAAIyU,GAAJ,uDAA0DR,EAASjB,KAAnE,YAA2EiB,EAASf,QAApF,YAA+Fe,EAASmC,OAAxG,YAAkHnC,EAASA,SAA3H,YAAuIA,EAAS3O,iBAChJtD,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF3G,GAAO8B,QACP4S,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlB2C,UAAWkC,EAAc7E,GAAG2C,SAC5BD,YAAapN,EAAKwO,SALA,aAOnBe,EAAcnM,MAAMsH,EAAI,YAIvCqD,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlB2C,UAAWkC,EAAc7E,GAAG2C,YAJV,aAMnBkC,EAAcnM,MAAMsH,EAAI,SAKjC8E,EAAY,SAACrC,GACf,GAA0B,GAAtBA,EAASsC,UAAb,CAQA,IAAM/E,EAAIoD,EAAUzN,QAAQ8M,GACvBA,EAASgC,OAsCVpB,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlByE,QAASI,EAAc7E,GAAGyE,UAJR,aAMnBI,EAAcnM,MAAMsH,EAAI,SA3C/BrR,GAAOqB,KAAK,CACRC,MAAO,mBACPC,KAAM,oBACNC,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OAAIyU,GAAJ,oDAAuDR,EAASuC,QAAhE,YAA2EvC,EAASwC,QAApF,YAA+FxC,EAASyC,aACxG1U,MAAK,SAAAb,GACF,OAAKA,EAASsI,GAKPtI,EAASiC,OAJLjC,EAASO,OAAOM,MAAK,SAAAN,GACxB,MAAM,IAAIpF,MAAMoF,SAK3BM,MAAK,SAAA8E,GACF3G,GAAO8B,QACP4S,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlByE,QAASI,EAAc7E,GAAGyE,OAC1BC,QAASpP,KALS,aAOnBuP,EAAcnM,MAAMsH,EAAI,WAGlCvO,OAAM,SAAAC,GACH/C,GAAOqB,KAAK,CACRmI,KAAM,QACNlI,MAAO,QACPC,KAAK,GAAD,OAAKwB,EAAMnC,oBA1C3BZ,GAAOqB,KAAK,CACRmI,KAAM,OACNlI,MAAO,iBACPC,KAAM,uCAmJZoN,EAAWpC,EAAU,2BAAG,2CA7FV,SAACkI,GACjB,OACI,oCACI,2BAAOnK,UAAU,sBAAsBkM,kBAAgB,cACnD,+BACI,4BACI,wBAAIlM,UAAU,eAAd,UACA,wBAAIA,UAAU,eAAd,cACA,wBAAIA,UAAU,eAAd,aACA,wBAAIA,UAAU,eAAd,WACA,wBAAIA,UAAU,eAAd,YACA,wBAAIA,UAAU,eAAd,WACA,wBAAIA,UAAU,eAAd,gBACA,0CAGR,+BACKmK,EAAU/O,KAAI,SAACkL,EAAG3F,GACf,IAAMwL,EAA+B,IAAlB7F,EAAE8F,YAAoB,EAAIpL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aAC9E,OACI,wBAAIxL,IAAKD,GACL,wBAAIX,UAAU,eAAesG,EAAEiC,MAC/B,wBAAIvI,UAAU,eAAesG,EAAEmC,SAC/B,wBAAIzI,UAAU,eAAesG,EAAEqF,QAC/B,4BAAKrF,EAAEgG,SACP,wBAAItM,UAAU,eAAesG,EAAEkD,UAC/B,4BAAKlD,EAAEiG,SACP,wBAAIvM,UAAU,eACV,0BAAME,GAAI,MAAQS,GAASwL,EAA3B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,SAASrO,OAAQ,MAAQuC,GACnD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,wBAAIpM,UAAU,eACV,yBAAKA,UAAU,YAAY1E,KAAK,QAAQoR,aAAW,WAAW7M,MAAO,CAAEyE,IAAK,WAExE,6BACA,0BAAMpE,GAAI,iBAAmBS,GACzB,kBAAC,IAAD,CAAMX,UAAU,2BAA2B1C,GAAG,IAAIgD,QAAS,kBAAM6E,EAAOmB,KACpE,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,iBAAmBuC,GAC3D,wBAEL,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEoD,SAAU1J,UAAU,YACjC,kBAACwF,GAAA,EAAD,CAAaL,OAAQ,kBAAMA,EAAOmB,KAAlC,wBACA,kBAACb,GAAA,EAAD,KACI,kBAAC8D,GAAD,CAAmBC,SAAUlD,EAAGmD,YAAanD,EAAEmD,eAEnD,kBAAC7D,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM6E,EAAOmB,KAAhD,aAKR,6BACA,0BAAMpG,GAAI,WAAaS,GACnB,kBAAC,IAAD,CAAMX,UAAU,2BAA2B1C,GAAG,IAAIgD,QAAS,kBAAMuL,EAAUvF,KACvE,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,WAAauC,GACrD,kBAEL,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEkF,OAAQxL,UAAU,YAC/B,kBAACwF,GAAA,EAAD,yBACA,kBAACC,GAAA,EAAD,KACI,2BAAOkH,IAAG,sCAAiCrG,EAAEmF,SAAWlG,MAAO,KAAMqH,OAAQ,IAAKvW,KAAK,kBAAkBwW,YAAY,0DAEzH,kBAACjH,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAMuL,EAAUvF,KAAnD,YAEA,qCAQhC,+BACI,4BACI,wBAAIwG,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAOA,EAAOC,KAAM6B,EAAM7B,KAAMC,KAAM4B,EAAM5B,KAAMhU,IAAG,8BAAyB4V,EAAMS,QAA/B,YAA0CT,EAAMW,KAAhD,YAAwDX,EAAMa,SAAWtC,OAAQuF,SAStHqB,CAAY5C,GAEpE,OACI,6BACI,wBAAIjK,GAAG,cAAP,+BACA,kBAAC,GAAD,CACI4H,eAAgBF,EAAMC,SACtBG,cAAeJ,EAAMI,cACrBM,aAAcV,EAAMS,QACpBH,YAAaN,EAAMK,MACnBgB,UAAWrB,EAAMW,KACjBH,eAAgBR,EAAMO,SACtBe,aAActB,EAAMa,QACpBlB,cA7Oc,SAACF,GACvB,IAAMhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MACnBqM,EAA2BT,EAA3BS,QAASE,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QAIV,YAATpK,GACAlB,EAAMhD,QAAQiF,KAAd,8BAA0CpD,EAA1C,YAAmDuM,EAAnD,YAA2DE,EAA3D,YAJS,EAIT,YAHS,KAITnB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqB+J,QAASrM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KAL1E,EAKgFC,KAJhF,SAKO,SAAT3H,GACPlB,EAAMhD,QAAQiF,KAAd,8BAA0CiJ,EAA1C,YAAqDrM,EAArD,YAA8DyM,EAA9D,YAPS,EAOT,YANS,KAOTnB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqBiK,KAAMvM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KARvE,EAQ6EC,KAP7E,SAQO,YAAT3H,IACPlB,EAAMhD,QAAQiF,KAAd,8BAA0CiJ,EAA1C,YAAqDE,EAArD,YAA6DvM,EAA7D,YAVS,EAUT,YATS,KAUTsL,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqBmK,QAASzM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KAX1E,EAWgFC,KAVhF,UAyOL2B,oBA3Ne,SAAC5M,EAAWC,GAAa,IACxCqN,EAA2BT,EAA3BS,QAASE,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QACvBtL,EAAMhD,QAAQiF,KAAd,8BAA0CiJ,EAA1C,YAAqDE,EAArD,YAA6DE,EAA7D,IAAwE,EAAxE,IAA6E,KAC7EnB,EAAS,2BACFM,GADC,IAEJ7M,UAAwB,MAAbA,EAAoB,GAAKA,EAAU1C,OAC9C2C,QAAoB,MAAXA,EAAkB,GAAKA,EAAQ3C,OACxC0N,KAAM,EAAGC,KAAM,SAsNd3B,I,8GC3YA2I,I,OAAb,kDAGI,WAAY7P,GAAQ,IAAD,8BACf,cAAMA,IAED8P,aAAe,EAAKA,aAAa1U,KAAlB,iBACpB,EAAK2B,MAAQ,EAAKA,MAAM3B,KAAX,iBACb,EAAK8B,OAAS,EAAKA,OAAO9B,KAAZ,iBAEd,EAAKqP,MAAQ,CACTsF,WAAW,GARA,EAHvB,2DAgBQlX,KAAKsR,SAAS,CACV4F,WAAYlX,KAAK4R,MAAMsF,cAjBnC,8BAsBQlX,KAAKmH,MAAMgQ,gBAtBnB,+BA0BQnX,KAAKmH,MAAMiQ,iBA1BnB,+BA8BQ,IAAMtR,EAAc9F,KAAKqX,QAAQvR,YACjC,OACI,gCACI,kBAACwR,GAAA,EAAD,CAAQtN,UAAU,+EAA+EuN,OAAK,GAClG,kBAACC,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAaC,IAAKC,IAAMrQ,GAAG,KAAK,KAChC,kBAACsQ,GAAA,EAAD,CAAetN,QAAStK,KAAKiX,aAAcjN,UAAU,SACrD,kBAAC6N,GAAA,EAAD,CAAU7N,UAAU,uCAAuCkF,QAASlP,KAAK4R,MAAMsF,UAAWY,QAAM,GAC5F,wBAAI9N,UAAU,wBACV,kBAAC+N,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,YAAY1C,GAAG,aAA7C,aAEJ,kBAACyQ,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,YAAY1C,GAAG,eAA7C,eAEJ,4BAAQ0C,UAAU,iBAAiB3J,KAAK,SAAS4X,iBAAe,WAAWC,iBAAe,0BAA0BC,gBAAc,yBAAyBC,gBAAc,QAAQ1B,aAAW,qBACxL,0BAAM1M,UAAU,yBAEnBlE,GAAeA,EAAYvC,QACxB,yBAAKyG,UAAU,2BAA2BE,GAAG,0BACzC,wBAAIF,UAAU,sBACV,wBAAIA,UAAU,YACV,uBAAGA,UAAU,WAAW7N,KAAK,KAA7B,mBAAkD2J,EAAYvC,QAA9D,MAEJ,kBAAC8U,GAAA,EAAD,CAAsBC,KAAG,EAACC,UAAQ,GAC9B,kBAACC,GAAA,EAAD,CAAgBF,KAAG,EAACG,OAAK,GAAzB,gBAGA,kBAACC,GAAA,EAAD,CAAcC,OAAK,GAEd7S,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAC5CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,WAAVA,EAAE3D,SACjC,kBAACsT,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,kBAAkB,kBAGpFxB,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAC5CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,UAAVA,EAAE3D,MAA8B,aAAV2D,EAAE3D,SACvD,oCACI,kBAACsT,GAAA,EAAD,CAAcC,SAAO,IACrB,kBAACD,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,qBAAqB,2BAEpF,kBAACsR,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,wBAAwB,kCAI9FxB,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAC5CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAe,UAAVA,EAAE3D,MAA+B,SAAX2D,EAAEzD,OAAgC,aAAVyD,EAAE3D,MAAkC,SAAX2D,EAAEzD,UACzG,oCACI,kBAACoT,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,sBAAsB,gCAI5FxB,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAC5CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAe,UAAVA,EAAE3D,MAAgC,OAAZ2D,EAAEzD,OAA6B,0BAAVyD,EAAE3D,MAA8C,SAAV2D,EAAE3D,SACnH,oCACI,kBAACsT,GAAA,EAAD,KACA,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,0BAA0B,iCAI5FxB,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAASqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,uBAAVA,EAAE3D,SACtF,oCACI,kBAACsT,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,uBAAuB,iCAI7FxB,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAASqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,wBAAVA,EAAE3D,MAA4C,uBAAV2D,EAAE3D,SAC1H,oCACI,kBAACsT,GAAA,EAAD,CAAcC,SAAO,IACrB,kBAACD,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,wBAAwB,kCAI9FxB,GAAeA,EAAYvC,SAAWuC,EAAYrC,QAC3CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,SAAVA,EAAE3D,SAC9BQ,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAI,CAAC,SAAU,YAAa,sBAAuB,wBAAwBtM,SAASsM,EAAE3D,OAAqB,UAAZ2D,EAAEzD,WAC7H,oCACI,kBAACoT,GAAA,EAAD,CAAcC,SAAO,IACrB,kBAACD,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,0BAA0B,2BAIhGxB,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAC5CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,SAAVA,EAAE3D,SACjC,oCACI,kBAACsT,GAAA,EAAD,CAAcC,SAAO,IACrB,kBAACD,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,aAAa,yBAE3ExB,GAAeA,EAAYvC,UAAYuC,EAAYF,gBAChD,kBAACgT,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,gBAAgB,cAK3F,kBAACsR,GAAA,EAAD,CAAcC,SAAO,IACrB,kBAACD,GAAA,EAAD,KACI,kBAACZ,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,0BAA0B1C,GAAG,IAAIgD,QAAStK,KAAKqE,QAAS,yBAO1G,kBAAC0T,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAASN,IAAKC,IAAM3N,UAAU,YAAY1C,GAAG,IAAIgD,QAAStK,KAAKkE,OAAQ,+BA/I/G,GAA6B4U,cAAhB9B,GACF+B,YAAc/B,GAAQ3O,KAyJjC2O,GAAQgC,YAAcpS,E,yBC9IPqS,GAfmB,WAAO,IAE7BC,EAAyB9R,qBAAWR,GAApCsS,qBACFpT,EAAcsB,qBAAWR,GAAYd,YAE3C,OACI,yBAAK+D,MAAO,CAAEsP,SAAU,QAASC,OAAQ,EAAG7J,MAAO,OAAQ8J,gBAAiB,UAAWC,QAAS,OAAQC,UAAW,SAAUC,OAAQ,IAAM1P,QAAS,OAAQC,eAAgB,kBACxK,0BAAMF,MAAO,CAAE4P,UAAW,SAAUC,WAAY,OAAQC,YAAa,OAAQtP,MAAO,SAAW,6CAA4CvE,EAAYf,UAAY,IAAMe,EAAYd,SACrL,4BAAQsF,QAAS4O,EAAsBrP,MAAO,CAAE+P,WAAY,QAAU5P,UAAU,iBAAhF,2CCFN7F,GAAU0V,cAEHC,GAAb,kDAII,WAAY3S,GAAQ,IAAD,8BACf,cAAMA,IAEDjD,MAAQ,EAAKA,MAAM3B,KAAX,iBACb,EAAK8B,OAAS,EAAKA,OAAO9B,KAAZ,iBAJC,EAJvB,oDAYQ0B,EAAYC,MAAMC,MAZ1B,+BAgBQF,EAAYI,WAhBpB,+BAmBc,IAEEyB,EAAgB9F,KAAKmH,MAArBrB,YAER,OACI,yBAAKkE,UAAU,4BACVlE,GAAeA,EAAYF,gBAAkB,kBAAC,GAAD,MAC9C,kBAAC4R,GAAA,EAAD,KACI,yBAAKxN,UAAU,mBACX,yBAAKA,UAAU,OACX,yBAAK2M,IAAKoD,KAAMnD,OAAQ,GAAIoD,IAAI,WAEpC,yBAAKhQ,UAAU,OAAM,wBAAIA,UAAU,oBAAd,cAA4C,6BAA5C,uCAG7B,kBAAC,GAAD,CAASmN,YAAanX,KAAKkE,MAAOkT,aAAcpX,KAAKqE,SACrD,0BAAM2F,UAAU,+BACZ,kBAACwN,GAAA,EAAD,KACI,6BACKxX,KAAKmH,MAAM8S,YAIxB,4BAAQjQ,UAAU,uBACd,kBAACwN,GAAA,EAAD,CAAWxN,UAAU,iCACjB,0BAAMA,UAAU,0BAAhB,6FAAgI,6BAAhI,6FAC2F,6BAD3F,6JA5CxB,GAAgC8O,aAAnBgB,GAEFf,YAAce,GAAWzR,KCX7B,IAAM6R,GAAb,uKAII,OACE,6BACE,0HACA,uVAIA,qXAXR,GAA0BpB,aAAboB,GACJnB,YAAcmB,GAAK7R,KCO5B,IAAM3I,GAASC,IAAiBC,KAI1BkM,GAASpI,wDAEFyW,GAAb,kDAGI,WAAYhT,GAAQ,IAAD,8BACf,cAAMA,IACDyK,MAAQ,CAAE9B,MAAO,EAAGC,KAAM,EAAGC,KAAM,GAAImE,UAAW,GAAIlI,SAAS,GACpE,EAAKyJ,WAAa,EAAKA,WAAWnT,KAAhB,iBAClB,EAAK6X,cAAgB,EAAKA,cAAc7X,KAAnB,iBACrB,EAAK4M,OAAS,EAAKA,OAAO5M,KAAZ,iBALC,EAHvB,gEAYQ,IAAMuD,EAAc9F,KAAKqX,QAAQvR,YACjC0B,SAASxG,MAAQyG,2EACjB,IAAMsI,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,EACpDwR,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,GAEtDsH,GAAeA,EAAYtC,qBAAqB7E,OAAS,GACzDqB,KAAKqV,aAAavP,EAAYtC,qBAAsBuM,EAAMC,KAlBtE,2CAwBQ,IAAMlK,EAAc9F,KAAKqX,QAAQvR,YAC3BiK,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,EACpDwR,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,GAEtDsH,GAAeA,EAAYtC,qBAAqB7E,OAAS,GACzDqB,KAAKqV,aAAavP,EAAYtC,qBAAsBuM,EAAMC,KA7BtE,iCAiCehU,EAAK+T,EAAMC,GAClBhQ,KAAKmH,MAAMhD,QAAQiF,KAAnB,UAA2BpN,EAA3B,YAAkC+T,EAAlC,YAA0CC,MAlClD,oCAqCkBuC,EAAME,EAASkD,EAAQnC,EAAU3O,GAC3C7E,KAAKmH,MAAMhD,QAAQiF,KAAnB,oBAAqCmJ,EAArC,YAA6CE,EAA7C,YAAwDkD,EAAxD,YAAkEnC,EAAlE,YAA8E3O,MAtCtF,6BAyCW2O,GAAW,IAAD,OACPzC,EAAI/Q,KAAK4R,MAAMuC,UAAUzN,QAAQ8M,GAEvC,GAAKA,EAASgC,OAoCVxV,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,UAJrB,aAMFrB,EAAU1K,MAAMsH,EAAI,aA3Cb,CAClBrR,GAAOqB,KAAK,CACRC,MAAO,sBACPE,mBAAmB,EACnBC,mBAAmB,EACnBkZ,aAAc,WACV3a,GAAO2B,iBAIf,IAAIrF,EAA0B,UAApBwX,EAASmC,QAA0C,UAApBnC,EAASmC,OAAxC,UACH7J,GADG,qDACgD0H,EAASjB,KADzD,YACiEiB,EAASf,QAD1E,YACqFe,EAASmC,OAD9F,YACwGnC,EAASA,SADjH,YAC6HA,EAAS8G,OADtI,YACgJ9G,EAAS+G,kBADzJ,UAEHzO,GAFG,qDAEgD0H,EAASjB,KAFzD,YAEiEiB,EAASmC,OAF1E,YAEoFnC,EAAS8G,QAEvG/a,MAAMvD,GACDuF,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF,EAAKiL,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,OACtBC,QAASpP,KALR,aAOF8N,EAAU1K,MAAMsH,EAAI,SAG/BrR,GAAO8B,WAEVgB,OAAM,SAAAC,GACH4G,QAAQ5G,MAAM,8BAA+BA,GAC7C/C,GAAOqB,KAAK,QAAS,4BAA6B,eA5EtE,gCA6FcyZ,GACN,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KA9FvI,kCAiGgB1U,EAAaqO,GAAY,IAAD,OAEhC,OACI,kBAAC3J,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BACI,wBAAIV,UAAU,oBAAoBxE,MAAM,OAAxC,UACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,cACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,SACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,aACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,qBACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,YACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,gBACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,mBACA,wBAAIwE,UAAU,QAAQxE,MAAM,OAAO,OAG3C,+BACK2O,EAAU/O,KAAI,SAACkL,EAAG3F,GACf,IAAMwL,EAAanL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aACpD,OACI,wBAAIxL,IAAKD,GACL,wBAAIX,UAAU,eAAesG,EAAEiC,MAC/B,wBAAIvI,UAAU,eAAesG,EAAEmC,QAAUnC,EAAEmC,QAAU,OACrD,wBAAIzI,UAAU,eAAesG,EAAEwK,OAC/B,wBAAI9Q,UAAU,eAAesG,EAAEqF,QAC/B,4BAAkB,UAAbrF,EAAEqF,QAAmC,UAAbrF,EAAEqF,OAAqBrF,EAAEgG,QAAuB,UAAbhG,EAAEqF,OAAqB,2CAAuC,sDAC9H,wBAAI3L,UAAU,eAAesG,EAAEkD,SAAWlD,EAAEkD,SAAW,OACvD,wBAAIxJ,UAAU,eACV,0BAAME,GAAI,MAAQS,GAASwL,EAA3B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,QAAQrO,OAAQ,MAAQuC,GAClD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,wBAAIpM,UAAU,eAAesG,EAAEwF,UAAY,EAAI,EAAKiF,UAAUzK,EAAE0K,UAAY,KAC5E,4BACI,yBAAKhR,UAAU,YAAY1E,KAAK,QAAQoR,aAAW,YAE/C,0BAAMxM,GAAI,OAASS,GACD,UAAb2F,EAAEqF,QAAmC,UAAbrF,EAAEqF,OACvB,kBAAC,IAAD,CAAM3L,UAAU,oBAAoB1C,GAAE,oBAAegJ,EAAEiC,KAAjB,YAAyBjC,EAAEmC,QAA3B,YAAsCnC,EAAEqF,OAAxC,YAAkDrF,EAAEkD,SAApD,YAAgElD,EAAEgK,SACpG,kBAACjH,GAAD,CAAMnK,KAAM,kBAAC,KAAD,SAGhB,kBAAC,IAAD,CAAMc,UAAU,oBAAoB1C,GAAE,oBAAegJ,EAAEiC,KAAjB,YAAyBjC,EAAEqF,OAA3B,YAAqCrF,EAAEgK,SACzE,kBAACjH,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAIxB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,OAASuC,GACjD,WAGL,0BAAMT,GAAI,WAAaS,GACnB,kBAAC,IAAD,CAAMX,UAAU,oBAAoB1C,GAAG,IAAIgD,QAAS,kBAAM,EAAK6E,OAAOmB,KAClE,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,WAAauC,GACrD,kBAEJ7E,GAAeA,EAAYtC,sBAAwB8M,EAAEgK,QAClD,oCACI,kBAACrL,GAAA,EAAD,CAAOC,OAAQoB,EAAEkF,OAAQxL,UAAU,YAC/B,kBAACwF,GAAA,EAAD,KAA2B,UAAbc,EAAEqF,QAAmC,UAAbrF,EAAEqF,OAAqB,mBAAqB,iBAClF,kBAAClG,GAAA,EAAD,KACI,2BAAOkH,IAAG,sCAAiCrG,EAAEmF,SAAWlG,MAAO,KAAMqH,OAAQ,IAAKvW,KAAK,kBAAkBwW,YAAY,0DAEzH,kBAACjH,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM,EAAK6E,OAAOmB,KAArD,YAIR,0BAAMpG,GAAI,OAASS,GACD,UAAb2F,EAAEqF,QAAmC,UAAbrF,EAAEqF,OACvB,kBAAC,IAAD,CAAM3L,UAAU,oBAAoB1C,GAAE,gCAA2BgJ,EAAEiC,KAA7B,YAAqCjC,EAAEmC,QAAvC,YAAkDnC,EAAEqF,OAApD,YAA8DrF,EAAEkD,SAAhE,YAA4ElD,EAAEgK,OAA9E,YAAwFhK,EAAEiK,mBAC5H,kBAAClH,GAAD,CAAMnK,KAAM,kBAAC,KAAD,SAGhB,kBAAC,IAAD,CAAMc,UAAU,oBAAoB1C,GAAE,gCAA2BgJ,EAAEiC,KAA7B,YAAqCjC,EAAEqF,OAAvC,YAAiDrF,EAAEgK,SACrF,kBAACjH,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAIxB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,OAASuC,GACjD,sBAUrC,+BACI,4BACI,wBAAImM,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAO9P,KAAK4R,MAAM9B,MAAOC,KAAM/P,KAAK4R,MAAM7B,KAAMC,KAAMhQ,KAAK4R,MAAM5B,KAAMhU,IAAG,iBAAoBmU,OAAQnQ,KAAK0V,mBAnMnJ,+BA4MQ,IAAM5P,EAAc9F,KAAKqX,QAAQvR,YAC7BuI,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK+W,YAAYjR,EAAa9F,KAAK4R,MAAMuC,WAE/C,OACI,6BACKrO,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAASqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAe,UAAXA,EAAE3D,SACtF,yBAAK0E,UAAU,mBAAmB1E,KAAK,SAAvC,2PAIJ,wBAAI4E,GAAG,cAAP,+BACCmE,KAzNjB,4EA8NuBxJ,GA9NvB,8FA8NuCkL,EA9NvC,+BA8N8C,EAAGC,EA9NjD,+BA8NwD,GAEpB,GAAxBhQ,KAAK4R,MAAMuC,WAAkBpE,GAAQ/P,KAAK4R,MAAM7B,KAhO5D,iEAiO+BxQ,MAAM,GAAD,OAAIuM,GAAJ,4CAA8CjH,EAA9C,YAAgEkL,EAAhE,YAAwEC,IAjO5G,cAiOctP,EAjOd,gBAkO2BA,EAASiC,OAlOpC,QAkOc0D,EAlOd,SAoOoBA,EAAKyJ,OAASzJ,EAAKwO,QACrBV,EAAY9N,EAAKwO,MAAMzP,KAAI,SAAAkL,GAAC,kCAAUA,GAAV,IAAakF,QAAQ,EAAOC,QAAS,QAEvEzV,KAAKsR,SAAS,CAAExB,MAAOzJ,EAAKyJ,MAAOC,KAAMA,EAAMC,KAAMA,EAAMmE,UAAWA,EAAWlI,SAAS,KAvOtG,6GAAkC6M,aAArBqB,GACFpB,YAAcoB,GAAa9R,KA0OtC8R,GAAanB,YAAcpS,ECtPpB,IAAMqU,GAAb,kDACI,WAAY9T,GAAQ,IAAD,8BACf,cAAMA,IAUViK,aAAe,SAAAC,GACX,EAAKC,SAAS,CAAEvM,UAAW,GAAIC,QAAS,KACxC,EAAKmC,MAAMoK,cAAcF,IAbV,EAgBnBG,oBAAsB,SAAAH,GAClB,IAAIhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MACb,aAARqC,EACA,EAAKiJ,SAAS,CAAEvM,UAAWiB,IAEd,WAARqC,GACL,EAAKiJ,SAAS,CAAEtM,QAASgB,KAvBd,EA2BnByL,aAAe,SAAAJ,GACXA,EAAMK,iBACN,EAAKvK,MAAMwK,oBAAoB,EAAKC,MAAM7M,UAAW,EAAK6M,MAAM5M,UA3BhE,EAAK4M,MAAQ,CACTsJ,SAAU/T,EAAM4F,cAAekF,MAAO9K,EAAM+K,YAAaC,SAAUhL,EAAMiL,eACzE5D,OAAQrH,EAAMgU,YAAa5I,KAAMpL,EAAMqL,WAAYC,QAAStL,EAAMuL,cAAe3N,UAAW,GAAIC,QAAS,IAE7G,EAAKoM,aAAe,EAAKA,aAAa7O,KAAlB,iBACpB,EAAKiP,oBAAsB,EAAKA,oBAAoBjP,KAAzB,iBAC3B,EAAKkP,aAAe,EAAKA,aAAalP,KAAlB,iBARL,EADvB,qDAkCQ,OACI,2BACI,wBAAM8F,KAAK,WAAWsK,SAAU3S,KAAKyR,cACjC,gBAACmB,GAAA,EAAD,CAAK5I,UAAU,cACX,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,UAA1C,cAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,SACL0S,YAAY,WACZ1K,KAAK,SACL6B,GAAG,SACHlE,MAAOhG,KAAKmH,MAAMgU,YAClBhR,SAAUnK,KAAKoR,cAEdpR,KAAKmH,MAAM4F,cAAc3H,KAAI,SAACgW,EAAIpI,GAAL,OAAa,0BAAQpI,IAAKoI,EAAKhN,MAAOoV,GAAKA,QAGhFpb,KAAKmH,MAAM+K,aAAelS,KAAKmH,MAAM+K,YAAYvT,OAAS,EACvD,gCACI,gBAACkU,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,QAA1C,YAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,GACL,gBAACvE,GAAA,EAAD,CACIlO,KAAK,SACL2F,MAAOhG,KAAKmH,MAAM8L,UAClBF,YAAY,SACZ1K,KAAK,OACL6B,GAAG,OACHC,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAM+K,YAAY9M,KAAI,SAACqD,EAAGuK,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOyC,GAAIA,SAI/E,GACLzI,KAAKmH,MAAMiL,gBAAkBpS,KAAKmH,MAAMiL,eAAezT,OAAS,EAC7D,gCACI,gBAACkU,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,WAA1C,iBAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,SACLgI,KAAK,UACLrC,MAAOhG,KAAKmH,MAAM+L,aAClB/I,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAMiL,eAAehN,KAAI,SAAC+N,EAAGH,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOmN,GAAzB,IAA8BA,SAInF,IAEV,gBAACP,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACnB,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,UAA1C,eAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,OACL0S,YAAY,YACZ1K,KAAK,YACL6B,GAAG,YACHlE,MAAOhG,KAAK4R,MAAM7M,UAClBoF,SAAUnK,KAAKwR,oBACf4B,UAAW,MAInB,gBAACP,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,YAA1C,aAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,OACL0S,YAAY,UACZ1K,KAAK,UACL6B,GAAG,UACHlE,MAAOhG,KAAK4R,MAAM5M,QAClBmF,SAAUnK,KAAKwR,oBACf4B,UAAW,MAInB,gBAACP,GAAA,EAAD,CAAKC,GAAI,GAAG,gBAAC1I,EAAA,EAAD,CAAQ/J,KAAK,UAAb,0BAvHpC,GAAoCwG,aCM9BmN,GAAUtQ,wDAEVhE,GAASC,IAAiBC,KA4QjByb,GA1QU,SAAClU,GAAW,IAAD,EAENO,mBAAS,GAFH,mBAEzBoI,EAFyB,KAElBoE,EAFkB,OAGFxM,oBAAS,GAHP,mBAGzBuE,EAHyB,KAGhBC,EAHgB,OAKNxE,mBAAS,CAC/B8G,OAAQ,GACR+D,KAAM,EACNE,QAAS,GACTzN,QAAS,GACTD,UAAW,GACXgL,KAAM,EACNC,KAAM,GACNkL,SAAU,GACVjJ,MAAO,GACPE,SAAU,KAfkB,mBAKzBP,EALyB,KAKlBN,EALkB,OAkBE5J,mBAAS,IAlBX,mBAkBzByM,EAlByB,KAkBdC,EAlBc,OAmBA1M,mBAAS,IAnBT,mBAmBzB4T,EAnByB,KAqB1BxV,GArB0B,KAqBZsB,qBAAWR,GAAYd,aAErCuO,EAAmB,uCAAG,WAAO7T,GAAP,mCAAAiI,EAAA,yDAGG,KAFrB8S,EAAc/a,EAAKiD,MAAMwN,QAAO,SAAAhI,GAAC,MAAe,WAAXA,EAAE3D,MAAgC,cAAX2D,EAAE3D,QAAsBF,KAAI,SAAA6D,GAAC,OAAIA,EAAEzD,UAErF7G,OAHQ,oDAKlB6c,EAAgBrU,EAAMqN,MAAMhW,OAAZ,QAAgC+c,EAAY,GAE5D9G,EAAe,GACjBC,EAAkB,GAEE,IAApB4G,EAAS3c,OAVW,iCAWWY,MAAM,GAAD,OAAIyU,GAAJ,6DAAgEwH,IAXhF,cAWd7G,EAXc,iBAYOA,EAAiBhS,OAZxB,QAYdiS,EAZc,QAcpBF,EAAe,uBAAOA,GAAP,aAA2BE,EAAaC,SAEvCC,SAAQ,SAAAC,GACfN,EAAa9X,SAASoY,EAAGxC,OAC1BkC,EAAarL,KAAK2L,EAAGxC,SAlBT,QAuBlByC,EAAc7N,EAAMqN,MAAMhW,OAAZ,OAA+BiW,EAAa9V,OAAS,EAAI8V,EAAa,GAAK,GACzFQ,EAAkB,GAExBP,EAAgBzD,QAAO,SAAAX,GAAC,OAAIA,EAAEiC,OAASyC,KAAaF,SAAQ,SAAAC,GACnDE,EAAgBtY,SAASoY,EAAGtC,UAC7BwC,EAAgB7L,KAAK2L,EAAGtC,YAI1ByC,EAAiB/N,EAAMqN,MAAMhW,OAAZ,UAAkCyW,EAAgBtW,OAAS,EAAIsW,EAAgB,GAAK,IACrGE,EAAchO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM7B,KAClDqF,EAAcjO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM5B,KAExD7I,EAAMhD,QAAQiF,KAAd,6BAAyCoS,EAAzC,YAA0DxG,EAA1D,YAAyEE,EAAzE,YAA2FC,EAA3F,YAA0GC,IAC1G9D,GAAS,SAAAhJ,GAAS,kCACXA,GADW,IAEd4S,SAAUK,EACVtJ,MAAOwC,EACPtC,SAAU8C,EACVzG,OAAQgN,EACRjJ,KAAMyC,EACNvC,QAASyC,OA5CW,4CAAH,sDAgDnBG,EAAY,uCAAG,WAAO7U,GAAP,iCAAAiI,EAAA,yDACX+F,EAASrH,EAAMqN,MAAMhW,OAAZ,QAAgCoT,EAAMpD,OACjD+D,EAAOpL,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAMW,KAC3CE,EAAUtL,EAAMqN,MAAMhW,OAAZ,SAAiCoT,EAAMa,QAE/C1C,EAAO/B,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM7B,KACrDC,EAAOhC,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM5B,KAE9C,IAATuC,GAAyB,KAAX/D,GAA6B,KAAZiE,EARlB,wDAUXzN,EAAU4M,EAAM5M,QAChBD,EAAY6M,EAAM7M,UAEpBuQ,EAba,UAaDtB,GAbC,6DAa2DxF,EAb3D,YAaqE+D,EAbrE,YAa6EE,EAb7E,YAawF1C,EAbxF,YAagGC,GAC7GhL,GAA8B,KAAnBA,EAAQ3C,SACnBiT,GAAM,WAAQC,mBAAmBvQ,EAAQ3C,UAEzC0C,GAAkC,KAArBA,EAAU1C,SAClB2C,GAA8B,KAAnBA,EAAQ3C,SAAeiT,GAAM,WAAQC,mBAAmB,OACxED,GAAM,WAAQC,mBAAmBxQ,EAAU1C,UAnB9B,UAsBM9C,MAAM+V,GAtBZ,eAsBX5U,EAtBW,iBAuBEA,EAASiC,OAvBX,QAuBX0D,EAvBW,OAyBjB6F,GAAW,GACP7F,GAAQA,EAAKyJ,OAASzJ,EAAKwO,OAC3BT,EAAa/N,EAAKwO,MAAMzP,KAAI,SAAAkL,GAAC,kCAAUA,GAAV,IAAaoD,UAAU,EAAOD,YAAa,SACxES,EAAS7N,EAAKyJ,SAEdsE,EAAa,IACbF,EAAS,IA/BI,4CAAH,sDAmClB7G,qBAAU,WACN7F,SAASxG,MAAQyG,yEACb3B,QAA+BtK,IAAhBsK,GACfuO,EAAoBvO,KAEzB,CAACA,IAEJuH,qBAAU,WACFvH,QAA+BtK,IAAhBsK,IACfoG,GAAW,GACXmJ,EAAavP,MAElB,CAAC8L,IAEJ,IA8BM8D,EAAa,SAAC1Z,EAAK+T,EAAMC,GAC3B7I,EAAMhD,QAAQiF,KAAd,UAAsBpN,EAAtB,YAA6B+T,EAA7B,YAAqCC,IACrCsB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqByH,OAAMC,aAG3Cb,EAAS,SAACqE,GACZ,IAAMzC,EAAIoD,EAAUzN,QAAQ8M,IACvBA,EAASE,UAAYF,EAASC,aAA+C,IAAhCD,EAASC,YAAY9U,QACnEe,GAAO2B,cACP9B,MAAM,GAAD,OAAIyU,GAAJ,uDAA0DR,EAASjB,KAAnE,YAA2EiB,EAASf,QAApF,YAA+Fe,EAASmC,OAAxG,YAAkHnC,EAASA,SAA3H,YAAuIA,EAAS3O,iBAChJtD,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF3G,GAAO8B,QACP4S,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlB2C,UAAWkC,EAAc7E,GAAG2C,SAC5BD,YAAapN,EAAKwO,SALA,aAOnBe,EAAcnM,MAAMsH,EAAI,YAIvCqD,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlB2C,UAAWkC,EAAc7E,GAAG2C,YAJV,aAMnBkC,EAAcnM,MAAMsH,EAAI,SAkEjC1C,EAAWpC,EAAU,2BAAG,2CA7DV,SAACkI,GACjB,OACI,oCACI,2BAAOnK,UAAU,sBAAsBkM,kBAAgB,cACnD,+BACI,4BACI,wBAAIlM,UAAU,eAAd,UACA,wBAAIA,UAAU,eAAd,cACA,wBAAIA,UAAU,eAAd,aACA,wBAAIA,UAAU,eAAd,WACA,wBAAIA,UAAU,eAAd,YACA,wBAAIA,UAAU,eAAd,WACA,wBAAIA,UAAU,eAAd,gBACA,+BAGR,+BACKmK,EAAU/O,KAAI,SAACkL,EAAG3F,GACf,IAAMwL,EAA+B,IAAlB7F,EAAE8F,YAAoB,EAAIpL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aAC9E,OACI,wBAAIxL,IAAKD,GACL,wBAAIX,UAAU,eAAesG,EAAEiC,MAC/B,wBAAIvI,UAAU,eAAesG,EAAEmC,SAC/B,wBAAIzI,UAAU,eAAesG,EAAEqF,QAC/B,4BAAKrF,EAAEgG,SACP,wBAAItM,UAAU,eAAesG,EAAEkD,UAC/B,4BAAKlD,EAAEiG,SACP,wBAAIvM,UAAU,eACV,0BAAME,GAAI,MAAQS,GAASwL,EAA3B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,SAASrO,OAAQ,MAAQuC,GACnD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,4BACI,kBAACnH,GAAA,EAAD,CAAOC,OAAQoB,EAAEoD,SAAU1J,UAAU,YACjC,kBAACwF,GAAA,EAAD,CAAaL,OAAQ,kBAAMA,EAAOmB,KAAlC,wBACA,kBAACb,GAAA,EAAD,KACI,kBAAC8D,GAAD,CAAmBC,SAAUlD,EAAGmD,YAAanD,EAAEmD,eAEnD,kBAAC7D,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM6E,EAAOmB,KAAhD,YAGR,kBAAClG,EAAA,EAAD,CAAQE,QAAS,kBAAM6E,EAAOmB,KAA9B,iBAMpB,+BACI,4BACI,wBAAIwG,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAOA,EAAOC,KAAM6B,EAAM7B,KAAMC,KAAM4B,EAAM5B,KAAMhU,IAAG,6BAAwB4V,EAAMpD,OAA9B,YAAwCoD,EAAMW,KAA9C,YAAsDX,EAAMa,SAAWtC,OAAQuF,SASpHqB,CAAY5C,GAEpE,OACI,6BACI,wBAAIjK,GAAG,cAAP,8BACA,kBAAC,GAAD,CACI6C,cAAe6E,EAAMsJ,SACrBC,YAAavJ,EAAMpD,OACnB0D,YAAaN,EAAMK,MACnBgB,UAAWrB,EAAMW,KACjBH,eAAgBR,EAAMO,SACtBe,aAActB,EAAMa,QACpBlB,cA1Ic,SAACF,GACvB,IAAMhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MACnBwI,EAA0BoD,EAA1BpD,OAAQ+D,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QAIT,WAATpK,GACAlB,EAAMhD,QAAQiF,KAAd,6BAAyCpD,EAAzC,YAAkDuM,EAAlD,YAA0DE,EAA1D,YAJS,EAIT,YAHS,KAITnB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqBkG,OAAQxI,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KALzE,EAK+EC,KAJ/E,SAKO,SAAT3H,GACPlB,EAAMhD,QAAQiF,KAAd,6BAAyCoF,EAAzC,YAAmDxI,EAAnD,YAA4DyM,EAA5D,YAPS,EAOT,YANS,KAOTnB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqBiK,KAAMvM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KARvE,EAQ6EC,KAP7E,SAQO,YAAT3H,IACPlB,EAAMhD,QAAQiF,KAAd,6BAAyCoF,EAAzC,YAAmD+D,EAAnD,YAA2DvM,EAA3D,YAVS,EAUT,YATS,KAUTsL,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqBmK,QAASzM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KAX1E,EAWgFC,KAVhF,UAsIL2B,oBAxHe,SAAC5M,EAAWC,GAAa,IACxCwJ,EAA0BoD,EAA1BpD,OAAQ+D,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QACtBtL,EAAMhD,QAAQiF,KAAd,6BAAyCoF,EAAzC,YAAmD+D,EAAnD,YAA2DE,EAA3D,IAAsE,EAAtE,IAA2E,KAC3EnB,EAAS,2BACFM,GADC,IAEJ7M,UAAwB,MAAbA,EAAoB,GAAKA,EAAU1C,OAC9C2C,QAAoB,MAAXA,EAAkB,GAAKA,EAAQ3C,OACxC0N,KAAM,EAAGC,KAAM,SAmHd3B,IC/QAoN,GAAb,kDACI,WAAYtU,GAAQ,IAAD,8BACf,cAAMA,IAUViK,aAAe,SAAAC,GACX,EAAKC,SAAS,CAAEvM,UAAW,GAAIC,QAAS,KACxC,EAAKmC,MAAMoK,cAAcF,IAbV,EAgBnBG,oBAAsB,SAAAH,GAClB,IAAIhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MACb,aAARqC,EACA,EAAKiJ,SAAS,CAAEvM,UAAWiB,IAEd,WAARqC,GACL,EAAKiJ,SAAS,CAAEtM,QAASgB,KAvBd,EA2BnByL,aAAe,SAAAJ,GACXA,EAAMK,iBACN,EAAKvK,MAAMwK,oBAAoB,EAAKC,MAAM7M,UAAW,EAAK6M,MAAM5M,UA3BhE,EAAK4M,MAAQ,CACTK,MAAO9K,EAAM+K,YAAaC,SAAUhL,EAAMiL,eAC1CG,KAAMpL,EAAMqL,WAAYC,QAAStL,EAAMuL,cAAe3N,UAAW,GAAIC,QAAS,IAElF,EAAKoM,aAAe,EAAKA,aAAa7O,KAAlB,iBACpB,EAAKiP,oBAAsB,EAAKA,oBAAoBjP,KAAzB,iBAC3B,EAAKkP,aAAe,EAAKA,aAAalP,KAAlB,iBARL,EADvB,qDAkCQ,OACI,2BACI,wBAAM8F,KAAK,WAAWsK,SAAU3S,KAAKyR,cACjC,gBAACmB,GAAA,EAAD,CAAK5I,UAAU,cACVhK,KAAKmH,MAAM+K,aAAelS,KAAKmH,MAAM+K,YAAYvT,OAAS,EACvD,gCACI,gBAACkU,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,QAA1C,YAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,GACL,gBAACvE,GAAA,EAAD,CACIlO,KAAK,SACL2F,MAAOhG,KAAKmH,MAAM8L,UAClBF,YAAY,SACZ1K,KAAK,OACL6B,GAAG,OACHC,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAM+K,YAAY9M,KAAI,SAACqD,EAAGuK,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOyC,GAAIA,SAI/E,GACLzI,KAAKmH,MAAMiL,gBAAkBpS,KAAKmH,MAAMiL,eAAezT,OAAS,EAC7D,gCACI,gBAACkU,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,WAA1C,iBAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,SACLgI,KAAK,UACLrC,MAAOhG,KAAKmH,MAAM+L,aAClB/I,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAMiL,eAAehN,KAAI,SAAC+N,EAAGH,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOmN,GAAzB,IAA8BA,SAInF,IAEV,gBAACP,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACnB,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,UAA1C,eAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,OACL0S,YAAY,YACZ1K,KAAK,YACL6B,GAAG,YACHlE,MAAOhG,KAAK4R,MAAM7M,UAClBoF,SAAUnK,KAAKwR,oBACf4B,UAAW,MAInB,gBAACP,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAO9I,UAAU,iBAAiBC,QAAQ,YAA1C,aAEJ,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,gBAACuE,GAAA,EAAD,CACIlO,KAAK,OACL0S,YAAY,UACZ1K,KAAK,UACL6B,GAAG,UACHlE,MAAOhG,KAAK4R,MAAM5M,QAClBmF,SAAUnK,KAAKwR,oBACf4B,UAAW,MAInB,gBAACP,GAAA,EAAD,CAAKC,GAAI,GAAG,gBAAC1I,EAAA,EAAD,CAAQ/J,KAAK,UAAb,0BAxGpC,GAAwCwG,aCWlCmN,GAAUtQ,wDAEVhE,GAASC,IAAiBC,KAkWjB8b,GAhWc,SAACvU,GAAW,IAAD,EAEVO,mBAAS,GAFC,mBAE7BoI,EAF6B,KAEtBoE,EAFsB,OAGNxM,oBAAS,GAHH,mBAG7BuE,EAH6B,KAGpBC,EAHoB,OAKVxE,mBAAS,CAC/B6K,KAAM,EACNE,QAAS,GACTzN,QAAS,GACTD,UAAW,GACXgL,KAAM,EACNC,KAAM,GACNiC,MAAO,GACPE,SAAU,KAbsB,mBAK7BP,EAL6B,KAKtBN,EALsB,OAgBF5J,mBAAS,IAhBP,mBAgB7ByM,EAhB6B,KAgBlBC,EAhBkB,OAiBJ1M,mBAAS,IAjBL,mBAiB7B4T,EAjB6B,KAmB9BxV,GAnB8B,KAmBhBsB,qBAAWR,GAAYd,aAErCuO,EAAmB,uCAAG,WAAO7T,GAAP,+BAAAiI,EAAA,yDAGG,IAFPjI,EAAKiD,MAAMwN,QAAO,SAAAhI,GAAC,MAAgB,WAAXA,EAAE3D,MAAgC,MAAX2D,EAAEzD,OAA4B,0BAAVyD,EAAE3D,MAA8C,SAAV2D,EAAE3D,QAAkBF,KAAI,SAAA6D,GAAC,OAAIA,EAAEzD,SAE5I7G,OAHQ,oDAKlB8V,EAAe,GACjBC,EAAkB,GAEE,IAApB4G,EAAS3c,OARW,iCASWY,MAAM,GAAD,OAAIyU,GAAJ,0DAThB,cASdW,EATc,iBAUOA,EAAiBhS,OAVxB,QAUdiS,EAVc,QAYpBF,EAAe,uBAAOA,GAAP,aAA2BE,EAAaC,SAEvCC,SAAQ,SAAAC,GACfN,EAAa9X,SAASoY,EAAGxC,OAC1BkC,EAAarL,KAAK2L,EAAGxC,SAhBT,QAqBlByC,EAAc7N,EAAMqN,MAAMhW,OAAZ,OAA+BiW,EAAa9V,OAAS,EAAI8V,EAAa,GAAK,GACzFQ,EAAkB,GAExBP,EAAgBzD,QAAO,SAAAX,GAAC,OAAIA,EAAEiC,OAASyC,KAAaF,SAAQ,SAAAC,GACnDE,EAAgBtY,SAASoY,EAAG4G,cAC7B1G,EAAgB7L,KAAK2L,EAAG4G,gBAI1BzG,EAAiB/N,EAAMqN,MAAMhW,OAAZ,UAAkCyW,EAAgBtW,OAAS,EAAIsW,EAAgB,GAAK,IACrGE,EAAchO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM7B,KAClDqF,EAAcjO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM5B,KAExD7I,EAAMhD,QAAQiF,KAAd,iCAA6C4L,EAA7C,YAA4DE,EAA5D,YAA8EC,EAA9E,YAA6FC,IAC7F9D,GAAS,SAAAhJ,GAAS,kCACXA,GADW,IAEd2J,MAAOwC,EACPtC,SAAU8C,EACV1C,KAAMyC,EACNvC,QAASyC,OAxCW,4CAAH,sDA4CnBG,EAAY,uCAAG,WAAO7U,GAAP,+BAAAiI,EAAA,yDACb8J,EAAOpL,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAMW,KAC3CE,EAAUtL,EAAMqN,MAAMhW,OAAZ,SAAiCoT,EAAMa,QAE/C1C,EAAO/B,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM7B,KACrDC,EAAOhC,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM5B,KAE9C,IAATuC,GAA0B,KAAZE,EAPD,wDASXzN,EAAU4M,EAAM5M,QAChBD,EAAY6M,EAAM7M,UAEpBuQ,EAZa,UAYDtB,GAZC,iEAY+DzB,EAZ/D,YAYuEE,EAZvE,YAYkF1C,EAZlF,YAY0FC,GACvGhL,GAA8B,KAAnBA,EAAQ3C,SACnBiT,GAAM,WAAQC,mBAAmBvQ,EAAQ3C,UAEzC0C,GAAkC,KAArBA,EAAU1C,SAClB2C,GAA8B,KAAnBA,EAAQ3C,SAAeiT,GAAM,WAAQC,mBAAmB,OACxED,GAAM,WAAQC,mBAAmBxQ,EAAU1C,UAlB9B,UAqBM9C,MAAM+V,GArBZ,eAqBX5U,EArBW,iBAsBEA,EAASiC,OAtBX,QAsBX0D,EAtBW,OAwBjB6F,GAAW,GACP7F,GAAQA,EAAKyJ,OAASzJ,EAAKwO,OAC3BT,EAAa/N,EAAKwO,MAAMzP,KAAI,SAAAkL,GAAC,kCAAUA,GAAV,IAAakF,QAAQ,EAAOC,QAAS,GAAI/B,UAAU,EAAOD,YAAa,SACpGS,EAAS7N,EAAKyJ,SAEdsE,EAAa,IACbF,EAAS,IA9BI,4CAAH,sDAkClB7G,qBAAU,WACN7F,SAASxG,MAAQyG,yEACb3B,QAA+BtK,IAAhBsK,GACfuO,EAAoBvO,KAEzB,CAACA,IAEJuH,qBAAU,WACFvH,QAA+BtK,IAAhBsK,IACfoG,GAAW,GACXmJ,EAAavP,MAElB,CAAC8L,IAEJ,IA2BM8D,EAAa,SAAC1Z,EAAK+T,EAAMC,GAC3B7I,EAAMhD,QAAQiF,KAAd,UAAsBpN,EAAtB,YAA6B+T,EAA7B,YAAqCC,IACrCsB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqByH,OAAMC,aAG3Cb,EAAS,SAACqE,GACZ,IAAMzC,EAAIoD,EAAUzN,QAAQ8M,IACvBA,EAASE,UAAYF,EAASC,aAA+C,IAAhCD,EAASC,YAAY9U,QACnEe,GAAOqB,KAAK,CACRC,MAAO,sBACPC,KAAM,oBACNC,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OAAIyU,GAAJ,kEAAqER,EAASjB,KAA9E,YAAsFiB,EAASf,QAA/F,YAA0Ge,EAASwC,QAAnH,YAA8HxC,EAASyC,aACvI1U,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF3G,GAAO8B,QACP4S,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlB2C,UAAWkC,EAAc7E,GAAG2C,SAC5BD,YAAapN,EAAKwO,SALA,aAOnBe,EAAcnM,MAAMsH,EAAI,YAIvCqD,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlB2C,UAAWkC,EAAc7E,GAAG2C,YAJV,aAMnBkC,EAAcnM,MAAMsH,EAAI,SAKjC8E,EAAY,SAACrC,GACf,GAA0B,GAAtBA,EAASsC,UAAb,CAQA,IAAM/E,EAAIoD,EAAUzN,QAAQ8M,GACvBA,EAASgC,OAsCVpB,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlByE,QAASI,EAAc7E,GAAGyE,UAJR,aAMnBI,EAAcnM,MAAMsH,EAAI,SA3C/BrR,GAAOqB,KAAK,CACRC,MAAO,mBACPC,KAAM,oBACNC,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAGf9B,MAAM,GAAD,OAAIyU,GAAJ,uDAA0DR,EAASuC,QAAnE,YAA8EvC,EAASwC,QAAvF,YAAkGxC,EAASyC,aAC3G1U,MAAK,SAAAb,GACF,OAAKA,EAASsI,GAKPtI,EAASiC,OAJLjC,EAASO,OAAOM,MAAK,SAAAN,GACxB,MAAM,IAAIpF,MAAMoF,SAK3BM,MAAK,SAAA8E,GACF3G,GAAO8B,QACP4S,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlByE,QAASI,EAAc7E,GAAGyE,OAC1BC,QAASpP,KALS,aAOnBuP,EAAcnM,MAAMsH,EAAI,WAGlCvO,OAAM,SAAAC,GACH/C,GAAOqB,KAAK,CACRmI,KAAM,QACNlI,MAAO,QACPC,KAAK,GAAD,OAAKwB,EAAMnC,oBA1C3BZ,GAAOqB,KAAK,CACRmI,KAAM,OACNlI,MAAO,iBACPC,KAAM,uCAmJZoN,EAAWpC,EAAU,2BAAG,2CA7FV,SAACkI,GACjB,OACI,oCACI,2BAAOnK,UAAU,sBAAsBkM,kBAAgB,cACnD,+BACI,4BACI,wBAAIlM,UAAU,eAAd,UACA,wBAAIA,UAAU,eAAd,cACA,wBAAIA,UAAU,eAAd,aACA,wBAAIA,UAAU,eAAd,WACA,wBAAIA,UAAU,eAAd,YACA,wBAAIA,UAAU,eAAd,WACA,wBAAIA,UAAU,eAAd,gBACA,+BAGR,+BACKmK,EAAU/O,KAAI,SAACkL,EAAG3F,GACf,IAAMwL,EAA+B,IAAlB7F,EAAE8F,YAAoB,EAAIpL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aAC9E,OACI,wBAAIxL,IAAKD,GACL,wBAAIX,UAAU,eAAesG,EAAEiC,MAC/B,wBAAIvI,UAAU,eAAesG,EAAEmC,SAC/B,wBAAIzI,UAAU,eAAesG,EAAEqF,QAC/B,4BAAKrF,EAAEgG,SACP,wBAAItM,UAAU,eAAesG,EAAEkD,UAC/B,4BAAKlD,EAAEiG,SACP,wBAAIvM,UAAU,eACV,0BAAME,GAAI,MAAQS,GAASwL,EAA3B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,SAASrO,OAAQ,MAAQuC,GACnD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,wBAAIpM,UAAU,eACV,yBAAKA,UAAU,YAAY1E,KAAK,QAAQoR,aAAW,WAAW7M,MAAO,CAAEyE,IAAK,WAExE,6BACI,0BAAMpE,GAAI,iBAAmBS,GACzB,kBAAC,IAAD,CAAMX,UAAU,2BAA2B1C,GAAG,IAAIgD,QAAS,kBAAM6E,EAAOmB,KACpE,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,iBAAmBuC,GAC3D,wBAEL,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEoD,SAAU1J,UAAU,YACjC,kBAACwF,GAAA,EAAD,CAAaL,OAAQ,kBAAMA,EAAOmB,KAAlC,wBACA,kBAACb,GAAA,EAAD,KACI,kBAAC8D,GAAD,CAAmBC,SAAUlD,EAAGmD,YAAanD,EAAEmD,eAEnD,kBAAC7D,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM6E,EAAOmB,KAAhD,aAKZ,6BACI,0BAAMpG,GAAI,WAAaS,GACnB,kBAAC,IAAD,CAAMX,UAAU,2BAA2B1C,GAAG,IAAIgD,QAAS,kBAAMuL,EAAUvF,KACvE,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,WAAauC,GACrD,kBAEL,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEkF,OAAQxL,UAAU,YAC/B,kBAACwF,GAAA,EAAD,yBACA,kBAACC,GAAA,EAAD,KACI,2BAAOkH,IAAG,sCAAiCrG,EAAEmF,SAAWlG,MAAO,KAAMqH,OAAQ,IAAKvW,KAAK,kBAAkBwW,YAAY,0DAEzH,kBAACjH,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAMuL,EAAUvF,KAAnD,YAEA,qCAQpC,+BACI,4BACI,wBAAIwG,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAOA,EAAOC,KAAM6B,EAAM7B,KAAMC,KAAM4B,EAAM5B,KAAMhU,IAAG,iCAA4B4V,EAAMW,KAAlC,YAA0CX,EAAMa,SAAWtC,OAAQuF,SASxGqB,CAAY5C,GAEpE,OACI,6BACI,wBAAIjK,GAAG,cAAP,8BACA,kBAAC,GAAD,CACIgI,YAAaN,EAAMK,MACnBgB,UAAWrB,EAAMW,KACjBH,eAAgBR,EAAMO,SACtBe,aAActB,EAAMa,QACpBlB,cAvOc,SAACF,GACvB,IAAMhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MACnBuM,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QAID,SAATpK,GACAlB,EAAMhD,QAAQiF,KAAd,iCAA6CpD,EAA7C,YAAsDyM,EAAtD,YAJS,EAIT,YAHS,KAITnB,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqBiK,KAAMvM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KALvE,EAK6EC,KAJ7E,SAKO,YAAT3H,IACPlB,EAAMhD,QAAQiF,KAAd,iCAA6CmJ,EAA7C,YAAqDvM,EAArD,YAPS,EAOT,YANS,KAOTsL,GAAS,SAAAhJ,GAAS,kCAAUA,GAAV,IAAqBmK,QAASzM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KAR1E,EAQgFC,KAPhF,UAmOL2B,oBAxNe,SAAC5M,EAAWC,GAAa,IACxCuN,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QACdtL,EAAMhD,QAAQiF,KAAd,iCAA6CmJ,EAA7C,YAAqDE,EAArD,IAAgE,EAAhE,IAAqE,KACrEnB,EAAS,2BACFM,GADC,IAEJ7M,UAAwB,MAAbA,EAAoB,GAAKA,EAAU1C,OAC9C2C,QAAoB,MAAXA,EAAkB,GAAKA,EAAQ3C,OACxC0N,KAAM,EAAGC,KAAM,SAmNd3B,IC3WN,SAASuN,GAAT,GAA2D,IAAzC1R,EAAwC,EAAxCA,GAAIF,EAAoC,EAApCA,UAAW6R,EAAyB,EAAzBA,OAAQ3S,EAAiB,EAAjBA,KAAM4S,EAAW,EAAXA,QAEpD,OAAO,0BAAM5R,GAAKA,GAChB,kBAACE,EAAA,EAAD,CAAQJ,UAAWA,EAAWM,QAAUuR,GACrC,kBAACxI,GAAD,CAAMnK,KAAMA,KAEf,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAS8B,GAC3C4R,ICNA,IAAMC,GAAb,kDACE,WAAY5U,GAAQ,IAAD,8BACjB,cAAMA,IAORiK,aAAe,SAAAC,GACb,EAAKlK,MAAMoK,cAAcF,IAPzB,EAAKO,MAAQ,CACXsJ,SAAU/T,EAAM6U,gBAAiB/J,MAAO9K,EAAM+K,YAAaC,SAAUhL,EAAMiL,eAAgB5D,OAAQrH,EAAM8U,cAAe1J,KAAMpL,EAAMqL,WAAYC,QAAStL,EAAMuL,eAEjK,EAAKtB,aAAe,EAAKA,aAAa7O,KAAlB,iBALH,EADrB,qDAaY,IAAD,OACP,OACE,2BACE,wBAAM8F,KAAK,WAAWsK,SAAU3S,KAAKyR,cAClCzR,KAAKmH,MAAM4F,cAAcpO,OAAS,GACnC,gBAACiU,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACrB,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,UAA1C,cAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,GAAI9I,UAAU,SACrB,gBAACuE,GAAA,EAAD,CACElO,KAAK,SACL0S,YAAY,WACZ1K,KAAK,SACL6B,GAAG,SACHlE,MAAOhG,KAAKmH,MAAMgU,YAClBhR,SAAUnK,KAAKoR,cAEdpR,KAAKmH,MAAM4F,cAAc3H,KAAI,SAACgW,EAAIpI,GAAL,OAAa,0BAAQpI,IAAKoI,EAAKhN,MAAOoV,EAAGpV,MAAOkW,aAAc,EAAK/U,MAAMgU,aAAcC,EAAGe,aAK9H,gBAACvJ,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACrB,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,YAA1C,eAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,GAAI9I,UAAU,SACnB,gBAACuE,GAAA,EAAD,CACAlO,KAAK,SACL0S,YAAY,WACZ1K,KAAK,WACL6B,GAAG,WACHlE,MAAQhG,KAAKmH,MAAMiV,cACnBjS,SAAUnK,KAAKoR,aACfgC,UAAW,IAEVpT,KAAKmH,MAAMkV,gBAAgBjX,KAAI,SAACgW,EAAIpI,GAAL,OAAa,0BAAQpI,IAAMoI,EAAMhN,MAAOoV,EAAGpV,OAAUoV,EAAGe,aAI7Fnc,KAAKmH,MAAM+K,aAAelS,KAAKmH,MAAM+K,YAAYvT,OAAS,GAAKqB,KAAKmH,MAAMiL,gBAAkBpS,KAAKmH,MAAMiL,eAAezT,OAAS,GAC9H,gBAACiU,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACpBhK,KAAKmH,MAAM+K,aAAelS,KAAKmH,MAAM+K,YAAYvT,OAAS,GACzD,gCACE,gBAACkU,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,QAA1C,YAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SACpB,gBAACuE,GAAA,EAAD,CACElO,KAAK,SACL2F,MAAOhG,KAAKmH,MAAM8L,UAClBF,YAAY,SACZ1K,KAAK,OACL6B,GAAG,OACHC,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAM+K,YAAY9M,KAAI,SAACqD,EAAGuK,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOyC,GAAIA,SAK5EzI,KAAKmH,MAAMiL,gBAAkBpS,KAAKmH,MAAMiL,eAAezT,OAAS,GAC/D,gCACE,gBAACkU,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,WAA1C,iBAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SACpB,gBAACuE,GAAA,EAAD,CACElO,KAAK,SACLgI,KAAK,UACLrC,MAAOhG,KAAKmH,MAAM+L,aAClB/I,SAAUnK,KAAKoR,cACdpR,KAAKmH,MAAMiL,eAAehN,KAAI,SAAC+N,EAAGH,GAAJ,OAAY,0BAAQpI,IAAKoI,EAAKhN,MAAOmN,GAAzB,IAA8BA,gBArF/F,GAAsCtM,a,sCCEtCyV,0BAAe,KAAMC,M,IAGAC,G,4MAEjB5K,MAAQ,CACJ4B,SAAU,EAAKrM,MAAMqM,SAAUiJ,KAAO,EAAKtV,MAAMnB,MAAQ,IAAI0W,KAAK,EAAKvV,MAAMnB,OAAS,M,EAG5FoL,aAAe,SAAAqL,GACbpT,QAAQsT,IAAI,WAAajb,KAAKoH,UAAU2T,IAExC,EAAKnL,SACH,CAAEmL,SACD,WAAQ,EAAKtV,MAAMgD,SAASsS,EAAKG,cAAcnT,MAAM,GAAI,GAAI,EAAKtC,MAAMqM,aAG3EnK,QAAQsT,IAAI,cAAgBjb,KAAKoH,UAAU,EAAK8I,MAAM4B,WACtD,EAAKrM,MAAMgD,SAASsS,EAAKG,cAAcnT,MAAM,GAAI,GAAI,EAAKmI,MAAM4B,W,uDAGtD,IAAD,SAEL,OACI,yBAAKxJ,UAAU,eACX,kBAAC,KAAD,CACIA,UAAU,eACVoB,UAAW,UAAApL,KAAK4R,MAAM6K,YAAX,QAAmBzc,KAAKmH,MAAMnB,OAAQ,IAAI0W,KAAK1c,KAAKmH,MAAMnB,OAAS,KAC9EmE,SAAU,SAAAsS,GAAI,OAAI,EAAKrL,aAAaqL,IACpCpU,KAAMrI,KAAKmH,MAAMkB,KACjB6B,GAAIlK,KAAKmH,MAAM+C,GACf2S,WAAY7c,KAAKmH,MAAM0V,WACvBC,gBAAiB9c,KAAKmH,MAAM4L,YAC5BnE,SAAW5O,KAAKmH,MAAMyH,SACtBmO,OAAO,Y,GA/BalW,IAAMiS,WCKxCpZ,GAASC,IAAiBC,KAG1BkM,GAASpI,wDAETsZ,GAAc,CAChBC,KAAM,UACNC,MAAO,UACPC,IAAK,WAGIC,GAAb,kDAGI,WAAYjW,GAAQ,IAAD,8BACf,cAAMA,IA6VVkW,cAAgB,SAACC,GACb,OAAO,IAAI7C,KAAK8C,eAAe,QAAS,CAAEC,UAAW,UAAW1e,OAAOwe,IA7VvE,EAAK1L,MAAQ,CAAE9B,MAAO,EAAGpB,SAAU,KAAMF,OAAQ,GAAI+D,KAAM,EAAGE,QAAS,GAAI1C,KAAM,EAAGC,KAAM,GAAImE,UAAW,GAAI+G,SAAU,GAAIuC,UAAW,GAAIxL,MAAO,GAAIE,SAAU,GAAIlG,SAAS,GAE5K,EAAKyR,iBAAmB,EAAKA,iBAAiBnb,KAAtB,iBACxB,EAAKob,kBAAoB,EAAKA,kBAAkBpb,KAAvB,iBACzB,EAAKmT,WAAa,EAAKA,WAAWnT,KAAhB,iBAClB,EAAKqb,eAAiB,EAAKA,eAAerb,KAApB,iBACtB,EAAKsb,kBAAoB,EAAKA,kBAAkBtb,KAAvB,iBACzB,EAAK4M,OAAS,EAAKA,OAAO5M,KAAZ,iBACd,EAAKkP,aAAe,EAAKA,aAAalP,KAAlB,iBACpB,EAAKub,8CAAgD,EAAKA,8CAA8Cvb,KAAnD,iBACrD,EAAKwb,+BAAiC,EAAKA,+BAA+Bxb,KAApC,iBAZvB,EAHvB,gEAmBQ,IAAMuD,EAAc9F,KAAKqX,QAAQvR,YACzBmG,EAAYjM,KAAK4R,MAAjB3F,QACRzE,SAASxG,MAAQyG,2EAEb3B,QAA8BtK,GAAfsK,GAA4BmG,GAC3CjM,KAAKqV,aAAavP,KAxB9B,2CA6BQ,IAAMA,EAAc9F,KAAKqX,QAAQvR,YAE7BA,QAA8BtK,GAAfsK,GACf9F,KAAKqV,aAAavP,KAhC9B,uCAoCqB2W,EAAMjJ,GACnB,IAAMzC,EAAI/Q,KAAK4R,MAAMuC,UAAUzN,QAAQ8M,GACvCnK,QAAQsT,IAAI,UAAYF,GACxB,IAAMuB,EAAgBhe,KAAK4R,MAAMuC,UAAUpD,GAC3CiN,EAAcC,2BAA6BxB,EAC3Czc,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,gBAGEiN,IAHF,aAKF7J,EAAU1K,MAAMsH,EAAI,WA/CvC,wCAqDsBM,GACMrR,KAAKqX,QAAQvR,YAAjC,IADqB,EAE8B9F,KAAK4R,MAAlDpD,EAFe,EAEfA,OAAQE,EAFO,EAEPA,SAAUwP,EAFH,EAEGA,QAAS3L,EAFZ,EAEYA,KAAME,EAFlB,EAEkBA,QACjCpK,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MAE3B,GAAY,UAARqC,EACImG,GAAUxI,IACVwI,EAASxI,EACThG,KAAKmH,MAAMhD,QAAQiF,KAAnB,+BAAgDoF,UAGnD,GAAY,YAARnG,EAAoB,CACzB,IAAM+C,EAAWpF,EAAMrC,MAAM,KAC7B+K,EAAWtD,EAAS,GACpB8S,EAAU9S,EAAS,GACnBpL,KAAKmH,MAAMhD,QAAQiF,KAAnB,+BAAgDoF,EAAhD,YAA0DE,EAA1D,YAAsEwP,QAEzD,QAAR7V,GACLkK,EAAOvM,EACPhG,KAAKmH,MAAMhD,QAAQiF,KAAnB,+BAAgDoF,EAAhD,YAA0DE,EAA1D,YAAsEwP,EAAtE,YAAiF3L,KAEpE,WAARlK,IACLoK,EAAUzM,EACVhG,KAAKmH,MAAMhD,QAAQiF,KAAnB,+BAAgDoF,EAAhD,YAA0DE,EAA1D,YAAsEwP,EAAtE,YAAiF3L,EAAjF,YAAyFE,OA7ErG,iCAiFezW,EAAK+T,EAAMC,GAClBhQ,KAAKsR,SAAS,CAAErF,SAAS,IAEzBjM,KAAKmH,MAAMhD,QAAQiF,KAAnB,UAA2BpN,EAA3B,YAAkC+T,EAAlC,YAA0CC,MApFlD,mCAuFiBwD,GAAW,IAAD,OACbzC,EAAI/Q,KAAK4R,MAAMuC,UAAUgK,WAAU,SAAA7N,GAAC,OAAIA,EAAEyF,SAAWvC,EAASuC,SAAWzF,EAAE0F,SAAWxC,EAASwC,SAAW1F,EAAEzL,gBAAkB2O,EAAS3O,kBAC7IwE,QAAQsT,IAAI,cAAgBjb,KAAKoH,UAAU0K,GAAY,QAAUzC,GAEjE,IAAMqN,EAA0B,IAAI1B,KAAKlJ,EAAS6K,uBAC9C7K,EAASyK,2BAA6BG,IAEtC1e,GAAOqB,KAAK,CACRC,MAAO,0CACPC,KAAM,gGAGVjB,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDuN,yBAA0BnK,EAAUpD,GAAGwN,mBACvCN,2BAA4B9J,EAAUpD,GAAGkN,8BALxC,aAOF9J,EAAU1K,MAAMsH,EAAI,UAKnC,IAAIoD,EAAYnU,KAAK4R,MAAMuC,UACrBqK,EAAe,IAAI9B,KAAK,cAC9B,GAA6B,MAAzBlJ,EAASiL,cAAwBjL,EAASiL,cAAgBD,EAAc,CAExE,IAAInY,EAAO3E,KAAKC,MAAMD,KAAKoH,UAAU0K,WAE9BnN,EAAKkQ,eACLlQ,EAAKqN,gBACLrN,EAAKoN,mBACLpN,EAAKmP,cACLnP,EAAKqY,SAGZnf,MAAM,GAAD,OAAIuM,GAAJ,mCAA6C,CAC9ClD,OAAQ,OACRtH,QAAS,CAAE,OAAU,mBAAoB,eAAgB,oBACzDuH,KAAMnH,KAAKoH,UAAU,CACjBiN,QAASvC,EAASuC,QAClBC,QAASxC,EAASwC,QAClBzD,KAAMiB,EAASjB,KACfE,QAASe,EAASf,QAClBkM,eAAgBnL,EAASmL,eACzBpE,iBAAkB/G,EAAS+G,iBAC3B/L,OAAQgF,EAAShF,OACjBE,SAAU8E,EAAS9E,SACnBwP,QAAS1K,EAAS0K,QAClB5H,QAAS9C,EAAS8C,QAClBX,OAAQnC,EAASmC,OACjBnC,SAAUA,EAASA,SAAW,GAC9BoL,UAAWpL,EAASoL,UACpBC,MAAOrL,EAASqL,MAChBC,OAAQtL,EAASsL,OACjB1I,YAAa5C,EAAS4C,YACtBN,UAAWtC,EAASsC,UACpBjR,eAAgB2O,EAAS3O,eACzBE,UAAWyO,EAASzO,UACpBC,QAASwO,EAASxO,QAClB+Z,YAAavL,EAAS6K,sBACtBW,SAAUxL,EAAS+K,mBACnBU,eAAgBzL,EAASyK,2BACzBvO,UAAW8D,EAAS9D,cAGvBnO,MAAK,SAAA2d,GAAG,OAAIA,EAAIvc,UAChBpB,MACG,SAAC+O,GACG,IAAMS,EAAIoD,EAAUgK,WAAU,SAAAgB,GAAE,OAAIA,EAAGpJ,SAAWzF,EAAEyF,SAAWoJ,EAAGnJ,SAAW1F,EAAE0F,SAAWmJ,EAAGta,gBAAkByL,EAAEzL,kBACjHsP,EAAUpD,GAAGwN,mBAAqBjO,EAAE8O,cACpCjL,EAAS,uBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAID2C,UAAU,EAAOD,YAAa,GAAI+B,QAAQ,EAAOkJ,UAAU,EAAOT,2BAA4B,IAAIvB,KAAKpM,EAAE8O,kBAJxG,aAMFjL,EAAU1K,MAAMsH,EAAI,KAG3B,EAAKO,SAAS,CACV6C,UAAWA,WAGxB,CAEH,IAAI9N,EAAO,CACP2P,QAASxC,EAASwC,QAClBnR,eAAgB2O,EAAS3O,eACzBkR,QAASvC,EAASuC,QAElBkJ,eAAgBzL,EAASyK,4BAEzBjI,EAAUxC,EAASwC,QAEvBzW,MAAM,GAAD,OAAIuM,GAAJ,2CAA6CkK,GAAW,CACzDpN,OAAQ,MACRtH,QAAS,CAAE,eAAgB,oBAC3BuH,KAAMnH,KAAKoH,UAAUzC,KAEpB9E,MAAK,SAAA2d,GAAG,OAAIA,EAAIvc,UAChBpB,MACG,SAACO,GACGA,EAAOsD,KAAI,SAAAkL,GACP,IAAMS,EAAIoD,EAAUgK,WAAU,SAAAgB,GAAE,OAAIA,EAAGpJ,SAAWzF,EAAEyF,SAAWoJ,EAAGnJ,SAAW1F,EAAE0F,SAAWmJ,EAAGta,gBAAkByL,EAAEzL,kBACjHsP,EAAUpD,GAAGwN,mBAAqBjO,EAAE8O,cACpCjL,EAAS,uBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAID2C,UAAU,EAAOD,YAAa,GAAI+B,QAAQ,EAAOkJ,UAAU,EAAOT,2BAA4B,IAAIvB,KAAKpM,EAAE8O,kBAJxG,aAMFjL,EAAU1K,MAAMsH,EAAI,QAI/B,EAAKO,SAAS,CACV6C,UAAWA,UA9MvC,qCAsNmBX,GACX,IAAMzC,EAAI/Q,KAAK4R,MAAMuC,UAAUgK,WAAU,SAAA7N,GAAC,OAAIA,EAAEyF,SAAWvC,EAASuC,SAAWzF,EAAE0F,SAAWxC,EAASwC,SAAW1F,EAAEzL,gBAAkB2O,EAAS3O,kBAE7I7E,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAID2N,UAAWvK,EAAUpD,GAAG2N,YAJvB,aAMFvK,EAAU1K,MAAMsH,EAAI,WAhOvC,wCAqOsByC,GAAW,IAAD,OAElBzC,GADe/Q,KAAK4R,MAAlBlD,SACE1O,KAAK4R,MAAMuC,UAAUzN,QAAQ8M,KAClCA,EAASE,UAAYF,EAASC,aAA8C,GAA/BD,EAASC,YAAY9U,QACnEe,GAAO2B,cAEP9B,MAAM,GAAD,OAAIuM,GAAJ,uDAAyD0H,EAASuC,QAAlE,YAA6EvC,EAASwC,QAAtF,YAAiGxC,EAAS9D,YAC1GnO,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF3G,GAAO8B,QACP,EAAK8P,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAID2C,UAAWS,EAAUpD,GAAG2C,SACxBD,YAAapN,EAAKwO,SALjB,aAOFV,EAAU1K,MAAMsH,EAAI,aAMvC/Q,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAID2C,UAAWS,EAAUpD,GAAG2C,YAJvB,aAMFS,EAAU1K,MAAMsH,EAAI,WApQ3C,6BA0QWyC,GAAW,IAAD,OACPzC,EAAI/Q,KAAK4R,MAAMuC,UAAUzN,QAAQ8M,GAElCA,EAASgC,OAoBVxV,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,UAJrB,aAMFrB,EAAU1K,MAAMsH,EAAI,UA1B/BrR,GAAO2B,cACP9B,MAAM,GAAD,OAAIuM,GAAJ,qDAAuD0H,EAASjB,KAAhE,YAAwEiB,EAASf,QAAjF,YAA4FzS,KAAK4R,MAAMlD,SAAvG,YAAmH1O,KAAK4R,MAAMsM,QAA9H,YAAyI1K,EAASmC,OAAlJ,YAA4JnC,EAASA,SAArK,YAAiLA,EAAS3O,eAA1L,YAA4M2O,EAAS+G,mBACrNhZ,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF3G,GAAO8B,QACP,EAAK8P,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,OACtBC,QAASpP,EAAKvE,UALb,aAOFqS,EAAU1K,MAAMsH,EAAI,eA3RnD,sEA+SqD,IAAD,EACS/Q,KAAK4R,MAAlDW,EADoC,EACpCA,KAAME,EAD8B,EAC9BA,QAASjE,EADqB,EACrBA,OAAQE,EADa,EACbA,SAAUwP,EADG,EACHA,QACzCxe,GAAO2B,cACP9B,MAAM,GAAD,OAAIuM,GAAJ,qDAA+D,CAChElD,OAAQ,OACRtH,QAAS,CACL,OAAU,mBACV,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAU,CAAEyJ,KAAMA,EAAMJ,SAAU,CAACM,GAAUyI,SAAU,CAAC1M,GAAS6Q,YAAa,CAAC3Q,GAAW4Q,kBAAmB,CAAC5Q,EAAW,IAAMwP,OAEzI3c,MAAK,SAAAb,GACFA,EAAS6e,OAAOhe,MAAK,SAAAge,GACjB7f,GAAO8B,QACP,IAAIxF,EAAMC,OAAOK,IAAIkjB,gBAAgBD,GACjC9W,EAAIjB,SAASiY,cAAc,KAC/BhX,EAAEtM,KAAOH,EACTyM,EAAEiX,SAAF,wBAA8BlR,EAA9B,YAAwCE,EAAxC,YAAoDwP,EAApD,YAA+D3L,EAA/D,YAAuEE,EAAvE,SACAhK,EAAEkX,gBAjUtB,uDAsUsC,IACtBpN,EAASvS,KAAK4R,MAAdW,KACR7S,GAAO2B,cACP9B,MAAM,GAAD,OAAIuM,GAAJ,qDAA+D,CAChElD,OAAQ,OACRtH,QAAS,CACL,OAAU,mBACV,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAU,CAAEyJ,KAAMA,EAAMJ,SAAU,GAAI+I,SAAU,GAAImE,YAAa,GAAIC,kBAAmB,OAElG/d,MAAK,SAAAb,GACFA,EAAS6e,OAAOhe,MAAK,SAAAge,GACjB7f,GAAO8B,QACP,IAAIxF,EAAMC,OAAOK,IAAIkjB,gBAAgBD,GACjC9W,EAAIjB,SAASiY,cAAc,KAC/BhX,EAAEtM,KAAOH,EACTyM,EAAEiX,SAAF,wBAA8BnN,EAA9B,SACA9J,EAAEkX,gBAxVtB,gCA6VcnF,GACN,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KA9VvI,kCAqWgBrG,GAAY,IAAD,OACbrO,EAAc9F,KAAKqX,QAAQvR,YADd,EAEI9F,KAAK4R,MAApB7B,EAFW,EAEXA,KAAMC,EAFK,EAELA,KACd,OACI,oCACI,yBAAKhG,UAAU,kCAAkC1E,KAAK,UAAUoR,aAAW,sBACtE5Q,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAASqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,SAAVA,EAAE3D,QACtF,yBAAK0E,UAAU,YAAY1E,KAAK,QAAQoR,aAAW,oCAC/C,kBAACkF,GAAD,CAAQ1R,GAAG,WAAWF,UAAU,kBAAkB6R,OAAQ,kBAAM,EAAKkC,kCAAkC7U,KAAM,kBAAC,KAAD,MAA4B4S,QAAS,sCAGtJ,yBAAK9R,UAAU,YAAY1E,KAAK,QAAQoR,aAAW,sBAC/C,kBAACkF,GAAD,CAAQ1R,GAAG,QAAQF,UAAU,kBAAkB6R,OAAQ,kBAAM,EAAKiC,iDAAiD5U,KAAM,kBAAC,KAAD,MAA4B4S,QAAS,yBAI1K,2BAAO9R,UAAU,sBAAsBkM,kBAAgB,cACnD,+BACI,4BACI,wBAAIlM,UAAU,cAAcH,MAAO,CAAE0F,MAAO,OAA5C,SACA,wBAAIvF,UAAU,cAAcH,MAAO,CAAE0F,MAAO,QAA5C,WACA,wBAAIvF,UAAU,cAAcH,MAAO,CAAE0F,MAAO,QAA5C,WACA,wBAAIvF,UAAU,cAAcH,MAAO,CAAE0F,MAAO,OAA5C,QACA,wBAAIvF,UAAU,cAAcH,MAAO,CAAE0F,MAAO,QAA5C,WACA,wBAAIvF,UAAU,cAAcH,MAAO,CAAE0F,MAAO,QACxC,0BAAMrF,GAAG,SAAT,4BACA,kBAACsM,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAO,SACvC,0BAGT,wBAAI4B,UAAU,cAAcH,MAAO,CAAE0F,MAAO,OAA5C,gBACA,wBAAI1F,MAAO,CAAE0F,MAAO,UAG5B,+BACK4E,EAAU/O,KAAI,SAACkL,EAAG3F,GAEf,IAAMyT,EAA0B,IAAI1B,KAAKpM,EAAE+N,uBACrCuB,EAAuB,IAAIlD,KAAKpM,EAAEiO,oBAClCpI,EAA8B,GAAjB7F,EAAE8F,YAAmB,EAAIpL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aAC7E,OACI,wBAAIxL,IAAKD,GACL,6BAAOoF,EAAO,GAAKC,EAAQrF,EAAQ,EAAnC,KACA,wBAAIX,UAAU,eAAesG,EAAEiC,KAAO,MAAQjC,EAAEmC,SAChD,4BAAKnC,EAAEqF,OAAS,MAAQrF,EAAEgG,SAC1B,wBAAItM,UAAU,eAAesG,EAAEkD,UAC/B,4BAAKlD,EAAEiG,SACP,4BAAK6H,EAAwByB,eAAe,QAAS7C,IAArD,MAAsE4C,EAAqBC,eAAe,QAAS7C,KACnH,wBAAIhT,UAAU,eACV,0BAAME,GAAI,MAAQS,GAASwL,EAA3B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,SAASrO,OAAQ,MAAQuC,GACnD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,4BACI,yBAAKpM,UAAU,YAAY1E,KAAK,QAAQoR,aAAW,YAC/C,0BAAMxM,GAAI,OAASS,GACf,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEoD,SAAU1J,UAAU,YACjC,kBAACwF,GAAA,EAAD,CAAaL,OAAQ,kBAAM,EAAK0O,kBAAkBvN,KAAlD,wBACA,kBAACb,GAAA,EAAD,KACI,kBAAC8D,GAAD,CAAmBC,SAAUlD,EAAGmD,YAAanD,EAAEmD,eAEnD,kBAAC7D,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM,EAAKuT,kBAAkBvN,KAAhE,YAGR,kBAAClG,EAAA,EAAD,CAAQE,QAAS,kBAAM,EAAKuT,kBAAkBvN,KAC1C,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,OAASuC,GACjD,WAEJ2F,EAAEwF,UAAY,GACX,oCACI,0BAAM5L,GAAI,WAAaS,GACnB,kBAAC,IAAD,CAAMX,UAAU,oBAAoB1C,GAAG,IAAIgD,QAAS,kBAAM,EAAK6E,OAAOmB,KAClE,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,WAAauC,GACrD,kBAEL,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEkF,OAAQxL,UAAU,YAC/B,kBAACwF,GAAA,EAAD,CAAaL,OAAQ,kBAAM,EAAKA,OAAOmB,KAAvC,oBACA,kBAACb,GAAA,EAAD,KACI,2BAAOkH,IAAG,sCAAiCrG,EAAEmF,SAAWlG,MAAO,KAAMqH,OAAQ,IAAKvW,KAAK,kBAAkBwW,YAAY,0DAEzH,kBAACjH,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM,EAAK6E,OAAOmB,KAArD,YAGR,0BAAMpG,GAAI,OAASS,GACf,kBAAC,IAAD,CAAMX,UAAU,oBAAoB1C,GAAE,gCAA2BgJ,EAAEyF,QAA7B,YAAwCzF,EAAE0F,QAA1C,YAAqD1F,EAAEZ,YACzF,kBAAC2D,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAMpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,OAASuC,GACjD,eAIZ2F,EAAE8F,YAAc,GAAK9F,EAAEwF,UAAYxF,EAAE8F,YAAc,KAAQtQ,GAAeA,EAAYvC,SAAWuC,EAAYrC,OACvGqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,SAAVA,EAAE3D,SACjC,oCAAE,6BACE,0BAAM4E,GAAI,aAAeS,GACrB,kBAAC,IAAD,CAAMX,UAAU,oBAAoB1C,GAAG,IAAIgD,QAAS,kBAAM,EAAKsT,eAAetN,KAC1E,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,aAAeuC,GACvD,+BAEL,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEoO,SAAU1U,UAAU,YACjC,kBAACwF,GAAA,EAAD,CAAaL,OAAQ,kBAAM,EAAKyO,eAAetN,KAA/C,kCACA,kBAACb,GAAA,EAAD,KACI,6BACI,kBAACmD,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACnB,kBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACL,2BAAO9I,UAAU,iBAAiBC,QAAQ,UAA1C,6BAEJ,kBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SAClB,kBAAC,GAAD,CAAYE,GAAG,gBAAgB7B,KAAM,iBAAmBsC,EAAQ,IAAKoI,YAAY,WAAW8J,WAAW,WAAW7W,MAAOsK,EAAE2N,2BAA4B9T,SAAU,SAACsS,GAAD,OAAU,EAAKiB,iBAAiBjB,EAAMnM,IAAIkD,SAAUlD,QAKrO,kBAACV,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAAS,kBAAM,EAAKmH,aAAanB,KAAzD,WACA,kBAAClG,EAAA,EAAD,CAAQC,MAAM,SAASC,QAAS,kBAAM,EAAKsT,eAAetN,KAA1D,sBAWxC,+BACI,4BACI,wBAAIwG,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAO9P,KAAK4R,MAAM9B,MAAOC,KAAM/P,KAAK4R,MAAM7B,KAAMC,KAAMhQ,KAAK4R,MAAM5B,KAAMhU,IAAG,+BAA0BgE,KAAK4R,MAAMpD,OAArC,YAA+CxO,KAAK4R,MAAMlD,SAA1D,YAAsE1O,KAAK4R,MAAMsM,QAAjF,YAA4Fle,KAAK4R,MAAMW,KAAvG,YAA+GvS,KAAK4R,MAAMa,SAAWtC,OAAQnQ,KAAK0V,oBAvfxQ,+BAigBQ,IAAIrH,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAMuC,WAC9B2L,EAAqB,GAOzB,OANA9f,KAAK4R,MAAM6L,UAAU3I,SAAQ,SAAAxE,GACrBwP,EAAmBC,OAAM,SAAAC,GAAE,OAAIA,EAAGha,QAAUsK,EAAElC,WAAa,IAAMkC,EAAE4N,YACnE4B,EAAmB1W,KAAK,CAAE+S,MAAO7L,EAAE5B,SAAW,YAAc4B,EAAE4N,QAASlY,MAAOsK,EAAElC,WAAa,IAAMkC,EAAE4N,aAKzG,6BACI,wBAAIhU,GAAG,cAAP,gCACA,kBAAC,GAAD,CAAkB6C,cAAe/M,KAAK4R,MAAMsJ,SAAUC,YAAanb,KAAK4R,MAAMpD,OAAQ6N,gBAAiByD,EAAoB1D,cAAepc,KAAK4R,MAAMlD,SAAW,IAAM1O,KAAK4R,MAAMsM,QAC7KhM,YAAalS,KAAK4R,MAAMK,MAAOgB,UAAWjT,KAAK4R,MAAMW,KAAMH,eAAgBpS,KAAK4R,MAAMO,SAAUe,aAAclT,KAAK4R,MAAMa,QAASlB,cAAevR,KAAK2d,oBAC1J,6BACCtP,KAjhBjB,4EAshBuBvI,GAthBvB,kHAuhBcrC,EAAQqC,EAAYrC,MAGpBwc,EAAe,IAAIC,IAEnBC,EAAgB1c,EACjBwN,QAAO,SAAAhI,GAAC,OACO,WAAXA,EAAE3D,MAAgC,cAAX2D,EAAE3D,MAAmC,wBAAX2D,EAAE3D,OACxC,SAAZ2D,EAAEzD,QACDya,EAAaG,IAAInX,EAAEzD,UAEvBJ,KAAI,SAAA6D,GAED,OADAgX,EAAaI,IAAIpX,EAAEzD,OACZ,CAAEQ,MAAOiD,EAAEzD,MAAO2W,MAAOlT,EAAEvD,cAGpCwV,EAAWiF,EAAcG,MAAK,SAAC7X,EAAG8X,GAAJ,OAAU9X,EAAEzC,MAAMwa,cAAcD,EAAEva,UAElEwI,EAASxO,KAAKmH,MAAMqN,MAAMhW,OAAjB,QAAqCwB,KAAK4R,MAAMpD,QAAU0M,EAAS9V,KAAI,SAAAqb,GAAC,OAAIA,EAAEza,SAAO,GAI1E,IAFlByX,EAAYha,EAAMwN,QAAO,SAAAhI,GAAC,MAAc,uBAAVA,EAAE3D,MAA2C,wBAAV2D,EAAE3D,QAAgCF,KAAI,SAAC6D,GAAD,MAAQ,CAAEjD,MAAOiD,EAAEzD,MAAO2W,MAAOlT,EAAEvD,eAElI/G,QAAkC,GAAnBuc,EAASvc,OA7iB9C,oDA+iBYmhB,EAAqB9f,KAAK4R,MAAM6L,UAChC/O,EAAW,EACXwP,EAAU,EACV3L,EAAO,GACPE,EAAU,GACVR,EAAQ,GACRE,EAAW,GAEkB,GAA7B2N,EAAmBnhB,QAAe6P,GAAUxO,KAAK4R,MAAMpD,OAvjBnE,kCAwjBoDjP,MAAM,GAAD,OAAIuM,GAAJ,wDAAkE,CAC3GlD,OAAQ,OACRtH,QAAS,CACL,OAAU,mBACV,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAU,CAAEuW,YAAa5B,EAAUrY,KAAI,SAAAsb,GAAG,OAAIA,EAAI1a,SAAQwI,OAAQA,EAAQ0M,SAAUA,EAAS9V,KAAI,SAAAqb,GAAC,OAAIA,EAAEza,aA9jBnI,eAwjBkB2a,EAxjBlB,iBAgkBgDA,EAA0Bhe,OAhkB1E,SAgkBkBie,EAhkBlB,QAkkBsC/L,MAAMlW,OAAS,GACrCmhB,EAAqBc,EAAsB/L,MAEvCrG,GAAUxO,KAAK4R,MAAMpD,aAAkDhT,IAAxCwE,KAAKmH,MAAMqN,MAAMhW,OAAjB,eAA4FhD,IAAvCwE,KAAKmH,MAAMqN,MAAMhW,OAAjB,cAC7ChD,IAApCwE,KAAKmH,MAAMqN,MAAMhW,OAAjB,WAAwFhD,IAAvCwE,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAEpDkQ,EAAWoR,EAAmB,GAAG1R,WACjC8P,EAAU4B,EAAmB,GAAG5B,QAChC1P,EAASsR,EAAmB,GAAGe,UAC/BtO,EAAOuN,EAAmB,GAAGvN,KAC7BE,EAAUqN,EAAmB,GAAGrN,UAEhC/D,EAAWV,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,WAAwCwB,KAAK4R,MAAMlD,UAAYoR,EAAmB,GAAG1R,WACzG8P,EAAUlQ,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,UAAuCwB,KAAK4R,MAAMsM,SAAW4B,EAAmB,GAAG5B,QACtG3L,EAAOvS,KAAKmH,MAAMqN,MAAMhW,OAAjB,MAAmCwB,KAAK4R,MAAMW,MAAQuN,EAAmB,GAAGvN,KACnFE,EAAUzS,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAMa,SAAWqN,EAAmB,GAAGrN,WAIhG/D,EAAW,EACXwP,EAAU,EACV1P,EAAS,GACT+D,EAAO,GACPE,EAAU,IAzlB1B,wBA4lBY/D,EAAWV,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,WAAwCwB,KAAK4R,MAAMlD,UAAYoR,EAAmB,GAAG1R,WACzG8P,EAAUlQ,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,UAAuCwB,KAAK4R,MAAMsM,SAAW4B,EAAmB,GAAG5B,QACtG3L,EAAOvS,KAAKmH,MAAMqN,MAAMhW,OAAjB,MAAmCwB,KAAK4R,MAAMW,MAAQuN,EAAmB,GAAGvN,KACnFE,EAAUzS,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAMa,SAAWqN,EAAmB,GAAGrN,QA/lBxG,WAkmBYqO,EAAiC,GACrB,GAAZpS,GAA4B,GAAXwP,IACjB4C,EAAiChB,EAAmB7O,QAAO,SAAA+O,GAAE,OAAIA,EAAG5R,YAAcM,GAAYsR,EAAG9B,SAAWA,MAEhH4C,EAA+BhM,SAAQ,SAAAkL,GAC/B/N,EAAM8N,OAAM,SAAAtX,GAAC,OAAIA,IAAMuX,EAAGzN,SAC1BN,EAAM7I,KAAK4W,EAAGzN,MAEdJ,EAAS4N,OAAM,SAAA5M,GAAC,OAAIA,IAAM6M,EAAGvN,YAC7BN,EAAS/I,KAAK4W,EAAGvN,YAIzBF,EAAOvS,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCyT,EAAMtV,SAASqD,KAAK4R,MAAMW,MAAQvS,KAAK4R,MAAMW,KAAON,EAAM,IACrGQ,EAAUzS,KAAKmH,MAAMqN,MAAMhW,OAAjB,UAAuC2T,EAASxV,SAASqD,KAAK4R,MAAMa,SAAWzS,KAAK4R,MAAMa,QAAUN,EAAS,IAEjHpC,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM7B,MAAQ,EACvEC,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM5B,MAAQ,GAEtD,GAAnBhQ,KAAK4R,MAAMW,MAAa/D,GAAUxO,KAAK4R,MAAMpD,QAAUE,GAAY1O,KAAK4R,MAAMlD,UAAYwP,GAAWle,KAAK4R,MAAMsM,SAAW3L,GAAQvS,KAAK4R,MAAMW,MAAQE,GAAWzS,KAAK4R,MAAMa,SAAW1C,GAAQ/P,KAAK4R,MAAM7B,MAAQC,GAAQhQ,KAAK4R,MAAM5B,KArnBjP,0DAwnBQtQ,GAAO2B,cACPgI,QAAQsT,IAAI,QAAUpK,EAAO,YAAcE,EAAU,iBAAmBzS,KAAK4R,MAAMW,KAAO,oBAAsBvS,KAAK4R,MAAMa,SAznBnI,UA0nB+BlT,MAAM,GAAD,OAAIuM,GAAJ,+DAAiE4C,EAAjE,YAA6EwP,EAA7E,YAAwF3L,EAAxF,YAAgGE,EAAhG,YAA2G1C,EAA3G,YAAmHC,IA1nBvJ,eA0nBctP,EA1nBd,iBA2nB2BA,EAASiC,OA3nBpC,QA2nBc0D,EA3nBd,OA4nBc8N,EAAY9N,EAAKwO,MAAMzP,KACzB,SAACkL,GACG,IAAM2O,EAAiB,IAAIvC,KAAKpM,EAAEiO,oBAClC,OAAO,2BAAKjO,GAAZ,IAAeiG,QAASjG,EAAEvL,UAAY,IAAMuL,EAAEtL,QAAS0O,UAAU,EAAOD,YAAa,GAAI+B,QAAQ,EAAOkJ,UAAU,EAAOT,2BAA4BgB,OAI7Jjf,KAAKsR,SAAS,CAAExB,MAAOzJ,EAAKyJ,MAAOoL,SAAUA,EAAU1M,OAAQA,EAAQiP,UAAWqC,EAAoBpR,SAAUA,EAAUwP,QAASA,EAASjM,MAAOA,EAAOM,KAAMA,EAAMJ,SAAUA,EAAUM,QAASA,EAAS1C,KAAMA,EAAMC,KAAMA,EAAMmE,UAAWA,EAAWlI,SAAS,IACnQvM,GAAO8B,QApoBf,6GAAwCsX,aAA3BsE,GACFrE,YAAcqE,GAAmB/U,KAsoB5C+U,GAAmBpE,YAAcpS,ECrpBjC,IACMkF,GAASpI,wDAEThE,GAASC,IAAiBC,KA6SjBmhB,GA3SS,SAAC5Z,GAAW,IAAD,EAELO,mBAAS,GAFJ,mBAExBoI,EAFwB,KAEjBoE,EAFiB,OAGDxM,oBAAS,GAHR,mBAGxBuE,EAHwB,KAGfC,EAHe,OAKLxE,mBAAS,CAC/B8G,OAAQ,GACR+D,KAAM,EACNE,QAAS,GACTzN,QAAS,GACTD,UAAW,GACXgL,KAAM,EACNC,KAAM,GACNkL,SAAU,GACVjJ,MAAO,GACPE,SAAU,KAfiB,mBAKxBP,EALwB,KAKjBN,EALiB,OAkBG5J,mBAAS,IAlBZ,mBAkBxByM,EAlBwB,KAkBbC,EAlBa,OAoBC1M,mBAAS,IApBV,mBAoBxB4T,EApBwB,KAsBzBxV,GAtByB,KAsBXsB,qBAAWR,GAAYd,aAErCuO,EAAmB,uCAAG,WAAO7T,GAAP,mCAAAiI,EAAA,yDAGG,KAFrB8S,EAAc/a,EAAKiD,MAAMwN,QAAO,SAAAhI,GAAC,MAAe,WAAXA,EAAE3D,MAAgC,cAAX2D,EAAE3D,QAAsBF,KAAI,SAAA6D,GAAC,OAAIA,EAAEzD,UAErF7G,OAHQ,oDAKlB6c,EAAgBrU,EAAMqN,MAAMhW,OAAZ,QAAgC+c,EAAY,GAE5D9G,EAAe,GACjBC,EAAkB,GAEE,IAApB4G,EAAS3c,OAVW,iCAWWY,MAAM,GAAD,OAAIuM,GAAJ,0DAA4D0P,IAX5E,cAWd7G,EAXc,iBAYOA,EAAiBhS,OAZxB,QAYdiS,EAZc,QAcpBF,EAAe,uBAAOA,GAAP,aAA2BE,EAAaC,SAEvCC,SAAQ,SAAAC,GACfN,EAAa9X,SAASoY,EAAGxC,OAC1BkC,EAAarL,KAAK2L,EAAGxC,SAlBT,QAuBlByC,EAAc7N,EAAMqN,MAAMhW,OAAZ,OAA+BiW,EAAa9V,OAAS,EAAI8V,EAAa,GAAK,GACzFQ,EAAkB,GAExBP,EAAgBzD,QAAO,SAAAX,GAAC,OAAIA,EAAEiC,OAASyC,KAAaF,SAAQ,SAAAC,GACnDE,EAAgBtY,SAASoY,EAAGtC,UAC7BwC,EAAgB7L,KAAK2L,EAAGtC,YAG3BwC,EAAgBtY,SAAS,OAC1BsY,EAAgB7L,KAAK,MAGnB8L,EAAiB/N,EAAMqN,MAAMhW,OAAZ,UAAkCyW,EAAgBtW,OAAS,EAAIsW,EAAgB,GAAK,IACrGE,EAAchO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM7B,KAClDqF,EAAcjO,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAM5B,KAExD7I,EAAMhD,QAAQiF,KAAd,4BAAwCoS,EAAxC,YAAyDxG,EAAzD,YAAwEE,EAAxE,YAA0FC,EAA1F,YAAyGC,IACzG9D,GAAS,SAAAhJ,GAAS,kCACXA,GADW,IACA4S,SAAUK,EAAatJ,MAAOwC,EAActC,SAAU8C,EACpEzG,OAAQgN,EAAejJ,KAAMyC,EAAavC,QAASyC,OA1C/B,4CAAH,sDA+CnBG,EAAY,uCAAG,WAAO7U,GAAP,iCAAAiI,EAAA,yDACX+F,EAASrH,EAAMqN,MAAMhW,OAAZ,QAAgCoT,EAAMpD,OACjD+D,EAAOpL,EAAMqN,MAAMhW,OAAZ,MAA8BoT,EAAMW,KAC3CE,EAAUtL,EAAMqN,MAAMhW,OAAZ,SAAiCoT,EAAMa,QAE/C1C,EAAO/B,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM7B,KACrDC,EAAOhC,SAAS7G,EAAMqN,MAAMhW,OAAZ,OAA+BoT,EAAM5B,KAE/C,GAARuC,GAAwB,KAAX/D,GAA6B,KAAZiE,EARjB,wDAUXzN,EAAU4M,EAAM5M,QAChBD,EAAY6M,EAAM7M,UAEpBuQ,EAba,UAaDxJ,GAbC,iDAa8C0C,EAb9C,YAawD+D,EAbxD,YAagEE,EAbhE,YAa2E1C,EAb3E,YAamFC,GAChGhL,GAA8B,KAAnBA,EAAQ3C,SACnBiT,GAAM,WAAQC,mBAAmBvQ,EAAQ3C,UAEzC0C,GAAkC,KAArBA,EAAU1C,SAClB2C,GAA8B,KAAnBA,EAAQ3C,SAAeiT,GAAM,WAAQC,mBAAmB,OACxED,GAAM,WAAQC,mBAAmBxQ,EAAU1C,UAnB9B,UAsBM9C,MAAM+V,GAtBZ,eAsBX5U,EAtBW,iBAuBEA,EAASiC,OAvBX,QAuBX0D,EAvBW,OAyBjB6F,GAAW,GACP7F,GAAQA,EAAKyJ,OAASzJ,EAAKwO,OAC3BT,EAAa/N,EAAKwO,MAAMzP,KAAI,SAAAkL,GAAC,kCAAUA,GAAV,IAAakF,QAAQ,EAAOC,QAAS,SAClEvB,EAAS7N,EAAKyJ,SAEdsE,EAAa,IACbF,EAAS,IA/BI,4CAAH,sDAmClB7G,qBAAU,WACN7F,SAASxG,MAAQyG,yEACb3B,QAA+BtK,IAAhBsK,GACfuO,EAAoBvO,KAEzB,CAACA,IAEJuH,qBAAU,WACFvH,QAA+BtK,IAAhBsK,IACfoG,GAAW,GACXmJ,EAAavP,MAElB,CAAC8L,IAEJ,IA+BM8D,EAAa,SAAC1Z,EAAK+T,EAAMC,GAC3B7I,EAAMhD,QAAQiF,KAAd,UAAsBpN,EAAtB,YAA6B+T,EAA7B,YAAqCC,IACrCsB,EAAS,2BAAKM,GAAN,IAAa7B,KAAMA,EAAMC,KAAMA,MAGrCb,EAAS,SAACqE,GACZ,IAAMzC,EAAIoD,EAAUzN,QAAQ8M,GAEvBA,EAASgC,OAiBVpB,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlByE,QAASI,EAAc7E,GAAGyE,UAJR,aAMnBI,EAAcnM,MAAMsH,EAAI,SAtB/BrR,GAAO2B,cACP9B,MAAM,GAAD,OAAIuM,GAAJ,qDAAuD0H,EAASjB,KAAhE,YAAwEiB,EAASf,QAAjF,YAA4Fe,EAASmC,OAArG,YAA+GnC,EAASA,SAAxH,YAAoIA,EAAS8G,OAA7I,YAAuJ9G,EAAS+G,mBAChKhZ,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF3G,GAAO8B,QACP4S,GAAa,SAAAwB,GAAa,6BACnBA,EAAcnM,MAAM,EAAGsH,IADJ,4BAGf6E,EAAc7E,IAHC,IAIlByE,QAASI,EAAc7E,GAAGyE,OAC1BC,QAASpP,KALS,aAOnBuP,EAAcnM,MAAMsH,EAAI,aA2GzC1C,EAAWpC,EAAU,2BAAG,2CAxFV,SAACkI,GACjB,OACI,kBAAC3J,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BACI,wBAAIV,UAAU,oBAAoBxE,MAAM,OAAxC,UACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,cACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,SACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,aACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,WACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,YACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,WACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,gBACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,mBACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,UAGhD,+BACK2O,EAAU/O,KAAI,SAACkL,EAAG3F,GACf,IAvBD6P,EAuBOrE,EAAanL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aACpD,OACI,wBAAIxL,IAAKD,GACL,wBAAIX,UAAU,eAAesG,EAAEiC,MAC/B,wBAAIvI,UAAU,eAAesG,EAAEmC,SAC/B,wBAAIzI,UAAU,eAAesG,EAAEwK,OAC/B,wBAAI9Q,UAAU,eAAesG,EAAEqF,QAC/B,4BAAKrF,EAAEgG,SACP,wBAAItM,UAAU,eAAesG,EAAEkD,UAC/B,4BAAKlD,EAAEvL,UAAP,IAAmBuL,EAAEtL,SACrB,wBAAIgF,UAAU,eACV,0BAAME,GAAI,MAAQS,GAAQwL,EAA1B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,QAAQrO,OAAQ,MAAQuC,GAClD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,wBAAIpM,UAAU,gBAvCvBwQ,EAuCgDlK,EAAE0K,SAtC1D,IAAIP,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KAuCvG,4BACI,yBAAKxQ,UAAU,YAAY1E,KAAK,QAAQoR,aAAW,YAC/C,0BAAMxM,GAAI,OAASS,GACf,kBAAC,IAAD,CAAMX,UAAU,2BAA2B1C,GAAE,oBAAegJ,EAAEiC,KAAjB,YAAyBjC,EAAEmC,QAA3B,YAAsCnC,EAAEqF,OAAxC,YAAkDrF,EAAEkD,SAApD,YAAgElD,EAAEgK,SAC3G,kBAACjH,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,OAASuC,GACjD,WAEL,0BAAMT,GAAI,WAAaS,GACnB,kBAAC,IAAD,CAAMX,UAAU,2BAA2B1C,GAAG,IAAIgD,QAAS,kBAAM6E,EAAOmB,KACpE,kBAAC+C,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,WAAauC,GACrD,kBAEL,kBAACsE,GAAA,EAAD,CAAOC,OAAQoB,EAAEkF,OAAQxL,UAAU,YAC/B,kBAACwF,GAAA,EAAD,yBACA,kBAACC,GAAA,EAAD,KACI,2BAAOkH,IAAG,sCAAiCrG,EAAEmF,SAAWlG,MAAO,KAAMqH,OAAQ,IAAKvW,KAAK,kBAAkBwW,YAAY,0DAEzH,kBAACjH,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM6E,EAAOmB,KAAhD,YAEA,6BACR,0BAAMpG,GAAI,OAASS,GACf,kBAAC,IAAD,CAAMX,UAAU,2BAA2B1C,GAAE,gCAA2BgJ,EAAEiC,KAA7B,YAAqCjC,EAAEmC,QAAvC,YAAkDnC,EAAEqF,OAApD,YAA8DrF,EAAEkD,SAAhE,YAA4ElD,EAAEgK,OAA9E,YAAwFhK,EAAEiK,mBACnI,kBAAClH,GAAD,CAAMnK,KAAM,kBAAC,KAAD,UAGpB,kBAACsN,GAAA,EAAD,CAAqBC,UAAU,MAAMrO,OAAQ,OAASuC,GACjD,qBAQ7B,+BACI,4BACI,wBAAImM,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAOA,EAAOC,KAAM6B,EAAM7B,KAAMC,KAAM4B,EAAM5B,KAAMhU,IAAG,4BAAuB4V,EAAMpD,OAA7B,YAAuCoD,EAAMW,KAA7C,YAAqDX,EAAMa,SAAWtC,OAAQuF,QAQ/GqB,CAAY5C,GAEpE,OACI,6BACI,wBAAIjK,GAAG,cAAP,yBACA,kBAAC,GAAD,CACI6C,cAAe6E,EAAMsJ,SACrBC,YAAavJ,EAAMpD,OACnB0D,YAAaN,EAAMK,MACnBgB,UAAWrB,EAAMW,KACjBH,eAAgBR,EAAMO,SACtBe,aAActB,EAAMa,QACpBlB,cA3Kc,SAACF,GACvB,IAAMhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MACnBwI,EAA0BoD,EAA1BpD,OAAQ+D,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QAIT,WAATpK,GACAlB,EAAMhD,QAAQiF,KAAd,4BAAwCpD,EAAxC,YAAiDuM,EAAjD,YAAyDE,EAAzD,YAJS,EAIT,YAHS,KAITnB,EAAS,2BAAKM,GAAN,IAAapD,OAAQxI,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KALvD,EAKmEC,KAJnE,OAKO,SAAT3H,GACPlB,EAAMhD,QAAQiF,KAAd,4BAAwCoF,EAAxC,YAAkDxI,EAAlD,YAA2DyM,EAA3D,YAPS,EAOT,YANS,KAOTnB,EAAS,2BAAKM,GAAN,IAAaW,KAAMvM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KARrD,EAQiEC,KAPjE,OAQO,YAAT3H,IACPlB,EAAMhD,QAAQiF,KAAd,4BAAwCoF,EAAxC,YAAkD+D,EAAlD,YAA0DvM,EAA1D,YAVS,EAUT,YATS,KAUTsL,EAAS,2BAAKM,GAAN,IAAaa,QAASzM,EAAOhB,QAAS,GAAID,UAAW,GAAIgL,KAXxD,EAWoEC,KAVpE,QAuKL2B,oBAxJe,SAAC5M,EAAWC,GAAa,IACxCwJ,EAA0BoD,EAA1BpD,OAAQ+D,EAAkBX,EAAlBW,KAAME,EAAYb,EAAZa,QACtBtL,EAAMhD,QAAQiF,KAAd,4BAAwCoF,EAAxC,YAAkD+D,EAAlD,YAA0DE,EAA1D,IAAqE,EAArE,IAA0E,KAC1EnB,EAAS,2BACFM,GADC,IAEJ7M,UAAwB,MAAbA,EAAoB,GAAKA,EAAU1C,OAC9C2C,QAAoB,MAAXA,EAAkB,GAAKA,EAAQ3C,OACxC0N,KAAM,EAAGC,KAAM,SAmJd3B,IClTA2S,GAAb,kDACE,WAAY7Z,GAAQ,IAAD,8BACjB,cAAMA,IAQRiK,aAAe,SAAAC,GACb,IAAIhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MAEb,UAARqC,EACF,EAAKiJ,SAAS,CAAE3C,OAAQ3I,IAET,UAARqC,GACP,EAAKiJ,SAAS,CAAEqE,OAAQ3P,KAjBT,EAqBnByL,aAAe,SAAAJ,GAEbA,EAAMK,iBAFgB,MAGM,EAAKvK,MAAzBnL,EAHc,EAGdA,IAAK+T,EAHS,EAGTA,KAAMC,EAHG,EAGHA,KAHG,EAIK,EAAK4B,MAAxBjD,EAJc,EAIdA,OAAQgH,EAJM,EAINA,OAEhB,EAAKxO,MAAMgJ,OAAOnU,EAAK+T,EAAMC,EAAM2F,EAAQhH,IAzB3C,EAAKiD,MAAQ,CACXjD,OAAQ,EAAKxH,MAAMwH,OAAQgH,OAAQ,EAAKxO,MAAMwO,QAEhD,EAAKvE,aAAe,EAAKA,aAAa7O,KAAlB,iBACpB,EAAKkP,aAAe,EAAKA,aAAalP,KAAlB,iBANH,EADrB,qDAgCI,OACE,2BACE,wBAAM8F,KAAK,WAAWsK,SAAU3S,KAAKyR,cACjC,gBAACmB,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACrB,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,UAA1C,eAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SACpB,gBAACuE,GAAA,EAAD,CACElO,KAAK,OACL0S,YAAY,YACZ1K,KAAK,SACL6B,GAAG,SACHgS,aAAclc,KAAK4R,MAAM+D,OAC3BxL,SAAUnK,KAAKoR,aACfgC,UAAW,OAMjB,gBAACR,GAAA,EAAD,CAAKhI,IAAK,GACR,gBAACiI,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,YAA1C,YAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SACpB,gBAACuE,GAAA,EAAD,CACElO,KAAK,OACL0S,YAAY,SACZ1K,KAAK,SACL6B,GAAG,SACHgS,aAAclc,KAAK4R,MAAMjD,OACzBxE,SAAUnK,KAAKoR,aACfgC,UAAW,OAKjB,gBAACR,GAAA,EAAD,CAAKhI,IAAK,GACR,gBAACiI,GAAA,EAAD,CAAKC,GAAI,IAAI,gBAAC1I,EAAA,EAAD,CAAQ/J,KAAK,UAAb,kBAvEzB,GAAsCwG,aCGzBoa,GAAb,kDAGI,WAAY9Z,GAAQ,IAAD,8BACf,cAAMA,IACDyK,MAAQ,CAAEsP,SAAU,GAAInR,KAAM,EAAGC,KAAM,GAAI2F,OAAQ,GAAIhH,OAAQ,GAAI1C,SAAS,GACjF,EAAKyJ,WAAa,EAAKA,WAAWnT,KAAhB,iBAHH,EAHvB,gEAUQiF,SAASxG,MAAQyG,0EACjB,IAAMsI,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM7B,MAAQ,EACvEC,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM5B,MAAQ,GACvE2F,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM+D,QAAU,GACpEhH,EAAS3O,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAMjD,QAAU,GACtE3O,KAAK4R,MAAM3F,SACXjM,KAAKqV,aAAatF,EAAMC,EAAM2F,EAAQhH,KAhBlD,2CAqBQ,IAAMoB,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM7B,MAAQ,EACvEC,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM5B,MAAQ,GACvE2F,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM+D,QAAU,GACpEhH,EAAS3O,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAMjD,QAAU,GACtE3O,KAAK4R,MAAM3F,SACXjM,KAAKqV,aAAatF,EAAMC,EAAM2F,EAAQhH,KA1BlD,iCA+Be3S,EAAK+T,EAAMC,EAAM2F,EAAQhH,GAChC,IAAIwS,EAAM,UAAMnlB,EAAN,YAAa+T,EAAb,YAAqBC,GAE3B2F,GAA4B,KAAlBA,EAAOtT,SACjB8e,GAAM,WAAQ5L,mBAAmBI,EAAOtT,UAExCsM,GAA4B,KAAlBA,EAAOtM,SACZsT,GAA4B,KAAlBA,EAAOtT,SAAe8e,GAAM,WAAQ5L,mBAAmB,OACtE4L,GAAM,WAAQ5L,mBAAmB5G,EAAOtM,UAG5CrC,KAAKmH,MAAMhD,QAAQiF,KAAK+X,GACxBnhB,KAAKsR,SAAS,CAAErF,SAAS,EAAM8D,KAAMA,EAAMC,KAAMA,EAAM2F,OAAQA,EAAQhH,OAAQA,MA3CvF,kCA8CgBuS,GACR,OACI,2BAAOlX,UAAU,sBAAsBkM,kBAAgB,cACnD,+BACI,4BACI,yCACA,uCACA,4BAAK,MAGb,+BACKgL,EAAS9b,KAAI,SAAAkR,GAAO,OACjB,wBAAI1L,IAAK0L,EAAQX,QACb,4BAAKW,EAAQX,QACb,4BAAKW,EAAQA,SACb,4BACI,kBAAC,IAAD,CAAMtM,UAAU,oBAAoB1C,GAAE,6BAAwBgP,EAAQX,OAAhC,UAAtC,iBAKhB,+BACI,4BACI,wBAAImB,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAO9P,KAAK4R,MAAM9B,MAAOC,KAAM/P,KAAK4R,MAAM7B,KAAMC,KAAMhQ,KAAK4R,MAAM5B,KAAMC,QAASjQ,KAAK4R,MAAM+D,OAAQzF,QAASlQ,KAAK4R,MAAMjD,OAAQ3S,IAAG,YAAemU,OAAQnQ,KAAK0V,mBAtEtM,+BA+EqB1H,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM7B,KACxD/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM5B,KADrE,IAEM2F,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM+D,QAAU,IACpEhH,EAAS3O,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAMjD,QAAU,IAEtEN,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAMsP,UAElC,OACI,6BACI,wBAAIhX,GAAG,cAAP,6BACA,6BACA,kBAAC,GAAD,CAAkByL,OAAQA,EAAQhH,OAAQA,EAAQoB,KAAM,EAAGC,KAAM,GAAIhU,IAAG,YAAemU,OAAQnQ,KAAK0V,aACpG,6BACCrH,KA9FjB,4EAmGuB0B,EAAMC,EAAM2F,EAAQhH,GAnG3C,kFAoGY2G,EApGZ,UAFe5R,wDAEf,kCAoGwDqM,EApGxD,YAoGgEC,GACpD2F,GAA4B,KAAlBA,EAAOtT,SACjBiT,GAAM,WAAQC,mBAAmBI,EAAOtT,UAExCsM,GAA4B,KAAlBA,EAAOtM,SACZsT,GAA4B,KAAlBA,EAAOtT,SAAeiT,GAAM,WAAQC,mBAAmB,OACtED,GAAM,WAAQC,mBAAmB5G,EAAOtM,UA1GpD,SA6G+B9C,MAAM+V,GA7GrC,cA6Gc5U,EA7Gd,gBA8G2BA,EAASiC,OA9GpC,OA8Gc0D,EA9Gd,OA+GQrG,KAAKsR,SAAS,CAAExB,MAAOzJ,EAAKyJ,MAAOoR,SAAU7a,EAAKwO,MAAO9E,KAAMA,EAAMC,KAAMA,EAAM2F,OAAQA,EAAQhH,OAAQA,EAAQ1C,SAAS,IA/GlI,mHAA8B6M,aAAjBmI,GACFlI,YAAckI,GAAS5Y,KCDlC,IACMyD,GAASpI,wDAGThE,GAASC,IAAiBC,KAEnBwhB,GAAb,kDAGI,WAAYja,GAAQ,IAAD,8BACf,cAAMA,IACDyK,MAAQ,CAAE9B,MAAO,EAAGC,KAAM,EAAGC,KAAM,GAAI2F,OAAQ,GAAIxB,UAAW,GAAIlI,SAAS,GAChF,EAAKyJ,WAAa,EAAKA,WAAWnT,KAAhB,iBAClB,EAAK4M,OAAS,EAAKA,OAAO5M,KAAZ,iBAJC,EAHvB,gEAWQiF,SAASxG,MAAQyG,0EACjB,IAAMkO,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,OACTuR,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,EACpDwR,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,GAC1DwB,KAAKqV,aAAaM,EAAQ5F,EAAMC,KAfxC,2CAmBQ,IAAM2F,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,OACTuR,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,EACpDwR,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,GACtDuR,GAAQ/P,KAAK4R,MAAM7B,MACnB/P,KAAKqV,aAAaM,EAAQ5F,EAAMC,KAvB5C,iCA4BehU,EAAK+T,EAAMC,GAAO,IAAD,OACxBhQ,KAAKsR,SAAS,CAAErF,SAAS,IAAQ,WAC7B,EAAK9E,MAAMhD,QAAQiF,KAAnB,UAA2BpN,EAA3B,YAAkC+T,EAAlC,YAA0CC,SA9BtD,6BAkCWwD,GAAW,IAAD,OACPzC,EAAI/Q,KAAK4R,MAAMuC,UAAUzN,QAAQ8M,GAElCA,EAASgC,OAmCVxV,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,UAJrB,aAMFrB,EAAU1K,MAAMsH,EAAI,UAzC/BrR,GAAOqB,KAAK,CACRC,MAAO,mBACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAIf9B,MAAM,GAAD,OAAIuM,GAAJ,8CAAgD0H,EAASjB,KAAzD,YAAiEiB,EAASf,QAA1E,YAAqFe,EAASmC,OAA9F,YAAwGnC,EAASA,SAAjH,YAA6HA,EAAS8G,OAAtI,YAAgJ9G,EAAS+G,mBACzJhZ,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF,EAAKiL,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,OACtBC,QAASpP,EAAKvE,UALb,aAOFqS,EAAU1K,MAAMsH,EAAI,SAG/BrR,GAAO8B,WAEVgB,OAAM,SAAAC,GACH7C,IAAKmB,KAAK,CACNmI,KAAM,QACNlI,MAAO,QACPC,KAAM,6BACNC,mBAAmB,UAnE3C,gCAsFcsZ,GACN,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KAvFvI,kCA0FgBrG,GAAY,IAAD,OACnB,OACI,kBAAC3J,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BACI,wBAAIV,UAAU,oBAAoBxE,MAAM,OAAxC,UACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,cACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,SACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,WACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,YACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,gBACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,mBACA,wBAAIwE,UAAU,QAAQxE,MAAM,OAAO,OAG3C,+BACK2O,EAAU/O,KAAI,SAACkL,EAAG3F,GACf,IAAMwL,EAAanL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aACpD,OACI,wBAAIxL,IAAKD,GACL,wBAAIX,UAAU,eAAesG,EAAEiC,MAC/B,wBAAIvI,UAAU,eAAesG,EAAEmC,SAC/B,wBAAIzI,UAAU,eAAesG,EAAEwK,OAC/B,4BAAKxK,EAAEvL,UAAP,IAAmBuL,EAAEtL,SACrB,wBAAIgF,UAAU,eAAesG,EAAEkD,UAC/B,wBAAIxJ,UAAU,eACV,0BAAME,GAAI,MAAQS,GAASwL,EAA3B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,QAAQrO,OAAQ,MAAQuC,GAClD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,wBAAIpM,UAAU,eAAesG,EAAEwF,UAAY,EAAI,EAAKiF,UAAUzK,EAAE0K,UAAY,KAC5E,wBAAInR,MAAO,CAAEC,QAAS,OAAQwE,IAAK,WAC9BgC,EAAEwF,UAAY,GAAM,oCACjB,kBAAC,IAAD,CAAM9L,UAAU,oBAAoB1C,GAAE,oBAAegJ,EAAEiC,KAAjB,YAAyBjC,EAAEmC,QAA3B,YAAsCnC,EAAEqF,OAAxC,YAAkDrF,EAAEkD,SAApD,YAAgElD,EAAEgK,SAAxG,WAEA,kBAAC,IAAD,CAAMtQ,UAAU,oBAAoB1C,GAAG,IAAIgD,QAAS,kBAAM,EAAK6E,OAAOmB,KAAtE,OACA,kBAACrB,GAAA,EAAD,CAAOC,OAAQoB,EAAEkF,OAAQxL,UAAU,YAC/B,kBAACwF,GAAA,EAAD,yBACA,kBAACC,GAAA,EAAD,KACI,2BAAOkH,IAAG,sCAAiCrG,EAAEmF,SAAWlG,MAAO,KAAMqH,OAAQ,IAAKvW,KAAK,kBAAkBwW,YAAY,0DAEzH,kBAACjH,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM,EAAK6E,OAAOmB,KAArD,mBAShC,+BACI,4BACI,wBAAIwG,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAO9P,KAAK4R,MAAM9B,MAAOC,KAAM/P,KAAK4R,MAAM7B,KAAMC,KAAMhQ,KAAK4R,MAAM5B,KAAMhU,IAAG,6BAAwBgE,KAAK4R,MAAM+D,QAAUxF,OAAQnQ,KAAK0V,mBAjJ5K,+BA0JQ,IAAIrH,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAMuC,WAElC,OACI,6BACI,wBAAIjK,GAAG,cAAP,4BACA,wCAAa,gCAASlK,KAAK4R,MAAMuC,WAAanU,KAAK4R,MAAMuC,UAAUxV,OAAS,GAAKqB,KAAK4R,MAAMuC,UAAU,GAAGwB,OAAS,IAAM3V,KAAK4R,MAAMuC,UAAU,GAAGmC,UAC/IjI,KAlKjB,4EAuKuBsH,GAvKvB,kGAuK+B5F,EAvK/B,+BAuKsC,EAAGC,EAvKzC,+BAuKgD,GAvKhD,SAwK+BzQ,MAAM,GAAD,OAAIuM,GAAJ,2CAA6C6J,EAA7C,YAAuD5F,EAAvD,YAA+DC,IAxKnG,cAwKctP,EAxKd,gBAyK2BA,EAASiC,OAzKpC,QAyKc0D,EAzKd,SA0KoBA,EAAKyJ,OAASzJ,EAAKwO,QACrBV,EAAY9N,EAAKwO,MAAMzP,KAAI,SAAAkL,GAAC,kCAAUA,GAAV,IAAakF,QAAQ,EAAOC,QAAS,QAEvEzV,KAAKsR,SAAS,CAAExB,MAAOzJ,EAAKyJ,MAAOC,KAAMA,EAAMC,KAAMA,EAAM2F,OAAQA,EAAQxB,UAAWA,EAAWlI,SAAS,KA7KtH,4GAAsC6M,aAAzBsI,GACFrI,YAAcqI,GAAiB/Y,KCVnC,IAAMgZ,GAAb,kDACE,WAAYla,GAAQ,IAAD,8BACjB,cAAMA,IAQRiK,aAAe,SAAAC,GACb,IAAIhJ,EAAOgJ,EAAMjJ,OAAOC,KACpBrC,EAAQqL,EAAMjJ,OAAOpC,MAEb,aAARqC,EACF,EAAKiJ,SAAS,CAAEvM,UAAWiB,IAEZ,WAARqC,GACP,EAAKiJ,SAAS,CAAEtM,QAASgB,KAjBV,EAqBnByL,aAAe,SAAAJ,GAEbA,EAAMK,iBAFgB,MAGM,EAAKvK,MAAzBnL,EAHc,EAGdA,IAAK+T,EAHS,EAGTA,KAAMC,EAHG,EAGHA,KAHG,EAIS,EAAK4B,MAA5B7M,EAJc,EAIdA,UAAWC,EAJG,EAIHA,QAEnB,EAAKmC,MAAMgJ,OAAOnU,EAAK+T,EAAMC,EAAMjL,EAAWC,IAzB9C,EAAK4M,MAAQ,CACX7M,UAAW,EAAKoC,MAAMpC,UAAWC,QAAS,EAAKmC,MAAMnC,SAEvD,EAAKoM,aAAe,EAAKA,aAAa7O,KAAlB,iBACpB,EAAKkP,aAAe,EAAKA,aAAalP,KAAlB,iBANH,EADrB,qDAgCI,OACE,2BACE,wBAAM8F,KAAK,WAAWsK,SAAU3S,KAAKyR,cACjC,gBAACmB,GAAA,EAAD,CAAKhI,IAAK,EAAGZ,UAAU,cACrB,gBAAC6I,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,UAA1C,eAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SACpB,gBAACuE,GAAA,EAAD,CACAlO,KAAK,OACL0S,YAAY,YACZ1K,KAAK,YACL6B,GAAG,YACHgS,aAAclc,KAAK4R,MAAM7M,UACzBoF,SAAUnK,KAAKoR,aACfgC,UAAY,OAKlB,gBAACR,GAAA,EAAD,CAAKhI,IAAK,GACR,gBAACiI,GAAA,EAAD,CAAKC,GAAI,GACP,yBAAO9I,UAAU,iBAAiBC,QAAQ,YAA1C,aAEF,gBAAC4I,GAAA,EAAD,CAAKC,GAAI,EAAG9I,UAAU,SACpB,gBAACuE,GAAA,EAAD,CACElO,KAAK,OACL0S,YAAY,UACZ1K,KAAK,UACL6B,GAAG,UACHgS,aAAclc,KAAK4R,MAAM5M,QACzBmF,SAAUnK,KAAKoR,aACfgC,UAAW,OAKjB,gBAACR,GAAA,EAAD,CAAKhI,IAAK,GACR,gBAACiI,GAAA,EAAD,CAAKC,GAAI,IAAI,gBAAC1I,EAAA,EAAD,CAAQ/J,KAAK,UAAb,kBAtEzB,GAAwCwG,aCG3Bya,GAAb,kDAGI,WAAYna,GAAQ,IAAD,8BACf,cAAMA,IACDyK,MAAQ,CAAE2P,WAAY,GAAIxR,KAAM,EAAGC,KAAM,GAAIjL,UAAW,GAAIC,QAAS,GAAIiH,SAAS,GACvF,EAAKyJ,WAAa,EAAKA,WAAWnT,KAAhB,iBAHH,EAHvB,gEAUQiF,SAASxG,MAAQyG,2EACjB,IAAMsI,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM7B,MAAQ,EACvEC,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM5B,MAAQ,GACvEjL,EAAY/E,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM7M,WAAa,GAC1EC,EAAUhF,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM5M,SAAW,GAExEhF,KAAK4R,MAAM3F,SACXjM,KAAKqV,aAAatF,EAAMC,EAAMjL,EAAU1C,OAAQ2C,EAAQ3C,UAjBpE,2CAsBQ,IAAM0N,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM7B,MAAQ,EACvEC,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM5B,MAAQ,GACvEjL,EAAY/E,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM7M,WAAa,IAC1EC,EAAUhF,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM5M,SAAW,IAExEhF,KAAK4R,MAAM3F,SACXjM,KAAKqV,aAAatF,EAAMC,EAAMjL,EAAWC,KA5BrD,iCAgCehJ,EAAK+T,EAAMC,EAAMjL,EAAWC,GAEnC,IAAImc,EAAM,UAAMnlB,EAAN,YAAa+T,EAAb,YAAqBC,GAE3BjL,GAAkC,KAArBA,EAAU1C,SACvB8e,GAAM,WAAQ5L,mBAAmBxQ,EAAU1C,UAE3C2C,GAA8B,KAAnBA,EAAQ3C,SACd0C,GAAkC,KAArBA,EAAU1C,SAAe8e,GAAM,WAAQ5L,mBAAmB,OAC5E4L,GAAM,WAAQ5L,mBAAmBvQ,EAAQ3C,UAG7CrC,KAAKmH,MAAMhD,QAAQiF,KAAK+X,GACxBnhB,KAAKsR,SAAS,CAAErF,SAAS,EAAM8D,KAAMA,EAAMC,KAAMA,EAAMjL,UAAWA,EAAWC,QAASA,MA7C9F,kCAgDgBuc,GACR,OACI,2BAAOvX,UAAU,sBAAsBkM,kBAAgB,cACnD,+BACI,4BACI,yCACA,uCACA,0CAGR,+BACKqL,EAAWnc,KAAI,SAAAoc,GAAQ,OACpB,wBAAI5W,IAAK4W,EAAS3c,gBACd,4BAAK2c,EAASzc,WACd,4BAAKyc,EAASxc,SACd,4BACI,kBAAC,IAAD,CAAMgF,UAAU,oBAAoB1C,GAAE,8BAAyBka,EAAS3c,iBAAxE,iBAKhB,+BACI,4BACI,wBAAIiS,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAO9P,KAAK4R,MAAM9B,MAAOC,KAAM/P,KAAK4R,MAAM7B,KAAMC,KAAMhQ,KAAK4R,MAAM5B,KAAMC,QAASjQ,KAAK4R,MAAM7M,UAAWmL,QAASlQ,KAAK4R,MAAM5M,QAAShJ,IAAG,cAAiBmU,OAAQnQ,KAAK0V,mBAxE5M,+BAiFqB1H,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM7B,KACxD/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoCwB,KAAK4R,MAAM5B,KADrE,IAEMjL,EAAY/E,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM7M,WAAa,GAC1EC,EAAUhF,KAAKmH,MAAMqN,MAAMhW,OAAjB,SAAsCwB,KAAK4R,MAAM5M,SAAW,GAExEqJ,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAM2P,YAElC,OACI,6BACI,wBAAIrX,GAAG,cAAP,+BACA,6BACA,kBAAC,GAAD,CAAoBnF,UAAWA,EAAWC,QAASA,EAAS+K,KAAM,EAAGC,KAAM,GAAIhU,IAAG,cAAiBmU,OAAQnQ,KAAK0V,aAChH,6BACCrH,KAhGjB,4EAqGuB0B,EAAMC,EAAMjL,EAAWC,GArG9C,kFAsGYsQ,EAtGZ,UAFe5R,wDAEf,oCAsG0DqM,EAtG1D,YAsGkEC,GAEtDjL,GAAkC,KAArBA,EAAU1C,SACvBiT,GAAM,WAAQC,mBAAmBxQ,EAAU1C,UAE3C2C,GAA8B,KAAnBA,EAAQ3C,SACd0C,GAAkC,KAArBA,EAAU1C,SAAeiT,GAAM,WAAQC,mBAAmB,OAC5ED,GAAM,WAAQC,mBAAmBvQ,EAAQ3C,UA7GrD,SAgH+B9C,MAAM+V,GAhHrC,cAgHc5U,EAhHd,gBAiH2BA,EAASiC,OAjHpC,OAiHc0D,EAjHd,OAkHQrG,KAAKsR,SAAS,CAAExB,MAAOzJ,EAAKyJ,MAAOyR,WAAYlb,EAAKwO,MAAO9E,KAAMA,EAAMC,KAAMA,EAAMjL,UAAWA,EAAWC,QAASA,EAASiH,SAAS,IAlH5I,mHAAgC6M,aAAnBwI,GACFvI,YAAcuI,GAAWjZ,K,WCC9ByD,GAASpI,wDAEThE,GAASC,IAAiBC,KAEnB6hB,GAAb,kDAGI,WAAYta,GAAQ,IAAD,8BACf,cAAMA,IACDyK,MAAQ,CAAE9B,MAAO,EAAGC,KAAM,EAAGC,KAAM,GAAInL,eAAgB,GAAIsP,UAAW,GAAIlI,SAAS,GACxF,EAAKyJ,WAAa,EAAKA,WAAWnT,KAAhB,iBAClB,EAAK4M,OAAS,EAAKA,OAAO5M,KAAZ,iBAJC,EAHvB,gEAWQiF,SAASxG,MAAQyG,2EACjB,IAAM5C,EAAiB7E,KAAKmH,MAAMqN,MAAMhW,OAAjB,eACjBuR,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,EACpDwR,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,GAC1DwB,KAAKqV,aAAaxQ,EAAgBkL,EAAMC,KAfhD,2CAmBQ,IAAMnL,EAAiB7E,KAAKmH,MAAMqN,MAAMhW,OAAjB,eACjBuR,EAAO/B,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,EACpDwR,EAAOhC,SAAShO,KAAKmH,MAAMqN,MAAMhW,OAAjB,OAAoC,GACtDuR,GAAQ/P,KAAK4R,MAAM7B,MACnB/P,KAAKqV,aAAaxQ,EAAgBkL,EAAMC,KAvBpD,iCA4BehU,EAAK+T,EAAMC,GAClBhQ,KAAKmH,MAAMhD,QAAQiF,KAAnB,UAA2BpN,EAA3B,YAAkC+T,EAAlC,YAA0CC,MA7BlD,6BAgCWwD,GAAW,IAAD,OACPzC,EAAI/Q,KAAK4R,MAAMuC,UAAUzN,QAAQ8M,GAEvC,GAAKA,EAASgC,OAuCVxV,KAAKsR,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,UAJrB,aAMFrB,EAAU1K,MAAMsH,EAAI,aA9Cb,CAClBrR,GAAOqB,KAAK,CACRC,MAAO,mBACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAIf,IAAIrF,EAA0B,UAApBwX,EAASmC,QAA0C,UAApBnC,EAASmC,OAAxC,UACH7J,GADG,8CACyC0H,EAASjB,KADlD,YAC0DiB,EAASf,QADnE,YAC8Ee,EAASmC,OADvF,YACiGnC,EAASA,SAD1G,YACsHA,EAAS8G,OAD/H,YACyI9G,EAAS+G,kBADlJ,UAEHzO,GAFG,8CAEyC0H,EAASjB,KAFlD,YAE0DiB,EAASmC,OAFnE,YAE6EnC,EAAS8G,QAEhG/a,MAAMvD,GACDuF,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF,EAAKiL,UAAS,gBAAG6C,EAAH,EAAGA,UAAH,MAAoB,CAC9BA,UAAU,GAAD,oBACFA,EAAU1K,MAAM,EAAGsH,IADjB,4BAGEoD,EAAUpD,IAHZ,IAIDyE,QAASrB,EAAUpD,GAAGyE,OACtBC,QAASpP,EAAKvE,UALb,aAOFqS,EAAU1K,MAAMsH,EAAI,SAG/BrR,GAAO8B,WAEVgB,OAAM,SAAAC,GACH7C,IAAKmB,KAAK,CACNmI,KAAM,QACNlI,MAAO,QACPC,KAAM,6BACNC,mBAAmB,UArE3C,gCAwFcsZ,GACN,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KAzFvI,kCA4FgBrG,GAAY,IAAD,OAEnB,OACI,kBAAC3J,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BACI,wBAAIV,UAAU,oBAAoBxE,MAAM,OAAxC,UACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,cACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,SACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,aACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,WACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,YACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,gBACA,wBAAIwE,UAAU,oBAAoBxE,MAAM,OAAxC,mBACA,wBAAIwE,UAAU,SAAS,OAG/B,+BACKmK,EAAU/O,KAAI,SAACkL,EAAG3F,GACf,IAAMwL,EAAanL,KAAKqL,MAAoB,IAAd/F,EAAEwF,UAAkBxF,EAAE8F,aACpD,OACI,wBAAIxL,IAAKD,GACL,wBAAIX,UAAU,cAAcxE,MAAM,OAAO8K,EAAEiC,MAC3C,wBAAIvI,UAAU,eAAesG,EAAEmC,QAAUnC,EAAEmC,QAAU,OACrD,wBAAIzI,UAAU,eAAesG,EAAEwK,OAC/B,wBAAI9Q,UAAU,eAAesG,EAAEqF,QAC/B,4BAAkB,UAAbrF,EAAEqF,QAAmC,UAAbrF,EAAEqF,OAAqBrF,EAAEgG,QAAuB,UAAbhG,EAAEqF,OAAqB,2CAAuC,sDAC9H,wBAAI3L,UAAU,eAAesG,EAAEkD,SAAWlD,EAAEkD,SAAW,OACvD,wBAAIxJ,UAAU,eACV,0BAAME,GAAI,MAAQS,GAASwL,EAA3B,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,QAAQrO,OAAQ,MAAQuC,GAClD2F,EAAEwF,UADP,IACmBxF,EAAE8F,cAGzB,wBAAIpM,UAAU,eAAesG,EAAEwF,UAAY,EAAI,EAAKiF,UAAUzK,EAAE0K,UAAY,KAC5E,wBAAInR,MAAO,CAAEC,QAAS,OAAQwE,IAAK,WAEf,GAAfgC,EAAEwF,UAAiB,KAAoB,UAAbxF,EAAEqF,QAAmC,UAAbrF,EAAEqF,OACjD,kBAAC,IAAD,CAAM3L,UAAU,oBAAoB1C,GAAE,oBAAegJ,EAAEiC,KAAjB,YAAyBjC,EAAEmC,QAA3B,YAAsCnC,EAAEqF,OAAxC,YAAkDrF,EAAEkD,SAApD,YAAgElD,EAAEgK,SAAxG,WAEA,kBAAC,IAAD,CAAMtQ,UAAU,oBAAoB1C,GAAE,oBAAegJ,EAAEiC,KAAjB,YAAyBjC,EAAEqF,OAA3B,YAAqCrF,EAAEgK,SAA7E,WAGHhK,EAAEwF,UAAY,GAAM,oCACjB,kBAAC,IAAD,CAAM9L,UAAU,oBAAoB1C,GAAG,IAAIgD,QAAS,kBAAM,EAAK6E,OAAOmB,KAAtE,OACA,kBAACrB,GAAA,EAAD,CAAOC,OAAQoB,EAAEkF,OAAQxL,UAAU,YAC/B,kBAACwF,GAAA,EAAD,KAA2B,UAAbc,EAAEqF,QAAmC,UAAbrF,EAAEqF,OAAqB,mBAAqB,iBAClF,kBAAClG,GAAA,EAAD,KACI,2BAAOkH,IAAG,sCAAiCrG,EAAEmF,SAAWlG,MAAO,KAAMqH,OAAQ,IAAKvW,KAAK,kBAAkBwW,YAAY,0DAEzH,kBAACjH,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM,EAAK6E,OAAOmB,KAArD,mBAUhC,+BACI,4BACI,wBAAIwG,QAAS,GACT,kBAACjH,GAAD,CAAYC,MAAO9P,KAAK4R,MAAM9B,MAAOC,KAAM/P,KAAK4R,MAAM7B,KAAMC,KAAMhQ,KAAK4R,MAAM5B,KAAMhU,IAAG,8BAAyBgE,KAAK4R,MAAM/M,gBAAkBsL,OAAQnQ,KAAK0V,mBA5JrL,+BAqKQ,IAAIrH,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK4R,MAAM9B,MAAQ,EAAI9P,KAAK+W,YAAY/W,KAAK4R,MAAMuC,WAAa,uDAEtE,OACI,6BACI,wBAAIjK,GAAG,cAAP,6BACA,wCAAa,gCAASlK,KAAK4R,MAAMuC,WAAanU,KAAK4R,MAAMuC,UAAUxV,OAAS,GAAKqB,KAAK4R,MAAMuC,UAAU,GAAGpP,UAAY,IAAM/E,KAAK4R,MAAMuC,UAAU,GAAGnP,UAClJqJ,KA7KjB,4EAkLuBxJ,GAlLvB,kGAkLuCkL,EAlLvC,+BAkL8C,EAAGC,EAlLjD,+BAkLwD,GAlLxD,SAmL+BzQ,MAAM,GAAD,OAAIuM,GAAJ,4CAA8CjH,EAA9C,YAAgEkL,EAAhE,YAAwEC,IAnL5G,cAmLctP,EAnLd,gBAoL2BA,EAASiC,OApLpC,QAoLc0D,EApLd,UAqLqBA,EAAKyJ,OAAuB,GAAdzJ,EAAKyJ,QAAezJ,EAAKwO,QAC1CV,EAAY9N,EAAKwO,MAAMzP,KAAI,SAAAkL,GAAC,kCAAUA,GAAV,IAAakF,QAAQ,EAAOC,QAAS,QAEvEzV,KAAKsR,SAAS,CAAExB,MAAOzJ,EAAKyJ,MAAOC,KAAMA,EAAMC,KAAMA,EAAMnL,eAAgBA,EAAgBsP,UAAWA,EAAWlI,SAAS,KAxLtI,4GAAuC6M,aAA1B2I,GACF1I,YAAc0I,GAAkBpZ,K,cCZpC,SAASqZ,GAAT,GAAsC,IAAblO,EAAY,EAAZA,SAK9B,IAHmBgH,EAGbrE,EAAanL,KAAKqL,MAA2B,IAArB7C,EAASsC,UAAkBtC,EAAS4C,aAC9DrF,EAAI,EACR,OACE,kBAACvG,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAChC,+BACE,4BAAI,wBAAIoM,QAAS,EAAG9M,UAAU,eAA1B,qBAEN,+BACE,wBAAIY,IAAKmG,KACP,wBAAI/G,UAAU,oBAAd,YACA,4BAAKwJ,EAASjB,KAAd,MAAuBiB,EAASf,SAChC,wBAAIzI,UAAU,oBAAd,WACA,4BAAKwJ,EAAShF,SAEM,MAArBgF,EAAS9E,UACR,wBAAI9D,IAAKmG,KACP,wBAAI/G,UAAU,oBAAd,aACA,4BAAKwJ,EAAS9E,UACd,wBAAI1E,UAAU,oBAAd,YACA,4BAAKwJ,EAAS0K,UAGlB,wBAAItT,IAAKmG,KACP,wBAAI/G,UAAU,oBAAd,UACA,4BAAKwJ,EAASmC,OAAd,IAAuBnC,EAAS8C,QAAhC,OAA6C9C,EAASA,UACtD,wBAAIxJ,UAAU,oBAAd,iBACA,4BACE,0BAAME,GAAI,MAAQsJ,EAASmO,YAAcxL,EAAzC,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,OAAOrO,OAAQ,MAAQoL,EAASmO,YAC5DnO,EAASsC,UADZ,IACwBtC,EAAS4C,eAIrC,wBAAIxL,IAAKmG,KACP,wBAAI/G,UAAU,oBAAd,YACA,4BAAKwJ,EAASzO,UAAd,IAA0ByO,EAASxO,SACnC,wBAAIgF,UAAU,oBAAd,sBACA,6BAxCWwQ,EAwCIhH,EAASwH,SAvCvB,IAAIP,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,QCJ5H,SAASoH,GAAT,GAA8C,IAApBC,EAAmB,EAAnBA,KAAMC,EAAa,EAAbA,UAErC,SAAS/G,EAAUP,GACjB,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,GAGjI,OACE,2BAAO5P,IAAK,KAAOiX,EAAKE,OAAQ/X,UAAU,sBAAsBkM,kBAAgB,cAC9E,+BACE,wBAAItL,IAAK,MAAM,wBAAIkM,QAAS,EAAG9M,UAAU,eAAe6X,EAAKA,OAC7D,wBAAIjX,IAAK,MACP,wBAAIZ,UAAU,cAAd,SACA,wBAAIA,UAAU,eAAd,YACA,wBAAIA,UAAU,eAAd,SACA,wBAAIA,UAAU,eAAd,6BACA,wBAAIA,UAAU,eAAd,sBAGJ,+BACG8X,EAAU1c,KAAI,SAACkL,EAAG3F,GAAJ,OACb,wBAAIC,IAAK0F,EAAEqR,WAAa,IAAMrR,EAAE0R,YAC9B,wBAAIhY,UAAU,cAAcW,EAAM,GAClC,4BAAK2F,EAAE2R,UACP,wBAAIjY,UAAU,eAAe+Q,EAAUzK,EAAE4R,QACzC,wBAAIlY,UAAU,eAAe+Q,EAAUzK,EAAE6R,qBACzC,wBAAInY,UAAU,eAAe+Q,EAAyB,IAAfzK,EAAE6F,YAAsB,Y,uBCNpE,SAASiM,GAAcjb,GAAQ,IAC5Bkb,EAA0Blb,EAA1Bkb,OAAQC,EAAkBnb,EAAlBmb,OAEVviB,EAAU,CAEdwiB,YAAa,CACXvR,OAAQ,CACNwR,UAAW,CACTC,SAAU,KAIhBC,UAAW,IACXC,SAAU,CACRC,IAAK,CACHC,YAAa,IAGjBpY,YAAY,EACZqY,QAAS,CACPC,OAAQ,CACN5J,SAAU,SAEZnY,MAAO,CACL8I,SAAS,EACT7I,KAxB4BkG,EAAVnG,OA0BpBgiB,WAAY,CACVjI,UAAW,SAAU/U,EAAOqR,GAC1B,OAAOrR,EAAQ,QAMjBK,EAAO,CACXgc,SACAY,SAAU,CACR,CACE9G,MAAO,oBACP9V,KAAMic,EACNY,YAAa,oBACb7J,gBAAiB,2BAEnB,CACE8C,MAAO,kBACP9V,KAAMic,EACNY,YAAa,oBACb7J,gBAAiB,6BAKvB,OAAO,kBAAC,KAAD,CAAKtZ,QAASA,EAASsG,KAAMA,IA9DtC8c,KAAQC,SACNC,KACAC,KACAC,KACAC,KACAC,KACAC,M,cCHK,SAASC,GAAsBxc,GAAQ,IACpC+C,EAAqD/C,EAArD+C,GAAIsY,EAAiDrb,EAAjDqb,UAAWH,EAAsClb,EAAtCkb,OAAQC,EAA8Bnb,EAA9Bmb,OAAQsB,EAAsBzc,EAAtByc,OAAQ9N,EAAc3O,EAAd2O,UACzC+N,EAASC,iBAAO,MAChBC,EAASD,iBAAO,MAEhB/jB,EAuCN,SAAwBmK,EAAIsY,EAAWoB,GACrC,MAAO,CACLpB,UAAWA,EAEXE,UAAW,IACXC,SAAU,CACRC,IAAK,CACHC,YAAa,IAGjBpY,YAAY,EACZuZ,OAAQ,CACNC,EAAG,CACDC,SAAS,EACTpT,IAAK,KAEPqT,EAAG,CACDD,SAAS,IAGbpB,QAAS,CACPC,OAAQ,CACN5J,SAAU,SAEZnY,MAAO,CACL8I,SAAS,EACT7I,KAAM2iB,GAERZ,WAAY,CACVlZ,QAAS,SAAUuN,GACjB,IAAI1M,EAAQ0M,EAAQ+M,UAEpB,OADY/M,EAAQgN,QAAQhe,KAAKsE,GAClB,GAEjBoQ,UAAW,SAAU/U,EAAOqR,GAC1B,OAAOrR,EAAQ,QA1ETse,CAAepa,EAAIsY,EAAWoB,GACxCW,EAAqB,CAAC,iBAA4B,oBAA0B,kBAC5EC,EAAqB,CAAC,uBAA4B,yBAA0B,wBAC5EC,EAAqB,CAAC,qBAA4B,iBAA0B,mBAA0B,oBAA0B,iBAAwB,kBACxJC,EAAqB,CAAC,2BAA4B,uBAA0B,yBAA0B,yBAA0B,uBAAwB,wBACxJC,EAAqB,CAAC,qBAA4B,iBAA0B,kBAA0B,kBAA0B,mBAAoB,qBAAsB,qBAA4B,oBAA0B,gBAAwB,iBAAkB,kBAC1QC,EAAqB,CAAC,2BAA4B,yBAA0B,yBAA0B,yBAA0B,yBAA0B,yBAA0B,yBAA0B,wBAAyB,wBAAyB,uBAAwB,wBACxRve,EAAO,CACXgc,SACAY,SAwEF,SAAsB5c,EAAMyP,GAE1B,IAAM+O,EAAY,GAClBxe,EAAKyO,SAAQ,SAAAxE,GACPuU,EAAU9E,OAAM,SAAA5X,GAAC,OAAIA,EAAE2c,mBAAqBxU,EAAEwU,qBAChDD,EAAUzb,KAAK,CAAE0b,iBAAkBxU,EAAEwU,iBAAkBC,YAAazU,EAAEyU,iBAG1E,IAAMC,EAAiBH,EAAUlmB,OAC3BskB,EAAW4B,EAAUzf,KAAI,SAAA+C,GAC7B,IACIkR,EAeJ,OAdI2L,GAAkB,GACNT,EAAepc,EAAE2c,iBAAmB,GAClDzL,EAAkBmL,EAAmBrc,EAAE2c,iBAAmB,IAEnDE,GAAkB,GACXP,EAAetc,EAAE2c,iBAAmB,GAClDzL,EAAkBqL,EAAmBvc,EAAE2c,iBAAmB,KAG5CH,EAAexc,EAAE2c,kBAC/BzL,EAAkBuL,EAAmBzc,EAAE2c,mBAIlC,CACL3I,MAAOhU,EAAE4c,YACT1e,KAAMA,EAAK4K,QAAO,SAAAgU,GAAC,OAAIA,EAAEH,kBAAoB3c,EAAE2c,oBAAkB1f,KAAI,SAAAqD,GAAC,OAAoB,IAAfA,EAAEyc,WAAmBpP,GAAWqP,QAAQ,MACnHjC,YAAa7J,EACbA,gBAAiBA,MAIrB,OADAhQ,QAAQsT,IAAI,UAAYjb,KAAKoH,UAAUma,IAChCA,EA1GGmC,CAAa9C,EAAQxM,IAG3BuP,EAAWC,uBAAY,SAAAC,GAC3B,IAAMC,EAAM3B,EAAO4B,QACfC,EAAW,iBACf,QAAkBlqB,IAAdgnB,GAA2BA,EAC7BnZ,QAAQsT,IAAI,WACD,MAAP6I,IACFE,EAAW,sBAIV,CAEH,IAAMC,EAAM5B,EAAO0B,QAEfzpB,EAAe,MAATupB,EAAgBA,EAAMK,gBAAkB,GAEvC,MAAPD,GAAsB,MAAP3pB,IACjB2pB,EAAIhP,IAAM3a,GAGZ0pB,EAAW,gBAEF,MAAPF,IACFA,EAAI3b,MAAQ6b,KAEb,IAiFH,OAAQ,oCACN,yBAAKG,IAAMhC,GACT,kBAAC,KAAD,CAAK3Z,GAAIA,EAAInK,QAASA,EAASsG,KAAMA,EAAMwf,IAAKR,UAEnC7pB,IAAdgnB,IAA4BA,GAC3B,yBAAKtY,GAAI,OAASA,EAAI2b,IAAK9B,EAAQpN,IAAI,MA1I7CwM,KAAQC,SACNC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAoC,MCLF,IACMha,GAASpI,wDAEFqiB,GAAb,kDAGE,WAAY5e,GAAQ,IAAD,8BACjB,cAAMA,IACDyK,MAAQ,CAAE4B,SAAU,KAAMqB,MAAO,GAAImR,MAAO,GAAIC,YAAa,GAAIC,aAAc,GAAIC,KAAM,OAAQla,SAAS,GAE/G,EAAKma,cAAgB,EAAKA,cAAc7jB,KAAnB,iBAJJ,EAHrB,gEAWIiF,SAASxG,MAAQyG,2EACjB,IAAM8K,EAAOvS,KAAKmH,MAAMqN,MAAMhW,OAAjB,KACPiU,EAAUzS,KAAKmH,MAAMqN,MAAMhW,OAAjB,QACVmX,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,OACTgV,EAAWxT,KAAKmH,MAAMqN,MAAMhW,OAAjB,SACXqG,EAAiB7E,KAAKmH,MAAMqN,MAAMhW,OAAjB,eACjB2nB,EAAOnmB,KAAKmH,MAAMqN,MAAMhW,OAAjB,MAAmC,OAChDwB,KAAKqV,aAAa9C,EAAME,EAASkD,EAAQnC,EAAU3O,EAAgBshB,KAlBvE,6BAqBStE,GACL,IAAM9Q,EAAI/Q,KAAK4R,MAAMoU,MAAMtf,QAAQmb,GACnC7hB,KAAKsR,UAAS,gBAAG0U,EAAH,EAAGA,MAAH,MAAgB,CAC5BA,MAAM,GAAD,oBACAA,EAAMvc,MAAM,EAAGsH,IADf,4BAGEiV,EAAMjV,IAHR,IAIDsV,aAAcL,EAAMjV,GAAGsV,eAJtB,aAMAL,EAAMvc,MAAMsH,EAAI,WA9B3B,gCAmCYyJ,GACR,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KApCnI,iCAuCavZ,GAAkB,IAAZ+O,EAAW,uDAAJ,GACtB,GAAI/O,EAAKtC,QAAUqR,EACjB,OAAO/O,EACT,IAAMqlB,EAASrlB,EAAK0C,MAAM,KACpB4iB,EAAQ,GACVC,EAAM,GACV,IAAK,IAAIC,KAAKH,EACRE,EAAI7nB,OAAS2nB,EAAOG,GAAG9nB,QAAUqR,EACnCwW,GAAOF,EAAOG,GAAK,KAGnBF,EAAMnd,KAAKod,GACXA,EAAMF,EAAOG,GAAK,KAItB,OADAF,EAAMnd,KAAKod,GACJD,IAvDX,sCA0DmB,IACP/S,EAAaxT,KAAK4R,MAAlB4B,SACRjU,MAAM,GAAD,OAAIuM,GAAJ,8CAAgD0H,EAASjB,KAAzD,YAAiEiB,EAASf,QAA1E,YAAqFe,EAASmC,OAA9F,YAAwGnC,EAASA,SAAjH,YAA6HA,EAAS8G,SACxI/Y,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACJ,GAAIA,EAAM,CACR,IAAIoC,EAAIjB,SAASiY,cAAc,KAC/BhX,EAAEtM,KAAF,sCAAwCkK,EAAKvE,QAC7C2G,EAAEiX,SAAF,kBAAwBlM,EAASjB,KAAjC,YAAyCiB,EAASf,QAAlD,YAA6De,EAASmC,OAAtE,YAAgFnC,EAASA,SAAzF,YAAqGA,EAAS8G,OAA9G,QACA7R,EAAEkX,cAnEZ,kCAwEcnM,EAAUqB,EAAOmR,EAAOC,EAAaC,GAAe,IAAD,OAE7D,OACE,oCACE,kBAACxE,GAAD,CAAelO,SAAUA,IACxBwS,GAASA,EAAM5gB,KAAI,SAACqD,GACnB,IAAMqZ,EAAYjN,EAAM5D,QAAO,SAAAX,GAAC,OAAI7H,EAAEsZ,QAAUzR,EAAEyR,UAE5C8C,EAAY/C,EAAU1c,KAAI,SAACkL,EAAG3F,GAAJ,OAAcA,EAAM,KAC9C+b,EAAqBT,EAAYhV,QAAO,SAAA0V,GAAC,OAAIA,EAAE5E,QAAUtZ,EAAEsZ,UAAQ3c,KAAI,SAAAkL,GAAO,MAAO,CAAEwU,iBAAkBxU,EAAEwU,iBAAkBC,YAAazU,EAAEyU,YAAaG,WAAY5U,EAAE4U,eACvK0B,EAAiB9E,EAAU1c,KAAI,SAAAkL,GAAC,OAAI,EAAKyK,UAAyB,IAAfzK,EAAE6F,eAC3D,OACE,yBAAKvL,IAAM,KAAOnC,EAAEsZ,QAClB,kBAACH,GAAD,CAAgBhX,IAAK,KAAOnC,EAAEsZ,OAAQF,KAAMpZ,EAAGqZ,UAAWA,IAEtC,QAAnB,EAAKlQ,MAAMuU,KACV,oCACE,kBAAC/b,EAAA,EAAD,CAAQF,GAAI,MAAQzB,EAAEsZ,QAAtB,kBACA,kBAAC8E,GAAA,EAAD,CAAsBC,QAAS,OAASre,EAAEsZ,QACxC,kBAACrY,EAAA,EAAD,KACE,kBAACE,EAAA,EAAD,KACE,kBAAC+Z,GAAD,CAAuB/Y,IAAK,MAAQnC,EAAEsZ,OAAQ6B,OAAQnb,EAAEoZ,KAAMQ,OAAQwC,EAAWvC,OAAQoE,EAAoB5Q,UAAWtC,EAASsC,gBAMzI,kBAAC6N,GAAD,CAAuB/Y,IAAK,MAAQnC,EAAEsZ,OAAQ7X,GAAI,MAAQzB,EAAEsZ,OAAQS,WAAW,EAAOoB,OAAQnb,EAAEoZ,KAAMQ,OAAQwC,EAAWvC,OAAQoE,EAAoB5Q,UAAWtC,EAASsC,YAE3K,6BACA,kBAAC7G,GAAA,EAAD,CAAOrE,IAAK,KAAOnC,EAAEsZ,OAAQ7S,OAAQzG,EAAE4d,YAAarc,UAAU,YAC5D,kBAACwF,GAAA,EAAD,+BACA,kBAACC,GAAA,EAAD,KACE,kBAAC2S,GAAD,CAAexX,IAAK,KAAOnC,EAAEsZ,OAAQ/gB,MAAOyH,EAAEoZ,KAAMQ,OAAQwC,EAAWvC,OAAQsE,EAAgBG,WAAYvT,EAASsC,aAEtH,kBAAClG,GAAA,EAAD,KACE,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAU,kBAAM,EAAK6E,OAAO1G,KAAtD,mBA5GlB,+BA0HI,IAAI4F,EAAWrO,KAAK4R,MAAM3F,QACtB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAM4B,SAAUxT,KAAK4R,MAAMiD,MAAO7U,KAAK4R,MAAMoU,MAAOhmB,KAAK4R,MAAMqU,YAAajmB,KAAK4R,MAAMsU,cAEjH,OACE,yBAAKlc,UAAU,UAGb,6BACE,wBAAIE,GAAG,aAAaF,UAAU,eAA9B,wBACCqE,MApIX,4EA0IqBkE,EAAME,EAASkD,EAAQnC,EAAU3O,EAAgBshB,GA1ItE,qGA2I2B5mB,MAAM,GAAD,OAAIuM,GAAJ,kCAAoCyG,EAApC,YAA4CE,EAA5C,YAAuDkD,EAAvD,YAAiEnC,EAAjE,YAA6E3O,IA3I7G,cA2IUnE,EA3IV,gBA4IuBA,EAASiC,OA5IhC,cA4IU0D,EA5IV,gBA8I+B9G,MAAM,GAAD,OAAIuM,GAAJ,0CAA4CyG,EAA5C,YAAoDE,EAApD,YAA+DkD,EAA/D,YAAyEnC,EAAzE,YAAqF3O,IA9IzH,cA8IUmiB,EA9IV,iBA+I+BA,EAAarkB,OA/I5C,eA+IUskB,EA/IV,OAgJUjB,EAAQ,GACdiB,EAAanS,SAAQ,SAAAxE,GACf0V,EAAMjG,OAAM,SAAAtX,GAAC,OAAIA,EAAEsZ,SAAWzR,EAAEyR,WAClCiE,EAAM5c,KAAK,CAAE2Y,OAAQzR,EAAEyR,OAAQF,KAAMvR,EAAEuR,KAAMwE,aAAY,OAnJjE,UAuJsC9mB,MAAM,GAAD,OAAIuM,GAAJ,8CAAgDyG,EAAhD,YAAwDE,EAAxD,YAAmEkD,EAAnE,YAA6EnC,EAA7E,YAAyF3O,IAvJpI,eAuJUqiB,EAvJV,iBAwJkCA,EAAoBvkB,OAxJtD,QAwJUwkB,EAxJV,OAyJUjB,EAAe,GACrBiB,EAAgBrS,SAAQ,SAAAxE,GAClB4V,EAAanG,OAAM,SAAA5X,GAAC,OAAIA,EAAE2c,mBAAqBxU,EAAEwU,qBACnDoB,EAAa9c,KAAK,CAAE0b,iBAAkBxU,EAAEwU,iBAAkBC,YAAazU,EAAEyU,iBAIzEkC,GAAgBE,GAClBnnB,KAAKsR,SAAS,CAAEkC,SAAUnN,EAAMwO,MAAOoS,EAAcjB,MAAOA,EAAOC,YAAakB,EAAiBjB,aAAcA,EAAcC,KAAMA,EAAMla,SAAS,IAjKxJ,uHAA8B6M,aCPvB,SAASsO,GAAT,GAA8C,IAAbC,EAAY,EAAZA,SAKpC,IAHmB7M,EAGbrE,EAAanL,KAAKqL,MAA2B,IAArBgR,EAASvR,UAAkBuR,EAASjR,aAC9DrF,EAAI,EACR,OACI,kBAACvG,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAC9B,+BACI,4BAAI,wBAAIoM,QAAS,EAAG9M,UAAU,eAA1B,qBAER,+BACI,wBAAIY,IAAKmG,KACL,wBAAI/G,UAAU,oBAAd,YACA,4BAAKqd,EAAS9U,MACd,wBAAIvI,UAAU,oBAAd,WACA,4BAAKqd,EAAS7Y,SAEI,MAArB6Y,EAAS3Y,UACN,wBAAI9D,IAAKmG,KACL,wBAAI/G,UAAU,oBAAd,aACJ,4BAAKqd,EAAS3Y,UACV,wBAAI1E,UAAU,oBAAd,YACJ,4BAAKqd,EAASnJ,UAGlB,wBAAItT,IAAKmG,KACL,wBAAI/G,UAAU,oBAAd,cACA,4BAAyB,UAApBqd,EAAS1R,OAAqB,2CAAuC,sDAC1E,wBAAI3L,UAAU,oBAAd,iBACA,4BACI,0BAAME,GAAI,MAAQmd,EAAS1F,YAAcxL,EAAzC,KACA,kBAACK,GAAA,EAAD,CAAqBC,UAAU,OAAOrO,OAAQ,MAAQif,EAAS1F,YAC1D0F,EAASvR,UADd,IAC0BuR,EAASjR,eAI3C,wBAAIxL,IAAKmG,KACL,wBAAI/G,UAAU,oBAAd,UACA,4BAAKqd,EAAStiB,UAAd,IAA0BsiB,EAASriB,SACnC,wBAAIgF,UAAU,oBAAd,aACA,6BAxCGwQ,EAwCY6M,EAASrM,SAvC7B,IAAIP,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,QDI1HuL,GACJhN,YAAcgN,GAAS1d,KEJhC,IACMyD,GAASpI,wDAEF4jB,GAAb,kDAEI,WAAYngB,GAAQ,IAAD,8BACf,cAAMA,IACDyK,MAAQ,CAAEyV,SAAU,KAAMxS,MAAO,GAAImR,MAAO,GAAIC,YAAa,GAAIC,aAAc,GAAIC,KAAM,OAAQla,SAAS,GAFhG,EAFvB,gEAQQzE,SAASxG,MAAQyG,wEACjB,IAAM8K,EAAOvS,KAAKmH,MAAMqN,MAAMhW,OAAjB,KACPmX,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,OACTqG,EAAiB7E,KAAKmH,MAAMqN,MAAMhW,OAAjB,eACjB2nB,EAAOnmB,KAAKmH,MAAMqN,MAAMhW,OAAjB,MAAmC,OAChDwB,KAAKqV,aAAa9C,EAAMoD,EAAQ9Q,EAAgBshB,KAbxD,6BAgBWtE,GACH,IAAM9Q,EAAI/Q,KAAK4R,MAAMoU,MAAMtf,QAAQmb,GACnC7hB,KAAKsR,UAAS,gBAAG0U,EAAH,EAAGA,MAAH,MAAgB,CAC1BA,MAAM,GAAD,oBACEA,EAAMvc,MAAM,EAAGsH,IADjB,4BAGMiV,EAAMjV,IAHZ,IAIGsV,aAAcL,EAAMjV,GAAGsV,eAJ1B,aAMEL,EAAMvc,MAAMsH,EAAI,WAzBnC,gCA8BcyJ,GACN,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KA/BvI,iCAkCevZ,GAAkB,IAAZ+O,EAAW,uDAAJ,GACpB,GAAI/O,EAAKtC,QAAUqR,EACf,OAAO/O,EACX,IAAMqlB,EAASrlB,EAAK0C,MAAM,KACpB4iB,EAAQ,GACVC,EAAM,GACV,IAAK,IAAIC,KAAKH,EACNE,EAAI7nB,OAAS2nB,EAAOG,GAAG9nB,QAAUqR,EACjCwW,GAAOF,EAAOG,GAAK,KAGnBF,EAAMnd,KAAKod,GACXA,EAAMF,EAAOG,GAAK,KAI1B,OADAF,EAAMnd,KAAKod,GACJD,IAlDf,kCAqDgBc,EAAUxS,EAAOmR,EAAOC,EAAaC,GAAe,IAAD,OAE3D,OACI,oCACI,kBAACkB,GAAD,CAAuBC,SAAUA,IAChCrB,GAASA,EAAM5gB,KAAI,SAACqD,GACjB,IAAMqZ,EAAYjN,EAAM5D,QAAO,SAAAX,GAAC,OAAI7H,EAAEsZ,QAAUzR,EAAEyR,UAE5C8C,EAAY/C,EAAU1c,KAAI,SAACkL,EAAG3F,GAAJ,OAAcA,EAAQ,KAChD+b,EAAqBT,EAAYhV,QAAO,SAAA0V,GAAC,OAAIA,EAAE5E,QAAUtZ,EAAEsZ,UAAQ3c,KAAI,SAAAkL,GAAO,MAAO,CAAEwU,iBAAkBxU,EAAEwU,iBAAkBC,YAAazU,EAAEyU,YAAaG,WAAY5U,EAAE4U,eACvK0B,EAAiB9E,EAAU1c,KAAI,SAAAkL,GAAC,OAAI,EAAKyK,UAAyB,IAAfzK,EAAE6F,eAC3D,OACI,yBAAKvL,IAAK,KAAOnC,EAAEsZ,QACf,kBAACH,GAAD,CAAgBhX,IAAK,KAAOnC,EAAEsZ,OAAQF,KAAMpZ,EAAGqZ,UAAWA,IAEtC,QAAnB,EAAKlQ,MAAMuU,KACR,oCACI,kBAAC/b,EAAA,EAAD,CAAQF,GAAI,MAAQzB,EAAEsZ,QAAtB,kBACA,kBAAC8E,GAAA,EAAD,CAAsBC,QAAS,OAASre,EAAEsZ,QACtC,kBAACrY,EAAA,EAAD,KACI,kBAACE,EAAA,EAAD,KACI,kBAAC+Z,GAAD,CAAuB/Y,IAAK,MAAQnC,EAAEsZ,OAAQ6B,OAAQnb,EAAEoZ,KAAMQ,OAAQwC,EAAWvC,OAAQoE,EAAoB5Q,UAAWuR,EAASvR,gBAMjJ,kBAAC6N,GAAD,CAAuB/Y,IAAK,MAAQnC,EAAEsZ,OAAQ7X,GAAI,MAAQzB,EAAEsZ,OAAQS,WAAW,EAAOoB,OAAQnb,EAAEoZ,KAAMQ,OAAQwC,EAAWvC,OAAQoE,EAAoB5Q,UAAWuR,EAASvR,YAE7K,6BACA,kBAAC7G,GAAA,EAAD,CAAOrE,IAAK,KAAOnC,EAAEsZ,OAAQ7S,OAAQzG,EAAE4d,YAAarc,UAAU,YAC1D,kBAACwF,GAAA,EAAD,+BACA,kBAACC,GAAA,EAAD,KACI,kBAAC2S,GAAD,CAAexX,IAAK,KAAOnC,EAAEsZ,OAAQ/gB,MAAOyH,EAAEoZ,KAAMQ,OAAQwC,EAAWvC,OAAQsE,EAAgBG,WAAYM,EAASvR,aAExH,kBAAClG,GAAA,EAAD,KACI,kBAACxF,EAAA,EAAD,CAAQC,MAAM,YAAYC,QAAS,kBAAM,EAAK6E,OAAO1G,KAArD,mBAzFpC,+BAuGQ,IAAI4F,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAMyV,SAAUrnB,KAAK4R,MAAMiD,MAAO7U,KAAK4R,MAAMoU,MAAOhmB,KAAK4R,MAAMqU,YAAajmB,KAAK4R,MAAMsU,cAEnH,OACI,yBAAKlc,UAAU,UACX,6BACI,wBAAIE,GAAG,aAAaF,UAAU,eAA9B,qBACCqE,MA/GrB,4EAqHuBkE,EAAMoD,EAAQ9Q,EAAgBshB,GArHrD,qGAsH+B5mB,MAAM,GAAD,OAAIuM,GAAJ,kCAAoCyG,EAApC,YAA4CoD,EAA5C,YAAsD9Q,IAtH1F,cAsHcnE,EAtHd,gBAuH2BA,EAASiC,OAvHpC,cAuHc0D,EAvHd,gBAyHmC9G,MAAM,GAAD,OAAIuM,GAAJ,0CAA4CyG,EAA5C,YAAoDoD,EAApD,YAA8D9Q,IAzHtG,cAyHcmiB,EAzHd,iBA0HmCA,EAAarkB,OA1HhD,eA0Hc4kB,EA1Hd,OA2HcvB,EAAQ,GACduB,EAAazS,SAAQ,SAAAxE,GACb0V,EAAMjG,OAAM,SAAAtX,GAAC,OAAIA,EAAEsZ,SAAWzR,EAAEyR,WAChCiE,EAAM5c,KAAK,CAAE2Y,OAAQzR,EAAEyR,OAAQF,KAAMvR,EAAEuR,KAAMwE,aAAa,OA9H1E,UAkI0C9mB,MAAM,GAAD,OAAIuM,GAAJ,8CAAgDyG,EAAhD,YAAwDoD,EAAxD,YAAkE9Q,IAlIjH,eAkIcqiB,EAlId,iBAmIsCA,EAAoBvkB,OAnI1D,QAmIcwkB,EAnId,OAoIcjB,EAAe,GACrBiB,EAAgBrS,SAAQ,SAAAxE,GAChB4V,EAAanG,OAAM,SAAA5X,GAAC,OAAIA,EAAE2c,mBAAqBxU,EAAEwU,qBACjDoB,EAAa9c,KAAK,CAAE0b,iBAAkBxU,EAAEwU,iBAAkBC,YAAazU,EAAEyU,iBAI7EwC,GAAgBJ,GAChBnnB,KAAKsR,SAAS,CAAE+V,SAAUhhB,EAAMwO,MAAO0S,EAAcvB,MAAOA,EAAOC,YAAakB,EAAiBjB,aAAcA,EAAcC,KAAMA,EAAMla,SAAS,IA5I9J,mHAA8B6M,aCPvB,SAAS0O,GAAT,GAAkD,IAAtB/Z,EAAqB,EAArBA,KAAMga,EAAe,EAAfA,YACvC,OACE,kBAACjd,GAAA,EAAD,CAAOC,YAAY,EAAMC,SAAS,GAChC,+BACE,4BAAI,wBAAIoM,QAAS,EAAG9M,UAAU,eAAgByD,KAEhD,+BACGga,GAAeA,EAAYriB,KAAI,SAACqhB,EAAG9b,GAClC,OAAO,wBAAIC,IAAKD,GACd,wBAAIX,UAAU,0BAA2BW,EAAM,EAA/C,MACA,wBAAIX,UAAU,UAAUyc,SCHpC,IACM3a,GAASpI,wDAEFgkB,GAAb,kDAGI,WAAYvgB,GAAQ,IAAD,8BACf,cAAMA,IACDyK,MAAQ,CAAE4B,SAAU,KAAMqB,MAAO,GAAImR,MAAO,GAAIC,YAAa,GAAIC,aAAc,GAAIja,SAAS,GAFlF,EAHvB,gEASQ,IAAMnG,EAAc9F,KAAKqX,QAAQvR,YACzBmG,EAAYjM,KAAK4R,MAAjB3F,QACRzE,SAASxG,MAAQyG,0EAEjB,IAAMjJ,EAASwB,KAAKmH,MAAMqN,MAAMhW,OAEhC,GAAIsH,QAA8BtK,GAAfsK,GAA4BmG,EAC3C,GAAmC,IAA/BxN,OAAOC,KAAKF,GAAQG,OAAc,CAAC,IAC3BoX,EAAgCvX,EAAhCuX,QAASC,EAAuBxX,EAAvBwX,QAAStG,EAAclR,EAAdkR,UAC1B1P,KAAKqV,aAAaU,EAASC,EAAStG,OACjC,CAAC,IACI6C,EAAsE/T,EAAtE+T,KAAME,EAAgEjU,EAAhEiU,QAASkD,EAAuDnX,EAAvDmX,OAAQnC,EAA+ChV,EAA/CgV,SAAU3O,EAAqCrG,EAArCqG,eAAgB0V,EAAqB/b,EAArB+b,iBACzDva,KAAK2nB,cAAcpV,EAAME,EAASkD,EAAQnC,EAAU3O,EAAgB0V,MArBpF,6BA0BWsH,GACH,IAAM9Q,EAAI/Q,KAAK4R,MAAMoU,MAAMtf,QAAQmb,GACnC7hB,KAAKsR,UAAS,gBAAG0U,EAAH,EAAGA,MAAH,MAAgB,CAC1BA,MAAM,GAAD,oBACEA,EAAMvc,MAAM,EAAGsH,IADjB,4BAGMiV,EAAMjV,IAHZ,IAIGsV,aAAcL,EAAMjV,GAAGsV,eAJ1B,aAMEL,EAAMvc,MAAMsH,EAAI,WAnCnC,gCAwCcyJ,GACN,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KAzCvI,kCA4CgBhH,EAAUnN,GAClB,IAAIuhB,EAAa,GACjBvhB,EAAKyO,SAAQ,SAAA2R,GACLA,EAAEmB,YAAcnB,EAAEmB,WAAWjpB,OAAS,GACtCipB,EAAWxe,KAAKqd,EAAEmB,eAI1B,IAAIC,EAAW,GACfxhB,EAAKyO,SAAQ,SAAA2R,GACLA,EAAEoB,UAAYpB,EAAEoB,SAASlpB,OAAS,GAClCkpB,EAASze,KAAKqd,EAAEoB,aAIxB,IAAIC,EAAU,GACdzhB,EAAKyO,SAAQ,SAAA2R,GACLA,EAAEqB,SAAWrB,EAAEqB,QAAQnpB,OAAS,GAChCmpB,EAAQ1e,KAAKqd,EAAEqB,YAGvB,IAAIC,EAAU,GAOd,OANA1hB,EAAKyO,SAAQ,SAAA2R,GACLA,EAAEsB,SAAWtB,EAAEsB,QAAQppB,OAAS,GAChCopB,EAAQ3e,KAAKqd,EAAEsB,YAKnB,oCACI,kBAACrG,GAAD,CAAelO,SAAUA,IACzB,6BACCoU,GAAcA,EAAWjpB,OAAS,GAAK,kBAAC6oB,GAAD,CAAkB/Z,KAAM,cAAega,YAAaG,IAC5F,6BACCC,GAAYA,EAASlpB,OAAS,GAAK,kBAAC6oB,GAAD,CAAkB/Z,KAAM,gBAAiBga,YAAaI,IAC1F,6BACCC,GAAWA,EAAQnpB,OAAS,GAAK,kBAAC6oB,GAAD,CAAkB/Z,KAAM,eAAgBga,YAAaK,IACvF,6BACCC,GAAWA,EAAQppB,OAAS,GAAK,kBAAC6oB,GAAD,CAAkB/Z,KAAM,eAAgBga,YAAaM,OAlFvG,+BAwFQ,IAAI1Z,EAAWrO,KAAK4R,MAAM3F,QACpB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAM4B,SAAUxT,KAAK4R,MAAM6V,aAEvD,OACI,oCACI,6BACI,wBAAIvd,GAAG,aAAaF,UAAU,eAA9B,4BACCqE,MAhGrB,6EAsGwBkE,EAAME,EAASkD,EAAQnC,EAAU3O,EAAgB0V,GAtGzE,6FAuG+Bhb,MAAM,GAAD,OAAIuM,GAAJ,kDAAoDyG,EAApD,YAA4DE,EAA5D,YAAuEkD,EAAvE,YAAiFnC,EAAjF,YAA6F3O,EAA7F,YAA+G0V,IAvGnJ,cAuGc7Z,EAvGd,gBAwG2BA,EAASiC,OAxGpC,cAwGc0D,EAxGd,gBA0GmC9G,MAAM,GAAD,OAAIuM,GAAJ,8DAAgEyG,EAAhE,YAAwEE,EAAxE,YAAmFkD,EAAnF,YAA6FnC,EAA7F,YAAyG3O,EAAzG,YAA2H0V,IA1GnK,cA0GcyM,EA1Gd,iBA2GsCA,EAAarkB,OA3GnD,QA2GcqlB,EA3Gd,OA6GQhoB,KAAKsR,SAAS,CAAEkC,SAAUnN,EAAMohB,YAAaO,EAAiB/b,SAAS,IA7G/E,8LAgHuB8J,EAASC,EAAStG,GAhHzC,6FAiH+BnQ,MAAM,GAAD,OAAIuM,GAAJ,kDAAoDiK,EAApD,YAA+DC,EAA/D,YAA0EtG,IAjH9G,cAiHchP,EAjHd,gBAkH2BA,EAASiC,OAlHpC,cAkHc0D,EAlHd,gBAoHmC9G,MAAM,GAAD,OAAIuM,GAAJ,8DAAgEiK,EAAhE,YAA2EC,EAA3E,YAAsFtG,IApH9H,cAoHcsX,EApHd,iBAqHsCA,EAAarkB,OArHnD,QAqHcqlB,EArHd,OAuHQhoB,KAAKsR,SAAS,CAAEkC,SAAUnN,EAAMohB,YAAaO,EAAiB/b,SAAS,IAvH/E,iHAAiC6M,aAApB4O,GACF3O,YAAc2O,GAAYrf,KAyHrCqf,GAAY1O,YAAcpS,EC7H1B,IACMkF,GAASpI,wDA8DAukB,OA5Df,YAAyC,IAAVzT,EAAS,EAATA,MAE3BhN,SAASxG,MAAQyG,uEAFmB,MAIJC,mBAAS,MAJL,mBAI7B2f,EAJ6B,KAInBa,EAJmB,OAKExgB,mBAAS,IALX,mBAK7B+f,EAL6B,KAKhBU,EALgB,OAMNzgB,oBAAS,GANH,mBAM7BuE,EAN6B,KAMpBC,EANoB,KAQ9BpG,EAAcsB,qBAAWR,GAAYd,YARP,4CAkBpC,WAA4ByM,EAAMoD,EAAQ9Q,GAA1C,qBAAA4D,EAAA,+EAE+BlJ,MAAM,GAAD,OAAIuM,GAAJ,kDAAoDyG,EAApD,YAA4DoD,EAA5D,YAAsE9Q,IAF1G,cAEcnE,EAFd,gBAG2BA,EAASiC,OAHpC,cAGc0D,EAHd,gBAKmC9G,MAAM,GAAD,OAAIuM,GAAJ,8DAAgEyG,EAAhE,YAAwEoD,EAAxE,YAAkF9Q,IAL1H,cAKcmiB,EALd,iBAMsCA,EAAarkB,OANnD,QAMcqlB,EANd,OAQQE,EAAY7hB,GACZ8hB,EAAeH,GACf9b,GAAW,GAVnB,kDAYQ7C,QAAQ5G,MAAM,uBAAd,MACAyJ,GAAW,GAbnB,2DAlBoC,sBAoDpC,OA1CAmB,qBAAU,WAAO,IAAD,EAC6BmH,EAAMhW,OAAvC+T,EADI,EACJA,KAAMoD,EADF,EACEA,OAAQ9Q,EADV,EACUA,eAElBiB,QAA8BtK,GAAfsK,GAba,wCAc5BuP,CAAa9C,EAAMoD,EAAQ9Q,KAEhC,CAAC2P,EAAMhW,SAqCN,6BACI,wBAAI0L,GAAG,aAAaF,UAAU,eAA9B,yBACCiC,EAAU,2BAAG,2CApBtB,SAAqBob,EAAUhhB,GAC3B,IAAIuhB,EAAa,GAOjB,OANAvhB,EAAKyO,SAAQ,SAAA2R,GACLA,EAAEmB,YAAcnB,EAAEmB,WAAWjpB,OAAS,GACtCipB,EAAWxe,KAAKqd,EAAEmB,eAKtB,oCACI,kBAACR,GAAD,CAAuBC,SAAUA,IACjC,6BACCO,GAAcA,EAAWjpB,OAAS,GAAK,kBAAC6oB,GAAD,CAAkB/Z,KAAM,cAAega,YAAaG,KAQxD7Q,CAAYsQ,EAAUI,K,6BC3DpE/nB,GAASC,IAAiBC,KAC1BkM,GAASpI,wDAyPAsD,OAvPc,WAAO,IAAD,EAEGU,mBAAS,IAFZ,mBAExB0gB,EAFwB,KAEbC,EAFa,OAGG3gB,mBAAS,IAHZ,mBAGxB4gB,EAHwB,KAGbC,EAHa,OAIK7gB,mBAAS,IAJd,mBAIxB8gB,EAJwB,KAIZC,EAJY,OAMG/gB,mBAAS,IANZ,mBAMxBghB,EANwB,KAMbC,EANa,OAOGjhB,mBAAS,IAPZ,mBAOxBkhB,EAPwB,KAObC,EAPa,OAQKnhB,mBAAS,IARd,mBAQxBohB,EARwB,KAQZC,EARY,KAUzBjjB,EAAcsB,qBAAWR,GAAYd,YAE3CuH,qBAAU,WACFvH,QAA+BtK,IAAhBsK,IACfpG,GAAO2B,cACP9B,MAAM,GAAD,OAAIuM,GAAJ,gDACAvK,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF3G,GAAO8B,QACPinB,EAAcpiB,GACVA,GAAQA,EAAK1H,OAAS,GACtB0pB,EAAahiB,EAAK,GAAGkM,SAG5B/P,OAAM,SAAAC,GAAK,OAAI4G,QAAQ5G,MAAM,gCAAiCA,MAEnElD,MAAM,GAAD,OAAIuM,GAAJ,gDACAvK,MAAK,SAAAb,GAAQ,OAAIA,EAASiC,UAC1BpB,MAAK,SAAA8E,GACF0iB,EAAc1iB,GACVA,GAAQA,EAAK1H,OAAS,GACtBgqB,EAAatiB,EAAK,GAAG2iB,kBAG5BxmB,OAAM,SAAAC,GAAK,OAAI4G,QAAQ5G,MAAM,gCAAiCA,SAGxE,CAACqD,IAEJ,IAgBMmjB,EAAmB,uCAAG,WAAO7pB,GAAP,eAAAqJ,EAAA,sDACxB,IACI/I,GAAOqB,KAAK,CACRC,MAAO,uBACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAIT6nB,EAAc,CAChB3W,KAAM6V,EACN3V,QAAS6V,GAGb/oB,MAAM,GAAD,OAAIuM,IAAJ,OAAa1M,GAAY,CAC1BwJ,OAAQ,OACRtH,QAAS,CACL,OAAU,mBACV,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAUogB,KAEpB3nB,MAAK,SAAAb,GACF,IAAMyoB,EAAqBzoB,EAASY,QAAQ9E,IAAI,uBAC5C4sB,EAAW,eACf,GAAID,EAAoB,CACpB,IACME,EADgB,yCACQC,KAAKH,GACpB,MAAXE,GAAmBA,EAAQ,KAC3BD,EAAWC,EAAQ,GAAG3tB,QAAQ,QAAS,KAG/CgF,EAAS6e,OAAOhe,MAAK,SAAAge,GACjB7f,GAAO8B,QACP,IAAIxF,EAAMC,OAAOK,IAAIkjB,gBAAgBD,GACjC9W,EAAIjB,SAASiY,cAAc,KAC/BhX,EAAEtM,KAAOH,EACTyM,EAAEiX,SAAW0J,EACb3gB,EAAEkX,cAGhB,MAAOld,GACL/C,GAAOqB,KAAK,QAAS,8BAA+B,SA3ChC,2CAAH,sDA+CnBwoB,EAAmB,uCAAG,WAAOnqB,GAAP,eAAAqJ,EAAA,sDACxB,IACI/I,GAAOqB,KAAK,CACRC,MAAO,uBACPE,mBAAmB,EACnByH,QAAS,WACLjJ,GAAO2B,iBAIT6nB,EAAc,CAChB3W,KAAMmW,EACNjW,QAASmW,GAGbrpB,MAAM,GAAD,OAAIuM,IAAJ,OAAa1M,GAAY,CAC1BwJ,OAAQ,OACRtH,QAAS,CACL,OAAU,mBACV,eAAgB,oBAEpBuH,KAAMnH,KAAKoH,UAAUogB,KAEpB3nB,MAAK,SAAAb,GACF,IAAMyoB,EAAqBzoB,EAASY,QAAQ9E,IAAI,uBAC5C4sB,EAAW,eACf,GAAID,EAAoB,CACpB,IACME,EADgB,yCACQC,KAAKH,GACpB,MAAXE,GAAmBA,EAAQ,KAC3BD,EAAWC,EAAQ,GAAG3tB,QAAQ,QAAS,KAG/CgF,EAAS6e,OAAOhe,MAAK,SAAAge,GACjB7f,GAAO8B,QACP,IAAIxF,EAAMC,OAAOK,IAAIkjB,gBAAgBD,GACjC9W,EAAIjB,SAASiY,cAAc,KAC/BhX,EAAEtM,KAAOH,EACTyM,EAAEiX,SAAW0J,EACb3gB,EAAEkX,cAGhB,MAAOld,GACL/C,GAAOqB,KAAK,QAAS,8BAA+B,SA3ChC,2CAAH,sDA+CzB,OACI,oCACI,wBAAImJ,GAAG,cAAP,yBACA,yBAAKL,MAAO,CAAEC,QAAS,OAAQ6B,cAAgB,SAAU2C,IAAK,SACzDxI,GAAeA,EAAYvC,SAAWuC,EAAYrC,QAC3CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,SAAVA,EAAE3D,SAC9BQ,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAI,CAAC,SAAU,YAAa,sBAAuB,wBAAwBtM,SAASsM,EAAE3D,OAAqB,UAAZ2D,EAAEzD,WAC7H,kBAACkE,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,cACA,kBAACC,EAAA,EAAD,KACI,kBAACgJ,GAAA,EAAD,CAAK4W,MAAI,GACL,kBAAC3W,GAAA,EAAD,CAAKC,GAAI,GACL,kBAAC2W,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAOC,IAAI,mBAAX,UACA,kBAACpb,GAAA,EAAD,CAAOlO,KAAK,SAASgI,KAAK,YAAY6B,GAAG,kBAAkBC,SA5HjE,SAAChC,GAC3BkgB,EAAalgB,EAAEC,OAAOpC,SA4HewiB,EAAWpjB,KAAI,SAAC+e,EAAGxZ,GAAJ,OACZ,4BAAQC,IAAKD,EAAO3E,MAAOme,EAAE5R,MAAO4R,EAAE5R,YAKtD,kBAACM,GAAA,EAAD,CAAKC,GAAI,GACL,kBAAC2W,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAOC,IAAI,mBAAX,cACA,kBAACpb,GAAA,EAAD,CAAOlO,KAAK,SAASgI,KAAK,YAAY6B,GAAG,kBAAkBC,SAlIjE,SAAChC,GAC3BogB,EAAapgB,EAAEC,OAAOpC,SAkIc,4BAAQA,MAAM,IAAd,6BACA,4BAAQA,MAAM,MAAd,MACA,4BAAQA,MAAM,MAAd,UAKhB,kBAAC4M,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAKjJ,MAAO,CAAEC,QAAS,OAAQwE,IAAK,SAChC,kBAAClE,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAAS,kBAAM2e,EAAoB,kDACvD,kBAAC,KAAD,MADJ,cAGA,kBAAC7e,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAAS,kBAAM2e,EAAoB,kDACvD,kBAAC,KAAD,MADJ,sBASvBnjB,GAAeA,EAAYvC,SAAWuC,EAAYrC,OAC3CqC,EAAYrC,MAAM4D,MAAK,SAAA4B,GAAC,MAAc,SAAVA,EAAE3D,SAClC,kBAACoE,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,cACA,kBAACC,EAAA,EAAD,KACI,kBAACgJ,GAAA,EAAD,CAAK4W,MAAI,GACL,kBAAC3W,GAAA,EAAD,CAAKC,GAAI,GACL,kBAAC2W,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAOC,IAAI,mBAAX,UACA,kBAACpb,GAAA,EAAD,CAAOlO,KAAK,SAASgI,KAAK,YAAY6B,GAAG,kBAAkBC,SA/JjE,SAAChC,GAC3BwgB,EAAaxgB,EAAEC,OAAOpC,SA+Je8iB,EAAW1jB,KAAI,SAAC+e,EAAGxZ,GAAJ,OACZ,4BAAQC,IAAKD,EAAO3E,MAAOme,EAAE6E,eAAgB7E,EAAE6E,qBAK/D,kBAACnW,GAAA,EAAD,CAAKC,GAAI,GACL,kBAAC2W,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAOC,IAAI,mBAAX,cACA,kBAACpb,GAAA,EAAD,CAAOlO,KAAK,SAASgI,KAAK,YAAY6B,GAAG,kBAAkBC,SArKjE,SAAChC,GAC3B0gB,EAAa1gB,EAAEC,OAAOpC,SAqKc,4BAAQA,MAAM,IAAd,6BACA,4BAAQA,MAAM,MAAd,MACA,4BAAQA,MAAM,MAAd,MACA,4BAAQA,MAAM,MAAd,UAKhB,kBAAC4M,GAAA,EAAD,KACI,kBAACC,GAAA,EAAD,CAAKC,GAAI,GACL,yBAAKjJ,MAAO,CAAEC,QAAS,OAAQwE,IAAK,SAChC,kBAAClE,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAAS,kBAAMif,EAAoB,kDACvD,kBAAC,KAAD,MADJ,cAGA,kBAACnf,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAAS,kBAAMif,EAAoB,6CACvD,kBAAC,KAAD,MADJ,SAGA,kBAACnf,EAAA,EAAD,CAAQC,MAAM,UAAUC,QAAS,kBAAMif,EAAoB,4CACvD,kBAAC,KAAD,MADJ,0BAcY,CAAC,QAAS,SAAU,YAAa,sBAAuB,yBC7P/FK,GAAb,kDAGE,WAAYziB,GAAQ,IAAD,8BACjB,cAAMA,IACDyK,MAAQ,CAAEkQ,UAAU,GAAImE,YAAa,GAAIC,aAAc,GAAIja,SAAS,GAFxD,EAHrB,gEASIzE,SAASxG,MAAQyG,2EACjB,IAAM8K,EAAOvS,KAAKmH,MAAMqN,MAAMhW,OAAjB,KACPiU,EAAUzS,KAAKmH,MAAMqN,MAAMhW,OAAjB,QACVmX,EAAS3V,KAAKmH,MAAMqN,MAAMhW,OAAjB,OACTgV,EAAWxT,KAAKmH,MAAMqN,MAAMhW,OAAjB,SACXqG,EAAiB7E,KAAKmH,MAAMqN,MAAMhW,OAAjB,eACjBujB,EAAS/hB,KAAKmH,MAAMqN,MAAMhW,OAAjB,KACfwB,KAAKqV,aAAa9C,EAAME,EAASkD,EAAQnC,EAAU3O,EAAgBkd,KAhBvE,gCAmBYvH,GACR,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,sBAAuB,IAAKC,sBAAuB,IAAKC,YAAa,UAAW/b,OAAO0b,KApBnI,iCAuBavZ,GAAkB,IAAZ+O,EAAW,uDAAJ,GACtB,GAAI/O,EAAKtC,QAAUqR,EACjB,OAAO/O,EACT,IAAMqlB,EAASrlB,EAAK0C,MAAM,KACpB4iB,EAAQ,GACVC,EAAM,GACV,IAAK,IAAIC,KAAKH,EACRE,EAAI7nB,OAAS2nB,EAAOG,GAAG9nB,QAAUqR,EACnCwW,GAAOF,EAAOG,GAAK,KAGnBF,EAAMnd,KAAKod,GACXA,EAAMF,EAAOG,GAAK,KAItB,OADAF,EAAMnd,KAAKod,GACJD,IAvCX,kCA0CczE,EAAWmE,EAAaC,GAElC,IAAMrB,EAAY/C,EAAU1c,KAAI,SAACkL,EAAG3F,GAAJ,OAAcA,EAAQ,KAChD+b,EAAqBT,EAAY7gB,KAAI,SAAAkL,GAAO,MAAO,CAAEwU,iBAAkBxU,EAAEwU,iBAAkBC,YAAazU,EAAEyU,YAAaG,WAAY5U,EAAE4U,eAG3I,OAFA7b,QAAQsT,IAAIkI,GACZxb,QAAQsT,IAAI+J,GAEV,yBAAK9b,IAAK,KAAOkX,EAAU,GAAG+H,UAAW7f,UAAU,YAAY4M,OAAQ,KACrE,kBAAC+M,GAAD,CAAuB/Y,IAAK,MAAQkX,EAAU,GAAG+H,UAAWrH,WAAW,EAAOoB,OAAQ9B,EAAU,GAAGD,KAAMQ,OAAQwC,EAAWvC,OAAQoE,EAAoB5Q,UAAW,OAlD3K,+BAwDIzM,QAAQsT,IAAI3c,KAAK4R,MAAMkQ,WACvBzY,QAAQsT,IAAI3c,KAAK4R,MAAMsU,cAEvB,IAAI7X,EAAWrO,KAAK4R,MAAM3F,QACtB,2BAAG,2CACHjM,KAAK+W,YAAY/W,KAAK4R,MAAMkQ,UAAW9hB,KAAK4R,MAAMqU,YAAajmB,KAAK4R,MAAMsU,cAE9E,OACE,yBAAKlc,UAAU,UACZqE,KAjET,4EAsEqBkE,EAAME,EAASkD,EAAQnC,EAAU3O,EAAgBkd,GAtEtE,6FAwEsCxiB,MAAM,GAAD,OA1E5BmE,wDA0E4B,mDAAqD6O,EAArD,YAA6DE,EAA7D,YAAwEkD,EAAxE,YAAkFnC,EAAlF,YAA8F3O,EAA9F,YAAgHkd,IAxE3J,cAwEUmF,EAxEV,gBAyEkCA,EAAoBvkB,OAzEtD,OAyEUwkB,EAzEV,OA0EI9d,QAAQsT,IAAIwK,GACNrF,EAAY,GACZoE,EAAe,GAEjBiB,IACFA,EAAgBrS,SAAQ,SAAAxE,GAClBwR,EAAU/B,OAAM,SAAA4G,GAAC,OAAIA,EAAEmD,gBAAkBxZ,EAAEwZ,kBAC7ChI,EAAU1Y,KAAK,CAAE0gB,cAAexZ,EAAEwZ,cAAe7H,SAAU3R,EAAE2R,WAG3DiE,EAAanG,OAAM,SAAA5X,GAAC,OAAIA,EAAE2c,mBAAqBxU,EAAEwU,qBACnDoB,EAAa9c,KAAK,CAAE0b,iBAAkBxU,EAAEwU,iBAAkBC,YAAazU,EAAEyU,iBAI7E/kB,KAAKsR,SAAS,CAAEwQ,UAAWA,EAAWmE,YAAakB,EAAiBjB,aAAcA,EAAcja,SAAS,KAzF/G,uHAAyC6M,aAA5B8Q,GACJ7Q,YAAc6Q,GAAoBvhB,K,gCC+BrClE,GAAU0V,cACV1W,GAAU,IAAIC,IAId2mB,GAAsB,CAAC,YAAa,cAAe,sBAAuB,qBAAsB,aAAc,QAAS,qBACvHC,GAAqB,CAAC,GAAI,KAE1BC,G,kDAGF,WAAY9iB,GAAQ,IAAD,8BACf,cAAMA,IA8DVc,mBAAqB,SAACiiB,GAClB,IAAMzlB,EAAe0lB,KAAIC,OAAOF,GAChCjmB,EAAYO,cAAc0lB,EAAoBzlB,GAAc,GAC5DtB,GAAQwD,IAAI,mBAAoBujB,EAAoB,CAChD9rB,KAAM,MAEV6F,EAAY4B,kBArEG,EAwEnBqT,qBAAuB,WACnB,IAAMmR,EAAgBlnB,GAAQ3G,IAAI,aAC5BiI,EAAe0lB,KAAIC,OAAOC,GAChCpmB,EAAYO,cAAc6lB,EAAe5lB,GACzCtB,GAAQmB,OAAO,mBAAoB,CAAElG,KAAM,MAC3C,EAAK+I,MAAMhD,QAAQiF,KAAK,KACxBnF,EAAY4B,kBA3EZ,EAAK+L,MAAQ,CACT9L,YAAa,MAJF,E,8DAQDrD,EAAO6nB,GACrBjhB,QAAQsT,IAAI,WAAala,EAAQ,gBAAkB6nB,K,0CAGlC,IAAD,OACRxkB,EAAgB9F,KAAK4R,MAArB9L,YACAlF,EAAauD,GAAQjI,SAArB0E,SAEF2pB,EAAYpnB,GAAQ3G,IAAI,aAE9B,GAAI+tB,EACA,IACI,IAAM9lB,EAAe0lB,KAAIC,OAAOG,GAChC,IAoGhB,SAAwBC,GACpB,IAAKA,IAAaA,EAASC,IACvB,OAAO,EAEX,IAAMC,EAAc1f,KAAK2f,MAAMjO,KAAKkO,MAAQ,KAC5C,OAAOJ,EAASC,IAAMC,EAzGNG,CAAepmB,GAGZ,CACH,IAAMqmB,EAAW3nB,GAAQ3G,IAAI,oBACvBuuB,EAAkBZ,KAAIC,OAAOU,GAWnC,OAVIA,EACA7mB,EAAYO,cAAcsmB,EAAUC,GAAiB,GAErD9mB,EAAYO,cAAc+lB,EAAW9lB,QAEzCzE,KAAKgrB,aAAe/mB,EAAY6B,YAAYmlB,WAAU,SAAAnlB,GAC9CA,GACA,EAAKwL,SAAS,CAAExL,YAAaA,QAZrC3C,GAAQmB,OAAO,YAAa,CAAElG,KAAM,MACpC+E,GAAQmB,OAAO,mBAAoB,CAAElG,KAAM,MAgBjD,MAAOqE,GACL4G,QAAQ5G,MAAM,wBAAyBA,GAI1CqD,QAA8BtK,GAAfsK,IACZikB,GAAoB3kB,KAAI,SAAA8lB,GAAE,OAAItqB,EAASuqB,WAAT,UArD9BznB,8BAqD8B,OAAiCwnB,OAAO7jB,MAAK,SAAA6jB,GAAE,OAAIA,MAAOlB,GAAmB5kB,KAAI,SAAA8lB,GAAE,OAAItqB,GAAQ,UArD7H8C,8BAqD6H,OAAiBwnB,MAAM7jB,MAAK,SAAA6jB,GAAE,OAAIA,MAAOlB,GAAmBrtB,SAASiE,GAClMqD,EAAYC,MAAMC,IAAS,GAE3BF,EAAYC,MAAMC,IAGtBnE,KAAKgrB,aAAe/mB,EAAY6B,YAAYmlB,WAAU,SAAAnlB,GAC9CA,GACA,EAAKwL,SAAS,CAAExL,YAAaA,U,6CAOzC9F,KAAKgrB,aAAaI,gB,+BAqBZ,IACEtlB,EAAgB9F,KAAK4R,MAArB9L,YAER,OACI,kBAACc,EAAW0M,SAAZ,CAAqBtN,MAAK,2BAAOhG,KAAK4R,OAAZ,IAAmB3J,mBAAoBjI,KAAKiI,mBAAoBiR,qBAAsBlZ,KAAKkZ,wBACjH,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAO9a,KAAK,uEAAuEitB,UAAWzB,KAC9F,kBAAC,GAAD,CAAY9jB,YAAaA,GACrB,kBAAC,IAAD,CAAOwlB,OAAK,EAACltB,KAAK,IAAIitB,UAAWnR,KACjC,kBAAC,IAAD,CAAO9b,KAAK,gBAAgBitB,UAAW3f,KACvC,kBAAC,IAAD,CAAOtN,KAAK,YAAYitB,UAAWE,KACnC,kBAAC,IAAD,CAAOntB,KAAK,eAAeitB,UAAWG,KAEtC,kBAAC,IAAD,CAAOptB,KAAK,8CAA8CitB,UAAWpK,KACrE,kBAAC,IAAD,CAAO7iB,KAAK,gDAAgDitB,UAAW/J,KAEvE,kBAAC,IAAD,CAAOljB,KAAK,+DAA+DitB,UAAWpX,KAEtF,kBAAC,IAAD,CAAO7V,KAAK,+BAA+BitB,UAAWlR,KACtD,kBAAC,IAAD,CAAO/b,KAAK,6DAA6DitB,UAAWhQ,KACpF,kBAAC,IAAD,CAAOjd,KAAK,wDAAwDitB,UAAW3P,KAC/E,kBAAC,IAAD,CAAOtd,KAAK,oFAAoFitB,UAAWjO,KAC3G,kBAAC,IAAD,CAAOhf,KAAK,4DAA4DitB,UAAWtK,KACnF,kBAAC,IAAD,CAAO3iB,KAAK,2CAA2CitB,UAAWjK,KAClE,kBAAC,IAAD,CAAOhjB,KAAK,oDAAoDitB,UAAW5J,KAC3E,kBAAC,IAAD,CAAOrjB,KAAK,oEAAoEitB,UAAWtF,KAC3F,kBAAC,IAAD,CAAO3nB,KAAK,iDAAiDitB,UAAW/D,KACxE,kBAAC,IAAD,CAAOlpB,KAAK,sDAAsDitB,UAAWpD,KAC7E,kBAAC,IAAD,CAAO7pB,KAAK,yBAAyBitB,UAAWI,KAChD,kBAAC,IAAD,KACI,kBAAC,IAAD,CAAOrtB,KAAK,4FAA4FitB,UAAW3D,KACnH,kBAAC,IAAD,CAAOtpB,KAAK,qDAAqDitB,UAAW3D,a,GAnHtF5O,aAAZmR,GACKlR,YAAckR,GAAI5hB,KAmIdqjB,mBAAWzB,ICxKpB0B,GAAcC,QACW,cAA7B3vB,OAAOC,SAAS2vB,UAEa,UAA7B5vB,OAAOC,SAAS2vB,UAEhB5vB,OAAOC,SAAS2vB,SAASrX,MACvB,2DA6BJ,SAASsX,GAAiBC,GACxBC,UAAUC,cACP7I,SAAS2I,GACTxqB,MAAK,SAAA2qB,GACJA,EAAaC,cAAgB,WAC3B,IAAMC,EAAmBF,EAAaG,WACtCD,EAAiBE,cAAgB,WACA,cAA3BF,EAAiBxa,QACfoa,UAAUC,cAAcM,WAK1BljB,QAAQsT,IAAI,6CAKZtT,QAAQsT,IAAI,4CAMrBna,OAAM,SAAAC,GACL4G,QAAQ5G,MAAM,4CAA6CA,M,OC/DjE+pB,SAEA,IAAM3uB,GAAU2J,SAASilB,qBAAqB,QAAQ,GAAGC,aAAa,QAChEC,GAAcnlB,SAASolB,eAAe,QAE5CC,IAASC,OACP,kBAAC,IAAD,CAAeC,SAAUlvB,IACvB,kBAAC,GAAD,OAEF8uB,IDIa,WACb,GAA6C,kBAAmBX,UAAW,CAGzE,GADkB,IAAI1vB,IAAIoH,6BAAwBzH,OAAOC,UAC3CqC,SAAWtC,OAAOC,SAASqC,OAIvC,OAGFtC,OAAO+wB,iBAAiB,QAAQ,WAC9B,IAAMjB,EAAK,UAAMroB,6BAAN,sBAEPioB,GAwCV,SAAkCI,GAEhCxsB,MAAMwsB,GACHxqB,MAAK,SAAAb,GAGkB,MAApBA,EAASxC,SACuD,IAAhEwC,EAASY,QAAQ9E,IAAI,gBAAgBkK,QAAQ,cAG7CslB,UAAUC,cAAcgB,MAAM1rB,MAAK,SAAA2qB,GACjCA,EAAagB,aAAa3rB,MAAK,WAC7BtF,OAAOC,SAASixB,eAKpBrB,GAAgBC,MAGnBvpB,OAAM,WACL6G,QAAQsT,IACN,oEA5DAyQ,CAAwBrB,GAGxBD,GAAgBC,OCrBxBsB,K","file":"static/js/main.04ecf1b4.chunk.js","sourcesContent":["const isEmpty = (obj) => {\r\n return (\r\n obj === undefined ||\r\n obj === null ||\r\n obj.toString().replace(/\\s/g, '') === ''\r\n );\r\n};\r\n\r\nconst throwError = (err) => {\r\n throw new Error('[CasClient]: ' + err);\r\n};\r\n\r\nconst getCurrentUrl = (withoutTicket = true) => {\r\n let url = window.location.href;\r\n if (withoutTicket) {\r\n return url.replace(/(^|[&?])ticket(=[^&]*)?/, '');\r\n }\r\n return url;\r\n};\r\n\r\nconst getParamFromCurrentUrl = (param) => {\r\n return new URL(window.location.href).searchParams.get(param);\r\n};\r\n\r\nconst getFullProtocol = (protocol) => {\r\n return ['http', 'http:'].includes(protocol) ? 'http://' : 'https://';\r\n};\r\n\r\nconst isParamExistsInUrl = (url, param) => {\r\n const value = new URL(url).searchParams.get(param);\r\n return value !== null;\r\n};\r\n\r\nexport {\r\n isEmpty,\r\n throwError,\r\n getCurrentUrl,\r\n getParamFromCurrentUrl,\r\n getFullProtocol,\r\n isParamExistsInUrl,\r\n};\r\n","const CAS_VERSION_2_0 = '2.0';\r\nconst CAS_VERSION_3_0 = '3.0';\r\n\r\nconst CAS_VERSIONS = [CAS_VERSION_2_0, CAS_VERSION_3_0];\r\n\r\nconst CAS_STATUS_IN_PROCESS = 'in_process';\r\n\r\nexport {\r\n CAS_VERSION_2_0,\r\n CAS_VERSION_3_0,\r\n CAS_VERSIONS,\r\n CAS_STATUS_IN_PROCESS,\r\n};\r\n\r\n/**\r\n * Errors\r\n */\r\nconst CAS_ERROR_FETCH = 'FETCH_ERROR';\r\nconst CAS_ERROR_PARSE_RESPONSE = 'PARSE_RESPONSE_ERROR';\r\nconst CAS_ERROR_AUTH_ERROR = 'AUTH_ERROR';\r\n\r\nexport { CAS_ERROR_FETCH, CAS_ERROR_PARSE_RESPONSE, CAS_ERROR_AUTH_ERROR };\r\n","module.exports = __webpack_public_path__ + \"static/media/logo-2.fc3ceb2c.svg\";","const buildUrl = require('build-url');\r\n\r\nconst constant = require('./constant');\r\nconst util = require('./util');\r\n\r\nconst getLoginUrl = (cas, gateway = false) => {\r\n let baseUrl = _getCasBaseUrl(cas);\r\n\r\n let queryParams = !util.isParamExistsInUrl(cas.redirectUrl, 'status')\r\n ? {\r\n service: buildUrl(cas.redirectUrl, {\r\n queryParams: { status: constant.CAS_STATUS_IN_PROCESS },\r\n }),\r\n }\r\n : {\r\n service: buildUrl(cas.redirectUrl),\r\n };\r\n\r\n if (gateway) {\r\n queryParams.gateway = true;\r\n }\r\n switch (cas.version) {\r\n case constant.CAS_VERSION_2_0:\r\n case constant.CAS_VERSION_3_0:\r\n return buildUrl(baseUrl, {\r\n path: 'login',\r\n queryParams: queryParams,\r\n });\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n};\r\n\r\nconst getLogoutUrl = (cas, redirectPath = '') => {\r\n let baseUrl = _getCasBaseUrl(cas);\r\n let redirectUrl = buildUrl(window.location.origin, {\r\n path: redirectPath,\r\n });\r\n let queryParams = {};\r\n\r\n switch (cas.version) {\r\n case constant.CAS_VERSION_2_0:\r\n if (!util.isEmpty(redirectPath)) {\r\n queryParams = {\r\n url: redirectUrl,\r\n };\r\n }\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n if (!util.isEmpty(redirectPath)) {\r\n queryParams = {\r\n service: redirectUrl,\r\n };\r\n }\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n let params = { path: 'logout' };\r\n if (Object.keys(queryParams).length !== 0) {\r\n params.queryParams = queryParams;\r\n }\r\n\r\n return buildUrl(baseUrl, params);\r\n};\r\n\r\nconst getValidateUrl = (cas, ticket) => {\r\n let baseUrl = _getCasBaseUrl(cas, true);\r\n let queryParams = {\r\n service: cas.redirectUrl,\r\n ticket: ticket,\r\n };\r\n\r\n let path = '';\r\n switch (cas.version) {\r\n case constant.CAS_VERSION_2_0:\r\n path = 'serviceValidate';\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n path = 'p3/serviceValidate';\r\n queryParams.format = 'json';\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n if (!util.isEmpty(cas.proxy_callback_url)) {\r\n queryParams.pgtUrl = cas.proxy_callback_url;\r\n }\r\n\r\n return buildUrl(baseUrl, {\r\n path: path,\r\n queryParams: queryParams,\r\n });\r\n};\r\n\r\nconst _getCasBaseUrl = (cas, withProxyIfExists = false) => {\r\n if (withProxyIfExists && cas.validation_proxy) {\r\n const protocol = !util.isEmpty(cas.validation_proxy_protocol)\r\n ? util.getFullProtocol(cas.validation_proxy_protocol)\r\n : util.getFullProtocol(window.location.protocol);\r\n window.location.origin.replace(/(^\\w+:|^)\\/\\//, '');\r\n const endpoint = !util.isEmpty(cas.validation_proxy_endpoint)\r\n ? cas.validation_proxy_endpoint\r\n : window.location.origin.replace(/(^\\w+:|^)\\/\\//, '');\r\n return protocol + endpoint + cas.validation_proxy_path;\r\n } else {\r\n return util.getFullProtocol(cas.protocol) + cas.endpoint + cas.path;\r\n }\r\n};\r\n\r\nexport { getLoginUrl, getLogoutUrl, getValidateUrl };\r\n","import Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nconst fetch = require('node-fetch');\r\nconst xml2js = require('xml2js');\r\nconst util = require('./util');\r\nconst urls = require('./url');\r\nconst constant = require('./constant');\r\n\r\nconst MySwal = withReactContent(Swal);\r\n\r\nconst defaultOptions = {\r\n protocol: 'https',\r\n path: '/cas',\r\n version: constant.CAS_VERSION_3_0,\r\n proxy_callback_url: '',\r\n validation_proxy: false,\r\n validation_proxy_protocol: '',\r\n validation_proxy_endpoint: '',\r\n validation_proxy_path: '',\r\n};\r\n\r\nclass CasClient {\r\n constructor(endpoint, options = {}) {\r\n if (util.isEmpty(endpoint)) {\r\n util.throwError('Missing endpoint');\r\n }\r\n let version = options.version || defaultOptions.version;\r\n if (!constant.CAS_VERSIONS.includes(version)) {\r\n util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n this.endpoint = endpoint;\r\n this.path = options.path || defaultOptions.path;\r\n this.protocol = options.protocol || defaultOptions.protocol;\r\n this.version = options.version || defaultOptions.version;\r\n this.proxy_callback_url =\r\n options.proxy_callback_url || defaultOptions.proxy_callback_url;\r\n this.validation_proxy =\r\n options.validation_proxy || defaultOptions.validation_proxy;\r\n this.validation_proxy_protocol =\r\n options.validation_proxy_protocol ||\r\n defaultOptions.validation_proxy_protocol;\r\n this.validation_proxy_endpoint =\r\n options.validation_proxy_endpoint ||\r\n defaultOptions.validation_proxy_endpoint;\r\n this.validation_proxy_path =\r\n options.validation_proxy_path || defaultOptions.validation_proxy_path;\r\n\r\n this.redirectUrl = util.getCurrentUrl();\r\n }\r\n\r\n auth(gateway = false) {\r\n return new Promise((resolve, reject) => {\r\n /**\r\n * Save ticket to sessionStorage if exists\r\n */\r\n const ticket = util.getParamFromCurrentUrl('ticket');\r\n if (util.isEmpty(ticket)) {\r\n let status = util.getParamFromCurrentUrl('status');\r\n if (status === constant.CAS_STATUS_IN_PROCESS) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_AUTH_ERROR,\r\n message: 'Missing ticket from return url',\r\n });\r\n } else {\r\n window.location.href = urls.getLoginUrl(this, gateway);\r\n }\r\n } else {\r\n this._validateTicket(ticket, resolve, reject);\r\n }\r\n });\r\n }\r\n\r\n logout(redirectPath = '') {\r\n window.location.href = urls.getLogoutUrl(this, redirectPath);\r\n }\r\n\r\n _getSuccessResponse(user, pgtIou = null) {\r\n let response = {\r\n currentUrl: window.location.origin + window.location.pathname,\r\n currentPath: window.location.pathname,\r\n user: user,\r\n };\r\n if (pgtIou) {\r\n response.pgtIou = pgtIou;\r\n }\r\n return response;\r\n }\r\n\r\n _validateTicket(ticket, resolve, reject) {\r\n let version = this.version;\r\n let content_type;\r\n switch (version) {\r\n case constant.CAS_VERSION_2_0:\r\n content_type = 'text/xml';\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n content_type = 'application/json';\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n MySwal.fire({\r\n title: 'Ingresando',\r\n text: 'Por favor, espere...',\r\n allowOutsideClick: false,\r\n showConfirmButton: false,\r\n willOpen: () => {\r\n MySwal.showLoading()\r\n }\r\n });\r\n\r\n fetch(urls.getValidateUrl(this, ticket), {\r\n headers: {\r\n 'Content-Type': content_type,\r\n },\r\n })\r\n .then(\r\n function (response) {\r\n response\r\n .text()\r\n .then(\r\n function (text) {\r\n MySwal.close();\r\n switch (version) {\r\n case constant.CAS_VERSION_2_0:\r\n let jsonResponse = JSON.parse(text);\r\n xml2js\r\n .parseStringPromise(jsonResponse.xmlContent)\r\n .then(\r\n function (result) {\r\n let response = result['cas:serviceResponse'];\r\n if (response['cas:authenticationSuccess']) {\r\n let successes =\r\n response['cas:authenticationSuccess'];\r\n if (successes.length) {\r\n jsonResponse.user.token = jsonResponse.token;\r\n let user = jsonResponse.user;\r\n\r\n let pgtIou = null;\r\n if (!util.isEmpty(this.proxy_callback_url)) {\r\n pgtIou =\r\n successes[0]['cas:proxyGrantingTicket'][0];\r\n }\r\n this._handleSuccessValdiate(\r\n resolve,\r\n user,\r\n pgtIou\r\n );\r\n\r\n this._handleSuccessValdiate(resolve, user);\r\n }\r\n } else {\r\n let failures =\r\n response['cas:authenticationFailure'];\r\n if (failures.length) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_AUTH_ERROR,\r\n code: failures[0].$.code.trim(),\r\n message: failures[0]._.trim(),\r\n });\r\n }\r\n }\r\n }.bind(this)\r\n )\r\n .catch(\r\n function (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_PARSE_RESPONSE,\r\n message: 'Failed to parse response',\r\n exception: error,\r\n });\r\n }.bind(this)\r\n );\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n try {\r\n let json = JSON.parse(text);\r\n if (json.serviceResponse) {\r\n if (json.serviceResponse.authenticationSuccess) {\r\n let user =\r\n json.serviceResponse.authenticationSuccess.user;\r\n let pgtIou = null;\r\n if (!util.isEmpty(this.proxy_callback_url)) {\r\n pgtIou =\r\n json.serviceResponse.authenticationSuccess\r\n .proxyGrantingTicket;\r\n }\r\n this._handleSuccessValdiate(resolve, user, pgtIou);\r\n } else {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_AUTH_ERROR,\r\n code: json.serviceResponse.authenticationFailure\r\n .code,\r\n message:\r\n json.serviceResponse.authenticationFailure\r\n .description,\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_PARSE_RESPONSE,\r\n message: 'Failed to parse response',\r\n exception: error,\r\n });\r\n }\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n throw util.throwError('Stop...');\r\n }.bind(this)\r\n )\r\n .catch(\r\n function (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_PARSE_RESPONSE,\r\n message: 'Failed to parse response',\r\n exception: error,\r\n });\r\n }.bind(this)\r\n );\r\n }.bind(this)\r\n )\r\n .catch(\r\n function (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_FETCH,\r\n message: 'Failed to connect CAS server',\r\n exception: error,\r\n });\r\n }.bind(this)\r\n );\r\n }\r\n\r\n _handleSuccessValdiate(callback, user, pgtIou = null) {\r\n callback(this._getSuccessResponse(user, pgtIou));\r\n }\r\n\r\n _handleFailsValdiate(callback, error) {\r\n error.currentUrl = window.location.origin + window.location.pathname;\r\n error.currentPath = window.location.pathname;\r\n callback(error);\r\n }\r\n}\r\n\r\nexport default CasClient;\r\nexport { constant };\r\n","import { BehaviorSubject } from 'rxjs';\r\nimport CasClient, { constant } from \"./index.js\";\r\nimport Cookies from 'universal-cookie';\r\n\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst cookies = new Cookies();\r\n\r\nconst currentUser = {\r\n usuario: \"\",\r\n numeroidentificacion: \"\",\r\n roles: []\r\n};\r\n\r\nconst currentUserSubject = new BehaviorSubject(currentUser);\r\nconst [CAS_PROTOCOL, CAS_SERVER] = (process.env.REACT_APP_CAS_URL).split(\"://\");\r\nconst [PROXY_PROTOCOL, PROXY_SERVER] = APIURL.split(\"://\");\r\n\r\nconst casOptions = {\r\n version: constant.CAS_VERSION_2_0, path: '/', protocol: CAS_PROTOCOL, validation_proxy: true, validation_proxy_protocol: PROXY_PROTOCOL,\r\n validation_proxy_endpoint: PROXY_SERVER, validation_proxy_path: \"/api/Account/\"\r\n}\r\n\r\nconst casClient = new CasClient(CAS_SERVER, casOptions);\r\n\r\nexport const authService = {\r\n login,\r\n logout,\r\n validateToken,\r\n setGlobalFetch,\r\n currentUser: currentUserSubject.asObservable(),\r\n get currentUserValue() { return currentUserSubject.value },\r\n};\r\n\r\nfunction login(history, gateway = false) {\r\n casLogin(history, gateway);\r\n}\r\n\r\nfunction logout() {\r\n signout();\r\n casLogout();\r\n}\r\n\r\nfunction casLogin(history, gateway = false) {\r\n //console.log(\"AdminLayout casLogin gateway = \" + (gateway ? \"true\" : \"false\"));\r\n casClient\r\n .auth(gateway)\r\n .then(successRes => {\r\n //console.log(\"App successRes = \" + JSON.stringify(successRes));\r\n history.replace(successRes.currentPath);\r\n signin(successRes.user)\r\n })\r\n .catch(errorRes => {\r\n //console.log(\"App errorRes = \" + JSON.stringify(errorRes));\r\n history.replace(errorRes.currentPath);\r\n });\r\n}\r\n\r\nfunction casLogout() {\r\n casClient.logout();\r\n}\r\n\r\nfunction signin(data) {\r\n\r\n if (data) {\r\n let signinUser = {\r\n usuario: data.netId,\r\n numeroidentificacion: data.numeroidentificacion,\r\n tipoidentificacion: data.tipoidentificacion,\r\n apellidos: data.apellidos,\r\n nombres: data.nombres,\r\n roles: data.roles,\r\n token: data.token,\r\n isImpersonated: false\r\n };\r\n\r\n let realFetch = window.fetch;\r\n window.fetch = function (url, opts = null) {\r\n if (opts == null) opts = {};\r\n let headers = opts != null && opts.headers != undefined ? opts.headers : {};\r\n\r\n if (signinUser.token) {\r\n headers = Object.assign({}, headers, { 'Authorization': `Bearer ${signinUser.token}` });\r\n\r\n if (url.indexOf('FileUpload') < 0 && headers['Content-Type'] == undefined) {\r\n headers = Object.assign({}, headers, { 'Content-Type': 'application/json' });\r\n }\r\n opts.headers = headers;\r\n return realFetch(url, opts);\r\n\r\n } else {\r\n return realFetch(url, opts);\r\n }\r\n };\r\n\r\n cookies.set('authToken', signinUser.token, {\r\n path: '/'\r\n });\r\n cookies.remove('impersonateToken', { path: '/' });\r\n currentUserSubject.next(signinUser);\r\n }\r\n\r\n}\r\n\r\nfunction validateToken(token, decodedToken, isImpersonating = false) {\r\n let signinUser = {\r\n usuario: decodedToken.username,\r\n numeroidentificacion: decodedToken.identificacion,\r\n tipoidentificacion: decodedToken.tipoidentificacion,\r\n apellidos: decodedToken.apellidos,\r\n nombres: decodedToken.nombres,\r\n roles: decodedToken.rolesObj\r\n ? Array.isArray(decodedToken.rolesObj)\r\n ? decodedToken.rolesObj.map(roleObj => {\r\n const role = JSON.parse(roleObj);\r\n return {\r\n role: role.Role,\r\n scope: role.Scope,\r\n scopeName: role.ScopeName\r\n };\r\n })\r\n : [JSON.parse(decodedToken.rolesObj)].map(roleObj => {\r\n return {\r\n role: roleObj.Role,\r\n scope: roleObj.Scope,\r\n scopeName: roleObj.ScopeName\r\n };\r\n })\r\n : [],\r\n token: token,\r\n isImpersonated: isImpersonating\r\n };\r\n currentUserSubject.next(signinUser);\r\n\r\n setGlobalFetch();\r\n}\r\n\r\nfunction signout() {\r\n cookies.remove('authToken', { path: '/' });\r\n cookies.remove('impersonateToken', { path: '/' });\r\n currentUserSubject.next(null);\r\n}\r\n\r\nfunction setGlobalFetch() {\r\n let realFetch = window.fetch;\r\n window.fetch = function (url, opts = null) {\r\n if (opts == null) opts = {};\r\n let headers = opts != null && opts.headers != undefined ? opts.headers : {};\r\n\r\n const token = cookies.get('impersonateToken') || cookies.get('authToken');\r\n\r\n if (token) {\r\n headers = Object.assign({}, headers, { 'Authorization': `Bearer ${token}` });\r\n\r\n if (url.indexOf('FileUpload') < 0 && headers['Content-Type'] == undefined) {\r\n headers = Object.assign({}, headers, { 'Content-Type': 'application/json' });\r\n }\r\n opts.headers = headers;\r\n return realFetch(url, opts);\r\n } else {\r\n return realFetch(url, opts);\r\n }\r\n };\r\n}","import React from 'react';\r\n\r\nexport const AppContext = React.createContext({\r\n currentUser: null,\r\n updateUser: () => { },\r\n});\r\n","import React, { useContext } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { AppContext } from '../AppContext';\r\n\r\nconst withRoleAccess = (WrappedComponent, allowedRoles) => {\r\n\r\n return props => {\r\n\r\n const { currentUser } = useContext(AppContext);\r\n\r\n if (currentUser && currentUser.roles) {\r\n const hasAccess = currentUser.roles.some(role => allowedRoles.includes(role.role));\r\n if (!hasAccess) {\r\n return ;\r\n }\r\n }\r\n\r\n return ;\r\n };\r\n};\r\n\r\nexport default withRoleAccess;","import React, { useState, useContext } from 'react';\r\nimport { Button, FormGroup, Label, Input, Card, CardHeader, CardBody, Table, Pagination, PaginationItem, PaginationLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from '../AppContext';\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { useHistory } from 'react-router-dom';\r\nimport withRoleAccess from './withRoleAccess';\r\n\r\nconst TITLE = 'Reportes de Retroalimentación Estudiantil';\r\nconst MySwal = withReactContent(Swal);\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst ImpersonateUser = () => {\r\n\r\n const history = useHistory();\r\n document.title = TITLE + \" - Impersonar usuario\";\r\n\r\n const [searchCriteria, setSearchCriteria] = useState({\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n const [searchResults, setSearchResults] = useState([]);\r\n\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const usersPerPage = 10;\r\n\r\n const { startImpersonation } = useContext(AppContext);\r\n const { currentUser } = useContext(AppContext);\r\n\r\n const handleSearchCriteriaChange = (e) => {\r\n const { name, value } = e.target;\r\n setSearchCriteria(prevState => ({\r\n ...prevState,\r\n [name]: value\r\n }));\r\n };\r\n\r\n const handleSearch = () => {\r\n const payload = {\r\n nombres: searchCriteria.nombres,\r\n apellidos: searchCriteria.apellidos,\r\n numeroidentificacion: searchCriteria.numeroidentificacion,\r\n username: searchCriteria.username\r\n };\r\n\r\n MySwal.fire({\r\n title: 'Buscando usuarios...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${APIURL}/api/Account/impersonate-users`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setSearchResults(data);\r\n setCurrentPage(0);\r\n MySwal.close();\r\n })\r\n .catch((error) => {\r\n console.error('Error al conseguir usuarios potenciales para impersonar:', error);\r\n });\r\n };\r\n\r\n const impersonate = async (emailAddress) => {\r\n\r\n const targetUsername = emailAddress.split('@')[0];\r\n try {\r\n MySwal.fire({\r\n title: 'Procesando petición...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n const response = await fetch(`${APIURL}/api/Account/impersonate`, {\r\n method: 'POST',\r\n body: JSON.stringify({ TargetUserId: targetUsername })\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Hubo un error en la red o en la petición.');\r\n }\r\n\r\n const r = await response.json();\r\n MySwal.fire({\r\n title: 'Éxito',\r\n text: 'Se registró su acción de actuar como un usuario',\r\n icon: 'success',\r\n allowOutsideClick: false\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n startImpersonation(r.token);\r\n history.push('/');\r\n }\r\n });\r\n\r\n } catch (error) {\r\n MySwal.fire('Error', 'Hubo un error en el proceso de impersonar a un usuario.', 'error');\r\n console.error('Error al actuar como un usuario:', error);\r\n }\r\n };\r\n\r\n const indexOfLastUser = (currentPage + 1) * usersPerPage;\r\n const indexOfFirstUser = indexOfLastUser - usersPerPage;\r\n const paginatedUsers = searchResults.slice(indexOfFirstUser, indexOfLastUser);\r\n\r\n const handlePageClick = (data) => {\r\n const selectedPage = data.selected;\r\n setCurrentPage(selectedPage);\r\n };\r\n\r\n return (\r\n \r\n Ver como un usuario\r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paginatedUsers.map((user, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
NombresApellidosCorreoIdentificación{' '}
{user.nombres}{user.apellidos}{user.emailAddress}{user.numeroidentificacion}\r\n {currentUser && !currentUser.isImpersonated && \r\n impersonate(user.emailAddress)}\r\n >\r\n Ver como\r\n \r\n }\r\n
\r\n {searchResults.length > 10 && (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRoleAccess(ImpersonateUser, ['ADMIN']);\r\n","import React from 'react';\r\n\r\nconst UnauthorizedAccess = () => (\r\n
\r\n

Acceso denegado

\r\n

El acceso al recurso especificado ha sido prohibido. Contacte al administrador si se trata de un error.

\r\n
\r\n);\r\n\r\nexport default UnauthorizedAccess;\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport {\r\n Table, Button, Modal, ModalBody, ModalHeader, ModalFooter, Input,\r\n Pagination, PaginationItem, PaginationLink} from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from '../AppContext';\r\nimport withRoleAccess from '../components/withRoleAccess';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport ReactPaginate from 'react-paginate';\r\n\r\nimport './UserManagement.css';\r\n\r\nconst TITLE = 'Reportes de Retroalimentación Estudiantil';\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst UserManagement = () => {\r\n\r\n document.title = TITLE + \" - Administrar usuarios\";\r\n\r\n const [users, setUsers] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [modalIsOpen, setModalIsOpen] = useState(false);\r\n const [searchCriteria, setSearchCriteria] = useState({\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n idRole: 0,\r\n idUnidad: 0,\r\n idPrograma: 0, \r\n });\r\n const [searchResults, setSearchResults] = useState([]);\r\n const [roles, setRoles] = useState([]);\r\n const [rolesLoading, setRolesLoading] = useState(true);\r\n\r\n const [refreshTable, setRefreshTable] = useState(false);\r\n const [roleNameSelected, setRoleNameSelected] = useState('');\r\n const [unidadOptions, setUnidadOptions] = useState([]);\r\n const [programasOptions, setProgramasOptions] = useState([]);\r\n const [isCreateButtonDisabled, setIsCreateButtonDisabled] = useState(true);\r\n\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const usersPerPage = 10;\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined && currentUser.usuario !== \"\") {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/Account/get-roles`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setRoles(data);\r\n setRolesLoading(false);\r\n if (searchCriteria.idRole === 0 && data.length > 0) {\r\n const adminRole = data.find(item => item.tipo === 1);\r\n if (adminRole !== undefined) {\r\n setSearchCriteria({ ...searchCriteria, idRole: adminRole.idhedrole, idUnidad: 0, idPrograma: 0 });\r\n setRoleNameSelected(adminRole.rolename);\r\n } else {\r\n setSearchCriteria({ ...searchCriteria, idRole: data[0].idhedrole, idUnidad: 0, idPrograma: 0 });\r\n setRoleNameSelected(data[0].rolename);\r\n }\r\n }\r\n MySwal.close();\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching roles:', error);\r\n });\r\n setIsCreateButtonDisabled(isCreateUserButtonDisabled());\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined && currentUser.usuario !== \"\" && searchCriteria.idRole !== 0) {\r\n setIsCreateButtonDisabled(isCreateUserButtonDisabled())\r\n fetchUsers();\r\n }\r\n }, [searchCriteria.idRole, searchCriteria.idUnidad, searchCriteria.idPrograma, refreshTable]);\r\n\r\n const fetchUsers = () => {\r\n let url = `${APIURL}/api/Account/active-users?idRole=${searchCriteria.idRole}`;\r\n\r\n if (roleNameSelected == \"Asistente POSTGRADO\" && searchCriteria.idPrograma != 0) {\r\n url += `&idPrograma=${searchCriteria.idPrograma}`;\r\n }\r\n\r\n if (roleNameSelected == \"Asistente GRADO\" && searchCriteria.idPrograma != 0) {\r\n url += `&idPrograma=${searchCriteria.idPrograma}`;\r\n }\r\n\r\n fetch(url)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setUsers(data);\r\n setLoading(false);\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching users:', error);\r\n });\r\n };\r\n\r\n \r\n const handleDeleteRole = (idheduser) => {\r\n\r\n const payload = {\r\n idHedUser: idheduser,\r\n idRole: searchCriteria.idRole,\r\n idPrograma: searchCriteria.idPrograma\r\n };\r\n\r\n MySwal.fire({\r\n title: 'Eliminando usuario...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${APIURL}/api/Account/delete-user-role`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => {\r\n MySwal.close();\r\n if (response.status === 200) {\r\n setModalIsOpen(false);\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n setRefreshTable(!refreshTable);\r\n } else {\r\n console.error('Error al eliminar el rol al usuario.');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error al eliminar el rol al usuario:', error);\r\n });\r\n };\r\n\r\n const isCreateUserButtonDisabled = () => {\r\n if (roleNameSelected === \"Administrador\") {\r\n return false;\r\n } else if (roleNameSelected === \"Asistente GRADO\" && searchCriteria.idUnidad === 0) {\r\n return true;\r\n } else if (roleNameSelected === \"Asistente POSTGRADO\" && (searchCriteria.idUnidad === 0 || searchCriteria.idPrograma === 0)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const renderAdditionalInput = () => {\r\n return (\r\n <>\r\n {roleNameSelected === 'Asistente POSTGRADO' || roleNameSelected === 'Asistente GRADO' ? (\r\n
\r\n \r\n {unidadOptions.map((unidad) => (\r\n \r\n ))}\r\n \r\n {(roleNameSelected === 'Asistente POSTGRADO' || roleNameSelected === 'Asistente GRADO') && (\r\n \r\n {programasOptions.map((programa) => (\r\n \r\n ))}\r\n \r\n )}\r\n
\r\n ) : null}\r\n \r\n );\r\n };\r\n\r\n\r\n const renderTable = () => {\r\n return (\r\n
\r\n
\r\n \r\n {rolesLoading ? (\r\n \r\n ) : (\r\n roles.map((role) => (\r\n \r\n ))\r\n )}\r\n \r\n {renderAdditionalInput()}\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {users.map((user, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n Nombres\r\n \r\n Usuario\r\n \r\n Correo\r\n \r\n {' '}\r\n
\r\n {user.nombres + ' ' + user.apellidos}\r\n {user.username}{user.email}\r\n
\r\n \r\n handleDeleteRole(user.idheduser)}\r\n >\r\n Eliminar\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const handleModalClosed = () => {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n setSearchResults([]);\r\n };\r\n\r\n const toggleModal = () => {\r\n setModalIsOpen(!modalIsOpen);\r\n };\r\n\r\n const handleSearchCriteriaChange = (e) => {\r\n\r\n const { name, value } = e.target;\r\n\r\n if (name === 'idRole') {\r\n const selectedRole = roles.find((role) => role.idhedrole === parseInt(value));\r\n const roleName = selectedRole ? selectedRole.rolename : '';\r\n setRoleNameSelected(roleName);\r\n\r\n if (roleName === 'Asistente GRADO') {\r\n //Fetch unidades\r\n fetch(`${APIURL}/api/Account/get-unidades`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setUnidadOptions(data);\r\n if (data.length > 0) {\r\n fetch(`${APIURL}/api/Account/get-carreras?idUnidad=${data[0].idunidad}`)\r\n .then((response) => response.json())\r\n .then((dataProg) => {\r\n setProgramasOptions(dataProg);\r\n if (dataProg.length > 0) {\r\n setSearchCriteria({ ...searchCriteria, idRole: value, idUnidad: data[0].idunidad, idPrograma: dataProg[0].idprograma });\r\n } else {\r\n setSearchCriteria({ ...searchCriteria, idRole: value, idUnidad: data[0].idunidad, idPrograma: 0 });\r\n }\r\n })\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idRole: value,\r\n idUnidad: 0,\r\n idPrograma: 0\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching unidades:', error);\r\n });\r\n } else if (roleName === 'Asistente POSTGRADO') {\r\n //Fetch unidades\r\n fetch(`${APIURL}/api/Account/get-unidades`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setUnidadOptions(data);\r\n if (data.length > 0) {\r\n fetch(`${APIURL}/api/Account/get-programas?idUnidad=${data[0].idunidad}`)\r\n .then((response) => response.json())\r\n .then((dataProg) => {\r\n setProgramasOptions(dataProg);\r\n if (dataProg.length > 0) {\r\n setSearchCriteria({ ...searchCriteria, idRole: value, idUnidad: data[0].idunidad, idPrograma: dataProg[0].idprograma });\r\n } else {\r\n setSearchCriteria({ ...searchCriteria, idRole: value, idUnidad: data[0].idunidad, idPrograma: 0 });\r\n }\r\n })\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idRole: value,\r\n idUnidad: 0,\r\n idPrograma: 0\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching unidades:', error);\r\n });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idRole: value,\r\n idUnidad: 0,\r\n idPrograma: 0,\r\n });\r\n setUnidadOptions([]); //Limpiar unidades\r\n setProgramasOptions([]); //Limpiar programas\r\n }\r\n } else if (name === 'idUnidad') {\r\n \r\n if (roleNameSelected === 'Asistente POSTGRADO') {\r\n //Fetch programas\r\n fetch(`${APIURL}/api/Account/get-programas?idUnidad=${value}`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setProgramasOptions(data);\r\n if (data.length > 0) {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma : data[0].idprograma\r\n });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma: 0\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching programas:', error);\r\n });\r\n } else if (roleNameSelected === 'Asistente GRADO') {\r\n fetch(`${APIURL}/api/Account/get-carreras?idUnidad=${value}`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setProgramasOptions(data);\r\n if (data.length > 0) {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma: data[0].idprograma\r\n });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma: 0\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching programas:', error);\r\n });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma: 0\r\n });\r\n }\r\n\r\n } else if (name === 'idPrograma') {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idPrograma: value,\r\n });\r\n } else {\r\n setSearchCriteria({ ...searchCriteria, [name]: value });\r\n }\r\n\r\n };\r\n\r\n const handleSearch = () => {\r\n const payload = {\r\n nombres: searchCriteria.nombres,\r\n apellidos: searchCriteria.apellidos,\r\n numeroidentificacion: searchCriteria.numeroidentificacion,\r\n username: searchCriteria.username,\r\n idRole: searchCriteria.idRole,\r\n idPrograma: searchCriteria.idPrograma !== 0 ? searchCriteria.idPrograma : searchCriteria.idUnidad\r\n };\r\n\r\n MySwal.fire({\r\n title: 'Buscando usuarios...',\r\n text: 'Espere un momento',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${APIURL}/api/Account/posibles-usuarios`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setSearchResults(data);\r\n setCurrentPage(0);\r\n MySwal.close();\r\n })\r\n .catch((error) => {\r\n console.error('Error al conseguir usuarios potenciales:', error);\r\n });\r\n };\r\n\r\n const handleSelectUser = (idpersona) => {\r\n\r\n const payload = {\r\n idpersona: idpersona,\r\n idRole: searchCriteria.idRole,\r\n idPrograma: searchCriteria.idPrograma !== 0 ? searchCriteria.idPrograma : searchCriteria.idUnidad\r\n };\r\n\r\n MySwal.fire({\r\n title: 'Agregando usuario...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${APIURL}/api/Account/create-user`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => {\r\n MySwal.close();\r\n if (response.status === 200) {\r\n setModalIsOpen(false);\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n setSearchResults([]);\r\n setRefreshTable(!refreshTable);\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error selecting user:', error);\r\n });\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable();\r\n\r\n const indexOfLastUser = (currentPage + 1) * usersPerPage;\r\n const indexOfFirstUser = indexOfLastUser - usersPerPage;\r\n const paginatedUsers = searchResults.slice(indexOfFirstUser, indexOfLastUser);\r\n\r\n const handlePageClick = (data) => {\r\n const selectedPage = data.selected;\r\n setCurrentPage(selectedPage);\r\n };\r\n\r\n return (\r\n
\r\n

Administrar usuarios

\r\n {contents}\r\n \r\n Buscar usuarios\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paginatedUsers.map((user, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
NombresApellidosCorreoIdentificación{' '}
{user.nombres}{user.apellidos}{user.emailAddress}{user.numeroidentificacion}\r\n handleSelectUser(user.idpersona)}\r\n >\r\n Agregar\r\n \r\n
\r\n {searchResults.length > 10 && (\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRoleAccess(UserManagement, ['ADMIN']);","import React from 'react';\r\nimport { Pagination, PaginationItem, PaginationLink } from 'reactstrap';\r\n\r\nexport function Paginacion(props) {\r\n //console.log(\"props = \" + JSON.stringify(props));\r\n const { total, page, size, search1, search2, url, handle } = props;\r\n const first = 1;\r\n const last = Math.ceil(total / size);\r\n const pages = [...Array(last).keys()].map(p => p + 1);\r\n const groupsize = 10;\r\n const group = Math.trunc((page - 1) / groupsize);\r\n //console.log(\"total = \" + total + \" size = \" + size + \" last = \" + last);\r\n //console.log(\"pages.length = \" + pages.length);\r\n return (pages.length > 1 && \r\n \r\n \r\n handle(url, first, size, search1, search2)}>{ String.fromCharCode(171) }\r\n \r\n \r\n handle(url, Math.max(page - 1, first), size, search1, search2)}>{ String.fromCharCode(60) }\r\n \r\n { pages.length < groupsize ? pages.map((p, i) =>\r\n \r\n handle(url, p, size, search1, search2)}>\r\n {p}\r\n \r\n \r\n ) : pages.filter((p, i) => p > (group * groupsize) && p <= ((group+1)*groupsize)).map((p, i) =>\r\n \r\n handle(url, p, size, search1, search2)}>\r\n {p}\r\n \r\n \r\n )}\r\n \r\n handle(url, Math.min(page + 1, last), size, search1, search2)}>{ String.fromCharCode(62) }\r\n \r\n \r\n handle(url, last, size, search1, search2)}>{ String.fromCharCode(187) }\r\n \r\n \r\n );\r\n}","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, Input, Button } from 'reactstrap';\r\n\r\nexport class CarreraConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n carreras: props.carreraOptions, carrerasEtiqueta: props.carrerasLabel, anios: props.anioOptions, terminos: props.terminoOptions,\r\n carrera: props.carreraValue, anio: props.aniosValue, termino: props.terminosValue, apellidos: \"\", nombres: \"\"\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleDocenteChange = this.handleDocenteChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n this.setState({ apellidos: \"\", nombres: \"\" });\r\n this.props.onInputChange(event);\r\n }\r\n\r\n handleDocenteChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n if (name == \"apellidos\") {\r\n this.setState({ apellidos: value });\r\n }\r\n else if (name == \"nombres\") {\r\n this.setState({ nombres: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n event.preventDefault();\r\n this.props.handleDocenteSubmit(this.state.apellidos, this.state.nombres);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.carreraOptions.map((carrera, idx) => )}\r\n \r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.anioOptions.map((a, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n {this.props.terminoOptions && this.props.terminoOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.terminoOptions.map((t, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nCarreraConsulta.propTypes = {\r\n carrerasOptions: PropTypes.array,\r\n carrerasLabel: PropTypes.array,\r\n carrerasValue: PropTypes.any,\r\n aniosOptions: PropTypes.array,\r\n aniosValue: PropTypes.any,\r\n terminosOption: PropTypes.any,\r\n terminosValue: PropTypes.any,\r\n onInputChange: PropTypes.func,\r\n};\r\n\r\n","import React from 'react';\r\nimport { IconContext } from \"react-icons\";\r\n\r\nexport function Icon({ icon, style }) {\r\n if (style == null) {\r\n style = \"\";\r\n }\r\n\r\n return (\r\n \r\n {icon}\r\n \r\n );\r\n}","import React from 'react';\r\nimport { ListGroup, ListGroupItem } from 'reactstrap';\r\nimport { BsCheckCircle, BsFillCheckCircleFill, BsCircle } from \"react-icons/bs\";\r\nimport { Icon } from \"./Icon\";\r\n\r\nexport function EvaluacionDetalle({ paralelo, estudiantes }) {\r\n\r\n return (\r\n paralelo.verlista && estudiantes.length > 0\r\n && \r\n {estudiantes.map((e, i) =>\r\n \r\n {i + 1}.- {e.estado == \"P\" ? } style={{ color: \"green\" }} /> : e.estado == \"R\" ? } style={{ color: \"yellow\" }} /> : } />}{' '}{e.estudiante}\r\n ) }\r\n \r\n );\r\n}\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Button, Modal, ModalBody, ModalHeader, ModalFooter, UncontrolledTooltip } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { BsFilePdfFill, BsCardChecklist } from 'react-icons/bs';\r\nimport { AppContext } from '../AppContext';\r\nimport { Paginacion } from '../components/Paginacion';\r\nimport { CarreraConsulta } from '../components/CarreraConsulta';\r\nimport { Icon } from '../components/Icon';\r\n\r\nimport { EvaluacionDetalle } from '../components/EvaluacionDetalle';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst BASEURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst CarreraEvaluacion = (props) => {\r\n\r\n const [total, setTotal] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [state, setState] = useState({\r\n carrera: \"\",\r\n anio: \"\",\r\n termino: \"\",\r\n nombres: \"\",\r\n apellidos: \"\",\r\n page: 1,\r\n size: 10,\r\n carreras: [],\r\n carrerasLabel: [],\r\n anios: [],\r\n terminos: [],\r\n });\r\n\r\n const [paralelos, setParalelos] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n const populateInitialData = async (user) => {\r\n const carrerasRol = user.roles.filter(r => r.role === \"COORDINADOR_CARRERA\" || r.role === \"COORDINADOR_GENERAL\").map(r => r.scope);\r\n\r\n const carrerasEtiqueta = user.roles.filter(r => r.role === \"COORDINADOR_CARRERA\" || r.role === \"COORDINADOR_GENERAL\").map(r => r.scopeName);\r\n\r\n if (carrerasRol.length === 0) {\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n const initialCarrera = props.match.params[\"carrera\"] || carrerasRol[0]; // idPrograma\r\n\r\n const initialAnios = [];\r\n let initialPeriodos = [];\r\n\r\n const responsePeriodos = await fetch(`${BASEURL}/api/reporte-usuario/get-periodos-academicos`);\r\n const dataPeriodos = await responsePeriodos.json();\r\n\r\n initialPeriodos = [...initialPeriodos, ...dataPeriodos.datos];\r\n\r\n initialPeriodos.forEach(at => {\r\n if (!initialAnios.includes(at.anio)) {\r\n initialAnios.push(at.anio);\r\n }\r\n });\r\n\r\n const initialAnio = props.match.params[\"anio\"] || (initialAnios.length > 0 ? initialAnios[0] : 0);\r\n const initialTerminos = [];\r\n\r\n initialPeriodos.filter(p => p.anio === initialAnio).forEach(at => {\r\n if (!initialTerminos.includes(at.termino)) {\r\n initialTerminos.push(at.termino);\r\n }\r\n });\r\n\r\n const initialTermino = props.match.params[\"termino\"] || (initialTerminos.length > 0 ? initialTerminos[0] : \"\");\r\n const initialPage = props.match.params[\"page\"] || state.page;\r\n const initialSize = props.match.params[\"size\"] || state.size;\r\n\r\n MySwal.close();\r\n props.history.push(`/carrera-evaluacion/${initialCarrera}/${initialAnio}/${initialTermino}/${initialPage}/${initialSize}`);\r\n setState(prevState => ({\r\n ...prevState,\r\n carreras: carrerasRol,\r\n anios: initialAnios,\r\n terminos: initialTerminos,\r\n carrera: initialCarrera,\r\n carrerasLabel: carrerasEtiqueta,\r\n anio: initialAnio,\r\n termino: initialTermino\r\n }));\r\n };\r\n\r\n const populateData = async (user) => {\r\n const carrera = props.match.params[\"carrera\"] || state.carrera;\r\n let anio = props.match.params[\"anio\"] || state.anio;\r\n let termino = props.match.params[\"termino\"] || state.termino;\r\n\r\n const page = parseInt(props.match.params[\"page\"]) || state.page;\r\n const size = parseInt(props.match.params[\"size\"]) || state.size;\r\n\r\n if (anio === 0 || carrera === \"\" || termino === \"\") return;\r\n\r\n const nombres = state.nombres;\r\n const apellidos = state.apellidos;\r\n\r\n let apiUrl = `${BASEURL}/api/reporte-usuario/planificacion-carrera-periodo/${carrera}/${anio}/${termino}/${page}/${size}`;\r\n if (nombres && nombres.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n if (!nombres || nombres.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n\r\n setLoading(false);\r\n MySwal.close();\r\n if (data && data.total && data.datos) {\r\n setParalelos(data.datos.map(p => ({ ...p, verlista: false, verpdf: false, datapdf: \"\", estudiantes: [] })));\r\n setTotal(data.total);\r\n } else {\r\n setParalelos([]);\r\n setTotal(0);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.title = TITLE + \" - Profesores de mi carrera\";\r\n if (currentUser && currentUser !== undefined) {\r\n MySwal.fire({\r\n title: 'Cargando datos iniciales...',\r\n text: 'Espere un momento',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n populateInitialData(currentUser);\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n setLoading(true);\r\n MySwal.fire({\r\n title: 'Cargando cursos...',\r\n text: 'Espere un momento',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n populateData(currentUser);\r\n }\r\n }, [state]);\r\n\r\n const handleInputChange = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n const { carrera, anio, termino } = state;\r\n const page = 1;\r\n const size = 10;\r\n\r\n if (name === \"carrera\") {\r\n props.history.push(`/carrera-evaluacion/${value}/${anio}/${termino}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, carrera: value, nombres: \"\", apellidos: \"\", page, size }));\r\n } else if (name === \"anio\") {\r\n props.history.push(`/carrera-evaluacion/${carrera}/${value}/${termino}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, anio: value, nombres: \"\", apellidos: \"\", page, size }));\r\n } else if (name === \"termino\") {\r\n props.history.push(`/carrera-evaluacion/${carrera}/${anio}/${value}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, termino: value, nombres: \"\", apellidos: \"\", page, size }));\r\n }\r\n };\r\n\r\n const handleDocenteInput = (apellidos, nombres) => {\r\n const { carrera, anio, termino } = state;\r\n props.history.push(`/carrera-evaluacion/${carrera}/${anio}/${termino}/${1}/${10}`);\r\n setState({\r\n ...state,\r\n apellidos: apellidos == null ? \"\" : apellidos.trim(),\r\n nombres: nombres == null ? \"\" : nombres.trim(),\r\n page: 1, size: 10\r\n });\r\n };\r\n\r\n const handlePage = (url, page, size) => {\r\n props.history.push(`${url}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, page, size }));\r\n };\r\n\r\n const toggle = (paralelo) => {\r\n const i = paralelos.indexOf(paralelo);\r\n if (!paralelo.verlista && paralelo.estudiantes && paralelo.estudiantes.length === 0) {\r\n MySwal.fire({\r\n title: 'Cargando detalle...',\r\n text: 'Espere un momento',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${BASEURL}/api/reporte-usuario/planificacion-paralelo/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.identificacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n estudiantes: data.datos\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const togglePDF = (paralelo) => {\r\n if (paralelo.evaluados == 0) {\r\n MySwal.fire({\r\n icon: 'info',\r\n title: 'Sin resultados',\r\n text: 'Este paralelo no ha sido evaluado',\r\n });\r\n return;\r\n }\r\n const i = paralelos.indexOf(paralelo);\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Generando PDF...',\r\n text: 'Espere un momento',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${BASEURL}/api/reporte-usuario/reporte-general-pdf/${paralelo.sistema}/${paralelo.idcurso}/${paralelo.idprofesor}`)\r\n .then(response => {\r\n if (!response.ok) {\r\n return response.text().then(text => {\r\n throw new Error(text);\r\n });\r\n }\r\n return response.json();\r\n })\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n datapdf: data\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n })\r\n .catch(error => {\r\n MySwal.fire({\r\n icon: 'error',\r\n title: 'Error',\r\n text: `${error.message}`,\r\n });\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const renderTable = (paralelos) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = p.registrados === 0 ? 0 : Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoCódigoMateriaParaleloDocente% RespuestasAcciones
{p.anio}{p.termino}{p.codigo}{p.materia}{p.paralelo}{p.docente}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle de evaluados\"}\r\n \r\n \r\n toggle(p)}>Lista de estudiantes\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n togglePDF(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n \r\n Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable(paralelos);\r\n\r\n return (\r\n
\r\n

Evaluación de mi carrera

\r\n \r\n {contents}\r\n
\r\n );\r\n}\r\n\r\nexport default CarreraEvaluacion;\r\n","import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink, UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from './../AppContext';\r\nimport './NavMenu.css';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.login = this.login.bind(this);\r\n this.logout = this.logout.bind(this);\r\n\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar() {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n login() {\r\n this.props.handleLogin();\r\n }\r\n\r\n logout() {\r\n this.props.handleLogout();\r\n }\r\n\r\n render() {\r\n const currentUser = this.context.currentUser;\r\n return (\r\n
\r\n \r\n \r\n {' '}\r\n \r\n \r\n
    \r\n \r\n Materias\r\n \r\n \r\n Profesores\r\n \r\n \r\n {currentUser && currentUser.usuario ?\r\n
    \r\n
      \r\n
    • \r\n Bienvenido(a) : {currentUser.usuario} \r\n
    • \r\n \r\n \r\n Mis opciones\r\n \r\n \r\n\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"DOCENTE\") &&\r\n \r\n {'Mis paralelos'}\r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"DECANO\" || r.role == \"SUBDECANO\") &&\r\n <>\r\n \r\n \r\n {'Historial de mi unidad'}\r\n \r\n \r\n {'Evaluación de mi programa'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => (r.role == \"DECANO\" && r.scope != \"ESPAE\") || (r.role == \"SUBDECANO\" && r.scope != \"ESPAE\")) &&\r\n <>\r\n \r\n {'Evaluación de mi unidad'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => (r.role == \"DECANO\" && r.scope === \"DG\") || r.role == \"COORDINADOR_ADMISIONES\" || r.role == \"ADMIN\") &&\r\n <>\r\n \r\n {'Evaluación de admisiones'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role == \"COORDINADOR_CARRERA\") &&\r\n <>\r\n \r\n {'Evaluación de mi carrera'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role == \"COORDINADOR_PROGRAMA\" || r.role == \"COORDINADOR_GENERAL\") &&\r\n <>\r\n \r\n \r\n {'Evaluación de mi programa'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && (currentUser.roles.some(r => r.role == \"ADMIN\") ||\r\n currentUser.roles.some(r => [\"DECANO\", \"SUBDECANO\", \"COORDINADOR_GENERAL\", \"COORDINADOR_PROGRAMA\"].includes(r.role) && r.scope === \"ESPAE\")) &&\r\n <>\r\n \r\n \r\n {'Reportes consolidados'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"ADMIN\") &&\r\n <>\r\n \r\n \r\n {'Administrar usuarios'}\r\n \r\n {currentUser && currentUser.usuario && !currentUser.isImpersonated &&\r\n \r\n {'Ver como'}\r\n \r\n }\r\n \r\n }\r\n \r\n \r\n {'Cerrar sesión'}\r\n \r\n \r\n \r\n
    \r\n
    \r\n :\r\n \r\n {'Iniciar sesión'}\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nNavMenu.contextType = AppContext;","import React, { useContext } from 'react';\r\nimport { AppContext } from '../AppContext';\r\n\r\nconst RevertImpersonationBanner = () => {\r\n\r\n const { revertToOriginalUser } = useContext(AppContext);\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n return (\r\n
\r\n {\"Actualmente está actuando en nombre de \" + currentUser.apellidos + \" \" + currentUser.nombres}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RevertImpersonationBanner;\r\n","import React, { Component } from \"react\";\r\nimport { Container, Row, Col } from 'reactstrap';\r\nimport { NavMenu } from '../components/NavMenu';\r\nimport { authService } from '../services/auth.service';\r\nimport { createBrowserHistory } from 'history';\r\n//import logo from './../assets/img/espol.png';\r\nimport logo from './../assets/img/logo-2.svg';\r\nimport RevertImpersonationBanner from '../components/RevertImpersonationBanner';\r\n\r\nconst history = createBrowserHistory();\r\n\r\nexport class AuthLayout extends Component {\r\n\r\n static displayName = AuthLayout.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.login = this.login.bind(this);\r\n this.logout = this.logout.bind(this);\r\n }\r\n\r\n login() {\r\n authService.login(history);\r\n }\r\n\r\n logout() {\r\n authService.logout();\r\n }\r\n\r\n render() {\r\n\r\n const { currentUser } = this.props;\r\n\r\n return (\r\n
\r\n {currentUser && currentUser.isImpersonated && }\r\n \r\n
\r\n
\r\n \"ESPOL\"\r\n
\r\n

Sistema de
retroalimentación estudiantil

\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {this.props.children}\r\n
\r\n
\r\n
\r\n
\r\n \r\n Escuela Superior Politécnica del Litoral - Campus Gustavo Galindo - Guayaquil - Ecuador
\r\n © El contenido de esta obra es de propiedad de la ESPOL. Todos los derechos reservados.
\r\n Prohibida su reproducción total o parcial, comunicación pública o distribución sin autorización previa del titular de los derechos.
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n render () {\r\n return (\r\n
\r\n

Bienvenidos al sistema de reportes de los formularios de retroalimentación estudiantil.

\r\n

\r\n Este sistema permite a la comunidad politécnica acceder a los resultados de las evaluaciones docentes. Este proceso es planificado y ejecutado por la \r\n Secretaria Técnica de Aseguramiento de la Calidad (STAC) con el objetivo de retroalimentar a los procesos educativos y al personal académico de la ESPOL.\r\n

\r\n

\r\n La información que se proporciona a través de los formularios de retroalimentación estudiantil es de carácter confidencial. Por este motivo el personal académico \r\n recibe información luego de finalizado el periodo académico, de forma agregada y anónima; al igual que las unidades a cargo de los servicios evaluados.\r\n

\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from './../AppContext';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { BsFillFileBarGraphFill, BsChatLeftTextFill, BsFilePdfFill } from 'react-icons/bs';\r\nimport { Icon } from \"./Icon\";\r\nimport { Paginacion } from './Paginacion';\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst MySwal = withReactContent(Swal);\r\n\r\n//const TITLE = process.env.REACT_APP_TITLE;\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class MisParalelos extends Component {\r\n static displayName = MisParalelos.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, page: 1, size: 10, paralelos: [], loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n this.handleDetalle = this.handleDetalle.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const currentUser = this.context.currentUser;\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n\r\n if (currentUser && currentUser.numeroidentificacion.length > 0) {\r\n this.populateData(currentUser.numeroidentificacion, page, size);\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate() {\r\n const currentUser = this.context.currentUser;\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n\r\n if (currentUser && currentUser.numeroidentificacion.length > 0) {\r\n this.populateData(currentUser.numeroidentificacion, page, size);\r\n }\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n }\r\n\r\n handleDetalle(anio, termino, codigo, paralelo, identificacion) {\r\n this.props.history.push(`/paralelo/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Cargando Reporte...',\r\n allowOutsideClick: false,\r\n showConfirmButton: false,\r\n onBeforeOpen: () => {\r\n MySwal.showLoading();\r\n },\r\n });\r\n\r\n let url = paralelo.codigo !== 'PRASC' && paralelo.codigo !== 'PRAEM' ?\r\n `${APIURL}/api/reporte-usuario/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}` :\r\n `${APIURL}/api/reporte-usuario/reporte-practica-pdf/${paralelo.anio}/${paralelo.codigo}/${paralelo.cedula}`;\r\n\r\n fetch(url)\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n MySwal.close();\r\n })\r\n .catch(error => {\r\n console.error('Error al cargar el reporte:', error);\r\n MySwal.fire('Error', 'No se pudo cargar el PDF.', 'error');\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(currentUser, paralelos) {\r\n //console.log(currentUser); console.log(paralelos);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelCódigoCurso / ActividadParalelo% RespuestasCalificación{' '}
{p.anio}{p.termino ? p.termino : 'N/A'}{p.nivel}{p.codigo}{p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? p.materia : p.codigo === \"PRAEM\" ? \"Tutoría de prácticas empresariales\" : \"Tutoría de prácticas de servicio comunitario\"}{p.paralelo ? p.paralelo : 'N/A'}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {p.evaluados > 0 ? this.formatter(p.promedio) : \"-\"}\r\n
\r\n\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? (\r\n \r\n } />\r\n \r\n ) : (\r\n \r\n } />\r\n \r\n )}\r\n \r\n \r\n {\"Detalle\"}\r\n \r\n\r\n \r\n this.toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n {currentUser && currentUser.numeroidentificacion == p.cedula &&\r\n <>\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? 'Detalle Paralelo' : 'Detalle Tutor'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? (\r\n \r\n } />\r\n \r\n ) : (\r\n \r\n } />\r\n \r\n )}\r\n \r\n \r\n {\"Comentario\"}\r\n \r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n const currentUser = this.context.currentUser;\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(currentUser, this.state.paralelos);\r\n\r\n return (\r\n
\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role === \"TUTOR\") && (\r\n
\r\n Los resultados de la heteroevaluación para las actividades de Tutorías de prácticas preprofesionales empresariales y de servicio comunitario estarán disponibles a partir del 18 de marzo, fecha de cierre del período de evaluación.\r\n
\r\n )}\r\n

Mis actividades de docencia

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(identificacion, page = 1, size = 10) {\r\n //console.log(\"paralelos = \" + this.state.paralelos.length + \" page = \" + page + \" page_state = \" + this.state.page);\r\n if (this.state.paralelos != 0 && page == this.state.page) return;\r\n const response = await fetch(`${APIURL}/api/reportes/paralelos-profesor/${identificacion}/${page}/${size}`);\r\n const data = await response.json();\r\n\r\n if (data && data.total && data.datos) {\r\n const paralelos = data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" }));\r\n\r\n this.setState({ total: data.total, page: page, size: size, paralelos: paralelos, loading: false });\r\n }\r\n }\r\n}\r\nMisParalelos.contextType = AppContext;","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class UnidadConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n unidades: props.unidadOptions, anios: props.anioOptions, terminos: props.terminoOptions,\r\n unidad: props.unidadValue, anio: props.aniosValue, termino: props.terminosValue, apellidos: \"\", nombres: \"\"\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleDocenteChange = this.handleDocenteChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n this.setState({ apellidos: \"\", nombres: \"\" });\r\n this.props.onInputChange(event);\r\n }\r\n\r\n handleDocenteChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n if (name == \"apellidos\") {\r\n this.setState({ apellidos: value });\r\n }\r\n else if (name == \"nombres\") {\r\n this.setState({ nombres: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n event.preventDefault();\r\n this.props.handleDocenteSubmit(this.state.apellidos, this.state.nombres);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.unidadOptions.map((uo, idx) => )}\r\n \r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.anioOptions.map((a, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n {this.props.terminoOptions && this.props.terminoOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.terminoOptions.map((t, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nUnidadConsulta.propTypes = {\r\n unidadesOptions: PropTypes.array,\r\n unidadesValue: PropTypes.any,\r\n aniosOptions: PropTypes.array,\r\n aniosValue: PropTypes.any,\r\n terminosOption: PropTypes.any,\r\n terminosValue: PropTypes.any,\r\n onInputChange: PropTypes.func,\r\n};\r\n\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Button, Modal, ModalBody, ModalHeader, ModalFooter, UncontrolledTooltip } from 'reactstrap';\r\nimport { AppContext } from './../AppContext';\r\nimport { Paginacion } from './Paginacion';\r\nimport { UnidadConsulta } from './UnidadConsulta';\r\nimport { EvaluacionDetalle } from './EvaluacionDetalle';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst BASEURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst UnidadEvaluacion = (props) => {\r\n\r\n const [total, setTotal] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [state, setState] = useState({\r\n unidad: \"\",\r\n anio: 0,\r\n termino: \"\",\r\n nombres: \"\",\r\n apellidos: \"\",\r\n page: 1,\r\n size: 10,\r\n unidades: [],\r\n anios: [],\r\n terminos: [],\r\n });\r\n\r\n const [paralelos, setParalelos] = useState([]);\r\n const [periodos, setPeriodos] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n const populateInitialData = async (user) => {\r\n const unidadesRol = user.roles.filter(r => r.role === \"DECANO\" || r.role === \"SUBDECANO\").map(r => r.scope);\r\n\r\n if (unidadesRol.length === 0) return;\r\n\r\n const initialUnidad = props.match.params[\"unidad\"] || unidadesRol[0];\r\n\r\n const initialAnios = [];\r\n let initialPeriodos = [];\r\n\r\n if (periodos.length === 0) {\r\n const responsePeriodos = await fetch(`${BASEURL}/api/reporte-usuario/planificacion-periodo-unidad/${initialUnidad}`);\r\n const dataPeriodos = await responsePeriodos.json();\r\n\r\n initialPeriodos = [...initialPeriodos, ...dataPeriodos.datos];\r\n\r\n initialPeriodos.forEach(at => {\r\n if (!initialAnios.includes(at.anio)) {\r\n initialAnios.push(at.anio);\r\n }\r\n });\r\n }\r\n\r\n const initialAnio = props.match.params[\"anio\"] || (initialAnios.length > 0 ? initialAnios[0] : 0);\r\n const initialTerminos = [];\r\n\r\n initialPeriodos.filter(p => p.anio === initialAnio).forEach(at => {\r\n if (!initialTerminos.includes(at.termino)) {\r\n initialTerminos.push(at.termino);\r\n }\r\n });\r\n\r\n const initialTermino = props.match.params[\"termino\"] || (initialTerminos.length > 0 ? initialTerminos[0] : \"\");\r\n const initialPage = props.match.params[\"page\"] || state.page;\r\n const initialSize = props.match.params[\"size\"] || state.size;\r\n\r\n props.history.push(`/unidad-evaluacion/${initialUnidad}/${initialAnio}/${initialTermino}/${initialPage}/${initialSize}`);\r\n setState(prevState => ({\r\n ...prevState,\r\n unidades: unidadesRol,\r\n anios: initialAnios,\r\n terminos: initialTerminos,\r\n unidad: initialUnidad,\r\n anio: initialAnio,\r\n termino: initialTermino\r\n }));\r\n };\r\n\r\n const populateData = async (user) => {\r\n const unidad = props.match.params[\"unidad\"] || state.unidad;\r\n let anio = props.match.params[\"anio\"] || state.anio;\r\n let termino = props.match.params[\"termino\"] || state.termino;\r\n\r\n const page = parseInt(props.match.params[\"page\"]) || state.page;\r\n const size = parseInt(props.match.params[\"size\"]) || state.size;\r\n\r\n if (anio === 0 || unidad === \"\" || termino === \"\") return;\r\n\r\n const nombres = state.nombres;\r\n const apellidos = state.apellidos;\r\n\r\n let apiUrl = `${BASEURL}/api/reporte-usuario/planificacion-unidad-periodo/${unidad}/${anio}/${termino}/${page}/${size}`;\r\n if (nombres && nombres.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n if (!nombres || nombres.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n\r\n setLoading(false);\r\n if (data && data.total && data.datos) {\r\n setParalelos(data.datos.map(p => ({ ...p, verlista: false, estudiantes: [] })));\r\n setTotal(data.total);\r\n } else {\r\n setParalelos([]);\r\n setTotal(0);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.title = TITLE + \" - Profesores de mi unidad\";\r\n if (currentUser && currentUser !== undefined) {\r\n populateInitialData(currentUser);\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n setLoading(true);\r\n populateData(currentUser);\r\n }\r\n }, [state]);\r\n\r\n const handleInputChange = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n const { unidad, anio, termino } = state;\r\n const page = 1;\r\n const size = 10;\r\n\r\n if (name === \"unidad\") {\r\n props.history.push(`/unidad-evaluacion/${value}/${anio}/${termino}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, unidad: value, nombres: \"\", apellidos: \"\", page, size }));\r\n } else if (name === \"anio\") {\r\n props.history.push(`/unidad-evaluacion/${unidad}/${value}/${termino}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, anio: value, nombres: \"\", apellidos: \"\", page, size }));\r\n } else if (name === \"termino\") {\r\n props.history.push(`/unidad-evaluacion/${unidad}/${anio}/${value}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, termino: value, nombres: \"\", apellidos: \"\", page, size }));\r\n }\r\n };\r\n\r\n const handleDocenteInput = (apellidos, nombres) => {\r\n const { unidad, anio, termino } = state;\r\n props.history.push(`/unidad-evaluacion/${unidad}/${anio}/${termino}/${1}/${10}`);\r\n setState({\r\n ...state,\r\n apellidos: apellidos == null ? \"\" : apellidos.trim(),\r\n nombres: nombres == null ? \"\" : nombres.trim(),\r\n page: 1, size: 10\r\n });\r\n };\r\n\r\n const handlePage = (url, page, size) => {\r\n props.history.push(`${url}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, page, size }));\r\n };\r\n\r\n const toggle = (paralelo) => {\r\n const i = paralelos.indexOf(paralelo);\r\n if (!paralelo.verlista && paralelo.estudiantes && paralelo.estudiantes.length === 0) {\r\n MySwal.showLoading();\r\n fetch(`${BASEURL}/api/reporte-usuario/planificacion-paralelo/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.identificacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n estudiantes: data.datos\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const renderTable = (paralelos) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = p.registrados === 0 ? 0 : Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoCódigoMateriaParaleloDocente% Respuestas
{p.anio}{p.termino}{p.codigo}{p.materia}{p.paralelo}{p.docente}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n \r\n \r\n toggle(p)}>Lista de estudiantes\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable(paralelos);\r\n\r\n return (\r\n
\r\n

Evaluación de mi unidad

\r\n \r\n {contents}\r\n
\r\n );\r\n}\r\n\r\nexport default UnidadEvaluacion;\r\n","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, Input, Button } from 'reactstrap';\r\n\r\nexport class AdmisionesConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n anios: props.anioOptions, terminos: props.terminoOptions,\r\n anio: props.aniosValue, termino: props.terminosValue, apellidos: \"\", nombres: \"\"\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleDocenteChange = this.handleDocenteChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n this.setState({ apellidos: \"\", nombres: \"\" });\r\n this.props.onInputChange(event);\r\n }\r\n\r\n handleDocenteChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n if (name == \"apellidos\") {\r\n this.setState({ apellidos: value });\r\n }\r\n else if (name == \"nombres\") {\r\n this.setState({ nombres: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n event.preventDefault();\r\n this.props.handleDocenteSubmit(this.state.apellidos, this.state.nombres);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.anioOptions.map((a, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n {this.props.terminoOptions && this.props.terminoOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.terminoOptions.map((t, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nAdmisionesConsulta.propTypes = {\r\n aniosOptions: PropTypes.array,\r\n aniosValue: PropTypes.any,\r\n terminosOption: PropTypes.any,\r\n terminosValue: PropTypes.any,\r\n onInputChange: PropTypes.func,\r\n};\r\n\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Button, Modal, ModalBody, ModalHeader, ModalFooter, UncontrolledTooltip } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { BsFilePdfFill, BsCardChecklist } from 'react-icons/bs';\r\nimport { AppContext } from './../AppContext';\r\nimport { Paginacion } from './Paginacion';\r\n\r\nimport { Icon } from '../components/Icon';\r\n\r\nimport { AdmisionesConsulta } from './AdmisionesConsulta';\r\nimport { EvaluacionDetalle } from './EvaluacionDetalle';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst BASEURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst AdmisionesEvaluacion = (props) => {\r\n\r\n const [total, setTotal] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [state, setState] = useState({\r\n anio: 0,\r\n termino: \"\",\r\n nombres: \"\",\r\n apellidos: \"\",\r\n page: 1,\r\n size: 10,\r\n anios: [],\r\n terminos: [],\r\n });\r\n\r\n const [paralelos, setParalelos] = useState([]);\r\n const [periodos, setPeriodos] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n const populateInitialData = async (user) => {\r\n const unidadesRol = user.roles.filter(r => (r.role === \"DECANO\" && r.scope == \"DG\") || r.role == \"COORDINADOR_ADMISIONES\" || r.role == \"ADMIN\" ).map(r => r.scope);\r\n\r\n if (unidadesRol.length === 0) return;\r\n\r\n const initialAnios = [];\r\n let initialPeriodos = [];\r\n\r\n if (periodos.length === 0) {\r\n const responsePeriodos = await fetch(`${BASEURL}/api/reporte-usuario/planificacion-periodo-admisiones`);\r\n const dataPeriodos = await responsePeriodos.json();\r\n\r\n initialPeriodos = [...initialPeriodos, ...dataPeriodos.datos];\r\n\r\n initialPeriodos.forEach(at => {\r\n if (!initialAnios.includes(at.anio)) {\r\n initialAnios.push(at.anio);\r\n }\r\n });\r\n }\r\n\r\n const initialAnio = props.match.params[\"anio\"] || (initialAnios.length > 0 ? initialAnios[0] : 0);\r\n const initialTerminos = [];\r\n\r\n initialPeriodos.filter(p => p.anio === initialAnio).forEach(at => {\r\n if (!initialTerminos.includes(at.terminoacad)) {\r\n initialTerminos.push(at.terminoacad);\r\n }\r\n });\r\n\r\n const initialTermino = props.match.params[\"termino\"] || (initialTerminos.length > 0 ? initialTerminos[0] : \"\");\r\n const initialPage = props.match.params[\"page\"] || state.page;\r\n const initialSize = props.match.params[\"size\"] || state.size;\r\n\r\n props.history.push(`/admisiones-evaluacion/${initialAnio}/${initialTermino}/${initialPage}/${initialSize}`);\r\n setState(prevState => ({\r\n ...prevState,\r\n anios: initialAnios,\r\n terminos: initialTerminos,\r\n anio: initialAnio,\r\n termino: initialTermino\r\n }));\r\n };\r\n\r\n const populateData = async (user) => {\r\n let anio = props.match.params[\"anio\"] || state.anio;\r\n let termino = props.match.params[\"termino\"] || state.termino;\r\n\r\n const page = parseInt(props.match.params[\"page\"]) || state.page;\r\n const size = parseInt(props.match.params[\"size\"]) || state.size;\r\n\r\n if (anio === 0 || termino === \"\") return;\r\n\r\n const nombres = state.nombres;\r\n const apellidos = state.apellidos;\r\n\r\n let apiUrl = `${BASEURL}/api/reporte-usuario/planificacion-admisiones-periodo/${anio}/${termino}/${page}/${size}`;\r\n if (nombres && nombres.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n if (!nombres || nombres.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n\r\n setLoading(false);\r\n if (data && data.total && data.datos) {\r\n setParalelos(data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\", verlista: false, estudiantes: [] })));\r\n setTotal(data.total);\r\n } else {\r\n setParalelos([]);\r\n setTotal(0);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.title = TITLE + \" - Profesores de mi unidad\";\r\n if (currentUser && currentUser !== undefined) {\r\n populateInitialData(currentUser);\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n setLoading(true);\r\n populateData(currentUser);\r\n }\r\n }, [state]);\r\n\r\n const handleInputChange = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n const { anio, termino } = state;\r\n const page = 1;\r\n const size = 10;\r\n\r\n if (name === \"anio\") {\r\n props.history.push(`/admisiones-evaluacion/${value}/${termino}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, anio: value, nombres: \"\", apellidos: \"\", page, size }));\r\n } else if (name === \"termino\") {\r\n props.history.push(`/admisiones-evaluacion/${anio}/${value}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, termino: value, nombres: \"\", apellidos: \"\", page, size }));\r\n }\r\n };\r\n\r\n const handleDocenteInput = (apellidos, nombres) => {\r\n const { anio, termino } = state;\r\n props.history.push(`/admisiones-evaluacion/${anio}/${termino}/${1}/${10}`);\r\n setState({\r\n ...state,\r\n apellidos: apellidos == null ? \"\" : apellidos.trim(),\r\n nombres: nombres == null ? \"\" : nombres.trim(),\r\n page: 1, size: 10\r\n });\r\n };\r\n\r\n const handlePage = (url, page, size) => {\r\n props.history.push(`${url}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, page, size }));\r\n };\r\n\r\n const toggle = (paralelo) => {\r\n const i = paralelos.indexOf(paralelo);\r\n if (!paralelo.verlista && paralelo.estudiantes && paralelo.estudiantes.length === 0) {\r\n MySwal.fire({\r\n title: 'Cargando detalle...',\r\n text: 'Espere un momento',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${BASEURL}/api/reporte-usuario/planificacion-admisiones-paralelo/${paralelo.anio}/${paralelo.termino}/${paralelo.idcurso}/${paralelo.idprofesor}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n estudiantes: data.datos\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const togglePDF = (paralelo) => {\r\n if (paralelo.evaluados == 0) {\r\n MySwal.fire({\r\n icon: 'info',\r\n title: 'Sin resultados',\r\n text: 'Este paralelo no ha sido evaluado',\r\n });\r\n return;\r\n }\r\n const i = paralelos.indexOf(paralelo);\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Generando PDF...',\r\n text: 'Espere un momento',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n fetch(`${BASEURL}/api/reporte-usuario/reporte-admisiones-pdf/${paralelo.sistema}/${paralelo.idcurso}/${paralelo.idprofesor}`)\r\n .then(response => {\r\n if (!response.ok) {\r\n return response.text().then(text => {\r\n throw new Error(text);\r\n });\r\n }\r\n return response.json();\r\n })\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n datapdf: data\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n })\r\n .catch(error => {\r\n MySwal.fire({\r\n icon: 'error',\r\n title: 'Error',\r\n text: `${error.message}`,\r\n });\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const renderTable = (paralelos) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = p.registrados === 0 ? 0 : Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoCódigoMateriaParaleloDocente% Respuestas
{p.anio}{p.termino}{p.codigo}{p.materia}{p.paralelo}{p.docente}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle de evaluados\"}\r\n \r\n \r\n toggle(p)}>Lista de estudiantes\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n togglePDF(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n \r\n Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable(paralelos);\r\n\r\n return (\r\n
\r\n

Evaluación de mi unidad

\r\n \r\n {contents}\r\n
\r\n );\r\n}\r\n\r\nexport default AdmisionesEvaluacion;\r\n","import React from 'react';\r\nimport { Button, UncontrolledTooltip } from 'reactstrap';\r\nimport { Icon } from \"./Icon\";\r\n\r\nexport function Accion({ id, className, action, icon, tooltip }) {\r\n\r\n return \r\n \r\n \r\n {tooltip}\r\n \r\n \r\n}","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class ProgramaConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n unidades: props.unidadesOptions, anios: props.anioOptions, terminos: props.terminoOptions, unidad: props.unidadesValue, anio: props.aniosValue, termino: props.terminosValue\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n this.props.onInputChange(event);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n {this.props.unidadOptions.length > 0 &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.unidadOptions.map((uo, idx) => )}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.programaOptions.map((uo, idx) => )}\r\n \r\n \r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 && this.props.terminoOptions && this.props.terminoOptions.length > 0 &&\r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.anioOptions.map((a, idx) => )}\r\n \r\n \r\n \r\n }\r\n {this.props.terminoOptions && this.props.terminoOptions.length > 0 &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.terminoOptions.map((t, idx) => )}\r\n \r\n \r\n \r\n }\r\n \r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nProgramaConsulta.propTypes = {\r\n unidadesOptions: PropTypes.array,\r\n unidadesValue: PropTypes.any,\r\n aniosOptions: PropTypes.array,\r\n aniosValue: PropTypes.any,\r\n terminosOption: PropTypes.any,\r\n terminosValue: PropTypes.any,\r\n onChange: PropTypes.func,\r\n};\r\n\r\n","import React from \"react\";\r\nimport DatePicker, { registerLocale, setDefaultLocale } from \"react-datepicker\";\r\n\r\nimport es from 'date-fns/locale/es';\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nregisterLocale('es', es);\r\n\r\n\r\nexport default class Datepicker extends React.Component {\r\n \r\n state = {\r\n paralelo: this.props.paralelo, date: (this.props.value ? new Date(this.props.value) : null) ,\r\n };\r\n\r\n handleChange = date => {\r\n console.log(\" date = \" + JSON.stringify(date));\r\n \r\n this.setState(\r\n { date },\r\n (() => { this.props.onChange(date.toISOString().slice(0, -2), this.props.paralelo) })\r\n );\r\n\r\n console.log(\"paralelo = \" + JSON.stringify(this.state.paralelo));\r\n this.props.onChange(date.toISOString().slice(0, -2), this.state.paralelo)\r\n };\r\n\r\n render() {\r\n \r\n return (\r\n
\r\n this.handleChange(date)}\r\n name={this.props.name}\r\n id={this.props.id}\r\n dateFormat={this.props.dateFormat}\r\n placeholderText={this.props.placeholder}\r\n disabled={(this.props.disabled)}\r\n locale=\"es\"\r\n />\r\n
\r\n )\r\n\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from './../AppContext';\r\nimport { Button, Modal, ModalBody, ModalHeader, ModalFooter, UncontrolledTooltip, Progress, Row, Col } from 'reactstrap';\r\nimport { BsCardChecklist, BsFilePdfFill, BsChatLeftTextFill, BsFillCalendarDateFill, BsFileEarmarkExcelFill } from 'react-icons/bs';\r\nimport { Icon } from \"./Icon\";\r\nimport { Accion } from \"./Accion\";\r\nimport { Paginacion } from './Paginacion';\r\nimport { ProgramaConsulta } from './ProgramaConsulta';\r\nimport { EvaluacionDetalle } from './EvaluacionDetalle';\r\nimport Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nimport Datepicker from './Datepicker';\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst dateOptions = {\r\n year: \"2-digit\", //\"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n};\r\n\r\nexport class ProgramaEvaluacion extends Component {\r\n static displayName = ProgramaEvaluacion.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, programa: null, unidad: \"\", anio: 0, termino: \"\", page: 1, size: 10, paralelos: [], unidades: [], programas: [], anios: [], terminos: [], loading: true };\r\n\r\n this.handleDateChange = this.handleDateChange.bind(this);\r\n this.handleInputChange = this.handleInputChange.bind(this);\r\n this.handlePage = this.handlePage.bind(this);\r\n this.toggleFormDate = this.toggleFormDate.bind(this);\r\n this.toggleEstudiantes = this.toggleEstudiantes.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.downloadUnidadProgramaCohorteAnioTerminoExcel = this.downloadUnidadProgramaCohorteAnioTerminoExcel.bind(this);\r\n this.downloadPlanificacionAnioExcel = this.downloadPlanificacionAnioExcel.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const currentUser = this.context.currentUser;\r\n const { loading } = this.state;\r\n document.title = TITLE + \" - Profesores de mi programa\";\r\n\r\n if (currentUser && currentUser != undefined && loading) {\r\n this.populateData(currentUser);\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n const currentUser = this.context.currentUser;\r\n\r\n if (currentUser && currentUser != undefined) {\r\n this.populateData(currentUser);\r\n }\r\n }\r\n\r\n handleDateChange(date, paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n console.log(\"date = \" + date);\r\n const paraleloState = this.state.paralelos[i];\r\n paraleloState.dtFechaextendidaevaluacion = date;\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paraleloState\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n\r\n handleInputChange(event) {\r\n const currentUser = this.context.currentUser;\r\n let { unidad, programa, cohorte, anio, termino } = this.state;\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n\r\n if (name == \"unidad\") {\r\n if (unidad != value) {\r\n unidad = value;\r\n this.props.history.push(`/programa-evaluacion/${unidad}`);\r\n }\r\n }\r\n else if (name == \"programa\") {\r\n const selected = value.split(\"_\");\r\n programa = selected[0];\r\n cohorte = selected[1];\r\n this.props.history.push(`/programa-evaluacion/${unidad}/${programa}/${cohorte}`);\r\n }\r\n else if (name == \"anio\") {\r\n anio = value;\r\n this.props.history.push(`/programa-evaluacion/${unidad}/${programa}/${cohorte}/${anio}`);\r\n }\r\n else if (name == \"termino\") {\r\n termino = value;\r\n this.props.history.push(`/programa-evaluacion/${unidad}/${programa}/${cohorte}/${anio}/${termino}`);\r\n }\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.setState({ loading: true });\r\n\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n }\r\n\r\n handleSubmit(paralelo) {\r\n const i = this.state.paralelos.findIndex(p => p.sistema == paralelo.sistema && p.idcurso == paralelo.idcurso && p.identificacion == paralelo.identificacion);\r\n console.log(\"paralelo = \" + JSON.stringify(paralelo) + \" i = \" + i);\r\n //if (paralelo.fechaextendidaevaluacion < paralelo.fechainicioevaluacion) {\r\n const dtFechainicioevaluacion = new Date(paralelo.fechainicioevaluacion);\r\n if (paralelo.dtFechaextendidaevaluacion < dtFechainicioevaluacion) {\r\n\r\n MySwal.fire({\r\n title:

Advertencia

,\r\n text: 'La fecha de fin de evaluación no puede ser menor que la fecha de inicio de evaluación',\r\n });\r\n\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n fechaextendidaevaluacion: paralelos[i].fechafinevaluacion,\r\n dtFechaextendidaevaluacion: paralelos[i].dtFechaextendidaevaluacion\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n var paralelos = this.state.paralelos;\r\n const dateMinValue = new Date('0001-01-01');\r\n if (paralelo.ultimoCambio == null || paralelo.ultimoCambio == dateMinValue) {\r\n // insertar fecha evaluacionfin \r\n let data = JSON.parse(JSON.stringify(paralelo));\r\n\r\n delete data.docente;\r\n delete data.verlista;\r\n delete data.estudiantes;\r\n delete data.verpdf;\r\n delete data.formDate;\r\n //delete data.dtFechaextendidaevaluacion;\r\n\r\n fetch(`${APIURL}/api/admin/extension-evaluacion`, {\r\n method: 'POST',\r\n headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n sistema: paralelo.sistema,\r\n idcurso: paralelo.idcurso,\r\n anio: paralelo.anio,\r\n termino: paralelo.termino,\r\n nivelformacion: paralelo.nivelformacion,\r\n idnivelformacion: paralelo.idnivelformacion,\r\n unidad: paralelo.unidad,\r\n programa: paralelo.programa,\r\n cohorte: paralelo.cohorte,\r\n materia: paralelo.materia,\r\n codigo: paralelo.codigo,\r\n paralelo: paralelo.paralelo + \"\",\r\n tipocurso: paralelo.tipocurso,\r\n grupo: paralelo.grupo,\r\n fuente: paralelo.fuente,\r\n registrados: paralelo.registrados,\r\n evaluados: paralelo.evaluados,\r\n identificacion: paralelo.identificacion,\r\n apellidos: paralelo.apellidos,\r\n nombres: paralelo.nombres,\r\n fechainicio: paralelo.fechainicioevaluacion,\r\n fechafin: paralelo.fechafinevaluacion,\r\n fechaextendida: paralelo.dtFechaextendidaevaluacion,\r\n idpersona: paralelo.idpersona\r\n }),\r\n })\r\n .then(res => res.json())\r\n .then(\r\n (p) => {\r\n const i = paralelos.findIndex(pa => pa.sistema == p.sistema && pa.idcurso == p.idcurso && pa.identificacion == p.identificacion);\r\n paralelos[i].fechafinevaluacion = p.evaluacionfin;\r\n paralelos = [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: false, estudiantes: [], verpdf: false, formDate: false, dtFechaextendidaevaluacion: new Date(p.evaluacionfin)\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n\r\n this.setState({\r\n paralelos: paralelos\r\n });\r\n });\r\n } else {\r\n // actualizar fecha evaluacionfin \r\n var data = {\r\n idcurso: paralelo.idcurso,\r\n identificacion: paralelo.identificacion,\r\n sistema: paralelo.sistema,\r\n //fechaextendida: paralelo.fechaextendidaevaluacion\r\n fechaextendida: paralelo.dtFechaextendidaevaluacion\r\n };\r\n var idcurso = paralelo.idcurso;\r\n\r\n fetch(`${APIURL}/api/admin/extension-evaluacion/${idcurso}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then(res => res.json())\r\n .then(\r\n (result) => {\r\n result.map(p => {\r\n const i = paralelos.findIndex(pa => pa.sistema == p.sistema && pa.idcurso == p.idcurso && pa.identificacion == p.identificacion);\r\n paralelos[i].fechafinevaluacion = p.evaluacionfin;\r\n paralelos = [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: false, estudiantes: [], verpdf: false, formDate: false, dtFechaextendidaevaluacion: new Date(p.evaluacionfin)\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n });\r\n\r\n this.setState({\r\n paralelos: paralelos\r\n });\r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n toggleFormDate(paralelo) {\r\n const i = this.state.paralelos.findIndex(p => p.sistema == paralelo.sistema && p.idcurso == paralelo.idcurso && p.identificacion == paralelo.identificacion);\r\n\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n formDate: !paralelos[i].formDate,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n toggleEstudiantes(paralelo) {\r\n const { programa } = this.state;\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n if (!paralelo.verlista && paralelo.estudiantes && paralelo.estudiantes.length == 0) {\r\n MySwal.showLoading();\r\n //fetch(`${APIURL}/api/reporte-usuario/planificacion-programa/${paralelo.anio}/${paralelo.termino}/${programa}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.identificacion}`)\r\n fetch(`${APIURL}/api/reporte-usuario/planificacion-programa/${paralelo.sistema}/${paralelo.idcurso}/${paralelo.idpersona}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: !paralelos[i].verlista,\r\n estudiantes: data.datos\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: !paralelos[i].verlista,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${this.state.programa}/${this.state.cohorte}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.identificacion}/${paralelo.idnivelformacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n\r\n }\r\n }\r\n\r\n downloadUnidadProgramaCohorteAnioTerminoExcel() {\r\n const { anio, termino, unidad, programa, cohorte } = this.state;\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/evaluacion-programa-cohortes`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ anio: anio, terminos: [termino], unidades: [unidad], idprogramas: [programa], programascohortes: [programa + \"_\" + cohorte] })\r\n })\r\n .then(response => {\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = `TASARESPUESTA_${unidad}_${programa}_${cohorte}_${anio}_${termino}.xlsx`;\r\n a.click();\r\n });\r\n });\r\n }\r\n\r\n downloadPlanificacionAnioExcel() {\r\n const { anio } = this.state;\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/evaluacion-programa-cohortes`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ anio: anio, terminos: [], unidades: [], idprogramas: [], programascohortes: [] })\r\n })\r\n .then(response => {\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = `TASARESPUESTA_${anio}.xlsx`;\r\n a.click();\r\n });\r\n });\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n dateformatter = (fecha) => {\r\n return new Intl.DateTimeFormat('es-EC', { dateStyle: 'short' }).format(fecha)\r\n }\r\n\r\n renderTable(paralelos) {\r\n const currentUser = this.context.currentUser;\r\n const { page, size } = this.state;\r\n return (\r\n <>\r\n
\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role == \"ADMIN\") ?\r\n
\r\n this.downloadPlanificacionAnioExcel()} icon={} tooltip={\"Descargar planificación Excel\"} />\r\n
\r\n :\r\n
\r\n this.downloadUnidadProgramaCohorteAnioTerminoExcel()} icon={} tooltip={\"Descargar en Excel\"} />\r\n
\r\n }\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n\r\n const dtFechainicioevaluacion = new Date(p.fechainicioevaluacion);\r\n const dtFechafinevaluacion = new Date(p.fechafinevaluacion);\r\n const porcentaje = p.registrados == 0 ? 0 : Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.handleDateChange(date, p)} paralelo={p} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
PeriodoMateriaPar.Docente\r\n Periodo de evaluación\r\n \r\n {\"día / mes / año\"}\r\n \r\n % Respuestas
{((page - 1) * size) + index + 1}.{p.anio + \" - \" + p.termino}{p.codigo + \" - \" + p.materia}{p.paralelo}{p.docente}{dtFechainicioevaluacion.toLocaleString('es-EC', dateOptions)} - {dtFechafinevaluacion.toLocaleString('es-EC', dateOptions)}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n \r\n
\r\n \r\n \r\n this.toggleEstudiantes(p)}>Lista de estudiantes\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Detalle\"}\r\n \r\n {p.evaluados > 0 &&\r\n <>\r\n \r\n this.toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n \r\n this.toggle(p)}>Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n } />\r\n \r\n {/* */}\r\n {/* } />*/}\r\n {/* */}\r\n \r\n \r\n {\"Comentario\"}\r\n \r\n \r\n }\r\n {p.registrados > 0 && p.evaluados / p.registrados < 0.75 && currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"ADMIN\") &&\r\n <>
\r\n \r\n this.toggleFormDate(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Modificar fin evaluación\"}\r\n \r\n \r\n this.toggleFormDate(p)}>Modificar fin de evaluación\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelos);\r\n let programas_cohortes = [];\r\n this.state.programas.forEach(p => {\r\n if (programas_cohortes.every(pc => pc.value !== p.idprograma + \"_\" + p.cohorte)) {\r\n programas_cohortes.push({ label: p.programa + \" Cohorte \" + p.cohorte, value: p.idprograma + \"_\" + p.cohorte });\r\n }\r\n });\r\n\r\n return (\r\n
\r\n

Evaluación de mi programa

\r\n \r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(currentUser) {\r\n const roles = currentUser.roles;\r\n //console.log(\"roles = \" + JSON.stringify(roles));\r\n\r\n const uniqueScopes = new Set();\r\n\r\n const filteredRoles = roles\r\n .filter(r =>\r\n (r.role === \"DECANO\" || r.role === \"SUBDECANO\" || r.role === \"COORDINADOR_GENERAL\") &&\r\n r.scope !== \"ESPL\" &&\r\n !uniqueScopes.has(r.scope)\r\n )\r\n .map(r => {\r\n uniqueScopes.add(r.scope);\r\n return { value: r.scope, label: r.scopeName };\r\n });\r\n\r\n const unidades = filteredRoles.sort((a, b) => a.value.localeCompare(b.value));\r\n\r\n let unidad = this.props.match.params[\"unidad\"] || this.state.unidad || unidades.map(u => u.value)[0];\r\n //console.log(\"unidades = \" + JSON.stringify(unidades));\r\n const programas = roles.filter(r => r.role == \"COORDINADOR_CARRERA\" || r.role == \"COORDINADOR_PROGRAMA\").map((r) => ({ value: r.scope, label: r.scopeName }));\r\n\r\n if (programas.length == 0 && unidades.length == 0) return;\r\n\r\n let programas_cohortes = this.state.programas;\r\n let programa = 0;\r\n let cohorte = 0;\r\n let anio = \"\";\r\n let termino = \"\";\r\n let anios = [];\r\n let terminos = [];\r\n\r\n if (programas_cohortes.length == 0 || unidad != this.state.unidad) {\r\n const responseProgramasCohortes = await fetch(`${APIURL}/api/reporte-usuario/planificacion-programa-cohortes`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ idprogramas: programas.map(pra => pra.value), unidad: unidad, unidades: unidades.map(u => u.value) })\r\n });\r\n const dataProgramasCohortes = await responseProgramasCohortes.json();\r\n\r\n if (dataProgramasCohortes.datos.length > 0) {\r\n programas_cohortes = dataProgramasCohortes.datos;\r\n\r\n if (unidad != this.state.unidad && this.props.match.params[\"programa\"] === undefined && this.props.match.params[\"cohorte\"] === undefined\r\n && this.props.match.params[\"anio\"] === undefined && this.props.match.params[\"termino\"] === undefined) {\r\n\r\n programa = programas_cohortes[0].idprograma;\r\n cohorte = programas_cohortes[0].cohorte;\r\n unidad = programas_cohortes[0].codunidad;\r\n anio = programas_cohortes[0].anio;\r\n termino = programas_cohortes[0].termino\r\n } else {\r\n programa = parseInt(this.props.match.params[\"programa\"]) || this.state.programa || programas_cohortes[0].idprograma;\r\n cohorte = parseInt(this.props.match.params[\"cohorte\"]) || this.state.cohorte || programas_cohortes[0].cohorte;\r\n anio = this.props.match.params[\"anio\"] || this.state.anio || programas_cohortes[0].anio;\r\n termino = this.props.match.params[\"termino\"] || this.state.termino || programas_cohortes[0].termino;\r\n }\r\n\r\n } else {\r\n programa = 0;\r\n cohorte = 0;\r\n unidad = \"\";\r\n anio = \"\";\r\n termino = \"\";\r\n }\r\n } else {\r\n programa = parseInt(this.props.match.params[\"programa\"]) || this.state.programa || programas_cohortes[0].idprograma;\r\n cohorte = parseInt(this.props.match.params[\"cohorte\"]) || this.state.cohorte || programas_cohortes[0].cohorte;\r\n anio = this.props.match.params[\"anio\"] || this.state.anio || programas_cohortes[0].anio;\r\n termino = this.props.match.params[\"termino\"] || this.state.termino || programas_cohortes[0].termino;\r\n }\r\n\r\n let programa_cohorte_seleccionados = [];\r\n if (programa != 0 && cohorte != 0)\r\n programa_cohorte_seleccionados = programas_cohortes.filter(pc => pc.idprograma == programa && pc.cohorte == cohorte);\r\n\r\n programa_cohorte_seleccionados.forEach(pc => {\r\n if (anios.every(a => a !== pc.anio)) {\r\n anios.push(pc.anio);\r\n }\r\n if (terminos.every(t => t !== pc.termino)) {\r\n terminos.push(pc.termino);\r\n }\r\n });\r\n\r\n anio = this.props.match.params[\"anio\"] || (anios.includes(this.state.anio) ? this.state.anio : anios[0]);\r\n termino = this.props.match.params[\"termino\"] || (terminos.includes(this.state.termino) ? this.state.termino : terminos[0]);\r\n\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n\r\n if (this.state.anio != 0 && unidad == this.state.unidad && programa == this.state.programa && cohorte == this.state.cohorte && anio == this.state.anio && termino == this.state.termino && page == this.state.page && size == this.state.size)\r\n return;\r\n\r\n MySwal.showLoading();\r\n console.log(\"anio=\" + anio + \" termino=\" + termino + \" state_anio = \" + this.state.anio + \" state_termino = \" + this.state.termino);\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/planificacion-programa-periodo/${programa}/${cohorte}/${anio}/${termino}/${page}/${size}`);\r\n const data = await response.json();\r\n const paralelos = data.datos.map(\r\n (p) => {\r\n const fechaextendida = new Date(p.fechafinevaluacion);\r\n return { ...p, docente: p.apellidos + \" \" + p.nombres, verlista: false, estudiantes: [], verpdf: false, formDate: false, dtFechaextendidaevaluacion: fechaextendida };\r\n }\r\n );\r\n\r\n this.setState({ total: data.total, unidades: unidades, unidad: unidad, programas: programas_cohortes, programa: programa, cohorte: cohorte, anios: anios, anio: anio, terminos: terminos, termino: termino, page: page, size: size, paralelos: paralelos, loading: false });\r\n MySwal.close();\r\n }\r\n}\r\nProgramaEvaluacion.contextType = AppContext;","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { BsFillFileBarGraphFill, BsChatLeftTextFill, BsFilePdfFill } from 'react-icons/bs';\r\nimport { Icon } from \"./Icon\";\r\nimport { AppContext } from './../AppContext';\r\nimport { Paginacion } from './Paginacion';\r\nimport { UnidadConsulta } from './UnidadConsulta';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst UnidadParalelos = (props) => {\r\n\r\n const [total, setTotal] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [state, setState] = useState({\r\n unidad: \"\",\r\n anio: 0,\r\n termino: \"\",\r\n nombres: \"\",\r\n apellidos: \"\",\r\n page: 1,\r\n size: 10,\r\n unidades: [],\r\n anios: [],\r\n terminos: [],\r\n });\r\n\r\n const [paralelos, setParalelos] = useState([]);\r\n\r\n const [periodos, setPeriodos] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n const populateInitialData = async (user) => {\r\n const unidadesRol = user.roles.filter(r => r.role === \"DECANO\" || r.role === \"SUBDECANO\").map(r => r.scope);\r\n\r\n if (unidadesRol.length === 0) return;\r\n\r\n const initialUnidad = props.match.params[\"unidad\"] || unidadesRol[0];\r\n\r\n const initialAnios = []\r\n let initialPeriodos = []\r\n\r\n if (periodos.length === 0) {\r\n const responsePeriodos = await fetch(`${APIURL}/api/reporte-usuario/paralelos-unidad-periodos/${initialUnidad}`);\r\n const dataPeriodos = await responsePeriodos.json();\r\n\r\n initialPeriodos = [...initialPeriodos, ...dataPeriodos.datos];\r\n\r\n initialPeriodos.forEach(at => {\r\n if (!initialAnios.includes(at.anio)) {\r\n initialAnios.push(at.anio);\r\n }\r\n });\r\n }\r\n\r\n const initialAnio = props.match.params[\"anio\"] || (initialAnios.length > 0 ? initialAnios[0] : 0);\r\n const initialTerminos = []\r\n\r\n initialPeriodos.filter(p => p.anio === initialAnio).forEach(at => {\r\n if (!initialTerminos.includes(at.termino)) {\r\n initialTerminos.push(at.termino);\r\n }\r\n });\r\n if (!initialTerminos.includes('2S')) {\r\n initialTerminos.push('2S');\r\n }\r\n\r\n const initialTermino = props.match.params[\"termino\"] || (initialTerminos.length > 0 ? initialTerminos[0] : \"\");\r\n const initialPage = props.match.params[\"page\"] || state.page;\r\n const initialSize = props.match.params[\"size\"] || state.size;\r\n\r\n props.history.push(`/paralelos-unidad/${initialUnidad}/${initialAnio}/${initialTermino}/${initialPage}/${initialSize}`);\r\n setState(prevState => ({\r\n ...prevState, unidades: unidadesRol, anios: initialAnios, terminos: initialTerminos,\r\n unidad: initialUnidad, anio: initialAnio, termino: initialTermino\r\n }));\r\n\r\n }\r\n\r\n const populateData = async (user) => {\r\n const unidad = props.match.params[\"unidad\"] || state.unidad;\r\n let anio = props.match.params[\"anio\"] || state.anio;\r\n let termino = props.match.params[\"termino\"] || state.termino;\r\n\r\n const page = parseInt(props.match.params[\"page\"]) || state.page;\r\n const size = parseInt(props.match.params[\"size\"]) || state.size;\r\n\r\n if (anio == 0 || unidad === \"\" || termino === \"\") return;\r\n\r\n const nombres = state.nombres;\r\n const apellidos = state.apellidos;\r\n\r\n let apiUrl = `${APIURL}/api/reporte-usuario/paralelos-unidad/${unidad}/${anio}/${termino}/${page}/${size}`;\r\n if (nombres && nombres.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n if (!nombres || nombres.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n\r\n setLoading(false);\r\n if (data && data.total && data.datos) {\r\n setParalelos(data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" })));\r\n setTotal(data.total);\r\n } else {\r\n setParalelos([]);\r\n setTotal(0);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.title = TITLE + \" - Profesores de mi unidad\";\r\n if (currentUser && currentUser !== undefined) {\r\n populateInitialData(currentUser);\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n setLoading(true);\r\n populateData(currentUser);\r\n }\r\n }, [state]);\r\n\r\n const handleInputChange = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n const { unidad, anio, termino } = state;\r\n const page = 1;\r\n const size = 10;\r\n\r\n if (name === \"unidad\") {\r\n props.history.push(`/paralelos-unidad/${value}/${anio}/${termino}/${page}/${size}`);\r\n setState({ ...state, unidad: value, nombres: \"\", apellidos: \"\", page: page, size: size });\r\n } else if (name === \"anio\") {\r\n props.history.push(`/paralelos-unidad/${unidad}/${value}/${termino}/${page}/${size}`);\r\n setState({ ...state, anio: value, nombres: \"\", apellidos: \"\", page: page, size: size });\r\n } else if (name === \"termino\") {\r\n props.history.push(`/paralelos-unidad/${unidad}/${anio}/${value}/${page}/${size}`);\r\n setState({ ...state, termino: value, nombres: \"\", apellidos: \"\", page: page, size: size });\r\n }\r\n };\r\n\r\n\r\n const handleDocenteInput = (apellidos, nombres) => {\r\n const { unidad, anio, termino } = state;\r\n props.history.push(`/paralelos-unidad/${unidad}/${anio}/${termino}/${1}/${10}`);\r\n setState({\r\n ...state,\r\n apellidos: apellidos == null ? \"\" : apellidos.trim(),\r\n nombres: nombres == null ? \"\" : nombres.trim(),\r\n page: 1, size: 10\r\n });\r\n };\r\n\r\n const handlePage = (url, page, size) => {\r\n props.history.push(`${url}/${page}/${size}`);\r\n setState({ ...state, page: page, size: size });\r\n };\r\n\r\n const toggle = (paralelo) => {\r\n const i = paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n datapdf: data\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const formatter = (valor) => {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor);\r\n };\r\n\r\n const renderTable = (paralelos) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelCódigoMateriaParaleloDocente% RespuestasCalificación
{p.anio}{p.termino}{p.nivel}{p.codigo}{p.materia}{p.paralelo}{p.apellidos} {p.nombres}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {formatter(p.promedio)}\r\n
\r\n \r\n \r\n } />\r\n \r\n \r\n \r\n {\"Detalle\"}\r\n \r\n \r\n toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n \r\n Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n } />\r\n \r\n \r\n \r\n {\"Comentario\"}\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable(paralelos);\r\n\r\n return (\r\n
\r\n

Docentes de mi unidad

\r\n \r\n {contents}\r\n
\r\n );\r\n};\r\n\r\nexport default UnidadParalelos;","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class MateriasConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n nombre: this.props.nombre, codigo: this.props.codigo\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n\r\n if (name == \"nombre\") {\r\n this.setState({ nombre: value });\r\n }\r\n else if (name == \"codigo\") {\r\n this.setState({ codigo: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n //console.log(\"submit\");\r\n event.preventDefault();\r\n const { url, page, size } = this.props;\r\n const { nombre, codigo } = this.state;\r\n //console.log(\"url = \" + url + \" page = \" + page + \" size = \" + size + \" nombre = \" + nombre + \" codigo = \" + codigo);\r\n this.props.handle(url, page, size, codigo, nombre);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nMateriasConsulta.propTypes = {\r\n nombre: PropTypes.any,\r\n codigo: PropTypes.any,\r\n handle: PropTypes.func\r\n};\r\n\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Paginacion } from './Paginacion';\r\nimport { MateriasConsulta } from './MateriasConsulta';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Materias extends Component {\r\n static displayName = Materias.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { materias: [], page: 1, size: 10, codigo: \"\", nombre: \"\", loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por materia\";\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const codigo = this.props.match.params[\"search1\"] || this.state.codigo || \"\";\r\n const nombre = this.props.match.params[\"search2\"] || this.state.nombre || \"\";\r\n if (this.state.loading) {\r\n this.populateData(page, size, codigo, nombre);\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const codigo = this.props.match.params[\"search1\"] || this.state.codigo || \"\";\r\n const nombre = this.props.match.params[\"search2\"] || this.state.nombre || \"\";\r\n if (this.state.loading) {\r\n this.populateData(page, size, codigo, nombre);\r\n }\r\n\r\n }\r\n\r\n handlePage(url, page, size, codigo, nombre) {\r\n let newUrl = `${url}/${page}/${size}`;\r\n\r\n if (codigo && codigo.trim() !== \"\") {\r\n newUrl += `/${encodeURIComponent(codigo.trim())}`;\r\n }\r\n if (nombre && nombre.trim() !== \"\") {\r\n if (!codigo || codigo.trim() === \"\") newUrl += `/${encodeURIComponent(\" \")}`;\r\n newUrl += `/${encodeURIComponent(nombre.trim())}`;\r\n }\r\n\r\n this.props.history.push(newUrl);\r\n this.setState({ loading: true, page: page, size: size, codigo: codigo, nombre: nombre });\r\n }\r\n\r\n renderTable(materias) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {materias.map(materia =>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
CódigoMateria{''}
{materia.codigo}{materia.materia}\r\n Detalle\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const codigo = this.props.match.params[\"search1\"] || this.state.codigo || \" \";\r\n const nombre = this.props.match.params[\"search2\"] || this.state.nombre || \" \";\r\n\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.materias);\r\n\r\n return (\r\n
\r\n

Histórico por materias

\r\n
\r\n \r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(page, size, codigo, nombre) {\r\n let apiUrl = `${APIURL}/api/reportes/materias/${page}/${size}`;\r\n if (codigo && codigo.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(codigo.trim())}`;\r\n }\r\n if (nombre && nombre.trim() !== \"\") {\r\n if (!codigo || codigo.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(nombre.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n this.setState({ total: data.total, materias: data.datos, page: page, size: size, codigo: codigo, nombre: nombre, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { Paginacion } from './Paginacion';\r\n\r\nimport Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nexport class ParalelosMateria extends Component {\r\n static displayName = ParalelosMateria.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, page: 1, size: 10, codigo: \"\", paralelos: [], loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por materia\";\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n this.populateData(codigo, page, size);\r\n }\r\n\r\n componentDidUpdate() {\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n if (page != this.state.page) {\r\n this.populateData(codigo, page, size);\r\n }\r\n\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.setState({ loading: true }, () => {\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n });\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Generando PDF...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n fetch(`${APIURL}/api/reportes/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n MySwal.close();\r\n })\r\n .catch(error => {\r\n Swal.fire({\r\n icon: 'error',\r\n title: 'Error',\r\n text: 'No se pudo generar el PDF.',\r\n allowOutsideClick: false\r\n });\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n\r\n }\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(paralelos) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelDocenteParalelo% RespuestasCalificación{' '}
{p.anio}{p.termino}{p.nivel}{p.apellidos} {p.nombres}{p.paralelo}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {p.evaluados > 0 ? this.formatter(p.promedio) : \"-\"} \r\n {p.evaluados > 0 && (<>\r\n Detalle\r\n\r\n this.toggle(p)}>PDF\r\n \r\n Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )} \r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelos);\r\n\r\n return (\r\n
\r\n

Histórico por materia

\r\n

Materia: {this.state.paralelos && this.state.paralelos.length > 0 && this.state.paralelos[0].codigo + \" \" + this.state.paralelos[0].materia}

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(codigo, page = 1, size = 10) {\r\n const response = await fetch(`${APIURL}/api/reportes/paralelos-materia/${codigo}/${page}/${size}`);\r\n const data = await response.json();\r\n if (data && data.total && data.datos) {\r\n const paralelos = data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" }));\r\n\r\n this.setState({ total: data.total, page: page, size: size, codigo: codigo, paralelos: paralelos, loading: false });\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class ProfesoresConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n apellidos: this.props.apellidos, nombres: this.props.nombres\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n\r\n if (name == \"apellidos\") {\r\n this.setState({ apellidos: value });\r\n }\r\n else if (name == \"nombres\") {\r\n this.setState({ nombres: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n //console.log(\"submit\");\r\n event.preventDefault();\r\n const { url, page, size } = this.props;\r\n const { apellidos, nombres } = this.state;\r\n //console.log(\"url = \" + url + \" page = \" + page + \" size = \" + size + \" apellidos = \" + apellidos + \" nombres = \" + nombres);\r\n this.props.handle(url, page, size, apellidos, nombres);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nProfesoresConsulta.propTypes = {\r\n apellidos: PropTypes.any,\r\n nombres: PropTypes.any,\r\n handle: PropTypes.func\r\n};\r\n\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Paginacion } from './Paginacion';\r\nimport { ProfesoresConsulta } from './ProfesoresConsulta';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Profesores extends Component {\r\n static displayName = Profesores.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { profesores: [], page: 1, size: 10, apellidos: \"\", nombres: \"\", loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const apellidos = this.props.match.params[\"search1\"] || this.state.apellidos || \"\";\r\n const nombres = this.props.match.params[\"search2\"] || this.state.nombres || \"\";\r\n //console.log(\"page = \" + page + \" size = \" + size + \" apellidos = \" + apellidos + \" nombres = \" + nombres);\r\n if (this.state.loading) {\r\n this.populateData(page, size, apellidos.trim(), nombres.trim());\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const apellidos = this.props.match.params[\"search1\"] || this.state.apellidos || \" \";\r\n const nombres = this.props.match.params[\"search2\"] || this.state.nombres || \" \";\r\n //console.log(\"page = \" + page + \" size = \" + size + \" apellidos = \" + apellidos + \" nombres = \" + nombres);\r\n if (this.state.loading) {\r\n this.populateData(page, size, apellidos, nombres);\r\n }\r\n }\r\n\r\n handlePage(url, page, size, apellidos, nombres) {\r\n\r\n let newUrl = `${url}/${page}/${size}`;\r\n\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n newUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n if (nombres && nombres.trim() !== \"\") {\r\n if (!apellidos || apellidos.trim() === \"\") newUrl += `/${encodeURIComponent(\" \")}`;\r\n newUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n\r\n this.props.history.push(newUrl);\r\n this.setState({ loading: true, page: page, size: size, apellidos: apellidos, nombres: nombres });\r\n }\r\n\r\n renderTable(profesores) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {profesores.map(profesor =>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
ApellidosNombresAcciones
{profesor.apellidos}{profesor.nombres}\r\n Detalle\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const apellidos = this.props.match.params[\"search1\"] || this.state.apellidos || \"\";\r\n const nombres = this.props.match.params[\"search2\"] || this.state.nombres || \"\";\r\n\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.profesores);\r\n\r\n return (\r\n
\r\n

Histórico por Profesores

\r\n
\r\n \r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(page, size, apellidos, nombres) {\r\n let apiUrl = `${APIURL}/api/reportes/profesores/${page}/${size}`;\r\n\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n if (nombres && nombres.trim() !== \"\") {\r\n if (!apellidos || apellidos.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n this.setState({ total: data.total, profesores: data.datos, page: page, size: size, apellidos: apellidos, nombres: nombres, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { Paginacion } from './Paginacion';\r\nimport './PdfViewer.css';\r\n\r\nimport Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nexport class ParalelosProfesor extends Component {\r\n static displayName = ParalelosProfesor.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, page: 1, size: 10, identificacion: \"\", paralelos: [], loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n this.populateData(identificacion, page, size);\r\n }\r\n\r\n componentDidUpdate() {\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n if (page != this.state.page) {\r\n this.populateData(identificacion, page, size);\r\n }\r\n\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Generando PDF...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n let url = paralelo.codigo !== 'PRASC' && paralelo.codigo !== 'PRAEM' ?\r\n `${APIURL}/api/reportes/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}` :\r\n `${APIURL}/api/reportes/reporte-practica-pdf/${paralelo.anio}/${paralelo.codigo}/${paralelo.cedula}`;\r\n\r\n fetch(url)\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n MySwal.close();\r\n })\r\n .catch(error => {\r\n Swal.fire({\r\n icon: 'error',\r\n title: 'Error',\r\n text: 'No se pudo generar el PDF.',\r\n allowOutsideClick: false\r\n });\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n\r\n }\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(paralelos) {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelCódigoMateriaParalelo% RespuestasCalificación{' '}
{p.anio}{p.termino ? p.termino : 'N/A'}{p.nivel}{p.codigo}{p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? p.materia : p.codigo === \"PRAEM\" ? \"Tutoría de prácticas empresariales\" : \"Tutoría de prácticas de servicio comunitario\"}{p.paralelo ? p.paralelo : 'N/A'}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {p.evaluados > 0 ? this.formatter(p.promedio) : \"-\"}\r\n\r\n {p.evaluados == 0 ? null : p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? (\r\n Detalle\r\n ) : (\r\n Detalle\r\n )}\r\n\r\n {p.evaluados > 0 && (<>\r\n this.toggle(p)}>PDF\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? 'Detalle Paralelo' : 'Detalle Tutor'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.state.total > 0 ? this.renderTable(this.state.paralelos) :

No hay datos disponibles

;\r\n\r\n return (\r\n
\r\n

Histórico por profesor

\r\n

Docente: {this.state.paralelos && this.state.paralelos.length > 0 && this.state.paralelos[0].apellidos + \" \" + this.state.paralelos[0].nombres}

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(identificacion, page = 1, size = 10) {\r\n const response = await fetch(`${APIURL}/api/reportes/paralelos-profesor/${identificacion}/${page}/${size}`);\r\n const data = await response.json();\r\n if (data && (data.total || data.total == 0) && data.datos) {\r\n const paralelos = data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" }));\r\n\r\n this.setState({ total: data.total, page: page, size: size, identificacion: identificacion, paralelos: paralelos, loading: false });\r\n }\r\n\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { UncontrolledTooltip, Table } from 'reactstrap';\r\n\r\nexport function TablaCabecera({ paralelo }) {\r\n\r\n function formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n const porcentaje = Math.round(paralelo.evaluados * 100 / paralelo.registrados);\r\n let i = 0;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelo.programa != null &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Datos generales
Periodo:{paralelo.anio} - {paralelo.termino}Unidad:{paralelo.unidad}
Programa:{paralelo.programa}Cohorte:{paralelo.cohorte}
Curso:{paralelo.codigo} {paralelo.materia} P. {paralelo.paralelo}% Respuestas:\r\n {porcentaje}%\r\n \r\n {paralelo.evaluados}/{paralelo.registrados}\r\n \r\n
Docente:{paralelo.apellidos} {paralelo.nombres}Promedio paralelo:{formatter(paralelo.promedio)}
\r\n );\r\n\r\n}","import React from \"react\";\r\n\r\nexport function TablaPromedios({ area, preguntas }) {\r\n\r\n function formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {preguntas.map((p, index) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
{area.area}
PreguntaMediaDesviación estándarPuntaje obtenido
{index+1}{p.pregunta}{formatter(p.media)}{formatter(p.desviacionestandar)}{formatter(p.porcentaje * 100.0) + \" %\"}
\r\n );\r\n}","import React from 'react';\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n} from 'chart.js';\r\nimport { Bar } from 'react-chartjs-2';\r\n\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend\r\n);\r\n\r\nexport function GraficoBarras(props) {\r\n const { labels, values, title } = props;\r\n\r\n const options = {\r\n //animation: false,\r\n transitions: {\r\n active: {\r\n animation: {\r\n duration: 0\r\n },\r\n },\r\n },\r\n indexAxis: 'y',\r\n elements: {\r\n bar: {\r\n borderWidth: 2,\r\n },\r\n },\r\n responsive: true,\r\n plugins: {\r\n legend: {\r\n position: 'right',\r\n },\r\n title: {\r\n display: true,\r\n text: title,\r\n },\r\n datalabels: {\r\n formatter: function (value, context) {\r\n return value + '%';\r\n }\r\n }\r\n },\r\n };\r\n\r\n const data = {\r\n labels,\r\n datasets: [\r\n {\r\n label: 'Promedio Profesor',\r\n data: values,\r\n borderColor: 'rgb(255, 99, 132)',\r\n backgroundColor: 'rgba(255, 99, 132, 0.5)',\r\n },\r\n {\r\n label: 'Promedio unidad',\r\n data: values,\r\n borderColor: 'rgb(53, 162, 235)',\r\n backgroundColor: 'rgba(53, 162, 235, 0.5)',\r\n },\r\n ],\r\n };\r\n\r\n return ;\r\n}","import React, { useRef, useCallback } from 'react';\r\nimport { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';\r\nimport { Bar } from 'react-chartjs-2';\r\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\r\n\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n ChartDataLabels\r\n);\r\n\r\nexport function GraficoBarrasApiladas(props) {\r\n const { id, animation, labels, values, titulo, evaluados } = props;\r\n const divRef = useRef(null);\r\n const imgRef = useRef(null);\r\n\r\n const options = computeOptions(id, animation, titulo);\r\n const borderColorsL0 = ['rgb(255, 0, 0)', 'rgb(255, 205, 86)', 'rgb(0, 128, 0)',];\r\n const backgroundColorsL0 = ['rgba(255, 0, 0, 0.2)', 'rgba(255, 255, 0, 0.4)', 'rgba(0, 128, 0, 0.6)'];\r\n const borderColorsL1 = ['rgb(128, 128, 128)', 'rgb(255, 0, 0)', 'rgb(255, 162, 0)', 'rgb(255, 205, 86)', 'rgb(0, 192, 0)', 'rgb(0, 128, 0)',];\r\n const backgroundColorsL1 = ['rgba(128, 128, 128, 0.2)', 'rgba(255, 0, 0, 0.2)', 'rgba(255, 162, 0, 0.2)', 'rgba(255, 255, 0, 0.4)', 'rgba(0, 192, 0, 0.4)', 'rgba(0, 128, 0, 0.6)'];\r\n const borderColorsL2 = ['rgb(128, 128, 128)', 'rgb(255, 0, 0)', 'rgb(255, 40, 0)', 'rgb(255, 81, 0)', 'rgb(255, 162, 0)', 'rgb(255, 205, 162)', 'rgb(255, 205, 162)', 'rgb(255, 205, 86)', 'rgb(0, 96, 0)', 'rgb(0, 192, 0)', 'rgb(0, 128, 0)',];\r\n const backgroundColorsL2 = ['rgba(128, 128, 128, 0.2)', 'rgba(255, 145, 145, 1)', 'rgba(255, 145, 102, 1)', 'rgba(255, 172, 102, 1)', 'rgba(255, 206, 137, 1)', 'rgba(255, 227, 188, 1)', 'rgba(255, 255, 188, 1)', 'rgba(255, 255, 97, 1)', 'rgba(173, 255, 97, 1)', 'rgba(101, 204, 0, 1)', 'rgba(60, 158, 70, 1)']\r\n const data = {\r\n labels,\r\n datasets: generateData(values, evaluados)\r\n };\r\n\r\n const chartRef = useCallback(chart => {\r\n const div = divRef.current;\r\n let divStyle = \"display: block\";\r\n if (animation === undefined || animation) {\r\n console.log(\"chartjs\");\r\n if (div != null) {\r\n divStyle = \"display: block\";\r\n }\r\n \r\n }\r\n else { \r\n \r\n const img = imgRef.current;\r\n\r\n var url = chart != null ? chart.toBase64Image() : \"\";\r\n\r\n if (img != null && url != null) {\r\n img.src = url;\r\n }\r\n\r\n divStyle = \"display: none\";\r\n }\r\n if (div != null) {\r\n div.style = divStyle;\r\n }\r\n }, []);\r\n\r\n function computeOptions(id, animation, titulo) {\r\n return {\r\n animation: animation,\r\n //onAnimationComplete: done(id, animation),\r\n indexAxis: 'y',\r\n elements: {\r\n bar: {\r\n borderWidth: 2,\r\n },\r\n },\r\n responsive: true,\r\n scales: {\r\n x: {\r\n stacked: true,\r\n max: 100,\r\n },\r\n y: {\r\n stacked: true\r\n }\r\n },\r\n plugins: {\r\n legend: {\r\n position: 'right',\r\n },\r\n title: {\r\n display: true,\r\n text: titulo,\r\n },\r\n datalabels: {\r\n display: function (context) {\r\n var index = context.dataIndex;\r\n var value = context.dataset.data[index];\r\n return value > 0;\r\n },\r\n formatter: function (value, context) {\r\n return value + '%';\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n function generateData(data, evaluados) {\r\n //console.log(data);\r\n const etiquetas = [];\r\n data.forEach(p => {\r\n if (etiquetas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n etiquetas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n const totalEtiquetas = etiquetas.length;\r\n const datasets = etiquetas.map(e => {\r\n var borderColor;\r\n var backgroundColor;\r\n if (totalEtiquetas <= 3) {\r\n borderColor = borderColorsL0[e.ordenAlternativa - 1];\r\n backgroundColor = backgroundColorsL0[e.ordenAlternativa - 1];\r\n }\r\n else if (totalEtiquetas <= 6) {\r\n borderColor = borderColorsL1[e.ordenAlternativa - 1];\r\n backgroundColor = backgroundColorsL1[e.ordenAlternativa - 1];\r\n }\r\n else {\r\n borderColor = borderColorsL2[e.ordenAlternativa ];\r\n backgroundColor = backgroundColorsL2[e.ordenAlternativa ];\r\n }\r\n //console.log(data.filter(d => d.ordenAlternativa == e.ordenAlternativa).map(a => a.frecuencia/evaluados));\r\n\r\n return {\r\n label: e.alternativa,\r\n data: data.filter(d => d.ordenAlternativa == e.ordenAlternativa).map(a => (a.frecuencia * 100 / evaluados).toFixed(0)),\r\n borderColor: backgroundColor, //borderColor,\r\n backgroundColor: backgroundColor\r\n }\r\n });\r\n console.log(\"data = \" + JSON.stringify(datasets));\r\n return datasets;\r\n }\r\n\r\n return (<>\r\n
\r\n \r\n
\r\n {animation !== undefined && !animation &&\r\n \r\n }\r\n );\r\n}","import React, { Component } from 'react';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, UncontrolledCollapse, Card, CardHeader, CardBody } from 'reactstrap';\r\nimport { TablaCabecera } from './TablaCabecera';\r\nimport { TablaPromedios } from './TablaPromedios';\r\nimport { GraficoBarras } from './GraficoBarras';\r\nimport { GraficoBarrasApiladas } from './GraficoBarrasApiladas';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Paralelo extends Component {\r\n static displayName = Paralelo.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { paralelo: null, datos: [], areas: [], frecuencias: [], alternativas: [], modo: \"view\", loading: true };\r\n //console.log(props.match);\r\n this.onDownloadPdf = this.onDownloadPdf.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const anio = this.props.match.params[\"anio\"];\r\n const termino = this.props.match.params[\"termino\"];\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const paralelo = this.props.match.params[\"paralelo\"];\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const modo = this.props.match.params[\"modo\"] || \"view\";\r\n this.populateData(anio, termino, codigo, paralelo, identificacion, modo);\r\n }\r\n\r\n toggle(area) {\r\n const i = this.state.areas.indexOf(area);\r\n this.setState(({ areas }) => ({\r\n areas: [\r\n ...areas.slice(0, i),\r\n {\r\n ...areas[i],\r\n comparativo: !areas[i].comparativo,\r\n },\r\n ...areas.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n splitwords(text, size = 40) {\r\n if (text.length <= size)\r\n return text;\r\n const chunks = text.split(\" \");\r\n const parts = [];\r\n var aux = \"\";\r\n for (var c in chunks) {\r\n if (aux.length + chunks[c].length <= size) {\r\n aux += chunks[c] + \" \";\r\n }\r\n else {\r\n parts.push(aux);\r\n aux = chunks[c] + \" \";\r\n }\r\n }\r\n parts.push(aux);\r\n return parts;\r\n }\r\n\r\n onDownloadPdf() {\r\n const { paralelo } = this.state;\r\n fetch(`${APIURL}/api/reportes/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n if (data) {\r\n let a = document.createElement(\"a\");\r\n a.href = `data:application/pdf;base64,${data.result}`;\r\n a.download = `reporte-${paralelo.anio}-${paralelo.termino}-${paralelo.codigo}-${paralelo.paralelo}-${paralelo.cedula}.pdf`;\r\n a.click();\r\n }\r\n });\r\n }\r\n\r\n renderTable(paralelo, datos, areas, frecuencias, alternativas) {\r\n //console.log(datos);\r\n return (\r\n <>\r\n \r\n {areas && areas.map((a) => {\r\n const preguntas = datos.filter(p => a.idarea == p.idarea);\r\n //const etiquetas = preguntas.map(p => this.splitwords(p.pregunta));\r\n const etiquetas = preguntas.map((p, index) => index+1);\r\n const valoresFrecuencias = frecuencias.filter(f => f.idarea == a.idarea).map(p => { return { ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa, frecuencia: p.frecuencia } });\r\n const valoresPuntaje = preguntas.map(p => this.formatter(p.porcentaje * 100));\r\n return (\r\n
\r\n \r\n {/*{' '}
*/}\r\n {this.state.modo == \"view\" ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n
\r\n \r\n Gráfico comparativo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n })}\r\n \r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelo, this.state.datos, this.state.areas, this.state.frecuencias, this.state.alternativas);\r\n\r\n return (\r\n
\r\n {/*
*/}\r\n \r\n
\r\n

Reporte por Paralelo

\r\n {contents}\r\n
\r\n
\r\n );\r\n }\r\n\r\n async populateData(anio, termino, codigo, paralelo, identificacion, modo) {\r\n const response = await fetch(`${APIURL}/api/reportes/paralelo/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reportes/paralelo-detalle/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n const dataParalelo = await dataResponse.json();\r\n const areas = [];\r\n dataParalelo.forEach(p => {\r\n if (areas.every(a => a.idarea !== p.idarea)) {\r\n areas.push({ idarea: p.idarea, area: p.area, comparativo:false });\r\n }\r\n });\r\n\r\n const frecuenciasResponse = await fetch(`${APIURL}/api/reportes/paralelo-frecuencias/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n const dataFrecuencias = await frecuenciasResponse.json();\r\n const alternativas = [];\r\n dataFrecuencias.forEach(p => {\r\n if (alternativas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n alternativas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n\r\n if (dataParalelo && dataFrecuencias) {\r\n this.setState({ paralelo: data, datos: dataParalelo, areas: areas, frecuencias: dataFrecuencias, alternativas: alternativas, modo: modo, loading: false });\r\n }\r\n \r\n }\r\n}\r\n","import React from \"react\";\r\nimport { UncontrolledTooltip, Table } from 'reactstrap';\r\n\r\nexport function TablaCabeceraPractica({ practica }) {\r\n\r\n function formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n const porcentaje = Math.round(practica.evaluados * 100 / practica.registrados);\r\n let i = 0;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {practica.programa != null &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Datos generales
Periodo:{practica.anio}Unidad:{practica.unidad}
Programa:{practica.programa}Cohorte:{practica.cohorte}
Actividad:{practica.codigo === \"PRAEM\" ? \"Tutoría de prácticas empresariales\" : \"Tutoría de prácticas de servicio comunitario\"}% Respuestas:\r\n {porcentaje}%\r\n \r\n {practica.evaluados}/{practica.registrados}\r\n \r\n
Tutor:{practica.apellidos} {practica.nombres}Promedio:{formatter(practica.promedio)}
\r\n );\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, UncontrolledCollapse, Card, CardHeader, CardBody } from 'reactstrap';\r\nimport { TablaCabeceraPractica } from './TablaCabeceraPractica';\r\nimport { TablaPromedios } from './TablaPromedios';\r\nimport { GraficoBarras } from './GraficoBarras';\r\nimport { GraficoBarrasApiladas } from './GraficoBarrasApiladas';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Practica extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { practica: null, datos: [], areas: [], frecuencias: [], alternativas: [], modo: \"view\", loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por tutor\";\r\n const anio = this.props.match.params[\"anio\"];\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const modo = this.props.match.params[\"modo\"] || \"view\";\r\n this.populateData(anio, codigo, identificacion, modo);\r\n }\r\n\r\n toggle(area) {\r\n const i = this.state.areas.indexOf(area);\r\n this.setState(({ areas }) => ({\r\n areas: [\r\n ...areas.slice(0, i),\r\n {\r\n ...areas[i],\r\n comparativo: !areas[i].comparativo,\r\n },\r\n ...areas.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n splitwords(text, size = 40) {\r\n if (text.length <= size)\r\n return text;\r\n const chunks = text.split(\" \");\r\n const parts = [];\r\n var aux = \"\";\r\n for (var c in chunks) {\r\n if (aux.length + chunks[c].length <= size) {\r\n aux += chunks[c] + \" \";\r\n }\r\n else {\r\n parts.push(aux);\r\n aux = chunks[c] + \" \";\r\n }\r\n }\r\n parts.push(aux);\r\n return parts;\r\n }\r\n\r\n renderTable(practica, datos, areas, frecuencias, alternativas) {\r\n //console.log(datos);\r\n return (\r\n <>\r\n \r\n {areas && areas.map((a) => {\r\n const preguntas = datos.filter(p => a.idarea == p.idarea);\r\n \r\n const etiquetas = preguntas.map((p, index) => index + 1);\r\n const valoresFrecuencias = frecuencias.filter(f => f.idarea == a.idarea).map(p => { return { ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa, frecuencia: p.frecuencia } });\r\n const valoresPuntaje = preguntas.map(p => this.formatter(p.porcentaje * 100));\r\n return (\r\n
\r\n \r\n \r\n {this.state.modo == \"view\" ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n
\r\n \r\n Gráfico comparativo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n })}\r\n\r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.practica, this.state.datos, this.state.areas, this.state.frecuencias, this.state.alternativas);\r\n\r\n return (\r\n
\r\n
\r\n

Reporte por Tutor

\r\n {contents}\r\n
\r\n
\r\n );\r\n }\r\n\r\n async populateData(anio, codigo, identificacion, modo) {\r\n const response = await fetch(`${APIURL}/api/reportes/practica/${anio}/${codigo}/${identificacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reportes/practica-detalle/${anio}/${codigo}/${identificacion}`);\r\n const dataPractica = await dataResponse.json();\r\n const areas = [];\r\n dataPractica.forEach(p => {\r\n if (areas.every(a => a.idarea !== p.idarea)) {\r\n areas.push({ idarea: p.idarea, area: p.area, comparativo: false });\r\n }\r\n });\r\n\r\n const frecuenciasResponse = await fetch(`${APIURL}/api/reportes/practica-frecuencias/${anio}/${codigo}/${identificacion}`);\r\n const dataFrecuencias = await frecuenciasResponse.json();\r\n const alternativas = [];\r\n dataFrecuencias.forEach(p => {\r\n if (alternativas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n alternativas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n\r\n if (dataPractica && dataFrecuencias) {\r\n this.setState({ practica: data, datos: dataPractica, areas: areas, frecuencias: dataFrecuencias, alternativas: alternativas, modo: modo, loading: false });\r\n }\r\n\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { Table } from 'reactstrap';\r\n\r\nexport function TablaComentarios({ tipo, comentarios }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {comentarios && comentarios.map((c, index) => {\r\n return \r\n \r\n \r\n \r\n })}\r\n \r\n
{ tipo }
{ index+1 }.-{c}
\r\n );\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, UncontrolledCollapse, Card, CardHeader, CardBody } from 'reactstrap';\r\nimport { TablaCabecera } from './TablaCabecera';\r\nimport { TablaComentarios } from './TablaComentarios';\r\nimport { AppContext } from './../AppContext';\r\n//import Swal from 'sweetalert2'\r\n//import withReactContent from 'sweetalert2-react-content'\r\n\r\n//const MySwal = withReactContent(Swal);\r\n//const TITLE = process.env.REACT_APP_TITLE;\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Comentarios extends Component {\r\n static displayName = Comentarios.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { paralelo: null, datos: [], areas: [], frecuencias: [], alternativas: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n const currentUser = this.context.currentUser;\r\n const { loading } = this.state;\r\n document.title = TITLE + \" - Comentarios por profesor\";\r\n\r\n const params = this.props.match.params;\r\n\r\n if (currentUser && currentUser != undefined && loading) {\r\n if (Object.keys(params).length === 3) {\r\n const { sistema, idcurso, idpersona } = params;\r\n this.populateData(sistema, idcurso, idpersona);\r\n } else {\r\n const { anio, termino, codigo, paralelo, identificacion, idnivelformacion } = params;\r\n this.populateData2(anio, termino, codigo, paralelo, identificacion, idnivelformacion);\r\n }\r\n }\r\n }\r\n\r\n toggle(area) {\r\n const i = this.state.areas.indexOf(area);\r\n this.setState(({ areas }) => ({\r\n areas: [\r\n ...areas.slice(0, i),\r\n {\r\n ...areas[i],\r\n comparativo: !areas[i].comparativo,\r\n },\r\n ...areas.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(paralelo, data) {\r\n let comentario = [];\r\n data.forEach(c => {\r\n if (c.comentario && c.comentario.length > 0) {\r\n comentario.push(c.comentario);\r\n }\r\n });\r\n\r\n let mantener = [];\r\n data.forEach(c => {\r\n if (c.mantener && c.mantener.length > 0) {\r\n mantener.push(c.mantener);\r\n }\r\n });\r\n\r\n let mejorar = [];\r\n data.forEach(c => {\r\n if (c.mejorar && c.mejorar.length > 0) {\r\n mejorar.push(c.mejorar);\r\n }\r\n });\r\n let cambiar = [];\r\n data.forEach(c => {\r\n if (c.cambiar && c.cambiar.length > 0) {\r\n cambiar.push(c.cambiar);\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {comentario && comentario.length > 0 && }\r\n
\r\n {mantener && mantener.length > 0 && }\r\n
\r\n {mejorar && mejorar.length > 0 && }\r\n
\r\n {cambiar && cambiar.length > 0 && }\r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelo, this.state.comentarios);\r\n\r\n return (\r\n <>\r\n
\r\n

Comentarios por Paralelo

\r\n {contents}\r\n
\r\n \r\n );\r\n }\r\n\r\n async populateData2(anio, termino, codigo, paralelo, identificacion, idnivelformacion) {\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}/${idnivelformacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor-comentarios/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}/${idnivelformacion}`);\r\n const dataComentarios = await dataResponse.json();\r\n\r\n this.setState({ paralelo: data, comentarios: dataComentarios, loading: false });\r\n }\r\n\r\n async populateData(sistema, idcurso, idpersona) {\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor/${sistema}/${idcurso}/${idpersona}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor-comentarios/${sistema}/${idcurso}/${idpersona}`);\r\n const dataComentarios = await dataResponse.json();\r\n\r\n this.setState({ paralelo: data, comentarios: dataComentarios, loading: false });\r\n }\r\n}\r\nComentarios.contextType = AppContext;","import React, { useState, useEffect, useContext } from 'react';\r\nimport { TablaCabeceraPractica } from './TablaCabeceraPractica';\r\nimport { TablaComentarios } from './TablaComentarios';\r\nimport { AppContext } from './../AppContext';\r\n//import Swal from 'sweetalert2'\r\n//import withReactContent from 'sweetalert2-react-content'\r\n\r\n//const MySwal = withReactContent(Swal);\r\n\r\n//const TITLE = process.env.REACT_APP_TITLE;\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nfunction ComentariosPractica({ match }) {\r\n\r\n document.title = TITLE + \" - Comentarios por tutor\";\r\n\r\n const [practica, setPractica] = useState(null);\r\n const [comentarios, setComentarios] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n useEffect(() => {\r\n const { anio, codigo, identificacion } = match.params;\r\n\r\n if (currentUser && currentUser != undefined) {\r\n populateData(anio, codigo, identificacion);\r\n }\r\n }, [match.params]);\r\n\r\n async function populateData(anio, codigo, identificacion) {\r\n try {\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/practica-profesor/${anio}/${codigo}/${identificacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reporte-usuario/practica-profesor-comentarios/${anio}/${codigo}/${identificacion}`);\r\n const dataComentarios = await dataResponse.json();\r\n\r\n setPractica(data);\r\n setComentarios(dataComentarios);\r\n setLoading(false);\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function renderTable(practica, data) {\r\n let comentario = [];\r\n data.forEach(c => {\r\n if (c.comentario && c.comentario.length > 0) {\r\n comentario.push(c.comentario);\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {comentario && comentario.length > 0 && }\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n

Comentarios por Tutor

\r\n {loading ?

Loading...

: renderTable(practica, comentarios)}\r\n
\r\n );\r\n}\r\n\r\nexport default ComentariosPractica;\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Button, FormGroup, Label, Input } from 'reactstrap';\r\nimport { AppContext } from '../AppContext';\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport { Card, CardHeader, CardBody, Row, Col } from 'reactstrap';\r\nimport { FaFileExcel } from 'react-icons/fa';\r\nimport withRoleAccess from './withRoleAccess';\r\n\r\nconst MySwal = withReactContent(Swal);\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst ReportesConsolidados = () => {\r\n\r\n const [yearEspae, setYearEspae] = useState('');\r\n const [termEspae, setTermEspae] = useState('');\r\n const [yearsEspae, setYearsEspae] = useState([]);\r\n\r\n const [yearGrado, setYearGrado] = useState('');\r\n const [termGrado, setTermGrado] = useState('');\r\n const [yearsGrado, setYearsGrado] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/periodo-encuesta-espae`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setYearsEspae(data);\r\n if (data && data.length > 0) {\r\n setYearEspae(data[0].anio);\r\n }\r\n })\r\n .catch(error => console.error('Error al consultar los datos:', error));\r\n\r\n fetch(`${APIURL}/api/reporte-usuario/periodo-encuesta-grado`)\r\n .then(response => response.json())\r\n .then(data => {\r\n setYearsGrado(data);\r\n if (data && data.length > 0) {\r\n setYearGrado(data[0].anioAcademico);\r\n }\r\n })\r\n .catch(error => console.error('Error al consultar los datos:', error));\r\n\r\n }\r\n }, [currentUser]);\r\n\r\n const handleYearEspaeChange = (e) => {\r\n setYearEspae(e.target.value);\r\n };\r\n\r\n const handleTermEspaeChange = (e) => {\r\n setTermEspae(e.target.value);\r\n };\r\n const handleYearGradoChange = (e) => {\r\n setYearGrado(e.target.value);\r\n };\r\n\r\n const handleTermGradoChange = (e) => {\r\n setTermGrado(e.target.value);\r\n };\r\n\r\n\r\n const downloadReportEspae = async (endpoint) => {\r\n try {\r\n MySwal.fire({\r\n title: 'Generando reporte...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n const requestBody = {\r\n anio: yearEspae,\r\n termino: termEspae\r\n };\r\n\r\n fetch(`${APIURL}${endpoint}`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(requestBody)\r\n })\r\n .then(response => {\r\n const contentDisposition = response.headers.get('Content-Disposition');\r\n let filename = 'reporte.xlsx';\r\n if (contentDisposition) {\r\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n const matches = filenameRegex.exec(contentDisposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, '');\r\n }\r\n }\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n });\r\n });\r\n } catch (error) {\r\n MySwal.fire('Error', 'Error al generar el reporte', 'error');\r\n }\r\n };\r\n\r\n const downloadReportGrado = async (endpoint) => {\r\n try {\r\n MySwal.fire({\r\n title: 'Generando reporte...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n const requestBody = {\r\n anio: yearGrado,\r\n termino: termGrado\r\n };\r\n\r\n fetch(`${APIURL}${endpoint}`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(requestBody)\r\n })\r\n .then(response => {\r\n const contentDisposition = response.headers.get('Content-Disposition');\r\n let filename = 'reporte.xlsx';\r\n if (contentDisposition) {\r\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n const matches = filenameRegex.exec(contentDisposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, '');\r\n }\r\n }\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n });\r\n });\r\n } catch (error) {\r\n MySwal.fire('Error', 'Error al generar el reporte', 'error');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n

Reportes consolidados

\r\n
\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && (currentUser.roles.some(r => r.role == \"ADMIN\") ||\r\n currentUser.roles.some(r => [\"DECANO\", \"SUBDECANO\", \"COORDINADOR_GENERAL\", \"COORDINADOR_PROGRAMA\"].includes(r.role) && r.scope === \"ESPAE\")) &&\r\n \r\n ESPAE\r\n \r\n \r\n \r\n \r\n \r\n \r\n {yearsEspae.map((y, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && (currentUser.roles.some(r => r.role == \"ADMIN\")) &&\r\n \r\n GRADO\r\n \r\n \r\n \r\n \r\n \r\n \r\n {yearsGrado.map((y, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default withRoleAccess(ReportesConsolidados, ['ADMIN', \"DECANO\", \"SUBDECANO\", \"COORDINADOR_GENERAL\", \"COORDINADOR_PROGRAMA\"]);","import React, { Component } from 'react';\r\nimport { GraficoBarrasApiladas } from './GraficoBarrasApiladas';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class GraficoParaleloArea extends Component {\r\n static displayName = GraficoParaleloArea.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { preguntas:[], frecuencias: [], alternativas: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const anio = this.props.match.params[\"anio\"];\r\n const termino = this.props.match.params[\"termino\"];\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const paralelo = this.props.match.params[\"paralelo\"];\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const idarea = this.props.match.params[\"area\"];\r\n this.populateData(anio, termino, codigo, paralelo, identificacion, idarea);\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n splitwords(text, size = 40) {\r\n if (text.length <= size)\r\n return text;\r\n const chunks = text.split(\" \");\r\n const parts = [];\r\n var aux = \"\";\r\n for (var c in chunks) {\r\n if (aux.length + chunks[c].length <= size) {\r\n aux += chunks[c] + \" \";\r\n }\r\n else {\r\n parts.push(aux);\r\n aux = chunks[c] + \" \";\r\n }\r\n }\r\n parts.push(aux);\r\n return parts;\r\n }\r\n\r\n renderTable(preguntas, frecuencias, alternativas) {\r\n //console.log(datos);\r\n const etiquetas = preguntas.map((p, index) => index + 1);\r\n const valoresFrecuencias = frecuencias.map(p => { return { ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa, frecuencia: p.frecuencia } });\r\n console.log(etiquetas);\r\n console.log(valoresFrecuencias);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n console.log(this.state.preguntas);\r\n console.log(this.state.alternativas);\r\n\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.preguntas, this.state.frecuencias, this.state.alternativas);\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(anio, termino, codigo, paralelo, identificacion, idarea) {\r\n\r\n const frecuenciasResponse = await fetch(`${APIURL}/api/reportes/paralelo-frecuencias-area/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}/${idarea}`);\r\n const dataFrecuencias = await frecuenciasResponse.json();\r\n console.log(dataFrecuencias);\r\n const preguntas = [];\r\n const alternativas = [];\r\n\r\n if (dataFrecuencias) {\r\n dataFrecuencias.forEach(p => {\r\n if (preguntas.every(f => f.ordenPregunta !== p.ordenPregunta)) {\r\n preguntas.push({ ordenPregunta: p.ordenPregunta, pregunta: p.pregunta });\r\n }\r\n\r\n if (alternativas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n alternativas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n\r\n this.setState({ preguntas: preguntas, frecuencias: dataFrecuencias, alternativas: alternativas, loading: false });\r\n }\r\n\r\n }\r\n}\r\n","import React, { Component, useContext } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { authService } from './services/auth.service';\r\nimport { createBrowserHistory } from 'history';\r\n\r\nimport { AppContext } from './AppContext';\r\nimport ImpersonateUser from './components/ImpersonateUser';\r\nimport UnauthorizedAccess from './components/UnauthorizedAccess';\r\nimport UserManagement from './pages/UserManagement';\r\nimport CarreraEvaluacion from './pages/CarreraEvaluacion';\r\n\r\nimport { AuthLayout } from './layouts/AuthLayout';\r\nimport { Home } from './components/Home';\r\nimport { MisParalelos } from './components/MisParalelos';\r\nimport UnidadEvaluacion from './components/UnidadEvaluacion';\r\nimport AdmisionesEvaluacion from './components/AdmisionesEvaluacion';\r\nimport { ProgramaEvaluacion } from './components/ProgramaEvaluacion';\r\nimport UnidadParalelos from './components/UnidadParalelos';\r\nimport { Materias } from './components/Materias';\r\nimport { ParalelosMateria } from './components/ParalelosMateria';\r\nimport { Profesores } from './components/Profesores';\r\nimport { ParalelosProfesor } from './components/ParalelosProfesor';\r\nimport { Paralelo } from './components/Paralelo';\r\nimport { Practica } from './components/Practica';\r\nimport { Comentarios } from './components/Comentarios';\r\nimport ComentariosPractica from './components/ComentariosPractica';\r\nimport ReportesConsolidados from './components/ReportesConsolidados';\r\n\r\n\r\nimport { GraficoParaleloArea } from './components/GraficoParaleloArea';\r\n\r\nimport './assets/css/main.css';\r\nimport { Switch } from 'react-router-dom';\r\n\r\nimport Cookies from 'universal-cookie';\r\nimport jwt from 'jsonwebtoken';\r\n\r\nconst history = createBrowserHistory();\r\nconst cookies = new Cookies();\r\n\r\nconst BASEURL = process.env.REACT_APP_BASE_URL;\r\n\r\nconst publicRoutes_prefix = [\"/materias\", \"/profesores\", \"/paralelos-profesor\", \"/paralelos-materia\", \"/paralelo/\", \"/api/\", \"/images/graficos/\"];\r\nconst publicRoutes_exact = [\"\", \"/\"];\r\n\r\nclass App extends Component {\r\n static displayName = App.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n currentUser: null\r\n };\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n console.log(\"error = \" + error + \" errorInfo = \" + errorInfo);\r\n }\r\n\r\n componentDidMount() {\r\n const { currentUser } = this.state;\r\n const { pathname } = history.location;\r\n\r\n const authToken = cookies.get('authToken');\r\n\r\n if (authToken) {\r\n try {\r\n const decodedToken = jwt.decode(authToken);\r\n if (isTokenExpired(decodedToken)) {\r\n cookies.remove('authToken', { path: '/' });\r\n cookies.remove('impersonateToken', { path: '/' });\r\n } else {\r\n const impToken = cookies.get('impersonateToken');\r\n const decodedImpToken = jwt.decode(impToken);\r\n if (impToken) {\r\n authService.validateToken(impToken, decodedImpToken, true);\r\n } else {\r\n authService.validateToken(authToken, decodedToken);\r\n }\r\n this.subscription = authService.currentUser.subscribe(currentUser => {\r\n if (currentUser) {\r\n this.setState({ currentUser: currentUser });\r\n }\r\n });\r\n return;\r\n }\r\n } catch (error) {\r\n console.error('Token decoding error:', error);\r\n }\r\n }\r\n\r\n if (!currentUser || currentUser == undefined) {\r\n if (publicRoutes_prefix.map(pr => pathname.startsWith(`${BASEURL}${pr}`)).some(pr => pr) || publicRoutes_exact.map(pr => pathname == `${BASEURL}${pr}`).some(pr => pr) || publicRoutes_exact.includes(pathname)) {\r\n authService.login(history, true);\r\n } else {\r\n authService.login(history);\r\n }\r\n\r\n this.subscription = authService.currentUser.subscribe(currentUser => {\r\n if (currentUser) {\r\n this.setState({ currentUser: currentUser });\r\n }\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n startImpersonation = (impersonationToken) => {\r\n const decodedToken = jwt.decode(impersonationToken);\r\n authService.validateToken(impersonationToken, decodedToken, true);\r\n cookies.set('impersonateToken', impersonationToken, {\r\n path: '/'\r\n });\r\n authService.setGlobalFetch();\r\n };\r\n\r\n revertToOriginalUser = () => {\r\n const originalToken = cookies.get('authToken');\r\n const decodedToken = jwt.decode(originalToken);\r\n authService.validateToken(originalToken, decodedToken);\r\n cookies.remove('impersonateToken', { path: '/' });\r\n this.props.history.push('/');\r\n authService.setGlobalFetch();\r\n };\r\n\r\n render() {\r\n const { currentUser } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nfunction isTokenExpired(tokenObj) {\r\n if (!tokenObj || !tokenObj.exp) {\r\n return true;\r\n }\r\n const currentTime = Math.floor(Date.now() / 1000);\r\n return tokenObj.exp < currentTime;\r\n}\r\n\r\nexport default withRouter(App);","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport * as dotenv from 'dotenv';\r\ndotenv.config();\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();"],"sourceRoot":""}