{"version":3,"sources":["webpack://ipg-ui/./src/app/App.styl?8251","webpack://ipg-ui/./src/themes/mainTheme.ts","webpack://ipg-ui/./src/themes/theme.ts","webpack://ipg-ui/./src/components/BackButton/arrow-left.svg","webpack://ipg-ui/./src/models/Token.ts","webpack://ipg-ui/./src/models/UserInfo.ts","webpack://ipg-ui/./src/services/endpoints.ts","webpack://ipg-ui/./src/services/api/api.ts","webpack://ipg-ui/./src/services/api/errorHandler.ts","webpack://ipg-ui/./src/services/userService.ts","webpack://ipg-ui/./src/services/catalogsService.ts","webpack://ipg-ui/./src/services/ipObjectService.ts","webpack://ipg-ui/./src/utils/misc.ts","webpack://ipg-ui/./src/services/voteService.ts","webpack://ipg-ui/./src/services/projectService.ts","webpack://ipg-ui/./src/services/usersService.ts","webpack://ipg-ui/./src/services/archiveService.ts","webpack://ipg-ui/./src/stores/createStoresContext.tsx","webpack://ipg-ui/./src/stores/RouterStore.ts","webpack://ipg-ui/./src/utils/errors.ts","webpack://ipg-ui/./src/utils/hooks/useTheme.ts","webpack://ipg-ui/./src/utils/hooks/useRequest.ts","webpack://ipg-ui/./src/utils/formatDates.ts","webpack://ipg-ui/./src/utils/textUtils.ts","webpack://ipg-ui/./src/utils/formatNumber.ts","webpack://ipg-ui/./src/utils/reflection.ts","webpack://ipg-ui/./src/utils/decode.ts","webpack://ipg-ui/./src/utils/validators.ts","webpack://ipg-ui/./src/constants/routes.ts","webpack://ipg-ui/./src/utils/useRoutes.ts","webpack://ipg-ui/./src/utils/crypto-js.ts","webpack://ipg-ui/./src/constants/strings.ts","webpack://ipg-ui/./src/constants/roles.ts","webpack://ipg-ui/./src/stores/UserStore.ts","webpack://ipg-ui/./src/stores/core/StoreConstructor.ts","webpack://ipg-ui/./src/stores/CatalogsStore.ts","webpack://ipg-ui/./src/stores/ModalsStore.ts","webpack://ipg-ui/./src/stores/ActionModalsStore.ts","webpack://ipg-ui/./src/stores/core/ListStoreConstructor/Fetcher.ts","webpack://ipg-ui/./src/stores/core/ListStoreConstructor/ListStoreConstructor.ts","webpack://ipg-ui/./src/stores/IpObjectListStore.ts","webpack://ipg-ui/./src/stores/ActiveIpObjectStore.ts","webpack://ipg-ui/./src/services/transactionTracker/transactionTracker.ts","webpack://ipg-ui/./src/utils/polling.ts","webpack://ipg-ui/./src/stores/ActiveViolationStore.ts","webpack://ipg-ui/./src/services/violationService.ts","webpack://ipg-ui/./src/stores/ProjectStore.ts","webpack://ipg-ui/./src/stores/ActiveProjectStore.ts","webpack://ipg-ui/./src/pages/Organizer/tabs.ts","webpack://ipg-ui/./src/services/pollSubjects.ts","webpack://ipg-ui/./src/stores/PollSubjectListStore.ts","webpack://ipg-ui/./src/services/poll.ts","webpack://ipg-ui/./src/stores/ActivePollStore.ts","webpack://ipg-ui/./src/stores/ActivePollResults.ts","webpack://ipg-ui/./src/stores/UserListStore.ts","webpack://ipg-ui/./src/stores/ArchivePollListStore.ts","webpack://ipg-ui/./src/stores/ArchiveProjectListStore.ts","webpack://ipg-ui/./src/stores/index.tsx","webpack://ipg-ui/./src/components/BackButton/index.tsx","webpack://ipg-ui/./src/components/BaseContainer.tsx","webpack://ipg-ui/./src/ui/AsyncSelect.tsx","webpack://ipg-ui/./src/ui/Error/index.tsx","webpack://ipg-ui/./src/ui/Icons/ArrowUp.tsx","webpack://ipg-ui/./src/ui/Icons/KebabIcon.tsx","webpack://ipg-ui/./src/ui/Icons/PlusIcon.tsx","webpack://ipg-ui/./src/ui/Icons/Rotate.tsx","webpack://ipg-ui/./src/ui/Icons/HistoryIcon.tsx","webpack://ipg-ui/./src/ui/Icons/SpeakerNotesIcon.tsx","webpack://ipg-ui/./src/ui/Icons/styles.styl?8c17","webpack://ipg-ui/./src/ui/Icons/CustomizedIcons.tsx","webpack://ipg-ui/./src/ui/Icons/CloseIcon.tsx","webpack://ipg-ui/./src/ui/Icons/ExitIcon.tsx","webpack://ipg-ui/./src/ui/Icons/SearchIcon.tsx","webpack://ipg-ui/./src/ui/Icons/DoNotDisturb.tsx","webpack://ipg-ui/./src/ui/Icons/Done.tsx","webpack://ipg-ui/./src/ui/Icons/PhoneIcon.tsx","webpack://ipg-ui/./src/ui/Spinner/styles.styl?899b","webpack://ipg-ui/./src/ui/Spinner/index.tsx","webpack://ipg-ui/./src/ui/Spinner2.tsx","webpack://ipg-ui/./src/ui/ButtonEx.tsx","webpack://ipg-ui/./src/ui/Panel.tsx","webpack://ipg-ui/./src/ui/Responsive/breakpoints.ts","webpack://ipg-ui/./src/ui/Modal.tsx","webpack://ipg-ui/./src/ui/ClickOutside.tsx","webpack://ipg-ui/./src/ui/TabsEx.tsx","webpack://ipg-ui/./src/ui/Link.tsx","webpack://ipg-ui/./src/ui/Label.tsx","webpack://ipg-ui/./src/ui/SearchInput.tsx","webpack://ipg-ui/./src/ui/ScrollToTopButton.tsx","webpack://ipg-ui/./src/components/Head/components/logo.tsx","webpack://ipg-ui/./src/pages/utils.tsx","webpack://ipg-ui/./src/ui/IconButton.tsx","webpack://ipg-ui/./src/ui/IPGLogo.tsx","webpack://ipg-ui/./src/pages/Registration/components.tsx","webpack://ipg-ui/./src/components/Head/components/EncryptPasswordModal.tsx","webpack://ipg-ui/./src/components/Head/components/svgComponents.tsx","webpack://ipg-ui/./src/components/Head/components/LogoutButton.tsx","webpack://ipg-ui/./src/components/Head/components/UserMenu.tsx","webpack://ipg-ui/./src/components/Head/components/components.tsx","webpack://ipg-ui/./src/components/Tabs/components.tsx","webpack://ipg-ui/./src/components/Tabs/index.tsx","webpack://ipg-ui/./src/components/Head/getTabs.ts","webpack://ipg-ui/./src/components/Head/components/compact.tsx","webpack://ipg-ui/./src/components/Head/components/wide.tsx","webpack://ipg-ui/./src/components/Head/index.tsx","webpack://ipg-ui/./src/components/Modals.tsx","webpack://ipg-ui/./src/components/ActionModals/Header.tsx","webpack://ipg-ui/./src/components/ActionModals/index.tsx","webpack://ipg-ui/./src/components/PageContainer/index.tsx","webpack://ipg-ui/./src/components/router/AuthenticationGuard.tsx","webpack://ipg-ui/./src/components/router/index.tsx","webpack://ipg-ui/./src/components/CommonTable/index.tsx","webpack://ipg-ui/./src/components/PageError/index.tsx","webpack://ipg-ui/./src/components/PageError/500.svg","webpack://ipg-ui/./src/components/PageError/refresh.svg","webpack://ipg-ui/./src/components/FilterSearch.tsx","webpack://ipg-ui/./src/components/FilterTabs.tsx","webpack://ipg-ui/./src/components/TableSortSelect.tsx","webpack://ipg-ui/./src/components/DropableArea.tsx","webpack://ipg-ui/./src/components/FileInput/utils.ts","webpack://ipg-ui/./src/components/FileInput/FileInput.tsx","webpack://ipg-ui/./src/components/Avatar/Avatar.tsx","webpack://ipg-ui/./src/components/RoleIcon/glyphs/index.ts","webpack://ipg-ui/./src/pages/Archive/components/DocumentSVG.tsx","webpack://ipg-ui/./src/components/ExportProjectsButton/ExportProjectsModal.tsx","webpack://ipg-ui/./src/components/ExportProjectsButton/ExportProjectsButton.tsx","webpack://ipg-ui/./src/app/global-styles.tsx","webpack://ipg-ui/./src/pages/Login/index.tsx","webpack://ipg-ui/./src/pages/Registration/registration.utils.ts","webpack://ipg-ui/./src/pages/Registration/PasswordHint.tsx","webpack://ipg-ui/./src/pages/Registration/PhoneInput.tsx","webpack://ipg-ui/./src/pages/Registration/Footer.tsx","webpack://ipg-ui/./src/pages/Registration/FormPanel.tsx","webpack://ipg-ui/./src/pages/VerifyPhone.tsx","webpack://ipg-ui/./src/pages/CreateVote/Wizard.tsx","webpack://ipg-ui/./src/pages/CreateVote/FilterSearchArea.tsx","webpack://ipg-ui/./src/pages/CreateVote/RegionList/components.tsx","webpack://ipg-ui/./src/pages/CreateVote/RegionList/group.svg","webpack://ipg-ui/./src/pages/CreateVote/RegionList/index.tsx","webpack://ipg-ui/./src/pages/CreateVote/Step1.tsx","webpack://ipg-ui/./src/pages/CreateVote/Step2.tsx","webpack://ipg-ui/./src/pages/CreateVote/Warning.svg","webpack://ipg-ui/./src/pages/CreateVote/index.tsx","webpack://ipg-ui/./src/pages/Users/components/RoleIcon.tsx","webpack://ipg-ui/./src/pages/Users/modals/utils.ts","webpack://ipg-ui/./src/utils/hooks/useMutation.ts","webpack://ipg-ui/./src/pages/Users/modals/DeleteUserModal.tsx","webpack://ipg-ui/./src/pages/Users/modals/userPasswordValidators.tsx","webpack://ipg-ui/./src/pages/Users/modals/UpdateUserCredentialsModal.tsx","webpack://ipg-ui/./src/pages/Users/modals/useDistrictOptions.tsx","webpack://ipg-ui/./src/pages/Users/components/styled.tsx","webpack://ipg-ui/./src/pages/Users/modals/UpdateUserModal.tsx","webpack://ipg-ui/./src/pages/Users/components/UsersActionsMenu.tsx","webpack://ipg-ui/./src/utils/hooks/useClickOutside.ts","webpack://ipg-ui/./src/pages/Users/UsersPage.css?5a4c","webpack://ipg-ui/./src/pages/Users/components/Pager.tsx","webpack://ipg-ui/./src/pages/Users/components/TablePagination.tsx","webpack://ipg-ui/./src/pages/Users/modals/CreateUserModal.tsx","webpack://ipg-ui/./src/pages/Users/UsersPage.tsx","webpack://ipg-ui/./src/pages/Users/getColumns.tsx","webpack://ipg-ui/./src/components/RegionMap/region.styl?1e09","webpack://ipg-ui/./src/interfaces/apiEntities.ts","webpack://ipg-ui/./src/components/RegionMap/RegionMap.tsx","webpack://ipg-ui/./src/pages/Organizer/ListItemCounter.tsx","webpack://ipg-ui/./src/pages/Organizer/icons.tsx","webpack://ipg-ui/./src/ui/Checkbox.tsx","webpack://ipg-ui/./src/components/PollStatus/PollStatus.tsx","webpack://ipg-ui/./src/pages/Organizer/ListItem.tsx","webpack://ipg-ui/./src/pages/Organizer/SchoolTree/helpers.ts","webpack://ipg-ui/./src/pages/Poll/icons.tsx","webpack://ipg-ui/./src/pages/Organizer/SchoolTree/NodeRenderer.tsx","webpack://ipg-ui/./src/pages/Organizer/SchoolTree/TreeTheme.tsx","webpack://ipg-ui/./src/pages/Organizer/SchoolTree/index.tsx","webpack://ipg-ui/./src/pages/Organizer/VotingList.tsx","webpack://ipg-ui/./src/pages/Organizer/index.tsx","webpack://ipg-ui/./src/pages/Organizer/img/school.svg","webpack://ipg-ui/./src/pages/Voter/index.tsx","webpack://ipg-ui/./src/pages/Poll/ProjectStatus.tsx","webpack://ipg-ui/./src/pages/Poll/components/ProjectInfoBox.tsx","webpack://ipg-ui/./src/ui/Slider/Arrow.tsx","webpack://ipg-ui/./src/utils/rotateBase64Image.ts","webpack://ipg-ui/./src/ui/Slider/Slider.tsx","webpack://ipg-ui/./src/ui/Slider/SliderComponent.tsx","webpack://ipg-ui/./src/pages/Poll/components/ImplementationDetails.tsx","webpack://ipg-ui/./src/components/StarRatings.tsx","webpack://ipg-ui/./src/pages/Applicant/applicantColumns.tsx","webpack://ipg-ui/./src/pages/Applicant/index.tsx","webpack://ipg-ui/./src/pages/Applicant/getTabs.tsx","webpack://ipg-ui/./src/pages/Applicant/FileInput/uploader.tsx","webpack://ipg-ui/./src/pages/Applicant/FileInput/file-icon.svg","webpack://ipg-ui/./src/pages/Applicant/FileInput/file-list.tsx","webpack://ipg-ui/./src/pages/Applicant/FileInput/index.tsx","webpack://ipg-ui/./src/pages/Applicant/visibility_off.svg","webpack://ipg-ui/./src/pages/Applicant/CreateProject.tsx","webpack://ipg-ui/./src/pages/Poll/DeclineModal.tsx","webpack://ipg-ui/./src/pages/Poll/RevisionModal.tsx","webpack://ipg-ui/./src/pages/Landing/HeaderMenu/MenuMob.tsx","webpack://ipg-ui/./src/pages/Poll/ConfirmFinishModal.tsx","webpack://ipg-ui/./src/utils/base64toFile.ts","webpack://ipg-ui/./src/pages/Applicant/ActiveProject/ReworkForm.tsx","webpack://ipg-ui/./src/pages/Poll/ReworkProjectModal.tsx","webpack://ipg-ui/./src/pages/Poll/voting/index.ts","webpack://ipg-ui/./src/pages/Poll/components/ShareButton.tsx","webpack://ipg-ui/./src/pages/Poll/VotingActionsPanel.tsx","webpack://ipg-ui/./src/pages/Poll/ProjectActionsPanel.tsx","webpack://ipg-ui/./src/pages/Poll/PollResultProgress.tsx","webpack://ipg-ui/./src/pages/Poll/RateReworkModal.tsx","webpack://ipg-ui/./src/pages/Poll/ProjectHistoryModal.tsx","webpack://ipg-ui/./src/pages/Poll/ProjectCard.tsx","webpack://ipg-ui/./src/pages/Poll/utils.ts","webpack://ipg-ui/./src/pages/Poll/components/AboutVote.tsx","webpack://ipg-ui/./src/pages/Poll/DistrictFilter.tsx","webpack://ipg-ui/./src/pages/Poll/index.tsx","webpack://ipg-ui/./src/pages/Poll/tabs.ts","webpack://ipg-ui/./src/pages/Applicant/ActiveProject/index.tsx","webpack://ipg-ui/./src/pages/profile/UpdatePasswordModal.tsx","webpack://ipg-ui/./src/pages/profile/components/DataPiece.tsx","webpack://ipg-ui/./src/pages/profile/UpdateProfileModal.tsx","webpack://ipg-ui/./src/pages/profile/ProfilePersonalData.tsx","webpack://ipg-ui/./src/pages/profile/ProfilePage.tsx","webpack://ipg-ui/./src/pages/Archive/components/ArchivePageContainer.tsx","webpack://ipg-ui/./src/pages/Archive/components/ArchivePollTableItem.tsx","webpack://ipg-ui/./src/pages/Archive/components/styled.tsx","webpack://ipg-ui/./src/pages/Archive/components/Filters.tsx","webpack://ipg-ui/./src/pages/Archive/ArchivePollsPage.tsx","webpack://ipg-ui/./src/pages/Archive/details/ProjectActions.tsx","webpack://ipg-ui/./src/pages/Archive/components/RealizationRating.tsx","webpack://ipg-ui/./src/pages/Archive/details/ArchiveProjectListItem.tsx","webpack://ipg-ui/./src/pages/Archive/details/ArchiveProjectsPage.tsx","webpack://ipg-ui/./src/pages/Archive/details/getTabs.tsx","webpack://ipg-ui/./src/pages/Landing/icons.tsx","webpack://ipg-ui/./src/pages/Landing/HeaderMenu/index.tsx","webpack://ipg-ui/./src/pages/Landing/windowWidth.ts","webpack://ipg-ui/./src/pages/Landing/Questions&Answers/index.tsx","webpack://ipg-ui/./src/pages/Landing/InfoAboutProgram/index.tsx","webpack://ipg-ui/./src/services/documentsService.ts","webpack://ipg-ui/./src/pages/Landing/index.tsx","webpack://ipg-ui/./src/pages/Landing/img/mother.svg","webpack://ipg-ui/./src/pages/Landing/img/Tech Life Blockchain.svg","webpack://ipg-ui/./src/pages/Landing/img/Tech Life Communication.svg","webpack://ipg-ui/./src/pages/Landing/img/Tech Life Life Management.svg","webpack://ipg-ui/./src/pages/Landing/img/Tech Life Virtual Reality.svg","webpack://ipg-ui/./src/pages/Landing/img/hand.svg","webpack://ipg-ui/./src/app/AuthorizedApp.tsx","webpack://ipg-ui/./src/pages/LoginVoter/helpers.ts","webpack://ipg-ui/./src/pages/LoginVoter/Recaptcha.tsx","webpack://ipg-ui/./src/pages/LoginVoter/AsyncScript.tsx","webpack://ipg-ui/./src/pages/LoginVoter/index.tsx","webpack://ipg-ui/./src/app/routes.tsx","webpack://ipg-ui/./src/app/providers.tsx","webpack://ipg-ui/./src/app/root.tsx","webpack://ipg-ui/./src/index.tsx","webpack://ipg-ui/./src/pages/Users/UsersPage.css","webpack://ipg-ui/./src/app/App.styl","webpack://ipg-ui/./src/components/RegionMap/region.styl","webpack://ipg-ui/./src/ui/Icons/styles.styl","webpack://ipg-ui/./src/ui/Spinner/styles.styl","webpack://ipg-ui//app/node_modules/moment/locale|sync|/ru/"],"names":["options","palette","Basic1000","Basic900","Basic700","Basic500","Basic400","Basic300","Basic200","Basic100","Blue900","Blue800","Blue700","Blue600","Blue200","Red500","Orange500","Green500","StandardWhite","StandardBlack","Background","Shadow","BlackText","GreyText","DarkGray","White","Grey","LightGrey","LightGrey50","Black","Blue","Purple","Green","Red","Orange","Yellow","mainTheme","colorPrimary","colorSecondary","appBg","appContentBg","appBorderColor","appBorderRadius","fontBase","fontCode","textColor","titleColor","textInverseColor","barTextColor","barSelectedColor","barBg","inputBg","inputBorder","inputTextColor","inputBorderRadius","brandTitle","global","colors","brand","focus","border","color","edgeSize","none","hair","xxsmall","xsmall","small","medium","large","xlarge","responsiveBreakpoint","sizes","linear","xxlarge","full","auto","text","title","defaults","fonts","fontWeight","fontWeightBold","container","minWidth","maxWidth","styled","button","fontSize","padding","borderRadius","bgColor","disableBgColor","bgHoverColor","tabs","activeBorderBottomColor","activeBorderBottomWidth","tab","colorActive","backgroundColor","backgroundColorActive","letterSpacing","margin","input","borderColor","minHeight","height","innerPadding","labelColor","customPlaceholder","borderFocusedColor","borderErrorColor","borderSuccessColor","disabledColor","customDDSeparator","display","ddIndicatorProps","pad","size","Theme","control","disabled","opacity","radius","White1000","Basic800","Basic600","Yellow600","Yellow400","Yellow200","Green600","Red600","Grey700","Grey600","Grey500","Grey400","Blue500","active","icon","formBackground","dark","light","buttonBgColor","font","family","drop","shadowSize","weight","selected","background","textInput","extend","css","props","heading","level","1","horizontal","vertical","select","icons","checkBox","toggle","table","header","undefined","body","verticalAlign","TokenEx","init","personInfo","this","access_token","token_type","refresh_token","expires_in","scope","jti","accountId","UserInfo","New","businessRoles","companyId","companyName","displayName","email","firstName","lastName","nodeAlias","participantAddress","participantPublicKey","personId","phone","meta","accounts","userInfo","account","find","item","username","baseUrl","window","location","origin","getApiUrl","ENDPOINTS","transaction","id","token","registration","confirmRegistration","logout","companies","companyTypes","getFile","ref","hash","name","createQS","api","avatar","ipObjectList","ipObject","violations","violationsDuplicates","violation","violationAction","action","expertSolvers","vote","districts","districtsWithVotes","schools","techWindow","allPolls","pollById","pollResults","archivePolls","archivePoll","archiveProjects","projects","reworkProjects","projectsCount","projectsCountTab","projectById","projectLogo","exportProjects","rateProject","projectAction","uploadFile","getProjectFile","fileId","query","getPublicProjectFile","getConfidentialFile","getLegalDocuments","getLegalDocumentsFile","params","inline","phoneRegister","phoneNumber","captcha","requestSmsCode","sendConfirmCode","encryptedContent","getMainKey","pollId","getSignKey","getVote","sendBulletin","updateAccount","updatePersonPartial","updatePersonFull","users","getUser","updateLoginPassUser","changePassword","activateUser","blockUser","projectHistory","checkUrls","authApi","AuthClient","auth_url","errorHandlerFunc","error","status","includes","response","req","url","href","requestError","type","detail","instance","extendWithErrorHandler","method","get","post","postForm","auth","authHeader","getToken","process","request","set","send","then","res","patch","put","del","captchaResponse","smsRegister","number","getIpObjectList","userName","password","data","user","confirmation","userService","catalogService","sleep","ms","Promise","resolve","setTimeout","downloadFile","anchorRef","setAttribute","click","download","filename","ahref","document","createElement","appendChild","removeChild","getCurrentYear","Date","getFullYear","getRange","start","end","Array","from","length","_","index","generateSimpleOptions","map","it","value","getDistricts","sort","year","getDistrictsWithVotes","hasPoll","pollStatus","getSchools","queryObject","createVote","createProject","reworkProject","file","formData","FormData","append","projectId","score","getUsersList","updateUser","deleteUser","getAllArchivePolls","queryParams","getArchiveProjects","useContext","React","CustomRouterStore","browserHistory","createBrowserHistory","history","syncHistoryWithStore","sp","createURLSearhcParams","result","forEach","has","newParams","updatedParams","getUpdatedSearchParamsState","newPath","pathname","push","state","key","paramsToInject","URLSearchParams","search","Object","entries","RouterStore","errorTypes","createError","message","newError","Error","useTheme","ThemeContext","useRequest","requestFn","onSuccess","onError","initialData","useState","setStatus","setData","setError","useEffect","console","dateTimeFormat","date","moment","format","dateFormat","isFull","isDefined","plural","titles","getFullName","fullName","middleName","zeroDecimalsFormatter","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","twoDecimalsFormatter","formatWithTwoDecimalsRub","Number","formatWithTwoDecimals","showPeople","num","P","property","toString","match","slice","s4","Math","floor","random","substring","encryptPassword","bcrypt","hashSync","createValidate","func","validator","rule","callback","storeData","errors","isRequired","msg","v","parts","split","isEmptyString","validateType","isPositive","lessThan","webSitePattern","isCorrectUrl","test","allowEmpty","validatorToAllow","conditiallyRequired","condition","maxLength","defaultMsg","isTheSameAs","fieldName","err","isLengthBetween","minLength","oneOfLengths","lengths","join","isCorrectLastName","notEqualDataField","valueOf","isAfterDateField","diff","limitFileSize","some","f","Routes","landing","loginOrganizer","loginApplicant","loginVoter","homeOrganizer","homeApplicant","homeVoter","archive","poll","questionAnswer","infoAboutProgram","profile","projectPage","useRoutes","getRootPathname","firstMatch","indexOf","CryptoJS","require","decryptMsg","transitmessage","pass","salt","enc","Hex","parse","substr","iv","encrypted","PBKDF2","keySize","iterations","AES","decrypt","Pkcs7","mode","CBC","Utf8","EmptyString","RIGHTHOLDER_ROLES","ALL_ROLES","concat","UserStoreEx","code","confirmationCode","getUserInfo","errorCode","reject","syncLocalStorage","saveEncryptedContent","lastPollId","stores","activePoll","getPoll","catalogs","getCompanyById","inn","isContainOneOfRoles","patronymic","getInitial","s","charAt","names","trim","formatPersonName","login","showErrorEx","isLogouting","redirectUrl","values","store","clear","routing","company","assign","roles","every","role","isAuthorized","solvers","solversByName","localStorage","setItem","JSON","stringify","getEncryptedContent","UserStore","observable","computed","authStatus","isContainRoles","session","getItem","sessionObj","clearEncryptPassword","votings","fetchStatus","redirect","logError","StoreConstructor","updateFromObject","ignoreArray","current","ignore","hasOwnProperty","isComputedProp","isObservableProp","toJS","obj","keys","constructor","actionFunc","statusField","errorField","statusFieldStr","String","errorFieldStr","CatalogsStore","statusHandler","getCompanies","org","getBusinessRoles","getCompanyTypes","ModalsStore","render","onClose","Function","ActionModalsStore","bodyRender","modalConfig","deferPromise","onApply","close","rejectError","pool","setTimeCloseModal","m","modal","filter","Fetcher","endpointFn","pollingInterval","getQueryParams","intervalContainer","setInterval","isPending","sendRequest","isSilent","clearInterval","stopPolling","startPolling","withDebounce","debouncedFetch","reqestHandler","currentRequest","lastRequest","ListStoreConstructor","endpoint","isLocal","fetcher","fetchError","allData","updatePagination","content","totalPages","totalElements","restartPolling","sorters","sorter","filters","persistentStorage","URLStorage","tracker","onChangeDataFlow","bind","paginationData","currentPage","pageSize","useAutoPaginationUpdate","dataFlow","stateFromStorage","getState","initState","patchMode","smartStatePatch","patchState","fetch","setState","newPaginationState","max","ceil","rowData","rowValue","toLowerCase","filteredData","dir","a","b","sortedData","splice","page","calcSorter","newValue","localPaginationReaction","reaction","IpObjectListStore","ActiveIpObjectStore","getIpObject","actionStatus","actionError","trackedTransactions","track","transactionId","listeners","l","signalBus","pollingPromise","asyncFn","interval","shouldStop","shouldKeepOnError","timeoutId","aborted","clearTimeout","createAsyncPolling","abort","ActiveViolationStore","getViolation","violationService","transactionPending","lastUnsuccessfulTxId","reloadLastViolation","txId","lastUnsuccessfulTxStatus","handleEntityUpdate","setPending","ProjectListStore","getAllProjects","getProjectsCount","tabCountProject","statusList","districtId","schoolDistrictId","PollingType","ActiveProjectStore","projectService","districtList","subject","i","project","description","files","uploadResultFiles","resultFilesResponse","implFiles","callProjectAction","implDescription","all","getAll","POLLING_STATUS","PUBLISHED","APPLICATIONS_RECEIVING","WAITING_FOR_VOTING","VOTING","FINISHED","__DELETED","PollingList","PollSubjectListStore","PollingListRemove","currentList","schoolsList","schoolGroups","schoolGroup","district","isMOListType","pollingType","pollingList","p","replace","localeCompare","searchString","reinitialize","initialized","districtType","next","listStore","selectedIds","isDeletable","polling","isAllSelected","flush","getMainKeyById","getSignKeyById","getVoteById","ActivePollStore","order","bulletinOrder","getPollById","hasVote","encryptedBulletin","bulletin","ActivePollResults","getPollResults","results","votesCountByProjectId","reduce","votesSum","count","getProjectVotesCount","votesSummary","UserListStore","usersService","hashedPassword","selectUser","businessRole","isMoreThanOneRegulator","newPassword","updatedUser","ArchivePollListStore","archiveService","subjectType","subjectYear","ALL_YEARS_OPTION","fromCache","fromServer","voteInfo","pollService","getDecryptedBulletinOrder","generateYearOptions","onAuthSuccess","userStore","ArchiveProjectListStore","iUserInfo","modals","actionModals","activeIpObject","activeViolation","projectList","activePollResults","activeProject","userList","production","StoresContext","StoresProvider","children","Provider","useStores","BackButton","observer","rootPathname","useLocation","direction","onClick","align","style","marginRight","src","arrowLeftSVG","BaseContainer","withTheme","theme","Head","StyledSelect","Select","loading","rotateAnimation","keyframes","bottom","printError","ArrowUpIcon","fill","xmlns","viewBox","d","PlusIconSVG","width","stroke","RotateIcon","HistoryIcon","SpeakerNotesIcon","Icon","evt","stopPropagation","preventDefault","addEventListener","removeEventListener","hover","Component","component","className","cn","styles","justifyContent","alignItems","getSVGSize","getColor","customizeHOC","convertToSVGProps","CloseIcon","fillRule","clipRule","SearchIcon","PhoneIcon","KebabIcon","Icons","spin","Spinner2","ButtonEx","textRender","transparent","spinnerRender","isLoading","accept","buttonProps","hiddenFileInput","onChange","event","target","multiple","COLOR_MAP","white","boxShadow","green","grey","Panel","rest","breakpoints","ModalOverlay","ModalWrap","Modal","ModalView","position","overlayStyle","modalStyle","isOverlayClose","ReactDOM","TabsEx","Tabs","Tab","titleText","StyledTab","StyledRouterLink","RouterLink","StyledAnchorElement","rel","Box","SearchInput","StyledTextInput","renderLeft","left","right","TextInput","ScrollToTopButton","visible","ofset","isLaptopOrWider","useMediaQuery","minDeviceWidth","ScrollToTopButtonContainer","StyledButton","scrollToTop","querySelector","scrollTo","top","behavior","Button","useIsLoginRoute","StyledIconButton","IconContainer","IconButton","renderIcon","IPGLogo","commonInputStyles","StyledInput","WelcomeMessage","gap","bold","EncryptPasswordModal","inject","formRef","validateFields","asyncValidate","onValidate","lineHeight","placeholder","rules","repeatPassword","ExitSVG","UserSVG","LogoutButton","handleClick","WideLogoutButton","CompactLogoutButton","PlusSVG","UserMenu","routes","isRegulator","isVoter","isTabletOrWider","PasswordDialogButton","displayEncryptPassModal","open","applyText","closeText","noValidation","saveEncryptPassword","marginBottom","marginTop","whiteSpace","glyph","HeaderContainer","TabContainer","TabItem","SubTabContainer","SubTabItem","CountTabProjects","accumulator","marginLeft","showSubMenu","setShowSubMenu","useCallback","onMouseEnter","onMouseLeave","SlimTabs","getRegulatorTabs","getApplicantTabs","getVoterTabs","HeadCompact","isLogin","useHistory","CompactHeaderContainer","logoSVG","justify","HeadWide","overflow","zIndex","flex","Modals","closeModal","visibility","Header","pending","cursor","ActionModal","config","BodyRender","actionData","useMemo","isValid","initData","bodyRef","useRef","actionsContainerStyle","isActionLoading","prototype","isReactComponent","applyButtonProps","applyIcon","additionalText","ActionModals","idx","PageContainer","scrollHandler","scrollY","refDiv","getBoundingClientRect","isPageScrolling","onScroll","flexDirection","AuthenticationGuard","prevStatus","RoleRoute","ConditionRouter","RedirectEx","to","RoleRedirect","rolesOptions","redirectProps","saveRedirectUrl","CommonTable","customItem","columns","onRowClicked","emptyListText","suppressInitialFetch","suppressInitialization","tableFetchFired","setTableFetchFired","dataLayerConfig","PageError","isRegulatorOrVoter","isApplicant","descriptionText","buttonText","textAlign","alt","reload","FilterSearch","filterField","initialValue","searchText","setSearchParams","onKeyDown","FilterTabs","sortedField","selectProps","dataIndex","parseSorter","getSorterValue","valueContainer","indicatorsContainer","dropdownIndicator","provided","option","isSelected","isFocused","fontFamily","DropableArea","onDrop","events","e","eventName","onDragOver","persist","concatFilesWithoutDoubles","isDouble","f2","fileHash","filePropsCopy","prop","FileInput","forwardedRef","inputProps","wrapperProps","dataTransfer","HiddenInput","BaseImage","DocumentSVG","ExportProjectsModal","useLocalStore","handleSubmit","forwardRef","attrs","computeButtonColor","ExportProjectsButton","getDownloadURL","GlobalStyle","createGlobalStyle","LoginPageClass","onSubmit","loginEx","enterPressListener","backgroundSize","backgroundRepeat","min","paddingBottom","paddingTop","defaultData","LoginPage","passwordChecks","validationMessage","passwordValidators","PasswordHint","isValidLength","hasForbiddenSymbols","hasAllCases","Row","StatusIcon","ok","HintText","OkIcon","ErrorIcon","PhoneInput","createField","inputComponent","international","countryCallingCodeEditable","withCountryCallingCode","limitMaxLength","country","wrapper","FieldWrapper","Footer","SmallText","textDecoration","encodeURI","networkError","setNetworkError","requestSending","setRequestSending","passwordHintVisible","setPasswordHintVisible","surname","encodedPassword","u","isEmail","onFocus","onBlur","amount","char","between","setConfirmationCode","charToReplace","RegExp","acc","letter","applyMask","sending","setSending","handleSumbit","verify","Wizard","step","currentStep","steps","footer","WizardHeaderTab","isPassed","isActive","toFixed","Step","changeStep","isFirst","isLast","WizardTab","FilterSearchArea","filteredOptions","searchPlaceholder","checkedOptionsLength","RegionBox","checked","searched","RegionCheckboxWrap","CheckboxIcon","SchoolBox","personalCount","str","numbers","isNaN","unshift","getCount","textOverflow","CheckboxWrap","CheckboxMark","RegionList","regionValue","region","disabledOptions","j","searchedOptions","accum","propertiesList","DisplayBox","displayType","checkAll","flexWrap","checkRegion","activeProjectsCount","Step1","getRef","errorText","schoolRegions","regionOptions","schoolGroupOptions","label","displayMode","typeOptions","onChangeVotingType","directoryRegionsOptions","directorySchoolGroupsOptions","onChangeFilter","objects","minDate","startOf","toDate","maxDate","endOf","Step2","timestamp","hours","minutes","hasMinVotesCount","relativeTime","showMinutes","calendarProps","placeholderText","timeInputProps","applicationStartDate","Line","applicationEndDate","votingStartDate","CreateVote","regionsError","formRef1","form1","formRef2","processData","form2","closeLastModal","directory","prepareTechWindow","onChangeForm1","bordered","leftArrow","nextStep","add","votingEndDate","votingThreshold","form","toISOString","subjectsIds","RoleIcon","RoleIconSVG","roleToIconRenderMap","APPLICANT","REGULATOR","useDeleteUser","useMutation","DeleteUserModal","isDeletableUser","useIsDeletableUser","Container","DeleteUserForm","SingleOrganizerMessage","person","Email","StyledCloseIcon","StyledBox","matches","onlyAllowedValidator","digitsValidator","lettersValidator","phoneValidators","UpdateUserCredentialsModal","password_confirm","useDistrictOptions","voteServise","formatDistrictOptions","FixedWidthUserInput","Input","UserRoleButton","computeRoleButtonColor","FixedHeightUserSelect","UpdateUserModal","initialUser","districtOptions","UsersActionsMenu","isMenuVisible","setIsMenuVisible","openDeleteModal","openModal","openUpdateCredentialsModal","updateUserPassword","openUpdateUserModal","updateUserByAdmin","MenuContainer","onClickOutside","ActionsContainer","MenuItem","isCurrentUser","savedCb","handler","contains","useClickOutside","PagerWrap","Pager","offset","total","goToPage","activeColor","pageList","placedLeftOffset","leftOffset","reverse","placedRightOffset","generatePageList","PagerCell","StyledPageCell","Purple500","TablePagination","usePagination","setPageSize","PaginationWrap","borderLeft","singleValue","CreateUserModal","DEFAULT_USER","UsersPage","onSearch","updateSearch","createUser","sortable","personName","paginationComponent","IP_OBJECT_STATUS","ViolationStatus","ViolationType","PROJECT_STATUS","MAP_TYPE_URLS","OBLAST_DISTRICTS","VOLGOGRAD_DISTRICTS","D3","loadable","RegionMapRender","d3","mapRef","getMapRef","xy","getBoundingBox","selectAll","regionCode","node","mw","mh","scale","tx","ty","transition","duration","attr","onClickArea","areas","isDisabled","xml","headers","Accept","svgMap","documentElement","areasMap","on","classList","classed","remove","each","clsx","ev","area","initializeMap","prevProps","legendRef","RegionMap","loader","bbox","getBBox","cx","x","cy","y","Counter","ListItemCounter","VotesIcon","ProjectIcon","TrashIcon","StyledCheckbox","Checkbox","inputRef","VotingStatusStyled","PollStatus","dateString","month","day","statusDueDate","AREA_UI_TEXT","DateTimeFormat","ItemContainer","withoutBorder","SubItemContainer","ReviewProjectsCounter","renderListItem","isMoType","deleting","handleChange","selectPolling","deleteCheckbox","showDeleteCheckbox","isIpadProOrWider","wrap","inProgressProjectsCount","reviewProjectsCount","voteCount","NODE_TYPE","SumVoteCount","borderTop","generateSchoolTree","root","school","schoolGroupId","schoolGroupName","schollGroupId","SCHOOL_GROUP","districtName","DISTRICT","SCHOOL","fallback","SVG","Arrow","PrivateIcon","ExternalLink","CollapseArrow","VkIcon","ShareIcon","TavernIcon","ArrowDownIcon","NodeItem","RenderItem","isSearchFocus","scaffoldBlockCount","lowerSiblingCounts","borderBottom","paddingRight","scaffoldBlockPxWidth","NodeRenderer","toggleChildrenVisibility","connectDragPreview","connectDragSource","isDragging","canDrop","canDrag","path","subtitle","draggedNode","treeIndex","isSearchMatch","buttons","didDrop","swapFrom","swapLength","swapDepth","treeId","isOver","parentNode","rowDirection","transform","expanded","FileThemeTreeNodeRenderer","listIndex","connectDropTarget","otherProps","getPrevRow","paddingLeft","Children","child","cloneElement","SchoolTree","isMobile","maxDeviceWidth","isTablet","treeData","setTreeData","setSchools","setLoading","groupFilter","setGroupFilter","districtsFilter","setDistrictsFilter","districtsOptions","setDistrictsOptions","setSchoolGroupOptions","setSearchString","searchFocusIndex","setSearchFocusIndex","searchFoundCount","setSearchFoundCount","sg","setTreeDataCommon","searchStringP","districtsFilterP","groupFilterP","filteredTree","hasDistrict","hasGroup","hasSchool","selectPrevMatch","selectNextMatch","SearchInputStyle","isVirtualized","treeNodeRenderer","locals","nodeContent","validDrop","invalidDrop","highlight","getNodeKey","rowHeight","prevPath","nodeContentRenderer","outline","innerStyle","searchMethod","searchQuery","onlyExpandSearchedNodes","searchFocusOffset","searchFinishCallback","sum","VotingList","listStatus","flushChanges","unsetDeleting","deleteConfirmation","pollsIds","pollIds","deletePollings","votingsDelete","Boolean","onItemClick","VOTER_DISABLED_STATUS","basis","setDeleting","scrollTop","scrollPosition","trackYProps","onUpdate","overflowY","isEmptyList","hidePagination","regionTabs","OrganizerPage","isOrganizer","rightContent","r","updateDistrictType","updatePollingType","grow","shrink","VoterPage","STATUS_UI_TEXT","DRAFT","APPROVED","DECLINED","CANCELED","REWORK_REQUIRED","REWORK_COMPLETED","IN_REVIEW","IN_PROGRESS","DONE","ARCHIVED","DELETED","ProjectStatusStyled","ProjectStatus","ProjectInfoBox","noWrap","wordWrap","ArrowStyle","data-direct","MobileArrow","MobileArrowStyle","rotateBase64Image","degrees","offScreenCanvas","offScreenCanvasCtx","getContext","img","Image","onload","rotate","PI","translate","drawImage","b64","toDataURL","Slide","accessType","imgEndpoint","base64","image","setImage","Card","objectFit","maxHeight","RotateContainer","MobileSlide","Thumbnail","InactiveImg","Slider","activeIndex","slideImages","arrow","setActiveImg","currentIndex","countImages","nextSlide","prevSlide","updatedFile","MobArrowBox","newIndex","isImage","fileName","fileExt","SliderComponent","slideFiles","editMode","CardImageContainer","_isImage","RenderComponent","CardImage","CardDoc","toUpperCase","onRemoveClick","activeName","onlyImages","findIndex","openFileInNewWindow","RemoveIcon","hoverColor","PreviewImageWrap","PreviewImage","PreviewDoc","ImplementationDetails","Path","readonly","Star","isHalf","tX","StarRating","onChangeValue","valueInitial","setValue","setHover","pathProps","currentValue","nextValue","onMouseOut","changeTime","time","ProjectListItem","logoFileId","startDate","endDate","budgetSummary","average","totalCount","ApplicantPage","goToCreateProject","ALL","ViolationFileUploader","limits","formats","maxFiles","maxFileSize","StyledFileInput","newFiles","LinkButton","BaseFileInput","Primary","IMAGE_TYPES","ViolationFileInputList","withPreview","RenderedComponent","PreviewItem","TextItem","index2","isDocument","PreviewBox","PreviewImg","URL","createObjectURL","FilesIdInput","FileInputWrap","CreateProject","totalCost","goBack","actualType","actualDistricts","schoolId","beneficiaries","personCount","budgetRegion","budgetPeople","budgetDistrict","noBudgetFunds","forceUpdate","onChangeDistrict","onChangeSchool","sphereOptions","op","Img","visibilitySVG","privateFiles","sphere","place","administrationLink","uploadFiles","fileIds","privateFileIds","previewFile","loadedFiles","getSphere","DeclineModal","reason","RevisionModal","HeaderMenuIcon","BoxOpenClose","BoxBgMob","MenuButton","isMenuOpen","useOnClickOutside","isMenuBlock","toggleBlock","toggleMenu","ConfirmFinishModal","MAX_FILE_SIZE","convertBase64ToFile","base64Image","decodedData","atob","uInt8Array","Uint8Array","charCodeAt","File","ReworkForm","sliderPublicFiles","sliderPrivateFiles","isSchoolProject","DataItem","files_new","privateFiles_new","file_newIds","privateFiles_newIds","updatedPublicFiles","updatedPrivateFiles","publicIds","privateIds","ReworkProjectModal","encryptBulletin","mainKey","dimension","makeEncryptedBulletin","convertUint8ArrayToBase64","bytes","output","fromCharCode","btoa","contractId","selectedProjectNumber","projectsLength","encryptedUserBulletin","bulletinPart","lib","WordArray","encrypt","regSign","publicKey","serializedBulletin","encode","sender","senderPublicKey","fee","now","contractVersion","version","signRequest","SHARE_LINKS","vk","SHARE_PARAMS","noParse","imageUrl","objectToGetParams","object","encodeURIComponent","windowOpen","toolbar","directories","menubar","scrollbars","resizable","centerscreen","chrome","ShareLinks","onShare","ShareButton","provideParams","getPollTitle","VotingActionsPanel","isVoteWithPassword","ProjectActionsPanel","revisionStatus","setRevisionStatus","isPollActive","isPollCompleted","displayActionButton","displayPostActionButton","displayConfirmFinishActionButton","makeProjectAction","getProjectTabCount","voteForProject","bulletinProjectsCount","BoxRevisionStyle","confirmFinish","clearProject","isProjectSelected","selectProject","LabelStyle","ProgressStyled","ProgressBarStyled","ProgressBar","PollResultProgress","percentage","votes","percentageFixed","RateReworkModal","onRate","ProjectHistoryModal","setHistory","errorMess","setErrorMess","createdDate","comment","ProjectCard","setExpanded","creator","rate","CardContainer","declineReason","flexBasis","Anchor","isPollResultsAvailable","getProjectVotesPercentage","CardFooter","techWindowStarted","currentUser","fetchProjectList","dateFormatDescription","AboutVote","isResultsAvailable","isResultsReady","systemStatus","pollResult","votesCount","dynamicVoteCount","isAboutVotingHide","POLL_TYPE_UI_TEXT","Divider","AboutVoteCollapse","ControlContainer","FilterPanel","FilterOption","Text","DistrictFilter","isPanelOpen","setPanelState","resp","list","districtsList","selectedDistrict","controlText","optionList","closePanel","onOutsideClick","prev","isEqual","PollPageContainer","PollTitle","Title","as","POLL_TITLE_UI_TEXT","BoxPollStatus","UserHasVote","PollStatusStyled","CustomItem","PollPage","isDataStoreInitiated","setIsDataStoreInitiated","getSearchParams","isPollLoading","selectedStatus","useDebouncedCallback","isSchoolPoll","countAllProjects","hasError","alignSelf","updateListStatus","setDistrictId","recurseEverything","ActiveProject","useParams","getProject","isCancelButtonShown","BoxResponsive","reworkReason","LinkA","UpdatePassword","handleSave","DataPiece","Label","Value","UpdateProfileModal","emailError","startsWith","pickApplicant","updateFn","updateUserInfo","log","field","errorEmail","help","required","EditIcon","ProfilePersonalData","setDistrictName","old_password","StyledText","logoutEx","ProfilePage","ArchivePageContainer","ArchivePollTableItem","PREFIX","ArchivePollTableItemContainer","formatDate","formatVotingDates","CounterContainer","PageTitle","BackButtonContainer","WideFilter","yearFilter","yearOptions","changeYearFilter","CompactFilter","ArchivePollsPage","isLapropOrWider","isBystander","FiltersContainer","ProjectActions","voted","RealizationRating","isRatingVisible","ArchiveProjectListItem","ArchiveProjectsPage","pollRequestFn","getOne","voteInfoRequestFn","getVoteInfo","voteInfoStatus","QuestionMarkIcon","QuestionMarkBlack","LetterIcon","infoProgram","questionOrInfo","Section","Link","getTextPoint","windowWidth","useWindowSize","isWindowClient","innerWidth","windowSize","setWindowSize","setSize","QuestionsAnswer","wSize","info","BoxCollapse","isCollapsed","regExpParams","regExpTextInBrackets","tagIndex","contentIndex","strTag","strText","JSONModifyContent","renderDocument","AnchorStyle","InfoAboutProgram","documents","arr","chunk","leftColumn","rightColumn","FooterSection","SectionBgColor","BoxFriendText","BoxFriend","MediaText","BoxInfoContent","ImgHeader","InfoContentContainer","LandingPage","AuthorizedApp","exact","AuthRedirect","hidePhone","decCache","decCases","SITE_KEY","injectedEnv","WE_ENV_GOOGLE_RECAPTCHA_KEY","Recaptcha","refFn","widgetId","touched","grecaptcha","ready","sitekey","getResponse","onResponse","reset","LOGIN_STEPS","loadedScripts","AsyncScript","globalName","loaded","setLoaded","script","async","SMS_RESEND_TIMEOUT","WE_ENV_SMS_RESEND_TIMEOUT_SECONDS","INVALID_PHONE_REQUEST","SPAM_VOICE_PASSWORD","ERROR_TRANSLATE","transformServerError","LoginVoterPage","timer","useCountdown","refreshSMS","INPUT_PHONE","setStep","codeChannel","setCodeChannel","setIsLoading","codeId","setCodeId","DEFAULT_DATA","captchaRef","resetCaptcha","isInputPhone","CONFIRM_CODE","activeUntil","ttl","setFinishDate","REQUEST_SMS","grant_type","errorUnauthorizedOrInvalid","errorCodeInactive","error_description","errorWrongPhoneFormat","resetForm","StyledButtonEx","timeLeft","until","ts","finishDate","updateInterval","setDate","useDate","getTime","trunc","AppRoutes","Providers","mobxStores","Grommet","plain","App","getElementById","___CSS_LOADER_EXPORT___","module","webpackContext","webpackContextResolve","__webpack_require__","o","exports"],"mappings":"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","file":"app.fa335bd304d9162ff968.js","sourcesContent":["import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../node_modules/css-loader/dist/cjs.js?modules!../../node_modules/stylus-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./App.styl\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","export interface IStyledProps {\n  theme?: ITheme;\n}\n\nexport interface ITheme {\n  palette: IPalette;\n  container: IBaseContainer;\n}\n\nexport interface IPalette {\n  Basic1000: string;\n  Basic900: string;\n  Basic700: string;\n  Basic500: string;\n  Basic400: string;\n  Basic300: string;\n  Basic200: string;\n  Basic100: string;\n\n  Blue900: string;\n  Blue800: string;\n  Blue700: string;\n  Blue600: string;\n  Blue200: string;\n\n  Red500: string;\n  Orange500: string;\n  Green500: string;\n\n  StandardBlack: string;\n  StandardWhite: string;\n\n  Background: string;\n  Shadow: string;\n\n  BlackText: string;\n  GreyText: string;\n  DarkGray: string;\n  White: string;\n  Grey: string;\n  LightGrey: string;\n  Black: string;\n  Blue: string;\n  Purple: string;\n  Green: string;\n  Red: string;\n  Orange: string;\n  Yellow: string;\n}\n\nexport interface IBaseContainer {\n  minWidth?: string;\n  maxWidth?: string;\n}\n\nconst palette = {\n  Basic1000: '#2F3542',\n  Basic900: '#4B5364',\n  Basic700: '#8D8D8D',\n  Basic500: '#959DAE',\n  Basic400: '#AFB8CC',\n  Basic300: '#DFE2EA',\n  Basic200: '#EBEDF2',\n  Basic100: '#F3F3F3',\n\n  Blue900: '#00488D',\n  Blue800: '#204080',\n  Blue700: '#3b33b0',\n  Blue600: '#0062C0',\n  Blue200: '#C2D6EA',\n\n  Red500: '#E5494D',\n  Orange500: '#EE9F18',\n  Green500: '#00AA78',\n\n  StandardWhite: '#FFFFFF',\n  StandardBlack: '#000000',\n\n  Background: '#FAFAFA',\n  Shadow: 'rgba(115, 115, 146, 0.16)',\n\n  BlackText: '#0a0606',\n  GreyText: '#8D8D8D',\n  DarkGray: '#525252',\n  White: '#FFFFFF',\n  Grey: '#8D8D8D',\n  LightGrey: '#F3F3F3',\n  LightGrey50: '#EFEFEF', // Ligth Grey 0.5\n  Black: '#0A0606',\n  Blue: '#204080',\n  Purple: '#3B33B0',\n  Green: '#00AA78',\n  Red: '#F0222B',\n  Orange: '#F8B700',\n  Yellow: '#F0B51D'\n};\n\nexport const mainTheme = {\n  // storybook theming\n  colorPrimary: 'black',\n  colorSecondary: 'lightblue',\n\n  // UI\n  appBg: 'white',\n  appContentBg: 'white',\n  appBorderColor: 'grey',\n  appBorderRadius: 4,\n\n  // Typography\n  fontBase: 'Montserrat, sans-serif',\n  fontCode: 'monospace',\n\n  // Text colors\n  textColor: palette.BlackText,\n  titleColor: palette.BlackText,\n  textInverseColor: palette.Basic700,\n\n  // Toolbar default and active colors\n  barTextColor: 'white',\n  barSelectedColor: 'black',\n  barBg: '#9a9a9a',\n\n  // Form colors\n  inputBg: 'white',\n  inputBorder: '#D6D6D6',\n  inputTextColor: 'black',\n  inputBorderRadius: 4,\n\n  brandTitle: 'RosCosmos',\n\n  // grommet styling\n\n  global: {\n    colors: {\n      brand: palette.Basic700\n    },\n    focus: {\n      border: {\n        color: 'transparent'\n      }\n    },\n    edgeSize: {\n      none: '0px',\n      hair: '1px',\n      xxsmall: '6px',\n      xsmall: '12px',\n      small: '16px',\n      medium: '24px',\n      large: '32px',\n      xlarge: '40px',\n      responsiveBreakpoint: 'small'\n    }\n  },\n\n  palette,\n\n  sizes: {\n    linear: {\n      small: '100px',\n      medium: '161px',\n      large: '223px',\n      xlarge: '320px',\n      xxlarge: '384px',\n      full: '100%',\n      auto: 'auto'\n    },\n    text: {\n      xxsmall: '11px',\n      xsmall: '13px',\n      small: '14px',\n      medium: '16px',\n      large: '18px',\n      xlarge: '22px'\n    },\n    title: {\n      xxsmall: '16px',\n      xsmall: '18px',\n      small: '24px',\n      medium: '28px',\n      large: '34px',\n      xlarge: '42px'\n    },\n    defaults: {\n      linear: 'auto'\n    }\n  },\n\n  fonts: {\n    title: 'Montserrat',\n    fontWeight: 500,\n    fontWeightBold: 700\n  },\n\n  container: {\n    minWidth: '320px',\n    maxWidth: '1440px'\n  },\n\n  styled: {\n    button: {\n      fontSize: '13px',\n      padding: '16px',\n      borderRadius: '2px',\n      bgColor: palette.Purple,\n      border: `1px solid ${palette.Purple}`,\n\n      disableBgColor: palette.Blue200,\n      bgHoverColor: palette.Blue200\n    },\n\n    tabs: {\n      activeBorderBottomColor: palette.Blue800,\n      activeBorderBottomWidth: 2,\n      tab: {\n        color: 'black',\n        colorActive: palette.Blue800,\n        backgroundColor: 'transparent',\n        backgroundColorActive: 'transparent',\n        border: 'none',\n        letterSpacing: '0',\n        fontSize: '15px',\n        padding: '20px 0',\n        margin: '0 32px 0 0'\n      }\n    },\n\n    input: {\n      bgColor: palette.LightGrey50,\n      textColor: 'black',\n      borderColor: palette.Grey,\n      borderRadius: '2px',\n      minHeight: '45px',\n      height: '56px',\n      padding: '12px',\n      innerPadding: '0',\n      labelColor: palette.Grey,\n      customPlaceholder: true,\n      borderFocusedColor: palette.Blue600,\n      borderErrorColor: palette.Red,\n      borderSuccessColor: palette.Green,\n      disabledColor: palette.Basic400,\n      customDDSeparator: {\n        display: 'none'\n      },\n      ddIndicatorProps: {\n        pad: '8px',\n        color: palette.Blue,\n        size: '16px'\n      }\n    },\n\n    colors: {\n      colorPrimary: palette.Blue800,\n      colorSecondary: 'white'\n    }\n  }\n};\n","import { css } from 'styled-components';\n\nexport const Theme: any = {\n  global: {\n    size: {\n      medium: '250px'\n    },\n    control: {\n      disabled: {\n        opacity: 0.5\n      },\n      border: {\n        radius: '2px'\n      }\n    },\n    border: {\n      radius: '2px'\n    },\n    colors: {\n      White1000: '#ffffff',\n      Basic1000: '#000000',\n      Basic800: '#30303d',\n      Basic600: '#939393',\n      Basic400: '#D7D7D7',\n      Basic300: '#E6E6E6',\n      Basic200: '#F5F5F5',\n      Basic100: '#FFFFFF',\n      Yellow600: '#FFCB02',\n      Yellow400: '#FFE06E',\n      Yellow200: '#FFF5CC',\n      Green600: '#00A825',\n      Red600: '#FF0000',\n      Grey700: '#b5b5b5',\n      Grey600: '#afb1c0',\n      Grey500: '#9698a7',\n      Grey400: '#d2d6e1',\n      Blue500: '#4740a1',\n\n      border: '#323232',\n      brand: 'white',\n      focus: 0,\n      active: '#FFCB02',\n      icon: 'black',\n      formBackground: '#f8f8f8',\n      text: {\n        dark: 'black',\n        light: '#323232'\n      },\n      control: {\n        dark: '#f5f5f5',\n        light: '#f5f5f5'\n      },\n      'toggle-knob': 'black',\n\n      buttonBgColor: '#4740a1'\n    },\n    font: {\n      family: 'Helvetica, sans-serif',\n      size: '14px',\n      height: '20px'\n    },\n    drop: {\n      shadowSize: 0\n    },\n    input: {\n      border: {\n        radius: '2px'\n      },\n      disabled: {\n        opacity: 0.5\n      },\n      weight: 400\n    },\n    selected: {\n      background: 'Yellow400',\n      color: 'Basic1000'\n    }\n  },\n  textInput: {\n    extend: css`\n      ${(props: any) => 'font-size: 16px; padding: 8px;'}\n    `\n  },\n  heading: {\n    font: {\n      family: 'system-ui, sans-serif'\n    },\n    weight: 300,\n\n    level: {\n      1: {\n        font: {\n          weight: 300\n        },\n        medium: {\n          size: '45px',\n          height: '54px'\n        },\n        small: {\n          size: '13px',\n          height: '18px',\n          weight: 'normal'\n        }\n      }\n    },\n    extend: css`\n      ${(props: any) => props.size === 'small' && 'letter-spacing: 4px;'};\n    `\n  },\n  text: {\n    font: {\n      family: 'system-ui, sans-serif'\n    },\n    small: {\n      size: '14px',\n      height: '18px'\n    },\n    medium: {\n      size: '16px',\n      height: '19px'\n    },\n    large: {\n      size: '30px',\n      height: '20px'\n    }\n  },\n  button: {\n    color: 'dark',\n    border: {\n      radius: '22px'\n    },\n    padding: {\n      horizontal: '24px',\n      vertical: '18px'\n    },\n    disabled: {\n      opacity: 1.0\n    }\n    // extend: css`\n    //   ${(props: any) => 'letter-spacing: 4px; text-align: center;'};\n    // `,\n  },\n  select: {\n    border: {\n      radius: '2px'\n    },\n    background: 'dark',\n    color: 'black',\n    icons: {\n      color: 'black'\n    }\n  },\n  checkBox: {\n    color: {\n      light: 'toggle-knob'\n    },\n    toggle: {\n      color: {\n        dark: 'toggle-knob',\n        light: 'toggle-knob'\n      }\n    }\n    // icons: {\n    //   checked: CheckMarkIcon,\n    // },\n  },\n  table: {\n    header: {\n      pad: { vertical: 'xxsmall' },\n      border: undefined\n    },\n    body: {\n      pad: { vertical: 'medium' },\n      verticalAlign: 'top'\n    },\n    extend: css`\n      ${(props: any) =>\n        'border-collapse: separate; width: 100%; table-layout: fixed; word-break: break-all;}'}\n    `\n  }\n};\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSIxMyIgdmlld0JveD0iMCAwIDggMTMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMS43MzM5MSA2LjUwMDI1TDcgMS4zNTgyN0w2LjYzMzA0IDFMMSA2LjUwMDI1TDYuNjMzMDQgMTJMNyAxMS42NDE3TDEuNzMzOTEgNi41MDAyNVoiIGZpbGw9IiMyMDQwODAiIHN0cm9rZT0iIzIwNDA4MCIvPgo8L3N2Zz4K\"","import { ITokenEx } from 'interfaces';\nimport { UserInfo } from 'models';\n\nexport class TokenEx implements ITokenEx {\n  public static async New(init: ITokenEx) {\n    const personInfo = await UserInfo.New(init.personInfo);\n    return new TokenEx(init, personInfo);\n  }\n\n  public access_token: string;\n  public token_type: string;\n  public refresh_token: string;\n  public expires_in: number;\n  public scope: string;\n  public jti: string;\n  public accountId: string;\n  public personInfo: UserInfo;\n\n  public constructor(init: ITokenEx, personInfo: UserInfo) {\n    this.access_token = init.access_token;\n    this.token_type = init.token_type;\n    this.refresh_token = init.refresh_token;\n    this.expires_in = init.expires_in;\n    this.scope = init.scope;\n    this.jti = init.jti;\n    this.accountId = init.accountId;\n    this.personInfo = personInfo;\n  }\n}\n","import {\n  IUserInfo,\n  TRole,\n  IUserMeta,\n  IAccount,\n  TAccountRole\n} from 'interfaces';\n\nexport class UserInfo implements IUserInfo {\n  public static New(init: IUserInfo, accounts?: Array<IAccount>) {\n    const userInfo = new UserInfo(init);\n\n    if (accounts) {\n      const account = accounts.find(item => item.accountId === init.accountId);\n      if (account) {\n        userInfo.username = account.username;\n      }\n    }\n\n    return userInfo;\n  }\n\n  public accountId: string;\n  public businessRoles: Array<TRole>;\n  public companyId: string;\n  public companyName: string;\n  public displayName: string;\n  public email: string;\n  public firstName: string;\n  public lastName: string;\n  public nodeAlias: string;\n  public participantAddress: string;\n  public participantPublicKey: string;\n  public personId: string;\n  public phone: string;\n  public meta: IUserMeta | null;\n\n  public username: string;\n  public password: string;\n  public roles: Array<TAccountRole>;\n\n  public constructor(init: IUserInfo) {\n    // Object.assign(this, init);\n    this.accountId = init.accountId;\n    this.businessRoles = init.businessRoles;\n    this.companyId = init.companyId;\n    this.companyName = init.companyName;\n    this.displayName = init.displayName;\n    this.email = init.email;\n    this.firstName = init.firstName;\n    this.lastName = init.lastName;\n    this.nodeAlias = init.nodeAlias;\n    this.participantAddress = init.participantAddress;\n    this.participantPublicKey = init.participantPublicKey;\n    this.personId = init.personId;\n    this.phone = init.phone;\n    this.meta = init.meta;\n  }\n}\n","import { createQS } from 'we-oauth2/lib/auth/api-utils';\nimport { api } from './api';\n\nconst nodeEnv = process.env.NODE_ENV;\nexport const baseUrl =\n  nodeEnv === 'production' ? window.location.origin : process.env.BASE_URL;\n\nexport const getApiUrl = () => `${baseUrl}/api/v0`;\n\nexport const ENDPOINTS = {\n  //usual\n  transaction: (id: string) => `${getApiUrl()}/tx-track-info/${id}`,\n  token: () => `${getApiUrl()}/vst-oauth2/oauth/token`,\n  registration: () => `${getApiUrl()}/registration/register`,\n  confirmRegistration: () => `${getApiUrl()}/registration/confirm`,\n  accounts: () => `${getApiUrl()}/vst-oauth2/accounts`,\n  account: (id: string) => `${getApiUrl()}/vst-oauth2/accounts/${id}`,\n  userInfo: () => `${getApiUrl()}/vst-identity/persons/info`,\n  logout: () => `${getApiUrl()}/logout`,\n  companies: () => `${getApiUrl()}/vst-identity/companies`,\n  businessRoles: () => `${getApiUrl()}/vst-identity/business-roles`,\n  companyTypes: () => `${getApiUrl()}/vst-identity/company-types`,\n  getFile: (ref: string, hash: string, name: string) =>\n    `${getApiUrl()}/files/${ref}/${hash}/${name}` +\n    createQS({ access_token: api.getToken() }),\n  avatar: (personId: string) =>\n    `${getApiUrl()}/vst-identity/persons/${personId}/avatars/current` +\n    createQS({ access_token: api.getToken() }),\n\n  //business\n  ipObjectList: () => `${getApiUrl()}/ip-objects`,\n  ipObject: (id: string) => `${getApiUrl()}/ip-objects/${id}`,\n  violations: () => `${getApiUrl()}/violations`,\n  violationsDuplicates: (id: string) =>\n    `${ENDPOINTS.violations()}/${id}/duplicates`,\n  violation: (id: string) => `${ENDPOINTS.violations()}/${id}`,\n  violationAction: (id: string, action: string) =>\n    `${ENDPOINTS.violations()}/${id}/${action}`,\n  expertSolvers: () => `${getApiUrl()}/experts/solvers`,\n\n  //voting\n  vote: () => `${getApiUrl()}/polls`,\n\n  districts: () => `${getApiUrl()}/poll-subjects`,\n  districtsWithVotes: () => `${getApiUrl()}/school-districts`,\n  schools: () => `${getApiUrl()}/schools`,\n  techWindow: () => `${getApiUrl()}/polls/settings`,\n\n  // polls\n  allPolls: () => `${getApiUrl()}/poll-subjects`,\n  pollById: (id: string) => `${ENDPOINTS.vote()}/${id}`,\n  pollResults: (id: string) => `${ENDPOINTS.vote()}/${id}/results`,\n  archivePolls: () => `${getApiUrl()}/public/archive/polls`,\n  archivePoll: (id: string) => `${ENDPOINTS.archivePolls()}/${id}`,\n  archiveProjects: () => `${getApiUrl()}/public/archive/projects`,\n\n  // projects\n  projects: () => `${getApiUrl()}/projects`,\n  reworkProjects: (id: string) =>\n    `${getApiUrl()}/projects/${id}/completeRework`,\n  projectsCount: () => `${ENDPOINTS.projects()}/count`,\n  projectsCountTab: (id: string) => `${ENDPOINTS.vote()}/${id}/statistics`,\n  projectById: (id: string) => `${getApiUrl()}/projects/${id}`,\n  projectLogo: (id: string) => `${getApiUrl()}/public/projects/${id}/logo`,\n  exportProjects: () => `${ENDPOINTS.projects()}/export`,\n\n  rateProject: (id: string) => `${ENDPOINTS.projectById(id)}/score`,\n\n  projectAction: (id: string, action: string) =>\n    `${getApiUrl()}/projects/${id}/${action}`,\n\n  uploadFile: () => `${getApiUrl()}/project-files`,\n  getProjectFile: (fileId: string, query?: object) =>\n    `${getApiUrl()}/project-files/${fileId}` +\n    createQS({ ...query, access_token: api.getToken() }),\n\n  getPublicProjectFile: (fileId: string, query?: object) =>\n    `${getApiUrl()}/public/archive/project-files/${fileId}` +\n    createQS({ ...query }),\n\n  getConfidentialFile: (query?: object) =>\n    `${getApiUrl()}/public/policy-files/current` + createQS({ ...query }),\n\n  getLegalDocuments: () =>\n    `${getApiUrl()}/public/legal-documents/`,\n\n  getLegalDocumentsFile: (fileId: string, params: object = { inline: true }) =>\n    `${getApiUrl()}/public/legal-documents/${fileId}` + createQS({ ...params }),\n\n  phoneRegister: (phoneNumber, captcha) =>\n    `${getApiUrl()}/public/auth/request-phone-code?phoneNumber=${phoneNumber}&g-recaptcha-response=${captcha}`,\n  requestSmsCode: () =>\n    `${getApiUrl()}/sms-sender/auth/request-phone-code/by-sms`,\n  sendConfirmCode: () => `${getApiUrl()}/vst-oauth2/oauth/token`,\n\n  encryptedContent: () => `${getApiUrl()}/encrypted-content`,\n\n  getMainKey: (pollId: string) => `${getApiUrl()}/polls/${pollId}/mainKey`,\n  getSignKey: (pollId: string) => `${getApiUrl()}/polls/${pollId}/signKey`,\n  getVote: (pollId: string) => `${getApiUrl()}/polls/${pollId}/vote`,\n  sendBulletin: (pollId: string) => `${getApiUrl()}/polls/${pollId}/bulletins`,\n\n  updateAccount: (personId: string) =>\n    `${getApiUrl()}/users/${personId}/account`,\n  updatePersonPartial: (personId: string) =>\n    `${getApiUrl()}/users/${personId}/partial`,\n  updatePersonFull: (personId: string) =>\n    `${getApiUrl()}/users/${personId}/full`,\n\n  // users\n  users: () => `${getApiUrl()}/users`,\n  getUser: (id: string) => `${ENDPOINTS.users()}/${id}`,\n  updateLoginPassUser: (id: string) => `${ENDPOINTS.getUser(id)}/account`,\n  changePassword: (id: string) => `${ENDPOINTS.getUser(id)}/password`,\n  activateUser: (id: string) => `${ENDPOINTS.getUser(id)}/activate`,\n  blockUser: (id: string) => `${ENDPOINTS.getUser(id)}/block`,\n\n  projectHistory: (id: string) => `${getApiUrl()}/projects/${id}/history`\n};\n","import request from 'superagent';\nimport { AuthClient } from 'we-oauth2';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { errorHandler } from './errorHandler';\n\nconst authApi = new AuthClient({ auth_url: ENDPOINTS.token() });\n\nconst errorHandlerFunc = errorHandler([ENDPOINTS.userInfo(), ENDPOINTS.sendConfirmCode()]);\n\nfunction extendWithErrorHandler(\n  method:\n    | AuthClient['patch']\n    | AuthClient['post']\n    | AuthClient['put']\n    | AuthClient['del'],\n) {\n  return async <T>(url: string, params?: any) => {\n    return method<T>(url, params).catch(errorHandlerFunc);\n  };\n}\n\nexport const api = {\n  ...authApi,\n  get: async <T>(url: string, params?: any) => {\n    return authApi.get<T>(url, params).catch(errorHandlerFunc);\n  },\n  post: extendWithErrorHandler(authApi.post),\n  postForm: async <T>(url: string, params?: Record<string, string>) => {\n    await authApi.auth();\n    const authHeader = authApi.getToken()\n      ? `Bearer ${authApi.getToken()}`\n      : `Basic ${process.env.CLIENT_AUTH_HASH}`;\n\n    return request\n      .post(url)\n      .set('Accept', 'application/json')\n      .set('Authorization', authHeader)\n      .type('form')\n      .send(params)\n      .then(res => res.body as T)\n      .catch(errorHandlerFunc);\n  },\n  patch: extendWithErrorHandler(authApi.patch),\n  put: extendWithErrorHandler(authApi.put),\n  del: extendWithErrorHandler(authApi.del),\n} as AuthClient & {\n  postForm: <T>(url: string, params?: Record<string, string>) => Promise<T>;\n};\n","// import { fallbackError, getStatusMessage } from './errors';\n\n// function parseErrorMessage(body: { code: number; message?: string }) {\n//   // TODO:\n//   // Do not do this when the server starts to send\n//   // readable error messages.\n//   let [message] = (body.message || '').split(';');\n//   return message || fallbackError.message;\n// }\n\n// export interface NormalizedError {\n//   code?: number | string;\n//   status?: number;\n//   message: string;\n// }\n\nexport interface NormalizedError {\n  type?: string;\n  title?: string;\n  status?: number;\n  detail?: string;\n  instance?: string;\n}\n\n// function assignTruthyValues<T>(obj1: T, obj2: object) {\n//   for (let key in obj2) {\n//     if (obj2[key] != null) {\n//       obj1[key] = obj2[key];\n//     }\n//   }\n//   return obj1;\n// }\n\nfunction normalizeError(requestError: any): NormalizedError {\n  /**\n   * Possible errors that the server can send are:\n   *\n   * { errorCode: number, message: string } |\n   * { error: string, error_description: string }\n   *\n   * These objects are found in `requestError.response.body`.\n   *\n   * If the server fails to send a message (e.g. 5xx errors),\n   * then we expect the `requestError` to be at least\n   * { status: number, message?: string }\n   *\n   * Another possibility is going offline. In that case `status` is undefined,\n   * and we only have a `message` set by the browser:\n   * { message: string }\n   */\n  //----\n  // const { code: fallbackCode, message: fallbackMessage } = fallbackError;\n  // const error: NormalizedError = {\n  //   code: fallbackCode,\n  //   status: null,\n  //   message: requestError.status\n  //     ? getStatusMessage(requestError.status)\n  //     : fallbackMessage,\n  // };\n\n  // const collectedData: any = {};\n\n  // if (requestError.response && requestError.response.body) {\n  //   // Error description is provided by the server\n  //   const { error_description, error, errorCode } = requestError.response.body;\n  //   collectedData.message =\n  //     parseErrorMessage(requestError.response.body) || error_description;\n  //   collectedData.code = errorCode || error;\n  // } else if (requestError.status != null) {\n  //   collectedData.status = requestError.status;\n  // } else if (requestError.message) {\n  //   // offline errors\n  //   collectedData.message = requestError.message;\n  // }\n  // return assignTruthyValues(error, collectedData);\n  //----\n\n  const error: NormalizedError = {\n    type: '',\n    title: '',\n    status: 500,\n    detail: 'initial front-end error',\n    instance: ''\n  };\n\n  if (requestError.response && requestError.response.body) {\n    return requestError.response.body;\n  }\n  return error;\n}\n\nexport const errorHandler = (checkUrls: string[]) => <T>(error: any): T => {\n  if (error && error.status === 401) {\n    if (!checkUrls.includes(error.response.req.url)) {\n      window.location.href = '/';\n    }\n  }\n\n  throw normalizeError(error);\n};\n","import {\n  ConfirmationRequest,\n  ITokenEx,\n  IUserInfo,\n  RegistrationRequest,\n  RegistrationResponse,\n  UpdateAccountRequest,\n  UpdatePersonRequest\n} from 'interfaces';\nimport { api } from 'services/api';\nimport { ENDPOINTS } from 'services';\nimport { TokenEx, UserInfo } from 'models';\n\nexport namespace userService {\n  export function login(userName: string, password: string): Promise<TokenEx> {\n    return api\n      .login(userName, password)\n      .then((data: ITokenEx) => TokenEx.New(data));\n  }\n\n  export function get(): Promise<IUserInfo> {\n    return api\n      .get(ENDPOINTS.userInfo())\n      .then((data: IUserInfo) => UserInfo.New(data));\n  }\n\n  export function registration(user: RegistrationRequest) {\n    return api.post<RegistrationResponse>(ENDPOINTS.registration(), user);\n  }\n\n  export function confirmRegistration(confirmation: ConfirmationRequest) {\n    return api.post(ENDPOINTS.confirmRegistration(), confirmation);\n  }\n\n  export function solvers() {\n    return api.get<IUserInfo[]>(ENDPOINTS.expertSolvers());\n  }\n\n  export function solversByName(name: string) {\n    return api.get<IUserInfo[]>(ENDPOINTS.expertSolvers(), { name });\n  }\n\n  export function saveEncryptedContent(params: any) {\n    return api.post<ITokenEx>(ENDPOINTS.encryptedContent(), params);\n  }\n\n  export async function getEncryptedContent() {\n    const res = await api.get<{ encryptedContent }>(\n      ENDPOINTS.encryptedContent()\n    );\n\n    return res.encryptedContent;\n  }\n}\n\nexport function phoneRegister(phoneNumber: string, captchaResponse: string) {\n  return api.post<{ codeId: string; ttl: string }>(\n    ENDPOINTS.phoneRegister(phoneNumber, captchaResponse)\n  );\n}\n\nexport function smsRegister(phoneNumber: string, captchaResponse: string) {\n  return api.postForm<{ codeId: string; ttl: string }>(\n    ENDPOINTS.requestSmsCode(),\n    {\n      number: phoneNumber,\n      'g-recaptcha-response': captchaResponse || '',\n    }\n  );\n}\n\nexport function sendConfirmCode(params: any) {\n  return api.post<ITokenEx>(ENDPOINTS.sendConfirmCode(), params);\n}\n\nexport function updateAccount(personId: string, params: UpdateAccountRequest) {\n  return api.put<IUserInfo>(ENDPOINTS.updateAccount(personId), params);\n}\n\nexport function updatePersonPartial(\n  personId: string,\n  params: Partial<UpdatePersonRequest>\n) {\n  return api.put<IUserInfo>(ENDPOINTS.updatePersonPartial(personId), params);\n}\n\nexport function updatePersonFull(\n  personId: string,\n  params: Partial<UpdatePersonRequest>\n) {\n  return api.put<IUserInfo>(ENDPOINTS.updatePersonFull(personId), params);\n}\n","import { api } from 'services/api';\nimport { ENDPOINTS } from 'services';\nimport { ICompany, IBusinessRole, ICompanyType } from 'interfaces';\n\nexport namespace catalogService {\n  export function listCompanies(): Promise<Array<ICompany>> {\n    return api.get<Array<ICompany>>(ENDPOINTS.companies());\n  }\n\n  export function getCompanies(): Promise<Array<ICompany>> {\n    return api.get<Array<ICompany>>(ENDPOINTS.companies());\n  }\n\n  export function getBusinessRoles(): Promise<Array<IBusinessRole>> {\n    return api.get<Array<IBusinessRole>>(ENDPOINTS.businessRoles());\n  }\n\n  export function getCompanyTypes(): Promise<Array<ICompanyType>> {\n    return api.get<Array<ICompanyType>>(ENDPOINTS.companyTypes());\n  }\n}\n","import { api } from './api';\nimport { IpObject, IpObjectList, ListResponse } from 'interfaces';\nimport { ENDPOINTS } from './endpoints';\n\nexport function getIpObjectList(\n  params: any\n): Promise<ListResponse<IpObjectList>> {\n  return api.get(ENDPOINTS.ipObjectList(), params);\n}\n\nexport function getIpObject(id: string): Promise<IpObject> {\n  return api.get(ENDPOINTS.ipObject(id));\n}\n","import { ISelectOption } from '@we-ui-components/base/dist/Components/src';\n\nexport const sleep = (ms: number) => {\n  return new Promise(resolve => setTimeout(resolve, ms));\n};\n\nexport function downloadFile(\n  anchorRef: HTMLAnchorElement,\n  url: string,\n  name: string\n) {\n  anchorRef.href = url;\n  anchorRef.setAttribute('download', name);\n  anchorRef.click();\n}\n\nexport const download = (url: string, filename = '') => {\n  const ahref = document.createElement('a');\n  document.body.appendChild(ahref);\n  downloadFile(ahref, url, filename);\n  document.body.removeChild(ahref);\n};\n\nexport const getFilesBase64 = (\n  files: File[],\n  cb: (filesWithBase64: IFileWithBase64[]) => void\n) => {\n  const result: IFileWithBase64[] = [];\n\n  files.forEach((file, index) =>\n    getFileBase64(file, base64 => {\n      result[index] = { file, base64 };\n\n      if (result.length === files.length) {\n        cb(result);\n      }\n    })\n  );\n};\n\nexport const getFilesBase64Promise = (\n  files: File[]\n): Promise<IFileWithBase64[]> =>\n  Promise.all(\n    files.map(async file => ({\n      file,\n      base64: await getFileBase64Promise(file)\n    }))\n  );\n\nexport const getFileBase64 = (file: File, cb: (base64: string) => void) =>\n  onReadAsBase64(file)(cb);\n\nconst getFileBase64Promise = (file: File): Promise<string> =>\n  new Promise(resolve => onReadAsBase64(file)(resolve));\n\nconst onReadAsBase64 = (file: File) => (cb: (base64: string) => void) => {\n  const reader = new FileReader();\n  reader.readAsDataURL(file);\n  reader.onload = () => cb(reader.result as string);\n};\n\ninterface IFileWithBase64 {\n  file: File;\n  base64: string;\n}\n\nexport function getCurrentYear() {\n  const now = new Date();\n  return now.getFullYear();\n}\n\nexport function getRange(start: number, end: number) {\n  return Array.from({ length: end - start + 1 }, (_, index) => start + index);\n}\n\nexport function generateSimpleOptions(\n  data: Array<string | number>\n): ISelectOption[] {\n  return data.map(it => ({\n    value: it,\n    text: it\n  }));\n}\n","import { api } from './api';\nimport { ENDPOINTS } from './endpoints';\nimport { INewVote } from 'pages/CreateVote';\nimport { ListResponse, PollSubject, ISchool } from 'interfaces/apiEntities';\nimport { getCurrentYear } from 'utils/misc';\n\nexport function getDistricts() {\n  return api.get<ListResponse<PollSubject>>(ENDPOINTS.districts(), {\n    type: 'DISTRICT',\n    size: 1000,\n    sort: 'name,asc',\n    year: getCurrentYear()\n    // hasPoll: 'true',\n    // pollStatus: 'APPLICATIONS_RECEIVING'\n  });\n}\n\nexport function getDistrictsWithVotes(params: any = {}) {\n  return api.get<ListResponse<PollSubject>>(ENDPOINTS.districtsWithVotes(), {\n    size: 1000,\n    hasPoll: 'true',\n    pollStatus: 'APPLICATIONS_RECEIVING',\n    sort: 'name,asc',\n    year: getCurrentYear(),\n    ...params\n  });\n}\n\nexport function getSchoolRegions() {\n  return api.get<ListResponse<PollSubject>>(ENDPOINTS.districts(), {\n    type: 'SCHOOL_GROUP',\n    sort: 'id,asc',\n    size: 1000,\n    year: getCurrentYear(),\n  });\n}\n\nexport function getSchools(queryObject: Record<string, string | number>) {\n  return api.get<ListResponse<ISchool>>(ENDPOINTS.schools(), queryObject);\n}\n\nexport function getTechWindow() {\n  return api.get<{ prepareTechWindow: number }>(ENDPOINTS.techWindow());\n}\n\nexport function createVote(data: INewVote): Promise<{ pollsIds: string[] }> {\n  return api.post(ENDPOINTS.vote(), data);\n}\n","import { api } from './api';\nimport { ENDPOINTS } from './endpoints';\nimport {\n  IFile,\n  IHistoryItem,\n  IProject,\n  ListResponse,\n  PROJECT_STATUS\n} from 'interfaces/apiEntities';\n\nexport function getAllProjects(params: any): Promise<ListResponse<IProject>> {\n  if (params.pollId) {\n    params.sort = 'bulletinOrder,asc'; // TODO need fix in store\n  } else {\n    params.sort = 'createdDate,desc';\n  }\n\n  return api.get(ENDPOINTS.projects(), params);\n}\n\nexport function createProject(data: any): Promise<{ id: string }> {\n  return api.post(ENDPOINTS.projects(), data);\n}\n\nexport function reworkProject(data: any): Promise<{ id: string }> {\n  const { id } = data;\n  return api.post(ENDPOINTS.reworkProjects(id), data);\n}\n\nexport function getProjectsCount(id: string): Promise< Record<PROJECT_STATUS, number> > {\n  return api.get(ENDPOINTS.projectsCountTab(id));\n}\n\nexport function getProjectCount(data: any): Promise<{ id: string }> {\n  return api.get(ENDPOINTS.projectsCount(), { status: ['DRAFT', 'IN_REVIEW'] });\n}\n\nexport function uploadFile(\n  file: File,\n  type: 'PUBLIC' | 'PRIVATE' | 'RESULT'\n): Promise<{ id: string }> {\n  const formData = new FormData();\n  formData.append('file', file);\n  formData.append('type', type);\n\n  return api.post(ENDPOINTS.uploadFile(), formData);\n}\n\nexport function getProjects(params: any) {\n  return api.get<ListResponse<IProject>>(ENDPOINTS.projects(), {\n    ...params,\n    size: 200 // TODO - need fix ListStoreConstructor\n  });\n}\n\nexport function getProject(id: string) {\n  return api.get<IProject>(ENDPOINTS.projectById(id));\n}\n\nexport function getProjectHistory(id: string) {\n  return api.get<IHistoryItem[]>(ENDPOINTS.projectHistory(id));\n}\n\nexport async function getProjectFile(url: string): Promise<string> {\n  const data = await fetch(url);\n  const blob = await data.blob();\n  return new Promise((resolve) => {\n    const reader = new FileReader();\n    reader.readAsDataURL(blob);\n    reader.onloadend = () => {\n      const base64data = reader.result;\n      resolve(base64data as string);\n    }\n  });\n}\n\nexport type TProjectAction =\n  | 'approve'\n  | 'decline'\n  | 'archive'\n  | 'start'\n  | 'requireRework'\n  | 'finish'\n  | 'cancel'\n  | 'delete'\n  | 'completeRework';\n\nexport function callProjectAction(\n  id: string,\n  action: TProjectAction,\n  params: any\n) {\n  return api.post<IProject>(ENDPOINTS.projectAction(id, action), params);\n}\n\nexport function rateProject(projectId: string, value: number): Promise<void> {\n  return api.post<void>(ENDPOINTS.rateProject(projectId), {\n    score: value\n  })\n}\n","import { api } from './api';\nimport {\n  ISystemUser,\n  IUser,\n  ListResponse,\n  INewUser,\n  UpdateUserFullyRequest\n} from 'interfaces';\nimport { ENDPOINTS } from './endpoints';\n\nexport function getUsersList(\n  params: {\n    businessRole?: string;\n    search?: string,\n  }\n): Promise<ListResponse<IUser>> {\n  return api.get(ENDPOINTS.users(), params);\n}\n\nexport function getUser(id: string): Promise<ISystemUser> {\n  return api.get(ENDPOINTS.getUser(id));\n}\n\nexport function createUser(data: INewUser) {\n  return api.post(ENDPOINTS.users(), data);\n}\n\nexport function updateUser(personId: string, data: UpdateUserFullyRequest) {\n  return api.put(ENDPOINTS.updatePersonFull(personId), data);\n}\n\nexport function changePassword(\n  personId: string,\n  data: any\n): Promise<ISystemUser> {\n  return api.put(ENDPOINTS.changePassword(personId), data);\n}\n\nexport function activateUser(personId: string): Promise<ISystemUser> {\n  return api.put(ENDPOINTS.activateUser(personId));\n}\n\nexport function blockUser(personId: string): Promise<ISystemUser> {\n  return api.put(ENDPOINTS.blockUser(personId));\n}\n\nexport function deleteUser(personId: string) {\n  return api.del(ENDPOINTS.getUser(personId));\n}\n","import { api } from './api';\nimport { ENDPOINTS } from './endpoints';\nimport { ListResponse, ArchivePollApiDTO } from 'interfaces';\n\nexport function getAllArchivePolls(\n  queryParams?: Record<string, any>\n): Promise<ListResponse<ArchivePollApiDTO>> {\n  return api.get<ListResponse<ArchivePollApiDTO>>(\n    ENDPOINTS.archivePolls(),\n    queryParams\n  );\n}\n\nexport function getArchiveProjects(\n  queryParams?: Record<string, any>\n): Promise<ListResponse<any>> {\n  return api.get(ENDPOINTS.archiveProjects(), queryParams);\n}\n\nexport function getOneArchiveProject(id: string) {\n  return api.get<ArchivePollApiDTO>(ENDPOINTS.archivePoll(id));\n}\n","import * as React from 'react';\n\nconst { useContext } = React;\n\nexport interface StoresProviderProps<TStores> {\n  stores: TStores;\n  children?: React.ReactNode;\n}\n\nexport function createStoresContext<T>() {\n  const StoresContext = React.createContext<T | null>(null);\n  function StoresProvider({ stores, children }: StoresProviderProps<T>) {\n    return (\n      <StoresContext.Provider value={stores}>{children}</StoresContext.Provider>\n    );\n  }\n  const useStores = () => {\n    const stores = useContext(StoresContext);\n    if (!stores) {\n      throw new Error('useStores must be used within a StoreProvider.');\n    }\n    return stores;\n  };\n\n  return {\n    StoresProvider,\n    useStores,\n  };\n}\n","import { createBrowserHistory } from 'history';\nimport { RouterStore, syncHistoryWithStore } from 'mobx-react-router';\nimport { createQS } from 'we-oauth2/lib/auth/api-utils';\n\nexport default class CustomRouterStore extends RouterStore {\n  constructor() {\n    super();\n    const browserHistory = createBrowserHistory();\n\n    this.history = syncHistoryWithStore(browserHistory, this);\n  }\n\n  getSearchParams(params: string[]) {\n    const sp = this.createURLSearhcParams();\n    const result = {} as Record<string, string>;\n\n    params.forEach(name => {\n      if (sp.has(name)) {\n        result[name] = sp.get(name);\n      }\n    });\n\n    return result;\n  }\n\n  setSearchParams(newParams: Record<string, any>) {\n    const updatedParams = this.getUpdatedSearchParamsState(newParams);\n    const newPath = this.location.pathname + createQS(updatedParams);\n\n    this.history.push(newPath);\n  }\n\n  private getUpdatedSearchParamsState(newParams: Record<string, any>) {\n    const sp = this.createURLSearhcParams(newParams);\n    const state = {} as Record<string, any>;\n\n    sp.forEach((value, key) => {\n      state[key] = value;\n    });\n\n    return state;\n  }\n\n  private createURLSearhcParams(paramsToInject?: Record<string, any>) {\n    const result = new URLSearchParams(this.location.search);\n\n    if (paramsToInject) {\n      Object.entries(paramsToInject).forEach(([name, value]) => {\n        const isValueSet = () => {\n          if (value instanceof Array) {\n            return value.length > 0;\n          }\n\n          if (typeof value === 'string') {\n            return value.length > 0;\n          }\n\n          return value !== undefined;\n        };\n\n        if (isValueSet()) {\n          result.set(name, value);\n        } else {\n          result.delete(name);\n        }\n      });\n    }\n\n    return result;\n  }\n}\n","export const errorTypes = {\n  SILENT: 'SILENT'\n};\n\nexport interface IDataError extends Error {\n  data?: any;\n}\n\nexport function createError(\n  name: string,\n  message: string,\n  data?: any\n): IDataError {\n  const newError: IDataError = new Error(message);\n\n  newError.name = name;\n  if (data) {\n    newError.data = data;\n  }\n\n  return newError;\n}\n\nexport const silentError = createError(errorTypes.SILENT, '');\n\nexport function isSilentError(error: IDataError): boolean {\n  return error && error.name === errorTypes.SILENT;\n}\n\nexport function handleSilentError(error: IDataError) {\n  if (error.name === 'SILENT') {\n    return Promise.resolve();\n  }\n\n  throw error;\n}\n\nexport type HttpResponseError = Error & {\n  response: {\n    body: {\n      error: string;\n      text: string;\n    };\n  };\n};\n\nexport function printError(error: any): string {\n  if (typeof error === 'string') {\n    return error;\n  }\n  if (typeof error === 'object') {\n    if ('title' in error) {\n      return error.title;\n    }\n  }\n  return '';\n}\n","import { useContext } from 'react';\nimport { ThemeContext } from 'styled-components';\n\nexport function useTheme() {\n  return useContext(ThemeContext);\n}\n","import { useState, useEffect } from 'react';\n\ninterface UseRequestParams<T> {\n  onSuccess?: (data: T) => void;\n  onError?: (error: string) => void;\n  initialData?: T;\n}\n\nexport function useRequest<T>(\n  requestFn: () => Promise<T>,\n  { onSuccess, onError, initialData }: UseRequestParams<T> = {}\n) {\n  const [status, setStatus] = useState<Status>('fetching');\n  const [data, setData] = useState<T>(initialData);\n  const [error, setError] = useState<string>('');\n\n  useEffect(() => {\n    setStatus('fetching');\n    setError('');\n\n    requestFn()\n      .then(response => {\n        setData(response);\n        setStatus('success');\n\n        if (typeof onSuccess === 'function') {\n          onSuccess(response);\n        }\n      })\n      .catch(error => {\n        console.error(error);\n        setStatus('error');\n        setError(error);\n\n        if (typeof onError === 'function') {\n          onError(error);\n        }\n      });\n  }, [requestFn, onSuccess, onError]);\n\n  return [data, { status, error }] as const;\n}\n\ntype Status = 'fetching' | 'success' | 'error';\n","import * as moment from 'moment';\n\nmoment.locale('ru');\n\nexport function dateTimeFormat(date: number | Date | string): string {\n  return moment(date).format('DD.MM.YYYY HH:mm');\n}\n\nexport function dateFormat(\n  date: number | Date | string,\n  isFull?: boolean\n): string {\n  return moment(date).format(isFull ? 'DD.MM.YYYY, HH:mm' : 'DD.MM.YYYY');\n}\n\nexport function timeFormat(date: number | Date | string): string {\n  return moment(date).format('HH:mm');\n}\n\nexport function dateISOFormat(date: Date): string {\n  return `${moment(date).format('YYYY-MM-DDTHH:mm:ss.SSS')}Z`;\n  // return date.toISOString(); - Not work approach\n}\n\nexport function onlyDateFormat(date: Date | string): string {\n  return `${moment(date).format('YYYY-MM-DD')}`;\n}\n\nexport function getMonthName(monthNumber: number): string {\n  return moment()\n    .month(monthNumber)\n    .format('MMMM');\n}\n\nexport function getMonthYear(date: string): string {\n  const month = Number(date?.slice(0, 2)) - 1;\n  const year = Number(date?.slice(3, 7));\n  return `${getMonthName(month)} ${year}`;\n}\n\nexport function getMonthNameUpper(monthNumber: number): string {\n  const month = getMonthName(monthNumber);\n  return month.charAt(0).toUpperCase() + month.slice(1);\n}\n\nexport function getMonthNameUpperShort(monthNumber: number): string {\n  if (monthNumber === 4) return 'Май';\n  const month = getMonthName(monthNumber);\n  return `${month.charAt(0).toUpperCase()}${month.slice(1, 3)}.`;\n}\n\nexport const isDefined = (value: any) =>\n  !(value === null || value === undefined);\n\nexport const formatToDateString = (date: Date | string) => {\n  let dateDisplay;\n  const dateDate = new Date(date);\n\n  if (Number.isNaN(dateDate.getTime())) {\n    dateDisplay = date;\n  } else {\n    dateDisplay = new Intl.DateTimeFormat('ru-RU', {\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit'\n    }).format(dateDate);\n  }\n\n  return dateDisplay;\n};\n\nexport const formatDaysLeftFrom = (date: Date | string) => {\n  return Math.max(\n    0,\n    moment(date)\n      .startOf('day')\n      .diff(moment().startOf('day'), 'days')\n  ).toString();\n};\n","import { UserInfo } from 'models';\nimport { isDefined } from 'utils';\nimport { EmptyString } from 'constants/strings';\n\nexport const plural = (number: number, titles: Array<string>) => {\n  const cases = [2, 0, 1, 1, 1, 2];\n  return titles[\n    number % 100 > 4 && number % 100 < 20\n      ? 2\n      : cases[number % 10 < 5 ? number % 10 : 5]\n  ];\n};\n\nexport const getFullName = (fullName: {\n  lastName: string;\n  firstName: string;\n  middleName: string;\n}): string =>\n  `${fullName.lastName} ${fullName.firstName} ${fullName.middleName}`;\n\nexport function mergeUserNames(data: UserInfo): UserInfo {\n  return {\n    ...data,\n    lastName: `${data.lastName} ${data.firstName} ${printSimple(\n      data.meta?.patronymic\n    )}`\n  };\n}\n\n// export function splitUserNames(data: UserInfo): UserInfo {\n//   const names = data.lastName.split(' ').filter(item => item !== '');\n//   return {\n//     ...data,\n//     lastName: names.length > 0 ? names[0] : data.lastName,\n//     firstName: names.length > 1 ? names[1] : data.firstName,\n//     meta: { patronymic: names.length > 2 ? names[2] : data?.meta?.patronymic },\n//   };\n// }\n\nexport function printDefined(value: string): string {\n  return isDefined(value) ? value : EmptyString;\n}\n\nexport function printSimple(value: string): string {\n  return isDefined(value) ? value : '';\n}\n\nexport function getTextLength(\n  text: string,\n  fontSize = 16,\n  iterFn?: (ch: string, i: number, textLength: number) => boolean\n): number {\n  let upperCount = 0;\n  let lowerCount = 0;\n  let restCount = 0;\n  let textLength = 0;\n  try {\n    for (let i = 0; i < text.length; i++) {\n      const ch = text[i];\n      if ((ch >= 'A' && ch <= 'Z') || (ch >= 'А' && ch <= 'Я')) {\n        upperCount++;\n      } else if (\n        (ch >= 'a' && ch <= 'z') ||\n        (ch >= 'а' && ch <= 'я') ||\n        (ch >= '0' && ch <= '9')\n      ) {\n        lowerCount++;\n      } else {\n        restCount++;\n      }\n      textLength = Math.round(\n        (fontSize / 16) * (11 * upperCount + 9 * lowerCount + 6 * restCount)\n      );\n      if (typeof iterFn === 'function') {\n        if (iterFn(ch, i, textLength)) {\n          break;\n        }\n      }\n    }\n  } catch (err) {}\n  return textLength;\n}\n\ninterface PersonName {\n  lastName: string;\n  firstName: string;\n  patronymic?: string;\n}\n\nexport function formatPersonName({\n  lastName,\n  firstName,\n  patronymic\n}: PersonName) {\n  const getInitial = (s: string) => s.charAt(0) + '.';\n\n  const names = [];\n\n  if (lastName) names.push(lastName);\n  if (firstName) names.push(getInitial(firstName.trim()));\n  if (patronymic) names.push(getInitial(patronymic.trim()));\n\n  return names.join(' ');\n}\n\nexport function applyMask(phone: string, format: string, char = 'N') {\n  const charToReplace = new RegExp(char);\n\n  return phone\n    .split('')\n    .reduce((acc, letter) => acc.replace(charToReplace, letter), format);\n}\n\nexport function getTextLimitIndex(\n  text: string,\n  limit: number,\n  fontSize = 16\n): number {\n  let index = 0;\n  getTextLength(text, fontSize, (_: string, i: number, textLength: number) => {\n    if (textLength >= limit) {\n      index = i;\n      return true;\n    }\n    return false;\n  });\n  return index;\n}\n\nexport function isEmptyString(value: string) {\n  if (typeof value === 'string') {\n    const parts = value.split(' ').length;\n\n    if (parts === 1) {\n      return !value.length;\n    }\n\n    if (value.length - parts < 0) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function trimToLength(string: string, limit: number) {\n  if (!isDefined(limit)) {\n    return string;\n  }\n\n  return string.length <= limit - 3 ? string : string.substr(0, limit) + '...';\n}\n","import { plural } from './textUtils';\n\nconst zeroDecimalsFormatter = new Intl.NumberFormat('ru-RU', {\n  minimumFractionDigits: 0,\n  maximumFractionDigits: 0\n});\n\nexport function formatZeroDecimals(value: number | string) {\n  return zeroDecimalsFormatter.format(Number(value));\n}\n\nconst twoDecimalsFormatter = new Intl.NumberFormat('ru-RU', {\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 2\n});\n\nexport function formatWithTwoDecimals(value: number | string) {\n  return twoDecimalsFormatter.format(Number(value));\n}\n\nexport function formatWithTwoDecimalsRub(value: number) {\n  return `${formatWithTwoDecimals(value)} ₽`;\n}\n\nexport const showRecords = (num: number) =>\n  num + ' ' + plural(num, ['запись', 'записи', 'записей']);\n\nexport const showMonths = (num: number) =>\n  num + ' ' + plural(num, ['месяц', 'месяца', 'месяцев']);\n\nexport const showHours = (num: number) =>\n  num + ' ' + plural(num, ['часа', 'часов', 'часов']);\n\nexport const showMinutes = (num: number) =>\n  num + ' ' + plural(num, ['минуты', 'минут', 'минут']);\n\nexport const showPeople = (num: number) =>\n  zeroDecimalsFormatter.format(num) +\n  ' ' +\n  plural(num, ['человек', 'человека', 'человек']);\n","export const P = <T>(property: (object: T) => void) => {\n  const chaine = property.toString();\n  const arr = chaine.match(/(\\.)[\\S]+/);\n  return arr[0].slice(1);\n};\n\nexport const Pr = <T>(property: keyof T) => {\n  return property;\n};\n","import * as bcrypt from 'bcryptjs';\n\nexport function b64DecodeUnicode(str: string) {\n  // Going backwards: from bytestream, to percent-encoding, to original string.\n  return decodeURIComponent(\n    atob(str)\n      .split('')\n      .map(function(c) {\n        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n      })\n      .join('')\n  );\n}\n\nfunction s4() {\n  return Math.floor((1 + Math.random()) * 0x10000)\n    .toString(16)\n    .substring(1);\n}\n\nexport function guid(): string {\n  return (\n    s4() +\n    s4() +\n    '-' +\n    s4() +\n    '-' +\n    s4() +\n    '-' +\n    s4() +\n    '-' +\n    s4() +\n    s4() +\n    s4()\n  );\n}\n\nexport function encryptPassword(password: string) {\n  return bcrypt.hashSync(password, 10);\n}\n","import * as _ from 'lodash';\nimport * as moment from 'moment';\nimport { isEmptyString } from './textUtils';\n\nexport function createValidate(\n  func: (value: any, data?: any) => boolean,\n  error: any\n) {\n  return {\n    validator(\n      rule: any[],\n      value: any,\n      callback: (errors: any[]) => void,\n      storeData?: any\n    ) {\n      const errors = [];\n\n      if (func(value, storeData)) {\n        errors.push(error);\n      }\n      callback(errors);\n    }\n  };\n}\n\nexport function isRequired(msg?: string) {\n  return {\n    ...createValidate(\n      v =>\n        v === undefined ||\n        v === null ||\n        isEmptyString(v) ||\n        (v instanceof Array && !v.length),\n      msg || 'Пожалуйста, заполните поле'\n    ),\n    validateType: 'requiredValidator'\n  };\n}\n\nexport function isPositive(msg?: string) {\n  return {\n    ...createValidate(\n      v => Number(v) <= 0,\n      msg || 'Значение должно быть больше 0'\n    ),\n    validateType: 'requiredValidator'\n  };\n}\n\nexport function lessThan(value: number, msg?: string) {\n  return {\n    ...createValidate((v, data) => {\n      return Number(v) > value;\n    }, msg || `Значение не должно превышать ${value}`),\n    validateType: 'requiredValidator'\n  };\n}\n\nconst webSitePattern = /^(http(s)?:\\/\\/.)(www\\.)?[-a-zA-Z0-9@:%\\u0400-\\u04FF._\\+~#=]{2,256}\\.[a-z\\u0400-\\u04FF]{2,6}([#\\?\\/\\\\:]([-a-zA-Z0-9\\u0400-\\u04FF@:%_\\+.~#?&//=]*))?$/i;\n\nexport function isCorrectUrl(msg?: string) {\n  return {\n    ...createValidate(v => {\n      return !webSitePattern.test(v);\n    }, msg || 'Ссылка невалидна'),\n    validateType: 'requiredValidator'\n  };\n}\n\nexport function allowEmpty(validatorToAllow: { validator: Function }) {\n  return {\n    validator(\n      rule: any[],\n      value: any,\n      callback: (errors: any[]) => void,\n      storeData?: any\n    ) {\n      if (value.length === 0) {\n        callback([]);\n      } else {\n        validatorToAllow.validator(rule, value, callback, storeData);\n      }\n    }\n  };\n}\n\nexport function conditiallyRequired(condition: () => boolean, msg?: string) {\n  return {\n    validator(\n      rule: any[],\n      value: any,\n      callback: (errors: any[]) => void,\n      storeData?: any\n    ) {\n      if (condition()) {\n        isRequired(msg).validator(rule, value, callback, storeData);\n      } else {\n        callback([]);\n      }\n    }\n  };\n}\n\ninterface ValidatorFunc<T = string> {\n  (rule: any[], value: T, callback: (errors: any[]) => void): void;\n}\n\nexport const maxLength = (length: number, msg?: string): ValidatorFunc => (\n  _,\n  value,\n  callback\n) => {\n  const errors = [];\n\n  if (value.length > length) {\n    const defaultMsg = `Превышена допустимая длина текста (${length} символов)`;\n    errors.push(msg || defaultMsg);\n  }\n\n  callback(errors);\n};\n\nexport const isTheSameAs = (fieldName: string, err: string) => {\n  return {\n    ...createValidate(\n      (value, formData) => _.get(formData, fieldName) !== value,\n      err\n    ),\n    validateType: 'requiredValidator'\n  };\n};\n\nexport const nonEmptyFilesRule = (\n  _: any,\n  value: File[],\n  cb: (errors: any[]) => void\n) => {\n  const errors = [];\n\n  if (!value || value.length === 0) {\n    errors.push('Прикрепите документы');\n  }\n\n  cb(errors);\n};\n\nexport const isLengthBetween = (minLength: number, maxLength: number) => {\n  return {\n    validator(\n      rule: any[],\n      value: string,\n      callback: (errors: any[]) => void,\n      storeData?: any\n    ) {\n      const errors = [];\n\n      if (!value || value.length < minLength || value.length > maxLength) {\n        let error = `Длина значения должна быть от ${minLength} до ${maxLength} [${value.length}]`;\n        if (minLength === maxLength) {\n          error = `Длина значения должна быть ${minLength} [${value.length}]`;\n        }\n        errors.push(error);\n      }\n\n      callback(errors);\n    },\n    validateType: 'requiredValidator'\n  };\n};\n\nexport const limitLength = (value: string | number, limit = 19) =>\n  String(value).slice(0, limit);\n\nexport const oneOfLengths = (\n  lengths: number[],\n  message = `Длина значения может быть ${lengths.join(' или ')} символов`\n) => createValidate(value => !lengths.includes(value.length), message);\n\nexport const hasWords = (count: number, message: string) =>\n  createValidate((value: string) => {\n    if (value) {\n      const names = value.split(' ').filter(item => item !== '');\n      if (names.length >= count) {\n        return false;\n      }\n    }\n    return true;\n  }, message);\n\nexport const moreThanZero = {\n  validator(\n    rule: any[],\n    value: any,\n    callback: (errors: any[]) => void,\n    storeData?: any\n  ) {\n    const errors = [];\n\n    if (!value || Number(value) <= 0) {\n      errors.push('Значение должно быть больше 0');\n    }\n\n    callback(errors);\n  },\n  validateType: 'requiredValidator'\n};\n\nexport const isCorrectLastName = createValidate(\n  value => !/^[а-я]+(-[а-я]+)*$/i.test(value),\n  'Пожалуйста, используйте символы кириллицы'\n);\n\nexport function isCorrectTime(msg?: string) {\n  return {\n    ...createValidate(v => {\n      const [hours, minutes] = v.split(':');\n\n      return !v || Number(hours) > 23 || Number(minutes) > 59;\n    }, msg || 'Некорректный формат'),\n    validateType: 'requiredValidator'\n  };\n}\n\nexport function notEqualDataField(fieldName: string, msg?: string) {\n  return {\n    ...createValidate((v, formData) => {\n      return v.valueOf() === formData[fieldName].valueOf();\n    }, msg || `Значение не должно совпадать с полем ${fieldName}`),\n    validateType: 'requiredValidator'\n  };\n}\n\nexport function isPresentTime(msg?: string) {\n  return {\n    ...createValidate(v => {\n      return moment(v).valueOf() < moment().valueOf();\n    }, msg || `Укажите будущую дату и время`),\n    validateType: 'requiredValidator'\n  };\n}\n\nexport function isAfterDateField(\n  fieldName: string,\n  diff: number,\n  msg?: string\n) {\n  return {\n    ...createValidate((v, formData) => {\n      return moment(v).valueOf() < moment(formData[fieldName]).valueOf() + diff;\n    }, msg || `Эта дата должна быть не раньше ${fieldName}`),\n    validateType: 'requiredValidator'\n  };\n}\n\nexport const limitFileSize = (\n  size: number,\n  message = 'Размер прикрепленного файла превышает допустимое значение'\n) => {\n  return createValidate((value: File[]) => {\n    return value.some(f => f.size > size);\n  }, message);\n};\n","export const Routes = {\n  landing: 'land',\n\n  loginOrganizer: 'login-organizer',\n  loginApplicant: 'login-applicant',\n  loginVoter: 'login-voter',\n\n  homeOrganizer: 'organizer',\n  homeApplicant: 'applicant',\n  homeVoter: 'voter',\n\n  projects: 'projects',\n  archive: 'archive',\n\n  poll: 'poll',\n\n  questionAnswer: 'question-answer',\n  infoAboutProgram: 'info-program',\n\n  createVote: 'create-vote',\n  createProject: 'create-project',\n\n  profile: 'profile',\n\n  projectPage: 'project',\n\n  users: 'users'\n};\n","import { Routes } from 'constants/routes';\n\nexport function useRoutes() {\n  return Routes;\n}\n\nexport function getRootPathname(value: string) {\n  const firstMatch = value.indexOf('/', 1);\n  if (firstMatch !== -1) {\n    return value.substring(0, firstMatch);\n  }\n  return value;\n}\n","const CryptoJS = require('crypto-js');\n\n// Code goes here\nconst keySize = 256;\nconst ivSize = 128;\nconst iterations = 100;\n\nexport function encryptMsg(msg, pass) {\n  const salt = CryptoJS.lib.WordArray.random(128 / 8);\n\n  const key = CryptoJS.PBKDF2(pass, salt, {\n    keySize: keySize / 32,\n    iterations: iterations\n  });\n\n  const iv = CryptoJS.lib.WordArray.random(128 / 8);\n\n  const encrypted = CryptoJS.AES.encrypt(msg, key, {\n    iv: iv,\n    padding: CryptoJS.pad.Pkcs7,\n    mode: CryptoJS.mode.CBC\n  });\n\n  // salt, iv will be hex 32 in length\n  // append them to the ciphertext for use  in decryption\n  const transitmessage = salt.toString() + iv.toString() + encrypted.toString();\n  return transitmessage;\n}\n\nexport function decryptMsg(transitmessage, pass) {\n  const salt = CryptoJS.enc.Hex.parse(transitmessage.substr(0, 32));\n  const iv = CryptoJS.enc.Hex.parse(transitmessage.substr(32, 32));\n  const encrypted = transitmessage.substring(64);\n\n  const key = CryptoJS.PBKDF2(pass, salt, {\n    keySize: keySize / 32,\n    iterations: iterations\n  });\n\n  const decrypted = CryptoJS.AES.decrypt(encrypted, key, {\n    iv: iv,\n    padding: CryptoJS.pad.Pkcs7,\n    mode: CryptoJS.mode.CBC\n  });\n\n  return decrypted.toString(CryptoJS.enc.Utf8);\n}\n","export const EmptyString = '— —';\nexport const NoDataString = 'Н/д';\n","import { TRole } from 'interfaces';\n\nexport const RIGHTHOLDER_ROLES: TRole[] = ['REGULATOR', 'APPLICANT', 'VOTER'];\n\nexport const EXTERNAL_ROLES: TRole[] = [];\n\nexport const ALL_ROLES = RIGHTHOLDER_ROLES.concat(EXTERNAL_ROLES);\n","import * as _ from 'lodash';\nimport { action, computed, observable } from 'mobx';\nimport { UserInfo } from 'models';\nimport { UserStore } from 'we-oauth2';\nimport stores, { IStores, onAuthSuccessCb } from 'stores';\nimport { createError, formatPersonName, HttpResponseError } from 'utils';\nimport { ICompany, RegistrationRequest, TRole } from 'interfaces';\nimport { Routes } from 'constants/routes';\nimport { api, userService } from 'services';\nimport { RIGHTHOLDER_ROLES } from '../constants';\nimport * as bcrypt from 'bcryptjs';\nimport get from 'lodash.get';\n\nconst defaults = {};\n\nexport class UserStoreEx extends UserStore<UserInfo> {\n  public stores: IStores;\n\n  @observable public isPageScrolling = false;\n\n  @observable public encryptPassword = '';\n\n  @observable public encryptedContent = '';\n\n  constructor(props) {\n    super(props);\n  }\n\n  @action.bound\n  public updateUserInfo() {\n    return this.userService\n      .getUserInfo()\n      .then(userInfo => {\n        this.userInfo = userInfo;\n      })\n      .catch(error => {\n        this.status = 'error';\n\n        const errorCode = get(error, 'response.body.error');\n\n        if (errorCode) {\n          return Promise.reject(createError('AUTH_ERROR', errorCode));\n        }\n\n        return Promise.reject(error);\n      });\n  }\n\n  @action.bound\n  public async saveEncryptPassword(password: string) {\n    this.encryptPassword = password;\n    this.syncLocalStorage();\n\n    if (!this.encryptedContent) {\n      await this.saveEncryptedContent(bcrypt.hashSync(password));\n    }\n\n    const lastPollId = this.stores.activePoll.pollId;\n    if (lastPollId) {\n      await this.stores.activePoll.getPoll(lastPollId);\n    }\n  }\n\n  @computed\n  public get authStatus(): AuthStatus {\n    if (this.userInfo?.accountId) {\n      if (this.userInfo.businessRoles.length > 0) return 'authorized';\n      return 'non-verified';\n    }\n\n    return 'unauthenticated';\n  }\n\n  @computed\n  public get roles(): TRole[] {\n    return this.userInfo\n      ? this.userInfo.businessRoles.length\n        ? this.userInfo.businessRoles\n        : ['VOTER']\n      : [];\n  }\n\n  @computed\n  public get inn(): string {\n    const company = this.stores.catalogs.getCompanyById(\n      this.userInfo.companyId\n    );\n\n    return company.inn;\n  }\n\n  @computed\n  public get isRightholderEmployee() {\n    return this.isContainOneOfRoles(RIGHTHOLDER_ROLES);\n  }\n\n  public get formattedName() {\n    return formatPersonName({\n      lastName: this.userInfo.lastName,\n      firstName: this.userInfo.firstName,\n      patronymic: this.userInfo.meta?.patronymic\n    });\n  }\n\n  @observable public isLogouting = false;\n\n  @observable public redirectUrl: string = '';\n\n  @action.bound\n  public showErrorEx(error: HttpResponseError) {\n    this.status = 'error';\n\n    const errorCode = _.get(error, 'response.body.error');\n\n    if (errorCode) {\n      return Promise.reject(createError('AUTH_ERROR', errorCode));\n    }\n\n    return Promise.reject(error);\n  }\n\n  @action\n  public loginEx(user: string, password: string) {\n    return this.login(user, password).catch(this.showErrorEx);\n  }\n\n  @action\n  public logoutEx(): Promise<void> {\n    this.isLogouting = true;\n    this.redirectUrl = '';\n\n    return this.logout()\n      .then(() => {\n        this.isLogouting = false;\n        Object.values(stores).forEach(store => store.clear && store.clear());\n\n        this.redirectUrl = null;\n        this.stores.routing.push(`/${Routes.landing}`);\n      })\n      .catch(this.showErrorEx);\n  }\n\n  get firstName(): string {\n    return this.userInfo ? this.userInfo.firstName : '';\n  }\n\n  get lastName(): string {\n    return this.userInfo ? this.userInfo.lastName : '';\n  }\n\n  get company(): ICompany | null {\n    return this.userInfo\n      ? (this.stores.catalogs.companies &&\n          this.stores.catalogs.companies.find(\n            (company: ICompany) => company.id === this.userInfo.companyId\n          )) ||\n          ({} as ICompany)\n      : null;\n  }\n\n  @action refreshUserInfo() {\n    this.userService.getUserInfo().then();\n  }\n\n  @action\n  public setUser(data: Partial<UserStoreEx>) {\n    Object.assign(this, data); // mobx set\n  }\n\n  @action\n  public reset() {\n    Object.assign(this, defaults);\n  }\n\n  public isContainRoles(roles: TRole[]) {\n    return roles.every(role => this.roles.includes(role));\n  }\n\n  public isContainOneOfRoles(roles: TRole[]) {\n    return roles.some(role => this.roles.includes(role));\n  }\n\n  public saveRedirectUrl(url: string) {\n    if (!this.isAuthorized && url) {\n      this.redirectUrl = url;\n    }\n  }\n\n  private redirect() {\n    const url =\n      this.stores.routing.location.pathname +\n      this.stores.routing.location.search;\n    if (this.redirectUrl && url !== this.redirectUrl) {\n      this.stores.routing.push(this.redirectUrl);\n    }\n  }\n\n  @action\n  public onAuthSuccess: onAuthSuccessCb = async (userInfo: UserInfo) => {\n    if (this.authStatus === 'authorized') {\n      if (this.isContainRoles(['VOTER'])) {\n        await this.getEncryptedContent();\n\n        const session = localStorage.getItem('ibudget_voiting_session');\n\n        const sessionObj = JSON.parse(session);\n\n        if (\n          sessionObj &&\n          sessionObj.encryptPassword &&\n          sessionObj.accountId === this.userInfo.accountId\n        ) {\n          this.encryptPassword = sessionObj.encryptPassword;\n        } else {\n          this.clearEncryptPassword();\n        }\n      }\n\n      // if (this.isContainRoles(['APPLICANT'])) {\n      await this.stores.votings.init({}, true);\n      // }\n\n      // await this.stores.catalogs.getCompanies();\n      this.stores.catalogs.fetchStatus = 'success';\n\n      Promise.resolve().then(() => this.redirect());\n    }\n  };\n\n  registration = (user: RegistrationRequest) => userService.registration(user);\n\n  verify = async (code: string) => {\n    await userService.confirmRegistration({\n      confirmationCode: code,\n      accountId: this.userInfo.accountId\n    });\n\n    api.clearAuthToken();\n\n    this.init();\n  };\n\n  getSolvers() {\n    return userService.solvers();\n  }\n\n  getSolversByName(name: string) {\n    return userService.solversByName(name);\n  }\n\n  private syncLocalStorage() {\n    localStorage.setItem(\n      'ibudget_voiting_session',\n      JSON.stringify({\n        accountId: this.userInfo.accountId,\n        encryptPassword: this.encryptPassword\n      })\n    );\n  }\n\n  @action.bound\n  public async saveEncryptedContent(password: string) {\n    await userService.saveEncryptedContent({ encryptedContent: password });\n  }\n\n  @action.bound\n  public async clearEncryptPassword() {\n    this.encryptPassword = '';\n    this.syncLocalStorage();\n  }\n\n  @action.bound\n  public async getEncryptedContent() {\n    try {\n      this.encryptedContent = await userService.getEncryptedContent();\n    } catch (e) {\n      this.encryptedContent = '';\n    }\n  }\n}\n\nexport type AuthStatus = 'authorized' | 'unauthenticated' | 'non-verified';\n","import * as _ from 'lodash';\nimport { action, isComputedProp, isObservableProp, toJS } from 'mobx';\nimport { IStores } from 'stores';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport { sleep } from 'utils';\n\nconst logError = (error: object): void => {\n  console.error(error);\n};\n\nexport class StoreConstructor {\n  public defaults: { [className: string]: any } = {};\n\n  public stores: IStores;\n\n  constructor(stores: IStores) {\n    this.stores = stores;\n  }\n\n  public reset(): void {\n    this.updateFromObject(this.defaults);\n  }\n\n  public updateDefaultsFromSelf(ignoreArray?: string[]): void {\n    for (const key in this) {\n      if (!this[key]) {\n        continue;\n      }\n\n      const current: any = this[key];\n      let ignore = ['defaults', 'stores', 'state'];\n\n      if (ignoreArray && _.isArray(ignoreArray)) {\n        ignore = ignore.concat(ignoreArray);\n      }\n\n      if (\n        this.hasOwnProperty(key) &&\n        !_.isFunction(current) &&\n        ignore.indexOf(key) === -1 &&\n        !isComputedProp(this, key) &&\n        isObservableProp(this, key)\n      ) {\n        this.defaults[key] = toJS(current);\n      }\n    }\n  }\n\n  @action\n  public updateFromObject(obj: object): Promise<void> | void {\n    if (!_.isPlainObject(obj)) {\n      return logError(new Error('Trying to update Store from not an object'));\n    }\n\n    Object.keys(obj).forEach(key => {\n      if (!_.isUndefined(this[key]) || isObservableProp(this, key)) {\n        this[key] = obj[key];\n      } else {\n        logError(\n          new Error(\n            `There is no way to add a key:${key} in class:${this.constructor.name} since it is absent`\n          )\n        );\n      }\n    });\n\n    return Promise.resolve();\n  }\n\n  @action.bound\n  statusHandler = <T>(\n    actionFunc: () => Promise<T>,\n    statusField?: keyof this,\n    errorField?: keyof this,\n    onSuccess?: (res: T) => Promise<void>\n  ): Promise<T> => {\n    const statusFieldStr = String(statusField);\n    const errorFieldStr = String(errorField);\n\n    if (statusFieldStr) {\n      this[statusFieldStr] = 'fetching';\n    }\n    if (errorFieldStr) {\n      this[errorFieldStr] = null;\n    }\n\n    return actionFunc()\n      .then(async result => {\n        await sleep(0);\n        if (onSuccess) await onSuccess(result);\n        return result;\n      })\n      .then(res => {\n        if (statusFieldStr) {\n          this[statusFieldStr] = 'success';\n        }\n\n        return Promise.resolve(res);\n      })\n      .catch((err: NormalizedError) => {\n        console.error(err);\n\n        if (errorFieldStr) {\n          this[errorFieldStr] = err;\n        }\n\n        if (statusFieldStr) {\n          this[statusFieldStr] = 'error';\n        }\n\n        throw err;\n      });\n  };\n}\n","import { action, observable } from 'mobx';\nimport { statusFetching } from 'we-oauth2/lib/constants/types';\nimport { StoreConstructor } from './core/StoreConstructor';\nimport { catalogService } from 'services';\nimport { ICompany, IBusinessRole, ICompanyType } from 'interfaces';\n\nexport class CatalogsStore extends StoreConstructor {\n  @observable\n  public fetchStatus: statusFetching = 'init';\n\n  @observable companies: ICompany[];\n  @observable businessRoles: IBusinessRole[];\n  @observable companyTypes: ICompanyType[];\n\n  @action.bound\n  statusHandler = <T>(actionFunc: () => Promise<T>) => {\n    this.fetchStatus = 'fetching';\n\n    return actionFunc()\n      .then(res => {\n        this.fetchStatus = 'success';\n\n        return Promise.resolve(res);\n      })\n      .catch(err => {\n        console.error(err);\n\n        this.fetchStatus = 'error';\n\n        throw err;\n      });\n  };\n\n  getCompanies() {\n    return this.statusHandler(() => catalogService.getCompanies()).then(res => {\n      this.companies = res;\n    });\n  }\n\n  public getCompanyById(id: string) {\n    return this.companies.find(org => org.id === id);\n  }\n\n  getBusinessRoles() {\n    return this.statusHandler(() => catalogService.getBusinessRoles()).then(\n      res => {\n        this.businessRoles = res;\n      }\n    );\n  }\n\n  getCompanyTypes() {\n    return this.statusHandler(() => catalogService.getCompanyTypes()).then(\n      res => {\n        this.companyTypes = res;\n      }\n    );\n  }\n\n  // @action.bound\n  // public getCatalogs() {\n  //   return Promise.all([\n  //   ]).then(() => {\n  //     this.fetchStatus = 'success';\n  //   });\n  // }\n}\n","import { action, observable } from 'mobx';\nimport { ReactRenderFn } from 'interfaces';\n\nexport interface IModalProps {\n  width?: string;\n  position?: 'flex-start' | 'center';\n  isOverlayClose?: boolean;\n}\n\nexport class ModalsStore {\n  @observable\n  public render?: ReactRenderFn;\n  public options?: IModalProps;\n  public onClose?: () => any;\n\n  public scrollTo?: () => void;\n\n  @action.bound\n  public openModal = (\n    render: ReactRenderFn,\n    onClose?: () => any,\n    options?: IModalProps\n  ) => {\n    this.render = render;\n    this.options = options;\n    this.onClose = onClose;\n  };\n\n  @action.bound\n  public closeModal = () => {\n    this.render = null;\n\n    if (this.onClose instanceof Function) {\n      this.onClose();\n    }\n  };\n}\n","import { action, observable } from 'mobx';\nimport { guid } from 'utils';\nimport { statusFetching } from 'we-oauth2/lib/constants/types';\nimport { ButtonExProps } from 'ui';\nimport { CSSProperties } from 'styled-components';\n\nexport type ActionModalBody = (data: {\n  actionData?: any;\n}) => React.ComponentElement<{ onClose?: () => any; actionData?: any }, any>;\n\nexport interface ActionModalOptions {\n  width?: string;\n  position?: 'flex-start' | 'center';\n  title?: string;\n  onApply?: (data?: any) => Promise<any>;\n  onClose?: (data?: any) => Promise<any>;\n  additionalText?: React.FC;\n  closeText?: React.FC;\n  applyIcon?: React.FC;\n  applyText?: React.FC;\n  showOther?: boolean;\n  noValidation?: boolean;\n  initData?: any;\n  applyButtonProps?: ButtonExProps;\n  isOverlayClose?: boolean;\n  overlayStyle?: CSSProperties;\n  modalStyle?: CSSProperties;\n  actionsContainerStyle?: CSSProperties;\n  setTimeCloseModal?: number;\n}\n\nexport interface ActionModalConfig {\n  id: string;\n  bodyRender: ActionModalBody | any;\n  options: ActionModalOptions;\n  error?: string;\n  actionStatus?: statusFetching;\n}\n\nexport class ActionModalsStore {\n  @observable public pool: Array<ActionModalConfig> = [];\n\n  @action.bound\n  public open = (\n    bodyRender: ActionModalBody | any,\n    options?: ActionModalOptions\n  ): Promise<any> => {\n    const id = guid();\n\n    const modalConfig: ActionModalConfig = { bodyRender, options, id };\n\n    const deferPromise = new Promise((resolve, reject) => {\n      const onApply = options.onApply;\n\n      options.onApply = (data: any) => {\n        return (\n          onApply &&\n          onApply(data)\n            .then(resolve)\n            .then(() => this.close(id))\n            .catch(err => {\n              this.rejectError(err, reject);\n            })\n        );\n      };\n    });\n\n    this.pool.push(modalConfig);\n\n    if (options.setTimeCloseModal) {\n      setTimeout(() => this.close(id), options.setTimeCloseModal);\n    }\n\n    return deferPromise;\n  };\n\n  @action.bound\n  rejectError = (err: any, reject?: any) => {\n    const id = this.pool[this.pool.length - 1].id;\n\n    this.pool.find(m => m.id === id).error =\n      err.detail || err.title || err.message || err;\n\n    if (reject) reject();\n    return Promise.reject(err);\n  };\n\n  @action.bound\n  public close = (id: string) => {\n    const modalConfig = this.pool.find(modal => modal.id === id);\n\n    if (modalConfig) {\n      if (modalConfig.options.onClose) {\n        modalConfig.options.onClose();\n      }\n\n      this.pool = this.pool.filter(modal => modal.id !== id);\n    }\n  };\n\n  @action.bound\n  public closeLastModal = () => {\n    if (this.pool.length > 0) {\n      this.close(this.pool[this.pool.length - 1]?.id);\n    }\n  };\n\n  @action.bound\n  public closeAllModals = () => {\n    this.pool.map(item => this.close(item.id));\n  };\n}\n","import { statusFetching } from 'we-oauth2/lib/constants/types';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport * as _ from 'lodash';\nimport { ListResponse } from 'interfaces';\nimport { computed, observable, action } from 'mobx';\n\ntype EndpointFn<T> = (params: any) => Promise<ListResponse<T>>;\n\ninterface FetcherConstructorParams<T> {\n  endpointFn: EndpointFn<T>;\n  onSuccess: (params: any) => any;\n  onError: (error: any) => any;\n  pollingInterval?: number;\n  getQueryParams?: () => Record<string, any>;\n}\n\nexport class Fetcher<T> {\n  @observable public status: statusFetching = 'init';\n  private endpointFn: EndpointFn<T>;\n\n  private pollingInterval?: number;\n  private intervalContainer: number;\n  private debouncedFetch: any;\n\n  private lastRequest: Promise<ListResponse<T>>;\n  private getQueryParams: () => Record<string, any>;\n\n  private onSuccess: (params: any) => any;\n  private onError: (params: any) => any;\n\n  constructor(params: FetcherConstructorParams<T>) {\n    this.endpointFn = params.endpointFn;\n    this.pollingInterval = params.pollingInterval;\n    this.onError = params.onError;\n    this.onSuccess = params.onSuccess;\n    this.getQueryParams = params.getQueryParams;\n  }\n\n  @computed public get isPending() {\n    return this.status === 'fetching';\n  }\n\n  public startPolling() {\n    if (this.pollingInterval > 0) {\n      this.intervalContainer = setInterval(() => {\n        if (!this.isPending) {\n          this.sendRequest({ isSilent: true });\n        }\n      }, this.pollingInterval);\n    }\n  }\n\n  public stopPolling() {\n    clearInterval(this.intervalContainer);\n    this.intervalContainer = null;\n  }\n\n  public restartPolling() {\n    this.stopPolling();\n    this.startPolling();\n  }\n\n  @action\n  public sendRequest(\n    options: {\n      isSilent?: boolean;\n      withDebounce?: boolean;\n    } = {}\n  ) {\n    const { isSilent = false, withDebounce = false } = options;\n\n    if (withDebounce) {\n      if (this.debouncedFetch) {\n        return this.debouncedFetch();\n      } else {\n        this.debouncedFetch = _.debounce(this.sendRequest, 300);\n        return this.debouncedFetch();\n      }\n    }\n\n    if (!isSilent) {\n      this.status = 'fetching';\n    }\n\n    return this.reqestHandler();\n  }\n\n  @action\n  private reqestHandler() {\n    const currentRequest = this.endpointFn(this.getQueryParams());\n    this.lastRequest = currentRequest;\n\n    return currentRequest\n      .then((res: ListResponse<T>): ListResponse<T> | void => {\n        if (this.lastRequest === currentRequest) {\n          this.status = 'success';\n          return this.onSuccess(res);\n        }\n      })\n      .catch((error: NormalizedError) => {\n        if (this.lastRequest === currentRequest) {\n          this.status = 'error';\n          this.onError(error);\n        }\n      });\n  }\n\n  clear() {\n    this.stopPolling();\n    this.status = 'init';\n  }\n}\n","import { StoreConstructor } from '../StoreConstructor';\nimport { computed, observable, reaction, action } from 'mobx';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport * as _ from 'lodash';\nimport { IStores } from 'stores';\nimport { ListStoreStorage } from './Storage';\nimport { Fetcher } from './Fetcher';\nimport { ListResponse } from 'interfaces';\nimport { Tracker } from './Tracker';\n\nexport interface IListStoreOptions {\n  pollingInterval?: number;\n  paginationData?: IPagination;\n  sorter?: string | string[];\n  sorters?: ISorters;\n  filters?: IFilters;\n  isLocal?: boolean;\n  persistentStorage?: ListStoreStorage<IDataFlowProps>;\n  tracker?: Tracker;\n}\n\ntype TSorter = 'none' | 'asc' | 'desc';\n\ninterface ISorters {\n  [name: string]: TSorter;\n}\n\ninterface IFilters {\n  [name: string]: any;\n}\n\nexport interface IPagination {\n  currentPage?: number;\n  totalPages?: number;\n  totalElements?: number;\n  pageSize?: number;\n}\n\nexport interface IDataFlowProps {\n  paginationData?: IPagination;\n  sorter?: string | string[];\n  sorters?: ISorters;\n  filters?: IFilters;\n}\n\nexport interface OnChangeDataFlowOptions {\n  withDebounce?: boolean;\n  patchMode?: 'smart' | 'simple';\n}\n\ntype Entity = { id: string; [x: string]: any };\n\n/**\n * Requests and keeps different sorts of list data,\n * allows to sort, filtering and paging the data\n */\nexport class ListStoreConstructor<T extends Entity> extends StoreConstructor {\n  /**\n   * Main source of data\n   */\n  @observable protected allData: T[] = [];\n\n  /**\n   *  current pagination state\n   */\n  @observable public paginationData: IPagination = {};\n\n  /** probably useless? use cases are not discovered\n   * @deprecated\n   */\n  @observable public sorters: ISorters = {};\n\n  /**\n   *  current sorter state\n   */\n  @observable public sorter: string | string[];\n\n  /**\n   * currest filters state\n   */\n  @observable public filters: IFilters = {};\n\n  /**\n   * last error text message\n   */\n  @observable public fetchError: NormalizedError;\n\n  /**\n   * @readonly\n   * data request status */\n  @computed\n  public get fetchStatus() {\n    return this.fetcher.status;\n  }\n\n  /**\n   * provides network functionality\n   */\n  protected fetcher?: Fetcher<T>;\n\n  /**\n   * subscribes to pending transactions\n   */\n  protected tracker?: Tracker;\n\n  /**\n   * contains funcionality for saving state in external storage\n   * (URLState, localStorage, other external sources)\n   */\n  protected URLStorage?: ListStoreStorage<IDataFlowProps>;\n\n  /**\n   * Contains reaction for auto updating pagination if `isLocal = true`\n   */\n  private localPaginationReaction?: any;\n\n  /**\n   * If `isLocal` set to `true`,\n   * then pagination,sorting and filtering will be handled on client side\n   */\n  private isLocal = false;\n\n  /**\n   * checks if request is in fly right now\n   */\n  @computed\n  public get isPending() {\n    return this.fetchStatus === 'fetching';\n  }\n\n  constructor(\n    stores: IStores,\n    endpoint: (params: any) => Promise<ListResponse<T>>,\n    options: IListStoreOptions\n  ) {\n    super(stores);\n\n    const { pollingInterval = 0 } = options;\n\n    this.fetcher = new Fetcher({\n      endpointFn: endpoint,\n      pollingInterval,\n      onError: error => {\n        this.fetchError = error;\n        this.allData = [];\n        this.updatePagination({\n          content: [],\n          size: 10,\n          totalPages: 0,\n          totalElements: 0\n        });\n        this.fetcher.restartPolling();\n      },\n      getQueryParams: () => (this.isLocal ? null : this.queryParams),\n      onSuccess: (res: any) => {\n        if (this.isLocal) {\n          this.allData = res.content;\n        } else {\n          this.allData = res.content;\n          this.updatePagination(res);\n          this.fetcher.restartPolling();\n        }\n\n        return res;\n      }\n    });\n\n    this.sorters = options.sorters || {};\n    this.sorter = options.sorter || 'none';\n    this.filters = options.filters || {};\n\n    this.isLocal = options.isLocal;\n\n    if (options.persistentStorage) {\n      this.URLStorage = options.persistentStorage;\n    }\n\n    if (options.tracker) {\n      this.tracker = options.tracker;\n    }\n\n    /**\n     * should be bound for one important use case in @we-ui-components/rc-table\n     * TODO: fix @we-ui-components/rc-table and remove this line\n     */\n    this.onChangeDataFlow = this.onChangeDataFlow.bind(this);\n\n    this.paginationData = {\n      currentPage: 1,\n      totalPages: 1,\n      pageSize: 10\n    };\n\n    if (this.isLocal) {\n      this.useAutoPaginationUpdate();\n    }\n  }\n\n  /**\n   *  starts polling\n   *\n   *  if init state is passed as an argument, calls `onChangeDataFlow` with it\n   */\n  public init(dataFlow: IDataFlowProps = {}) {\n    const stateFromStorage = this.URLStorage?.getState() || {};\n    const initState = { ...stateFromStorage, ...dataFlow };\n\n    if (!_.isEmpty(initState)) {\n      // save init state to instanse state (also updates persistent storage)\n      this.onChangeDataFlow(initState, { patchMode: 'simple' });\n    } else if (this.URLStorage) {\n      // if there state from persistent storage,\n      // save default storage to the persistent storage\n      this.onChangeDataFlow({}, { patchMode: 'simple' });\n    }\n\n    if (this.tracker) {\n      this.tracker.start();\n    }\n\n    if (!this.isLocal) {\n      this.fetcher.startPolling();\n    }\n  }\n\n  /**\n   *  composition of filters, sorters, sorter and pagination\n   */\n  public get dataFlow() {\n    return {\n      paginationData: this.paginationData,\n      sorters: this.sorters,\n      sorter: this.sorter,\n      filters: this.filters\n    };\n  }\n\n  /**\n   * updates pagination/sorter/filters state and sends request in `network` mode\n   */\n  onChangeDataFlow(\n    props: IDataFlowProps,\n    options: OnChangeDataFlowOptions = {}\n  ) {\n    const { withDebounce = false, patchMode = 'smart' } = options;\n\n    if (patchMode === 'smart') {\n      this.smartStatePatch(props);\n    } else {\n      this.patchState(props);\n    }\n\n    if (!this.isLocal) {\n      this.fetch({ withDebounce });\n    }\n\n    if (this.URLStorage) {\n      this.URLStorage.setState(this.dataFlow);\n    }\n  }\n\n  private smartStatePatch(state: IDataFlowProps) {\n    const {\n      paginationData: newPaginationState = {},\n      sorter,\n      sorters,\n      filters\n    } = state;\n\n    const paginationData = { ...newPaginationState };\n\n    // recalc total pages and reset current page on change pageSize\n    if (paginationData.pageSize !== this.paginationData.pageSize) {\n      const totalElements = this.paginationData.totalElements;\n      const pageSize = paginationData.pageSize;\n\n      const totalPages = Math.max(Math.ceil(totalElements / pageSize), 1);\n\n      paginationData.currentPage = 1;\n      paginationData.totalPages = totalPages;\n    }\n\n    // reset current page on new filters\n    if (!_.isEmpty(filters)) {\n      paginationData.currentPage = 1;\n    }\n\n    this.patchState({\n      paginationData,\n      sorters,\n      filters,\n      sorter\n    });\n  }\n\n  @action.bound\n  private patchState(state: IDataFlowProps) {\n    const { paginationData = {}, sorter, sorters = {}, filters = {} } = state;\n\n    this.paginationData = {\n      ...this.paginationData,\n      ...paginationData\n    };\n\n    this.filters = {\n      ...this.filters,\n      ...filters\n    };\n\n    this.sorters = {\n      ...this.sorters,\n      ...sorters\n    };\n\n    this.sorter = sorter || this.sorter;\n  }\n\n  private calcSorter(sorter: string | string[]) {\n    if (sorter instanceof Array) return sorter.length > 0 ? sorter : undefined;\n    if (sorter === 'none') return undefined;\n    return sorter || this.sorter;\n  }\n\n  /**\n   * extracts pagination config from network response and updates the pagination state\n   */\n  private updatePagination(res: Partial<ListResponse<T>>) {\n    const { totalPages, size, totalElements } = res;\n\n    this.paginationData = {\n      ...this.paginationData,\n      totalPages,\n      totalElements,\n      pageSize: size\n    };\n  }\n\n  /**\n   * returns filtered data\n   */\n  @computed\n  private get filteredData() {\n    if (!this.isLocal) return this.allData;\n\n    return this.allData.filter(rowData =>\n      Object.entries(this.filters)\n        .filter(([key, value]) => !!value)\n        .every(([key, value]) => {\n          if (key === 'search') {\n            return Object.values(rowData)\n              .filter(rowValue => !!rowValue)\n              .some(\n                rowValue =>\n                  String(rowValue)\n                    .toLowerCase()\n                    .indexOf(value.toLowerCase()) > -1\n              );\n          }\n          return value instanceof Array\n            ? value.includes(rowData[key])\n            : rowData[key].indexOf(value) > -1;\n        })\n    );\n  }\n\n  /**\n   * returns sorted and filtered data\n   */\n  @computed\n  private get sortedData() {\n    if (!this.isLocal) return this.filteredData;\n    if (\n      !this.sorter ||\n      this.sorter === 'none' ||\n      this.sorter instanceof Array\n    ) {\n      return this.filteredData;\n    }\n\n    const [index, direction] = this.sorter.split(',');\n    const dir = direction === 'asc' ? 1 : -1;\n    return this.filteredData.sort((a, b) => {\n      return a[index] < b[index] ? dir : -dir;\n    });\n  }\n\n  /**\n   * Returns paginated, sorted and filtered data\n   */\n  @computed\n  get data() {\n    if (this.isLocal) {\n      const { pageSize, currentPage } = this.paginationData;\n\n      return this.sortedData.splice(pageSize * (currentPage - 1), pageSize);\n    } else {\n      return this.allData;\n    }\n  }\n\n  @computed\n  private get queryParams() {\n    const { currentPage, pageSize } = this.paginationData;\n    return {\n      size: pageSize,\n      page: currentPage - 1,\n      ...this.filters,\n      sort: this.calcSorter(this.sorter)\n    };\n  }\n\n  /**\n   *  sends request\n   */\n  fetch = (options: { isSilent?: boolean; withDebounce?: boolean } = {}) => {\n    if (!this.isLocal) {\n      this.fetcher.stopPolling();\n    }\n    return this.fetcher.sendRequest(options);\n  };\n\n  @action.bound\n  patchById(id: string, newValue: Partial<T>) {\n    this.allData = this.allData.map(item =>\n      item.id === id ? { ...item, ...newValue } : item\n    );\n  }\n\n  clear() {\n    this.allData = [];\n    this.fetchError = null;\n    this.fetcher.clear();\n  }\n\n  private useAutoPaginationUpdate() {\n    if (this.localPaginationReaction) this.localPaginationReaction();\n\n    this.localPaginationReaction = reaction(\n      () => this.filteredData,\n      () => {\n        this.paginationData.totalPages = Math.ceil(\n          this.filteredData.length / this.paginationData.pageSize\n        );\n      }\n    );\n  }\n}\n","import { IStores } from '.';\nimport { ListStoreConstructor } from './core/ListStoreConstructor';\nimport { getIpObjectList } from 'services';\nimport { IpObjectList } from 'interfaces';\n\nexport class IpObjectListStore extends ListStoreConstructor<IpObjectList> {\n  constructor(stores: IStores) {\n    super(stores, getIpObjectList, { pollingInterval: 5e4 });\n  }\n}\n","import { StoreConstructor } from './core/StoreConstructor';\nimport { action, observable } from 'mobx';\nimport { statusFetching } from 'we-oauth2/lib/constants/types';\nimport { IStores } from 'stores';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport { getIpObject } from 'services';\nimport { IpObject } from 'interfaces';\n\nexport class ActiveIpObjectStore extends StoreConstructor {\n  @observable ipObject: IpObject;\n  @observable fetchStatus: statusFetching = 'init';\n  @observable fetchError: NormalizedError;\n  @observable actionStatus: statusFetching = 'init';\n  @observable actionError: NormalizedError;\n\n  constructor(stores: IStores) {\n    super(stores);\n  }\n\n  @action.bound\n  getIpObject(id: string): Promise<IpObject> {\n    return this.statusHandler(\n      () => getIpObject(id),\n      'fetchStatus',\n      'fetchError',\n      async result => {\n        this.ipObject = { ...result };\n      }\n    );\n  }\n\n  @action.bound\n  clear(): void {\n    this.ipObject = null;\n    this.fetchStatus = 'init';\n    this.fetchError = null;\n    this.actionStatus = 'init';\n    this.actionError = null;\n  }\n}\n","import { observable } from 'mobx';\nimport { api } from '../api';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { createAsyncPolling } from 'utils/polling';\n\ninterface TrackingInfo {\n  listeners: Array<() => void>;\n  pollingPromise: Promise<any>;\n  abort: () => void;\n}\n\nexport const trackedTransactions = observable.map<string, TrackingInfo>();\n\nexport function getTransactionsCount() {\n  return trackedTransactions.size;\n}\n\nexport function clearAll() {\n  for (let value of trackedTransactions.values()) {\n    value.abort();\n  }\n  trackedTransactions.clear();\n}\n\nexport function usePendingTransaction() {\n  return trackedTransactions.size > 0;\n}\n\nexport function track(transactionId: string, callback: () => void) {\n  if (trackedTransactions.has(transactionId)) {\n    const value = trackedTransactions.get(transactionId);\n    if (!value.listeners.some((l: () => void) => l === callback)) {\n      value.listeners.push(callback);\n    }\n    return trackedTransactions.get(transactionId);\n  }\n\n  const signalBus: Array<() => void> = [];\n\n  const pollingPromise = createAsyncPolling({\n    asyncFn: () => api.get(ENDPOINTS.transaction(transactionId)),\n    interval: 3000,\n    shouldStop: response => {\n      return response.status === 'SUCCESS';\n    },\n    signalBus\n  });\n\n  pollingPromise.then(() => {\n    const value = trackedTransactions.get(transactionId);\n    trackedTransactions.delete(transactionId);\n\n    value.listeners.forEach((l: () => void) => l());\n  });\n\n  trackedTransactions.set(transactionId, {\n    pollingPromise,\n    abort: () => signalBus.forEach(f => f()),\n    listeners: [callback]\n  });\n\n  return pollingPromise;\n}\n","interface Options {\n  asyncFn: () => Promise<any>;\n  interval?: number;\n  shouldStop: (response: any) => boolean;\n  shouldKeepOnError?: (error: any) => boolean;\n  signalBus?: any;\n}\n\nexport function createAsyncPolling({\n  asyncFn,\n  interval = 2000,\n  shouldStop,\n  shouldKeepOnError = () => true,\n  signalBus\n}: Options) {\n  return new Promise((resolve, reject) => {\n    let timeoutId: number;\n    let aborted = false;\n\n    function poll() {\n      asyncFn().then(\n        response => {\n          clearTimeout(timeoutId);\n          if (aborted) {\n            return;\n          }\n          if (shouldStop(response)) {\n            resolve(response);\n          } else {\n            timeoutId = setTimeout(poll, interval);\n          }\n        },\n        (error: any) => {\n          clearTimeout(timeoutId);\n          if (aborted) {\n            return;\n          }\n          if (shouldKeepOnError(error)) {\n            timeoutId = setTimeout(poll, interval);\n          } else {\n            reject(error);\n          }\n        }\n      );\n    }\n\n    if (signalBus) {\n      signalBus.push(() => {\n        aborted = true;\n        clearTimeout(timeoutId);\n      });\n    }\n\n    poll();\n  });\n}\n","import { action, observable } from 'mobx';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport { statusFetching } from 'we-oauth2/lib/constants/types';\nimport { StoreConstructor } from './core/StoreConstructor';\nimport * as violationService from 'services/violationService';\nimport { ViolationResponse } from 'interfaces';\nimport { TViolationAction } from 'services/violationService';\nimport stores from './index';\nimport { track } from '../services/transactionTracker';\n\nexport type TTransactionResponse = { txId: string };\n\nconst handleEntityUpdate = (id: string) => ({ txId }: TTransactionResponse) => {\n\n  stores.votings.patchById(id, {\n    // @ts-ignore\n    lastUnsuccessfulTxId: txId,\n    lastUnsuccessfulTxStatus: 'PENDING',\n  });\n\n  return txId;\n};\n\nexport class ActiveViolationStore extends StoreConstructor {\n  @observable violation: ViolationResponse;\n  @observable fetchStatus: statusFetching = 'init';\n  @observable fetchError: NormalizedError;\n\n  @observable isPending: boolean = true;\n\n  @action.bound\n  setPending = (id: string) => (lastUnsuccessfulTxId: string) => {\n    this.isPending = true;\n\n    track(lastUnsuccessfulTxId, async () => {\n      if (id === this.violation.id) {\n        await this.reloadLastViolation();\n        this.isPending = false;\n      }\n    });\n  };\n\n  @action.bound\n  public reloadLastViolation(): Promise<any> {\n    return this.getViolation(this.violation.id);\n  }\n\n  @action.bound\n  getViolation(id: string) {\n    return this.statusHandler(\n      () =>\n        violationService.getViolation(id).then(res => {\n          let transactionPending = !!res.lastUnsuccessfulTxId;\n          const isPending = () => transactionPending;\n\n          const isSameProcess = () => res.id === this.violation.id;\n\n          this.violation = res;\n          this.isPending = isPending();\n\n          if (isPending()) {\n            if (transactionPending) {\n              track(res.lastUnsuccessfulTxId, async () => {\n                await this.reloadLastViolation();\n                transactionPending = false;\n\n                if (isSameProcess() && !isPending()) {\n                  this.isPending = false;\n                }\n              });\n            }\n          }\n\n          return Promise.resolve(res);\n        }),\n      'fetchStatus',\n      'fetchError',\n      async result => {\n        // this.violation = result;\n      },\n    );\n  }\n\n  callViolationAction(id: string, action: TViolationAction, data?: any) {\n    return violationService\n      .callViolationAction(id, action, data)\n      .then(handleEntityUpdate(id))\n      .then(this.setPending(id));\n  }\n\n  @action.bound\n  clear() {\n    this.violation = null;\n    this.fetchStatus = 'init';\n    this.fetchError = null;\n  }\n}\n","import {\n  InternetViolation,\n  ListResponse,\n  ListViolationResponse,\n  PhysicalViolation,\n  ViolationDuplicateResponse,\n  ViolationResponse,\n} from 'interfaces';\nimport { api } from './api';\nimport { ENDPOINTS } from './endpoints';\n\nexport const getViolationList = async (params: any) => {\n  const res = await api.get<ListResponse<ListViolationResponse>>(\n    ENDPOINTS.violations(),\n    params,\n  );\n\n  res.content = res.content.map(item => ({\n    ...item,\n    lastUnsuccessfulTxStatus:\n      item.lastUnsuccessfulTxStatus ||\n      (!!item.lastUnsuccessfulTxId ? 'PENDING' : null),\n  }));\n\n  return res;\n};\n\nexport function getViolationDuplicateList(id: string) {\n  return api.get<ListResponse<ViolationDuplicateResponse>>(\n    ENDPOINTS.violationsDuplicates(id),\n  );\n}\n\nexport function getViolation(id: string) {\n  return api.get<ViolationResponse>(ENDPOINTS.violation(id));\n}\n\nexport function createViolation(\n  data: InternetViolation | PhysicalViolation,\n): Promise<{ txId: string }> {\n  return api.post(ENDPOINTS.violations(), data);\n}\n\nexport type TViolationAction =\n  | 'markAsDuplicate'\n  | 'takeIntoWork'\n  | 'reject'\n  | 'decline'\n  | 'confirm';\n\nexport function callViolationAction(\n  id: string,\n  action: TViolationAction,\n  data?: any,\n): Promise<{ txId: string }> {\n  return api.post(ENDPOINTS.violationAction(id, action), data);\n}\n","import { IStores } from 'stores/index';\nimport { ListStoreConstructor } from './core/ListStoreConstructor';\nimport { IProject, PROJECT_STATUS } from 'interfaces/apiEntities';\nimport { getAllProjects, getProjectsCount } from 'services/projectService';\nimport { action, computed, observable } from 'mobx';\n\nexport class ProjectListStore extends ListStoreConstructor<IProject> {\n\n  @observable tabCountProject: Record<PROJECT_STATUS, number>;\n  @computed\n  public get projectList(): IProject[] {\n    return this.allData;\n  }\n\n  constructor(stores: IStores) {\n    super(\n      stores,\n      params => getAllProjects(params),\n      {\n        paginationData: { pageSize: 10 },\n        filters: { status: [] },\n        pollingInterval: 5e4\n      }\n    );\n  }\n\n  @action\n  getProjectTabCount(id: string) {\n    return this.statusHandler(() => getProjectsCount(id)).then(res => {\n      this.tabCountProject = res;\n    });\n  }\n\n  @action\n  public updateListStatus(status: string) {\n    const statusList = status === 'ALL' ? [] : [status];\n\n    this.onChangeDataFlow({ filters: { status: statusList } });\n  }\n\n  @action\n  public updateSearch(search: string) {\n    this.onChangeDataFlow({ filters: { search } });\n  }\n\n  @action\n  public fetchProjectList() {\n    this.fetcher.sendRequest({})\n  }\n\n  @action\n  public setDistrictId(districtId: string){\n\n    this.onChangeDataFlow({ filters: { schoolDistrictId: districtId}})\n  }\n}\n","import { action, observable } from 'mobx';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport { statusFetching } from 'we-oauth2/lib/constants/types';\nimport { StoreConstructor } from './core/StoreConstructor';\nimport * as projectService from 'services/projectService';\nimport { IProject, ISchool } from 'interfaces/apiEntities';\nimport { TProjectAction } from 'services/projectService';\nimport { getSchools } from 'services/voteService';\n\nexport class ActiveProjectStore extends StoreConstructor {\n  @observable project: IProject;\n  @observable fetchStatus: statusFetching = 'init';\n  @observable fetchError: NormalizedError;\n\n  @action.bound\n  getProject(id: string) {\n    return this.statusHandler(\n      () =>\n        projectService.getProject(id).then(async res => {\n          let subject;\n\n          const districtList = this.stores.votings.districtList.data;\n          subject = districtList.find(i => i.pollId === res.pollId);\n\n          return { ...res, subject: subject || {} };\n        }),\n      'fetchStatus',\n      'fetchError',\n      async result => {\n        this.project = result;\n      }\n    );\n  }\n\n  public async confirmFinish(\n    projectId: string,\n    description: string,\n    files: File[]\n  ) {\n    const resultFilesResponse = await this.uploadResultFiles(files);\n    const implFiles = resultFilesResponse.map(it => it.id);\n\n    return await this.callProjectAction(projectId, 'finish', {\n      implDescription: description,\n      implFiles\n    });\n  }\n\n  public async uploadResultFiles(files: File[]) {\n    return await Promise.all(\n      files.map(file => projectService.uploadFile(file, 'RESULT'))\n    );\n  }\n\n  callProjectAction(id: string, action: TProjectAction, data?: any) {\n    return projectService.callProjectAction(id, action, data);\n  }\n\n  @action.bound\n  clear() {\n    this.project = null;\n    this.fetchStatus = 'init';\n    this.fetchError = null;\n  }\n}\n","import { ITabOptions } from 'components/Tabs';\nimport { DistrictType } from 'interfaces/apiEntities';\n\nexport enum PollingType {\n  district = 'DISTRICT',\n  schoolGroup = 'SCHOOL_GROUP'\n}\n\nexport function getRegionMapTabs(): ITabOptions[] {\n  return [\n    {\n      text: 'Волгоградская область',\n      id: 'OBLAST_DISTRICTS' as DistrictType\n    },\n    {\n      text: 'г. Волгоград',\n      id: 'VOLGOGRAD_DISTRICTS' as DistrictType\n    }\n  ];\n}\n\nexport function getVoteListTabs(): ITabOptions[] {\n  return [\n    {\n      text: 'Муниципальные образования',\n      id: PollingType.district\n    },\n    {\n      text: 'Школьные группы',\n      id: PollingType.schoolGroup\n    }\n  ];\n}\n","import { api } from 'services/api';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { ListResponse, PollSubject } from 'interfaces/apiEntities';\n\nexport function getAll(queryParams?: {}): Promise<ListResponse<PollSubject>> {\n  return api.get(ENDPOINTS.allPolls(), queryParams);\n}\n\nexport function deletePolls(\n  pollsIds: string[]\n): Promise<ListResponse<PollSubject>> {\n  return api.del(ENDPOINTS.vote(), {\n    pollsIds\n  });\n}\n","import { IStores } from 'stores/index';\nimport {\n  IDataFlowProps,\n  ListStoreConstructor\n} from 'stores/core/ListStoreConstructor';\nimport { PollingType } from '../pages/Organizer/tabs';\nimport { action, computed, observable } from 'mobx';\nimport { getAll } from 'services/pollSubjects';\nimport { PollingStatus } from 'components/RegionMap';\nimport {\n  DistrictType,\n  ISchool,\n  ListResponse,\n  PollSubject\n} from 'interfaces/apiEntities';\nimport { getSchools } from 'services/voteService';\nimport { getCurrentYear } from 'utils/misc';\n\n// export const VOLGOGRAD_DISTRICTS = [33, 34, 35, 36, 37, 38, 39, 40];\n\nconst VOLGOGRAD_DISTRICT_PREFIX = 'г. Волгоград:';\n\nconst POLLING_STATUS: Record<PollingStatus, number> = {\n  PUBLISHED: 1,\n  APPLICATIONS_RECEIVING: 2,\n  WAITING_FOR_VOTING: 3,\n  VOTING: 4,\n  FINISHED: 5,\n  __DELETED: 6\n};\n\nexport class PollingList extends ListStoreConstructor<PollSubject> {\n  constructor(\n    stores: IStores,\n    fetcher: () => Promise<ListResponse<PollSubject>>\n  ) {\n    super(stores, fetcher, { pollingInterval: 5e4 });\n  }\n}\n\nexport class PollSubjectListStore extends ListStoreConstructor<PollSubject> {\n  public delete = new PollingListRemove(this);\n\n  @observable\n  public schoolGroups: ListStoreConstructor<PollSubject>;\n\n  @observable\n  public districtList: ListStoreConstructor<PollSubject>;\n\n  @observable\n  public schoolsList: ListStoreConstructor<ISchool>;\n\n  fetch = (options?: { isSilent?: boolean; withDebounce: boolean }) => {\n    this.currentList.fetch(options);\n  };\n\n  @observable\n  public initialized = false;\n\n  @observable\n  public searchString: string = '';\n\n  public scrollPosition = 0;\n\n  @observable\n  public pollingType: PollingType = PollingType.district;\n\n  @observable\n  public districtType: DistrictType = 'OBLAST_DISTRICTS';\n\n  @computed\n  public get currentList() {\n    return this.isMOListType ? this.districtList : this.schoolGroups;\n  }\n\n  @computed\n  public get isMOListType(): boolean {\n    return this.pollingType === PollingType.district;\n  }\n\n  @computed\n  public get pollingList(): PollSubject[] {\n    const list = this.currentList;\n\n    const pollingList = list.data\n      .map(p => {\n        return {\n          ...p,\n          name: p.name.replace(VOLGOGRAD_DISTRICT_PREFIX, '')\n        };\n      })\n      .sort((a, b) => a.name.localeCompare(b.name));\n\n    if (this.searchString.length === 0) {\n      return pollingList;\n    }\n\n    return pollingList.filter(\n      p => p.name.toLowerCase().indexOf(this.searchString.toLowerCase()) !== -1\n    );\n  }\n\n  @computed\n  public get isEmptyList(): boolean {\n    return this.pollingList.length === 0;\n  }\n\n  @computed\n  public get isLoading(): boolean {\n    return this.isPending || this.currentList.fetchStatus === 'init';\n  }\n\n  @computed\n  public get isPending(): boolean {\n    return this.currentList.isPending;\n  }\n\n  constructor(stores: IStores) {\n    super(stores, params => getAll(params), { isLocal: true });\n\n    this.schoolGroups = new PollingList(stores, () =>\n      getAll({\n        type: PollingType.schoolGroup,\n        size: 1000,\n        hasPoll: true,\n        sort: 'id,asc',\n        year: getCurrentYear()\n      })\n    );\n\n    this.districtList = new PollingList(stores, () =>\n      getAll({\n        type: PollingType.district,\n        size: 1000,\n        hasPoll: true,\n        sort: 'name,asc',\n        year: getCurrentYear(),\n      })\n    );\n\n    this.schoolsList = new ListStoreConstructor(\n      stores,\n      () => getSchools({ page: 0, size: 2000, year: getCurrentYear()}),\n      {}\n    );\n  }\n\n  public getSchools = () => {\n    if (this.schoolsList.fetchStatus === 'success') {\n      return Promise.resolve({ content: this.schoolsList.data });\n    }\n\n    return this.schoolsList.fetch();\n  };\n\n  @action\n  public async init(dataFlow: IDataFlowProps = {}, reinitialize = false) {\n    if (this.initialized && !reinitialize) {\n      return;\n    }\n\n    await Promise.all([this.schoolGroups.fetch(), this.districtList.fetch()]);\n\n    this.initialized = true;\n  }\n\n  public updatePollingType(type: PollingType): void {\n    this.searchString = '';\n    this.pollingType = type;\n\n    this.districtType = 'OBLAST_DISTRICTS';\n  }\n\n  public updateSearch(next: string): void {\n    this.searchString = next;\n  }\n\n  public updateDistrictType(next: DistrictType): void {\n    this.searchString = '';\n    this.districtType = next;\n  }\n}\n\nexport class PollingListRemove {\n  @observable selectedIds: string[] = [];\n\n  @computed\n  public get isAllSelected() {\n    return (\n      this.selectedIds.length ===\n      this.listStore.pollingList.filter(p => this.isDeletable(p)).length\n    );\n  }\n\n  constructor(private listStore: PollSubjectListStore) {}\n\n  public isDeletable(polling: PollSubject) {\n    return POLLING_STATUS[polling.status] < 4;\n  }\n\n  public isSelected(polling: PollSubject) {\n    return this.selectedIds.includes(polling.id);\n  }\n\n  @action\n  public selectAll() {\n    if (this.isAllSelected) {\n      this.flush();\n\n      return;\n    }\n\n    this.selectedIds = this.listStore.pollingList\n      .filter(p => this.isDeletable(p))\n      .map(({ id }) => id);\n  }\n\n  @action\n  public selectPolling(polling: PollSubject) {\n    if (this.selectedIds.includes(polling.id)) {\n      this.selectedIds = this.selectedIds.filter(i => i !== polling.id);\n\n      return;\n    }\n\n    this.selectedIds = [...this.selectedIds, polling.id];\n  }\n\n  @action\n  public flush() {\n    this.selectedIds = [];\n  }\n}\n","import { api } from 'services/api';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { IPoll, IPollResults } from 'interfaces/apiEntities';\n\nexport function getPollById(pollId: string): Promise<IPoll> {\n  return api.get(ENDPOINTS.pollById(pollId));\n}\n\nexport function getMainKeyById(pollId: string): Promise<{ mainKey: string }> {\n  return api.get<{ mainKey: string }>(ENDPOINTS.getMainKey(pollId));\n}\n\nexport function getPollResults(pollId: string): Promise<IPollResults> {\n  return api.get(ENDPOINTS.pollResults(pollId));\n}\n\nexport function getSignKeyById(\n  pollId: string\n): Promise<{ regSign; publicKey }> {\n  return api.get<{ regSign; publicKey }>(ENDPOINTS.getSignKey(pollId));\n}\n\nexport function sendBulletin(\n  pollId,\n  params: { encryptedBulletin: string; signRequest: any }\n): Promise<any> {\n  return api.post(ENDPOINTS.sendBulletin(pollId), params);\n}\n\nexport function getVoteById(\n  pollId: string\n): Promise<{ createdDate: string; encryptedBulletin: string }> {\n  return api.get<{\n    createdDate: string;\n    encryptedBulletin: string;\n  }>(ENDPOINTS.getVote(pollId));\n}\n","import { action, computed, observable } from 'mobx';\nimport { getPollById, getVoteById } from 'services/poll';\nimport { statusFetching } from 'we-oauth2/src/constants/types';\n\nimport { StoreConstructor } from 'stores/core/StoreConstructor';\nimport { IPoll } from 'interfaces/apiEntities';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport { decryptMsg } from 'utils/crypto-js';\n\nexport class ActivePollStore extends StoreConstructor {\n  @observable pollId: string;\n\n  @observable fetchStatus: statusFetching = 'init';\n  @observable fetchError: NormalizedError;\n  @observable poll: IPoll;\n\n  @observable hasVote: boolean = false;\n  @observable bulletinOrder: number = -1;\n  @observable encryptedBulletin: string = '';\n\n  @action.bound\n  public selectProject(order: number) {\n    this.bulletinOrder = order;\n  }\n\n  @action.bound\n  public clearProject() {\n    this.bulletinOrder = -1;\n  }\n\n  @computed\n  public get isProjectSelected() {\n    return this.bulletinOrder > -1;\n  }\n\n  @computed\n  public get isPollLoading() {\n    return this.fetchStatus === 'fetching' || this.fetchStatus === 'init';\n  }\n\n  @computed\n  public get hasError() {\n    return this.fetchStatus === 'error';\n  }\n\n  @action.bound\n  public getPoll(pollId: string) {\n    return this.statusHandler(\n      () => getPollById(pollId),\n      'fetchStatus',\n      'fetchError',\n      async poll => {\n        this.poll = poll;\n        this.pollId = pollId;\n\n        let res;\n\n        if (this.stores.user.isContainRoles(['VOTER'])) {\n          try {\n            res = await getVoteById(pollId);\n            this.hasVote = true;\n            this.encryptedBulletin = res.encryptedBulletin;\n          } catch (e) {\n            this.hasVote = false;\n            this.bulletinOrder = -1;\n            this.encryptedBulletin = '';\n          }\n\n          const pass = this.stores.user.encryptPassword;\n          if (this.hasVote && pass && !!res.encryptedBulletin) {\n            const bulletin = JSON.parse(\n              decryptMsg(res.encryptedBulletin, pass)\n            );\n            this.bulletinOrder = bulletin[0].indexOf(1);\n          }\n        }\n      }\n    );\n  }\n\n  @action.bound\n  clear() {\n    this.poll = null;\n    this.fetchStatus = 'init';\n    this.fetchError = null;\n    this.bulletinOrder = -1;\n    this.encryptedBulletin = '';\n    this.hasVote = false;\n  }\n}\n","import { StoreConstructor } from 'stores/core/StoreConstructor';\nimport { action, computed, observable, reaction } from 'mobx';\nimport { statusFetching } from 'we-oauth2/src/constants/types';\nimport { getPollResults } from 'services/poll';\nimport { NormalizedError } from 'services/api/errorHandler';\nimport { IPoll, IPollResults } from 'interfaces/apiEntities';\nimport { IStores } from 'stores/index';\n\nexport class ActivePollResults extends StoreConstructor {\n  @observable fetchStatus: statusFetching = 'init';\n  @observable fetchError: NormalizedError;\n  @observable results: IPollResults;\n\n  @computed\n  public get votesSummary() {\n    return Object\n      .entries(this.results.votesCountByProjectId || {})\n      .reduce((votesSum, [, votesCount]) => votesSum + votesCount, 0)\n  }\n\n  constructor(stores: IStores) {\n    super(stores);\n\n    const { activePoll } = stores;\n\n    reaction(\n      () => activePoll.fetchStatus,\n      () => {\n        if (activePoll.fetchStatus !== 'success' || activePoll.poll.status !== 'FINISHED') {\n          return\n        }\n\n        return this.getPollResults(activePoll.pollId)\n      }\n    );\n  }\n\n  @action.bound\n  public getPollResults(pollId: string) {\n    return this.statusHandler(\n      () => getPollResults(pollId),\n      'fetchStatus',\n      'fetchError',\n      async (results) => {\n        this.results = results\n      }\n    )\n  }\n\n  @action.bound\n  clear() {\n    this.results = null;\n    this.fetchStatus = 'init';\n    this.fetchError = null;\n  }\n\n  public isPollResultsAvailable(poll: IPoll) {\n    return poll.status === 'FINISHED' && this.fetchStatus === 'success'\n  }\n\n  public getProjectVotesCount(projectId: string): number {\n    return this.results.votesCountByProjectId[projectId] || 0;\n  }\n\n  public getProjectVotesPercentage(projectId: string): number {\n    const count = this.getProjectVotesCount(projectId)\n\n    //  0 / 0 === NaN\n    if (this.votesSummary === 0) {\n      return 0\n    }\n\n    return Number(count / this.votesSummary * 100)\n  }\n}\n","import { IStores } from '.';\nimport { ListStoreConstructor } from './core/ListStoreConstructor';\nimport * as usersService from 'services/usersService';\nimport { IUser, INewUser, UpdateUserFullyRequest } from 'interfaces';\nimport { encryptPassword } from 'utils';\nimport { observable } from \"mobx\";\n\nexport class UserListStore extends ListStoreConstructor<IUser> {\n  constructor(stores: IStores) {\n    super(\n      stores,\n      async params => {\n        return await usersService.getUsersList(params);\n      },\n      {}\n    );\n  }\n  @observable\n  public search: string = '';\n\n  createUser({ password, ...user }: INewUser) {\n    const hashedPassword = encryptPassword(password);\n    return usersService.createUser({ password: hashedPassword, ...user });\n  }\n\n  public async deleteUser(personId) {\n    return await usersService.deleteUser(personId);\n  }\n\n  public selectUser(personId: string) {\n    return this.data.find(it => it.personId === personId);\n  }\n\n  public updateSearch(next: string): void {\n    this.search = next;\n    this.onChangeDataFlow({ filters: { search: next } }, { withDebounce: true });\n  }\n\n  public async isDeletableUser(personId) {\n    const person = this.selectUser(personId);\n    if (person.businessRole === 'APPLICANT') return true;\n\n    // наверное, можно ограничиться проверкой на текущего пользователя,\n    // так как по логике последний Огранизатор должен быть текущим пользователем,\n    // но эта проверка все равно будет полезной на тот случай, если произошел\n    // какой-то рассинхрон бэка с фронтом\n    return await this.isMoreThanOneRegulator();\n  }\n\n  public isCurrentUser(personId: string) {\n    return this.stores.user.userInfo.personId === personId;\n  }\n\n  public async isMoreThanOneRegulator() {\n    const response = await usersService.getUsersList({\n      businessRole: 'REGULATOR'\n    });\n\n    return response.totalElements > 1;\n  }\n\n  public async updateUserPassword(personId: string, newPassword: string) {\n    const hashedPassword = encryptPassword(newPassword);\n    return usersService.changePassword(personId, { password: hashedPassword });\n  }\n\n  public async updateUserByAdmin(\n    personId: string,\n    updatedUser: UpdateUserFullyRequest\n  ) {\n    return usersService.updateUser(personId, updatedUser);\n  }\n}\n","import { IStores } from 'stores/index';\nimport { ListStoreConstructor } from 'stores/core/ListStoreConstructor';\nimport * as archiveService from 'services/archiveService';\nimport * as pollService from 'services/poll';\nimport { ArchivePollApiDTO } from 'interfaces/apiEntities';\nimport { PollingType } from 'pages/Organizer/tabs';\nimport { observable, action, computed } from 'mobx';\nimport { ISelectOption } from '@we-ui-components/base/dist/Components/src';\nimport { generateSimpleOptions, getRange, getCurrentYear } from 'utils';\nimport { decryptMsg } from 'utils/crypto-js';\n\nexport class ArchivePollListStore extends ListStoreConstructor<\n  ArchivePollApiDTO\n> {\n  @observable yearOptions: ISelectOption[] = generateYearOptions();\n\n  constructor(stores: IStores) {\n    super(stores, archiveService.getAllArchivePolls, {\n      filters: {\n        subjectType: PollingType.district,\n      },\n      sorter: ['subject.year,desc', 'subject.name,asc'],\n      pollingInterval: 5e4\n    });\n  }\n\n  @computed\n  get yearFilter() {\n    return this.filters.subjectYear ?? null;\n  }\n\n  @action.bound\n  public changeYearFilter(year: number) {\n    if (year === this.filters.subjectYear) {\n      return;\n    } else if (year === ALL_YEARS_OPTION.value) {\n      this.onChangeDataFlow({ filters: { subjectYear: undefined } });\n    } else {\n      this.onChangeDataFlow({ filters: { subjectYear: year } });\n    }\n  }\n\n  public async getOne(pollId: string) {\n    const fromCache = this.select(pollId);\n\n    if (fromCache) return fromCache;\n\n    const fromServer = await archiveService.getOneArchiveProject(pollId);\n\n    return fromServer;\n  }\n\n  public async getVoteInfo(pollId: string) {\n    let voteInfo = {\n      hasVote: false,\n      encryptedBulletin: '',\n      bulletinOrder: -1\n    };\n\n    if (this.stores.user.isContainRoles(['VOTER'])) {\n      try {\n        const response = await pollService.getVoteById(pollId);\n\n        voteInfo.hasVote = true;\n        voteInfo.encryptedBulletin = response.encryptedBulletin;\n        voteInfo.bulletinOrder = this.getDecryptedBulletinOrder(\n          voteInfo.encryptedBulletin\n        );\n      } catch (e) {\n        voteInfo.hasVote = false;\n        voteInfo.bulletinOrder = -1;\n        voteInfo.encryptedBulletin = '';\n      }\n    }\n\n    return voteInfo;\n  }\n\n  private getDecryptedBulletinOrder(encryptedBulletin: string) {\n    const password = this.stores.user.encryptPassword;\n    let result = -1;\n\n    if (password && encryptedBulletin) {\n      const bulletin = JSON.parse(decryptMsg(encryptedBulletin, password));\n      result = bulletin[0].indexOf(1);\n    }\n\n    return result;\n  }\n\n  private select(id: string) {\n    return this.data.find(it => it.id === id);\n  }\n}\n\nconst ALL_YEARS_OPTION: ISelectOption = {\n  value: null,\n  text: 'Все года'\n};\n\nfunction generateYearOptions() {\n  const START_YEAR = 2021;\n  const options = generateSimpleOptions(getRange(START_YEAR, getCurrentYear()));\n  return [ALL_YEARS_OPTION, ...options];\n}\n","import { IStores } from 'stores/index';\nimport { ListStoreConstructor } from './core/ListStoreConstructor';\nimport { IProject } from 'interfaces/apiEntities';\nimport * as archiveService from 'services/archiveService';\n\nexport class ArchiveProjectListStore extends ListStoreConstructor<IProject> {\n  constructor(stores: IStores) {\n    super(stores, archiveService.getArchiveProjects, {\n      sorter: ['bulletinOrder,asc', 'name,asc'],\n      paginationData: { pageSize: 10 },\n      pollingInterval: 5e4\n    });\n  }\n}\n","import { UserInfo } from 'models';\nimport { api, ENDPOINTS } from 'services';\nimport { IUserInfo } from 'interfaces';\nimport { createStoresContext } from './createStoresContext';\nimport RouterStore from 'stores/RouterStore';\nimport { UserStoreEx } from 'stores/UserStore';\nimport { CatalogsStore } from './CatalogsStore';\nimport { ModalsStore } from './ModalsStore';\nimport { ActionModalsStore } from './ActionModalsStore';\nimport { IpObjectListStore } from './IpObjectListStore';\nimport { ActiveIpObjectStore } from './ActiveIpObjectStore';\n\nimport { ActiveViolationStore } from './ActiveViolationStore';\nimport { ProjectListStore } from 'stores/ProjectStore';\nimport { ActiveProjectStore } from 'stores/ActiveProjectStore';\nimport { PollSubjectListStore } from 'stores/PollSubjectListStore';\nimport { ActivePollStore } from 'stores/ActivePollStore';\nimport { ActivePollResults } from 'stores/ActivePollResults';\nimport { UserListStore } from './UserListStore';\nimport { ArchivePollListStore } from './ArchivePollListStore';\nimport { ArchiveProjectListStore } from './ArchiveProjectListStore';\n\nexport type onAuthSuccessCb = (userInfo: UserInfo) => Promise<void>;\n\nconst createUserStore = (onAuthSuccess: onAuthSuccessCb): UserStoreEx => {\n  const getUserInfo = () =>\n    api\n      .get(ENDPOINTS.userInfo())\n      .then((userInfo: IUserInfo) => UserInfo.New(userInfo));\n\n  const userStore = new UserStoreEx({\n    userService: { login: api.login, logout: api.logout, getUserInfo },\n    onAuthSuccess: (iUserInfo: IUserInfo) => {\n      return new Promise(resolve => {\n        resolve(UserInfo.New(iUserInfo));\n      }).then(onAuthSuccess);\n    }\n  });\n\n  userStore.init();\n\n  return userStore;\n};\n\nexport interface IStores {\n  //usual\n  user?: UserStoreEx;\n  routing?: RouterStore;\n  catalogs?: CatalogsStore;\n  modals?: ModalsStore;\n  actionModals?: ActionModalsStore;\n  //business\n  ipObjectList?: IpObjectListStore;\n  activeIpObject?: ActiveIpObjectStore;\n  votings?: PollSubjectListStore;\n  activeViolation?: ActiveViolationStore;\n\n  activePoll?: ActivePollStore;\n  activePollResults?: ActivePollResults;\n  projectList?: ProjectListStore;\n  activeProject?: ActiveProjectStore;\n  userList?: UserListStore;\n  archivePolls?: ArchivePollListStore;\n  archiveProjects?: ArchiveProjectListStore;\n}\n\nlet onAuthSuccess;\nconst user = createUserStore(onAuthSuccess);\n\nconst stores: IStores = {};\n\nstores.user = user;\nuser.stores = stores;\nonAuthSuccess = user.onAuthSuccess;\n\nstores.routing = new RouterStore();\nstores.catalogs = new CatalogsStore(stores);\nstores.modals = new ModalsStore();\nstores.actionModals = new ActionModalsStore();\nstores.ipObjectList = new IpObjectListStore(stores);\nstores.votings = new PollSubjectListStore(stores);\nstores.activeIpObject = new ActiveIpObjectStore(stores);\nstores.activeViolation = new ActiveViolationStore(stores);\n\nstores.projectList = new ProjectListStore(stores);\nstores.activePoll = new ActivePollStore(stores);\nstores.activePollResults = new ActivePollResults(stores);\nstores.activeProject = new ActiveProjectStore(stores);\nstores.userList = new UserListStore(stores);\nstores.archivePolls = new ArchivePollListStore(stores);\nstores.archiveProjects = new ArchiveProjectListStore(stores);\n\nif (!process.env.production) {\n  window.stores = stores;\n}\n\nconst { StoresProvider, useStores } = createStoresContext<typeof stores>();\nexport { StoresProvider, useStores };\n\nexport default stores;\n","import * as React from 'react';\nimport arrowLeftSVG from './arrow-left.svg';\nimport { Box, BoxProps } from 'grommet';\nimport { observer } from 'mobx-react';\nimport { useStores } from 'stores';\nimport { CSSProperties } from 'react';\nimport { Text } from '@we-ui-components/base';\nimport { IStyledProps } from 'themes';\nimport { getRootPathname } from 'utils';\nimport { useLocation } from 'react-router';\n\ntype BackButtonProps = {\n  text?: string;\n  textColor?: string;\n  url?: string;\n  border?: boolean;\n  style?: CSSProperties;\n} & BoxProps &\n  IStyledProps;\n\nexport const BackButton = observer(\n  ({ text = 'Назад', url, textColor, border = true, ...props }: BackButtonProps) => {\n    const { pathname } = useLocation();\n    const rootPathname = getRootPathname(pathname);\n    // const isDetailsPage = pathname !== rootPathname;\n    const { routing } = useStores();\n\n    return (\n      <Box\n        direction=\"row\"\n        // width=\"100%\"\n        onClick={() => routing.push(url || rootPathname)}\n        align=\"center\"\n        {...props}\n      >\n        <img style={{ marginRight: 6 }} src={arrowLeftSVG} />\n        <Text size=\"xsmall\" color={textColor}>{text}</Text>\n      </Box>\n    );\n  },\n);\n","import * as React from 'react';\nimport { Box, BoxProps } from 'grommet';\nimport { Head } from 'components';\nimport { withTheme } from 'styled-components';\nimport { IStyledChildrenProps } from 'interfaces';\nimport { useLocation } from 'react-router';\nimport { Routes } from '../constants';\n\nexport const BaseContainer: React.FC<IStyledChildrenProps<\n  BoxProps\n>> = withTheme(({ theme, children, ...props }) => {\n  const { palette, container } = theme;\n  const { minWidth, maxWidth } = container;\n  const location = useLocation();\n\n  const excludeAuthContainer = [Routes.landing, Routes.infoAboutProgram];\n\n  // TODO: refactor routes !!!\n  if (excludeAuthContainer.includes(location.pathname.replace('/', ''))) {\n    return children;\n  }\n\n  return (\n    <div\n      style={{\n        minHeight: '100%',\n        backgroundColor: palette.Background\n      }}\n    >\n      <Head />\n      <Box\n        style={{\n          minWidth,\n          maxWidth,\n          margin: '0 auto'\n        }}\n        {...props}\n      >\n        {children}\n      </Box>\n    </div>\n  );\n});\n","import * as React from 'react';\nimport styled, { keyframes, css } from 'styled-components';\nimport { Select } from '@we-ui-components/form';\n\nexport function AsyncSelect({\n  loading,\n  ...props\n}: React.ComponentProps<typeof StyledSelect>) {\n  return (\n    <StyledSelect\n      loading={loading}\n      disabled={loading}\n      glyph={loading ? 'Refresh' : 'ArrowDown'}\n      {...props}\n    />\n  );\n}\n\nconst StyledSelect = styled(Select)<{ loading: boolean }>`\n  svg {\n    animation: ${computeRotateAnimation};\n  }\n`;\n\nfunction computeRotateAnimation({ loading }: { loading: boolean }) {\n  if (!loading) return 'none';\n\n  return css`\n    ${rotateAnimation} 1s linear infinite\n  `;\n}\n\nconst rotateAnimation = keyframes`\n  from {\n    transform: rotate(0deg);\n  }\n\n  to {\n    transform: rotate(360deg);\n  }\n`;\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { Text } from '@we-ui-components/base';\nimport { CSSProperties } from 'styled-components';\nimport { printError } from 'utils';\n\nexport const Error: React.FC<{ error: any; style?: CSSProperties }> = ({\n  error,\n  style\n}) => (\n  <Box\n    align=\"center\"\n    pad={{ bottom: 'small', horizontal: 'xlarge' }}\n    style={{ maxWidth: '100%', ...style }}\n  >\n    <Text size=\"small\" color=\"Red\" style={{ maxWidth: '100%' }}>\n      {printError(error).slice(0, 1000)}\n    </Text>\n  </Box>\n);\n","import * as React from 'react';\n\nexport const ArrowUpIcon = (props: React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 18 18\"\n      {...props}\n    >\n      <path\n        d=\"M.984 9L9 .984 17.016 9l-1.453 1.406-5.579-5.578v12.188H8.016V4.828L2.39 10.406.984 9z\"\n        fill=\"#fff\"\n      />\n    </svg>\n  );\n};\n","import * as React from 'react';\n\nexport const KebabIconSvg = (props: React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 5 18\"\n      width=\"1em\"\n      {...props}\n    >\n      <path\n        d=\"M1.141 13.594c.407-.406.875-.61 1.407-.61.53 0 1 .204 1.406.61.406.406.61.875.61 1.406 0 .531-.204 1-.61 1.406-.406.407-.875.61-1.406.61-.532 0-1-.203-1.407-.61C.735 16 .532 15.531.532 15c0-.531.203-1 .61-1.406zm0-6c.407-.407.875-.61 1.407-.61.53 0 1 .204 1.406.61.406.406.61.875.61 1.406 0 .531-.204 1-.61 1.406-.406.406-.875.61-1.406.61-.532 0-1-.204-1.407-.61C.735 10 .532 9.531.532 9c0-.531.203-1 .61-1.406zm2.813-3.188c-.406.407-.875.61-1.406.61-.532 0-1-.204-1.407-.61C.735 4 .532 3.531.532 3c0-.531.203-1 .61-1.406.406-.407.874-.61 1.406-.61.53 0 1 .204 1.406.61.406.406.61.875.61 1.406 0 .531-.204 1-.61 1.406z\"\n        fill={props.color}\n      />\n    </svg>\n  );\n};\n","import * as React from 'react';\n\nexport const PlusIconSVG = () => (\n  <svg\n    width=\"10\"\n    height=\"10\"\n    viewBox=\"0 0 10 10\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M9 5.56376H5.56376V9H4.43624V5.56376H1V4.43624H4.43624V1H5.56376V4.43624H9V5.56376Z\"\n      fill=\"currentColor\"\n      stroke=\"currentColor\"\n    />\n  </svg>\n);\n","import * as React from 'react';\n\nexport const RotateIcon = (props: React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg viewBox=\"0 0 24 24\" {...props}>\n      <path fill=\"currentColor\"\n            d=\"M13,4.07V1L8.45,5.55L13,10V6.09C15.84,6.57 18,9.03 18,12C18,14.97 15.84,17.43 13,17.91V19.93C16.95,19.44 20,16.08 20,12C20,7.92 16.95,4.56 13,4.07M7.1,18.32C8.26,19.22 9.61,19.76 11,19.93V17.9C10.13,17.75 9.29,17.41 8.54,16.87L7.1,18.32M6.09,13H4.07C4.24,14.39 4.79,15.73 5.69,16.89L7.1,15.47C6.58,14.72 6.23,13.88 6.09,13M7.11,8.53L5.7,7.11C4.8,8.27 4.24,9.61 4.07,11H6.09C6.23,10.13 6.58,9.28 7.11,8.53Z\"/>\n    </svg>\n  );\n};\n","import * as React from \"react\";\n\nexport const HistoryIcon = (props) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    fill=\"none\"\n    viewBox=\"0 0 16 16\"\n    {...props}\n  >\n    <path\n      fill={props.fill || '#8D8D8D'}\n      d=\"M8.344 5.344v2.812l2.312 1.406-.469.813-2.843-1.719V5.344zM14 6.75H9.469l1.844-1.875Q9.938 3.5 8 3.5q-1.906-.03-3.281 1.313-1.344 1.375-1.344 3.25t1.344 3.25T8 12.687t3.313-1.374q1.343-1.344 1.343-3.25H14q0 2.468-1.75 4.187Q10.5 14 8 14t-4.25-1.75Q2 10.531 2 8.094q0-2.469 1.75-4.219t4.219-1.75 4.219 1.75L14 2z\"\n    ></path>\n  </svg>\n);\n","import * as React from \"react\";\n\nexport const SpeakerNotesIcon = (props) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"24\"\n    height=\"24\"\n    fill=\"none\"\n    viewBox=\"0 0 24 24\"\n    {...props}\n  >\n    <path\n      fill={props.fill || \"#8D8D8D\"}\n      d=\"M18 8.016V6H9.984v2.016zm0 3V9H9.984v2.016zm-3 3V12H9.984v2.016zm-6.984-6V6H6v2.016zm0 3V9H6v2.016zm0 3V12H6v2.016zm12-12q.796 0 1.359.609.61.562.61 1.36v12q0 .796-.61 1.406-.562.609-1.36.609H6l-3.984 3.984v-18q0-.796.562-1.359.61-.61 1.406-.61z\"\n    ></path>\n  </svg>\n);\n\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js?modules!../../../node_modules/stylus-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./styles.styl\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import * as React from 'react';\nimport * as Icons from './index';\nimport * as styles from './styles.styl';\nimport cn from 'classnames';\nimport { mainTheme } from 'themes';\n\ninterface IIConProps {\n  hover?: boolean;\n  component: React.ElementType;\n\n  [name: string]: any;\n}\n\nclass Icon extends React.Component<IIConProps> {\n  private ref: any;\n\n  public componentDidMount() {\n    if (this.props.onClick) {\n      this.ref.addEventListener('click', this.onClick);\n    }\n  }\n\n  public componentWillUnmount() {\n    if (this.props.onClick) {\n      this.ref.removeEventListener('click', this.onClick);\n    }\n  }\n\n  public render() {\n    const { hover, onClick, component: Component, ...params } = this.props;\n    const className = cn(this.props.className, hover ? styles.hoverIcon : '');\n\n    return (\n      <div\n        ref={(ref: any) => (this.ref = ref)}\n        style={{\n          display: 'flex',\n          justifyContent: 'center',\n          alignItems: 'center'\n        }}\n      >\n        <Component {...params} className={className}/>\n      </div>\n    );\n  }\n\n  private onClick = (evt: Event) => {\n    evt.stopPropagation();\n    evt.preventDefault();\n\n    this.props.onClick();\n  };\n}\n\nfunction convertToSVGProps(props: Partial<IIConProps>) {\n  const { size, width, height, color, ...restProps } = props;\n  return {\n    ...restProps,\n    color: getColor(color),\n    width: getSVGSize(size, width),\n    height: getSVGSize(size, height)\n  };\n}\n\nfunction getSVGSize(size: string, value: string) {\n  switch (size) {\n    case 'small':\n      return '12px';\n    case 'medium':\n      return '16px';\n    case 'large':\n      return '20px';\n    case 'xlarge':\n      return '24px';\n\n    default:\n      return size || value ? value : '20px';\n  }\n}\n\nfunction getColor(color: string) {\n  const { palette } = mainTheme;\n  return palette?.[color] || color || 'inherit';\n}\n\nconst customizeHOC = (Component: React.ElementType) => {\n  return (props: Partial<IIConProps>) => (\n    <Icon {...convertToSVGProps(props)} component={Component}/>\n  );\n};\n\nexport const CloseIcon = customizeHOC(Icons.CloseIcon);\nexport const ExitIcon = customizeHOC(Icons.ExitIcon);\nexport const SearchIcon = customizeHOC(Icons.SearchIcon);\nexport const DoNotDisturbIcon = customizeHOC(Icons.DoNotDisturb);\nexport const DoneIcon = customizeHOC(Icons.Done);\nexport const PhoneIcon = customizeHOC(Icons.PhoneIconSVG);\nexport const KebabIcon = customizeHOC(Icons.KebabIconSvg);\nexport const PlusIcon = customizeHOC(Icons.PlusIconSVG);\nexport const RotateIcon = customizeHOC(Icons.RotateIcon);\n","import * as React from 'react';\n\nexport const CloseIcon = (props: React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fill={props.fill || 'black'}\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M15.4236 0.799927L8.39883 7.8255L1.37407 0.799927L0.798828 1.37517L7.8244 8.39993L0.798828 15.4247L1.37407 15.9999L8.39883 8.97435L15.4236 15.9999L15.9988 15.4247L8.97326 8.39993L15.9988 1.37517L15.4236 0.799927Z\"\n      />\n    </svg>\n  );\n};\n","import * as React from 'react';\n\nexport const ExitIcon = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg\n    width=\"22\"\n    height=\"19\"\n    viewBox=\"0 0 22 19\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    {...props}\n  >\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M12 6V1.5C12 0.673 11.327 0 10.5 0H1.5C0.673 0 0 0.673 0 1.5V17.5C0 18.327 0.673 19 1.5 19H10.5C11.327 19 12 18.327 12 17.5V13H11V17.5C11 17.775 10.776 18 10.5 18H1.5C1.224 18 1 17.775 1 17.5V1.5C1 1.225 1.224 1 1.5 1H10.5C10.776 1 11 1.225 11 1.5V6H12Z\"\n      fill={props.fill || '#0A1E32'}\n    />\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M16.396 5.854L19.543 9H7V10H19.543L16.396 13.146L17.104 13.854L21.457 9.5L17.104 5.146L16.396 5.854Z\"\n      fill={props.fill || '#0A1E32'}\n    />\n  </svg>\n);\n","import * as React from 'react';\n\nexport const SearchIcon = (props: React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      width=\"15\"\n      height=\"15\"\n      viewBox=\"0 0 15 15\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M6 12C2.68629 12 0 9.31371 0 6C0 2.68629 2.68629 0 6 0C9.31371 0 12 2.68629 12 6C12 7.29583 11.5892 8.49572 10.8907 9.47653L14.0208 12.6066C14.4113 12.9971 14.4113 13.6303 14.0208 14.0208C13.6303 14.4113 12.9971 14.4113 12.6066 14.0208L9.47653 10.8907C8.49572 11.5892 7.29583 12 6 12ZM10 6C10 8.20914 8.20914 10 6 10C3.79086 10 2 8.20914 2 6C2 3.79086 3.79086 2 6 2C8.20914 2 10 3.79086 10 6Z\"\n        fill={props.fill || '#0B1F35'}\n      />\n    </svg>\n  );\n};\n","import * as React from 'react';\n\nexport function DoNotDisturb(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 17 16\"\n      {...props}\n    >\n      <path\n        d=\"M12.719 11.281c.75-.937 1.125-2.031 1.125-3.281 0-1.458-.531-2.708-1.594-3.75-1.042-1.063-2.292-1.594-3.75-1.594-1.25 0-2.344.375-3.281 1.125l7.5 7.5zM8.5 13.344c1.25 0 2.344-.375 3.281-1.125l-7.5-7.5C3.531 5.656 3.156 6.75 3.156 8c0 1.458.521 2.719 1.563 3.781 1.062 1.042 2.323 1.563 3.781 1.563zM3.781 3.313C5.094 2 6.667 1.343 8.5 1.343c1.833 0 3.396.657 4.688 1.97C14.5 4.604 15.155 6.167 15.155 8c0 1.833-.656 3.406-1.969 4.719-1.291 1.291-2.854 1.937-4.687 1.937-1.833 0-3.406-.646-4.719-1.937C2.49 11.406 1.844 9.833 1.844 8c0-1.833.646-3.396 1.937-4.688z\"\n        fill={props.fill || '#fff'}\n      />\n    </svg>\n  );\n}\n","import * as React from 'react';\n\nexport function Done(props: React.SVGProps<SVGSVGElement>) {\n  return (\n    <svg\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 17 16\"\n      {...props}\n    >\n      <path\n        d=\"M6.5 10.813l7.063-7.094.937.937-8 8-3.719-3.719L3.687 8 6.5 10.813z\"\n        fill={props.fill || '#fff'}\n      />\n    </svg>\n  );\n}\n","import * as React from 'react';\n\nexport const PhoneIconSVG = (props: React.SVGProps<SVGSVGElement>) => {\n  return (\n    <svg\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 12 14\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M2.18 1.07c.263-.159.6-.118.818.099l2.467 2.467a.667.667 0 01.055.88c-.785 1.013-.888 1.51-.81 1.851.042.187.155.407.398.694.245.289.59.61 1.052 1.006.025.021.047.044.068.068.134.152.256.204.37.221.132.02.307 0 .534-.079.385-.133.76-.371 1.143-.614.1-.064.2-.128.302-.19a.667.667 0 01.827.102l2.4 2.467c.212.218.25.551.093.81-.54.89-1.233 1.499-2.034 1.842-.797.341-1.656.4-2.502.264-1.674-.27-3.364-1.312-4.682-2.64C1.36 8.992.327 7.293.065 5.614c-.133-.848-.07-1.709.272-2.507.345-.802.955-1.497 1.844-2.036zm8.287 9.51a2.886 2.886 0 01-1.13.888c-.521.224-1.117.278-1.764.174-1.311-.212-2.759-1.065-3.949-2.263S1.588 6.726 1.382 5.407c-.102-.65-.045-1.25.18-1.774.172-.402.455-.785.886-1.128l1.67 1.67c-.593.864-.896 1.662-.708 2.488.107.472.361.882.68 1.259.31.366.712.736 1.17 1.13.325.356.716.559 1.139.623.42.063.824-.018 1.172-.138.448-.156.896-.419 1.255-.644l1.641 1.687z\"\n        fill={props.color}\n      />\n    </svg>\n  );\n};\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js?modules!../../../node_modules/stylus-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./styles.styl\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import * as React from 'react';\nimport * as styles from './styles.styl';\nimport { Text } from '@we-ui-components/base';\nimport { Box } from 'grommet';\n\nexport const Spinner: React.FC<React.SVGAttributes<SVGElement>> = props => {\n  const boxSize = 16;\n  const radius = boxSize / 2 - 1;\n  const middle = boxSize / 2;\n  return (\n    <svg\n      viewBox={`0 0 ${boxSize} ${boxSize}`}\n      className={styles.spinner}\n      {...props}\n    >\n      <linearGradient id=\"linearColors\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n        <stop offset=\"0%\" stop-color=\"#204080\"></stop>\n        <stop offset=\"80%\" stop-color=\"#f3f3f3\"></stop>\n        <stop offset=\"100%\" stop-color=\"#f3f3f3\"></stop>\n      </linearGradient>\n      <circle\n        r={radius}\n        cx={middle}\n        cy={middle}\n        strokeWidth=\"1.4\"\n        fill=\"none\"\n        //stroke={props.color || 'black'}\n        stroke=\"url(#linearColors)\"\n        // strokeDasharray={Math.floor(2 * radius * Math.PI - 0)}\n      />\n    </svg>\n  );\n};\n\nexport const SpinnerWithText: React.FC<React.SVGAttributes<SVGElement> & {\n  text?: string;\n}> = ({ text, ...props }) => {\n  return (\n    <div>\n      <Box direction=\"row\" align=\"center\">\n        <Spinner style={{ width: 16, height: 16 }} {...props} />\n        <Text margin={{ left: '8px', top: '2px' }} size=\"small\" color=\"Blue800\">\n          {text || 'Обрабатывается...'}\n        </Text>\n      </Box>\n    </div>\n  );\n};\n","import * as React from 'react';\nimport styled, { keyframes } from 'styled-components';\n\nconst SpinnerSVG: React.FC<React.SVGAttributes<SVGElement>> = (\n  props: React.SVGProps<SVGSVGElement>\n) => (\n  <svg viewBox=\"0 0 20 20\" height=\"20px\" width=\"20px\" fill=\"none\" {...props}>\n    <path d=\"M10.0001 0C9.67647 0 9.41412 0.262344 9.41412 0.585938V4.35156C9.41412 4.67516 9.67647 4.9375 10.0001 4.9375C10.3237 4.9375 10.586 4.67516 10.586 4.35156V0.585938C10.586 0.262344 10.3237 0 10.0001 0Z\" />\n    <path d=\"M15.0001 1.33975C14.7198 1.17787 14.3614 1.27393 14.1997 1.5542L12.3169 4.81526C12.1551 5.09549 12.2511 5.45385 12.5314 5.61565C12.6236 5.66893 12.7244 5.69424 12.8238 5.69424C13.0263 5.69424 13.2232 5.58916 13.3317 5.40119L15.2145 2.14014C15.3763 1.8599 15.2803 1.50155 15.0001 1.33975Z\" />\n    <path d=\"M18.6603 5.00009C18.4985 4.71982 18.1402 4.62384 17.8599 4.78564L14.5988 6.66845C14.3185 6.83021 14.2225 7.18857 14.3843 7.46881C14.4928 7.65682 14.6898 7.76189 14.8923 7.76189C14.9917 7.76189 15.0924 7.73658 15.1847 7.6833L18.4458 5.80048C18.7261 5.63869 18.8221 5.28033 18.6603 5.00009Z\" />\n    <path d=\"M19.414 9.41418H15.6485C15.3249 9.41418 15.0626 9.67653 15.0626 10.0001C15.0626 10.3237 15.3249 10.5861 15.6485 10.5861H19.414C19.7376 10.5861 20 10.3237 20 10.0001C20 9.67653 19.7376 9.41418 19.414 9.41418Z\" />\n    <path d=\"M18.4458 14.1996L15.1847 12.3169C14.9044 12.1551 14.5461 12.2511 14.3843 12.5314C14.2225 12.8116 14.3185 13.17 14.5988 13.3318L17.8599 15.2145C17.9522 15.2678 18.0529 15.2931 18.1523 15.2931C18.3548 15.2931 18.5518 15.188 18.6602 15.0001C18.822 14.7198 18.726 14.3614 18.4458 14.1996Z\" />\n    <path d=\"M15.2145 17.8598L13.3317 14.5987C13.1699 14.3185 12.8116 14.2225 12.5313 14.3843C12.2511 14.5461 12.1551 14.9044 12.3169 15.1847L14.1997 18.4457C14.3082 18.6337 14.5051 18.7388 14.7076 18.7388C14.807 18.7388 14.9078 18.7135 15.0001 18.6602C15.2803 18.4984 15.3763 18.14 15.2145 17.8598Z\" />\n    <path d=\"M10.0001 15.0625C9.67647 15.0625 9.41412 15.3248 9.41412 15.6484V19.414C9.41412 19.7376 9.67647 20 10.0001 20C10.3237 20 10.586 19.7376 10.586 19.414V15.6484C10.586 15.3248 10.3237 15.0625 10.0001 15.0625Z\" />\n    <path d=\"M7.46878 14.3843C7.18854 14.2224 6.83014 14.3185 6.66838 14.5988L4.78557 17.8599C4.62377 18.1401 4.71979 18.4985 5.00002 18.6603C5.09229 18.7136 5.19303 18.7389 5.29244 18.7389C5.49494 18.7389 5.69194 18.6338 5.80041 18.4458L7.68323 15.1847C7.84503 14.9045 7.74901 14.5461 7.46878 14.3843Z\" />\n    <path d=\"M5.61585 12.5314C5.45405 12.2511 5.09577 12.1551 4.81546 12.3169L1.55428 14.1997C1.27405 14.3615 1.17803 14.7199 1.33983 15.0001C1.44834 15.1881 1.6453 15.2932 1.8478 15.2932C1.94721 15.2932 2.04795 15.2679 2.14022 15.2146L5.4014 13.3318C5.68163 13.17 5.77765 12.8116 5.61585 12.5314Z\" />\n    <path d=\"M4.3516 9.41418H0.585938C0.262344 9.41418 0 9.67653 0 10.0001C0 10.3237 0.262344 10.5861 0.585938 10.5861H4.3516C4.6752 10.5861 4.93754 10.3237 4.93754 10.0001C4.93754 9.67653 4.6752 9.41418 4.3516 9.41418Z\" />\n    <path d=\"M5.40133 6.6684L2.14016 4.78555C1.85984 4.62367 1.50156 4.71973 1.33977 5C1.17797 5.28024 1.27398 5.63859 1.55422 5.80039L4.81539 7.68328C4.90766 7.73656 5.0084 7.76187 5.10781 7.76187C5.31031 7.76187 5.50727 7.65679 5.61578 7.46878C5.77758 7.18855 5.68156 6.83019 5.40133 6.6684Z\" />\n    <path d=\"M7.68323 4.81531L5.80041 1.55418C5.63862 1.27391 5.28026 1.1779 5.00002 1.33973C4.71979 1.50153 4.62377 1.85989 4.78557 2.14012L6.66838 5.40125C6.7769 5.58926 6.97385 5.69429 7.17635 5.69429C7.27577 5.69429 7.37651 5.66898 7.46878 5.6157C7.74901 5.4539 7.84503 5.09555 7.68323 4.81531Z\" />\n  </svg>\n);\n\nconst spin = keyframes`\n  from {\n    transform: rotate(0deg);\n  }\n\n  to {\n    transform: rotate(360deg);\n  }\n`;\n\nexport const Spinner2 = styled(SpinnerSVG)`\n  animation: ${spin} 1.6s linear infinite;\n\n  path {\n    fill: ${(props): string => props.color || props.theme.palette.Red};\n  }\n`;\n","import * as React from 'react';\nimport { Button } from '@we-ui-components/base';\nimport { Spinner2 } from './Spinner2';\n\ntype TButtonType = 'origin' | 'file';\n\nexport const ButtonEx = ({\n  textRender = null,\n  transparent,\n  spinnerRender = (\n    <Spinner2\n      height=\"20px\"\n      width=\"20px\"\n      color={transparent ? 'Black' : 'White'}\n      style={{ marginRight: 5 }}\n    />\n  ),\n  isLoading,\n  children,\n  onClick,\n  type,\n  accept,\n  ...buttonProps\n}: ButtonExProps) => {\n  const hiddenFileInput = React.useRef(null);\n\n  const handleClick = () => {\n    hiddenFileInput.current.click();\n  };\n\n  return (\n    <>\n      {type === 'file' && (\n        <input\n          style={{ display: 'none' }}\n          ref={hiddenFileInput}\n          onChange={event => {\n            onClick(event.target.files[0]);\n          }}\n          onClick={event => event.stopPropagation()}\n          accept={accept}\n          type=\"file\"\n          multiple={false}\n        />\n      )}\n      <Button\n        onClick={isLoading ? () => {} : type === 'file' ? handleClick : onClick}\n        transparent={transparent}\n        {...buttonProps}\n      >\n        {isLoading ? spinnerRender : textRender}\n        {children}\n      </Button>\n    </>\n  );\n};\n\nexport type ButtonExProps = React.ComponentProps<typeof Button> & {\n  textRender?: React.ReactNode;\n  spinnerRender?: React.ReactNode;\n  children?: React.ReactNode;\n  type?: TButtonType;\n  accept?: string;\n  onClick?: (event?: any) => void | Promise<void>;\n};\n","import * as React from 'react';\nimport { Box, BoxProps } from 'grommet';\nimport { withTheme } from 'styled-components';\nimport { TStyledChildrenProps } from 'interfaces';\nimport { CSSProperties, DOMAttributes } from 'react';\n\ntype TProps = DOMAttributes<HTMLDivElement> &\n  TStyledChildrenProps<BoxProps> & {\n    style?: CSSProperties;\n    color?: TColorEnum;\n  };\n\ntype TColorEnum = 'white' | 'green' | 'grey';\n\nconst COLOR_MAP: Record<TColorEnum, CSSProperties> = {\n  white: {\n    borderRadius: 1,\n    background: 'white',\n    boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04)'\n  },\n  green: {\n    borderRadius: 1,\n    background: 'linear-gradient(270.9deg, #00AA78 1.92%, #00D093 98.19%)',\n    boxShadow: '0px 4px 12px rgba(0, 168, 122, 0.2)'\n  },\n  grey: {\n    borderRadius: 1,\n    background: 'linear-gradient(270.9deg, #8D8D8D 1.92%, #CBCBCB 98.19%)',\n    boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04)'\n  }\n};\n\nexport const Panel: React.FC<TProps> = withTheme(\n  ({ children, theme, style, color = 'white', ...rest }: TProps) => (\n    <Box style={{ ...style, ...COLOR_MAP[color] }} {...rest}>\n      {children}\n    </Box>\n  )\n);\n","export const breakpoints = {\n  mobile: '520px',\n  mobileL: '425px',\n  tablet: '768px',\n  tabletM: '868px',\n  laptop: '1024px',\n  laptopL: '1224px'\n};\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport styled, { CSSProperties } from 'styled-components';\nimport { breakpoints } from './Responsive';\n\ninterface IWrapProps {\n  position: 'flex-start' | 'center';\n}\n\nconst ModalOverlay = styled.div<IWrapProps>`\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  left: 0;\n  top: 0;\n  background-color: rgba(10, 6, 6, 0.5);\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  align-items: center;\n  z-index: 3;\n  overflow: auto;\n  box-sizing: border-box;\n  cursor: pointer;\n`;\n\nconst ModalWrap = styled.div`\n  position: relative;\n  z-index: 3;\n  display: flex;\n  align-items: center;\n  flex: 1 0 auto;\n\n  @media (max-width: ${breakpoints.laptopL}) {\n    display: flex;\n  }\n`;\n\nconst Modal = styled.div`\n  position: relative;\n  z-index: 4;\n  background-color: #fff;\n  box-sizing: border-box;\n  border-radius: 4px;\n  cursor: auto;\n\n  @media (max-width: ${(props): string =>\n      props.theme.global.breakpoints.small.value}px) {\n    flex: 1;\n  }\n`;\n\nexport const ModalView: React.FC<{\n  width: string;\n  onClose: () => void;\n  style: CSSProperties;\n  overlayStyle?: CSSProperties;\n  modalStyle?: CSSProperties;\n  children: React.ReactNode;\n  isOverlayClose?: boolean;\n} & IWrapProps> = ({\n  width = '700px',\n  position = 'center',\n  onClose,\n  style,\n  children,\n  overlayStyle,\n  modalStyle,\n  isOverlayClose\n}) => {\n  return ReactDOM.createPortal(\n    <ModalOverlay\n      position={position}\n      onClick={() => isOverlayClose && onClose()}\n      style={{\n        ...style,\n        ...overlayStyle\n      }}\n    >\n      <ModalWrap>\n        <Modal\n          style={{\n            ...modalStyle,\n            width\n          }}\n          onClick={(event: any) => {\n            event.stopPropagation();\n          }}\n        >\n          {children}\n        </Modal>\n      </ModalWrap>\n    </ModalOverlay>,\n    document.body\n  );\n};\n","import * as React from 'react';\nimport { HTMLProps, PropsWithChildren } from 'react';\nimport { useClickOutside } from 'utils';\n\nexport const ClickOutside: React.FC<{\n  onClickOutside: () => void;\n} & PropsWithChildren<HTMLProps<HTMLDivElement>>> = ({\n  onClickOutside,\n  children,\n  ...props\n}) => {\n  const target = useClickOutside(onClickOutside);\n  return (\n    <div {...props} ref={target}>\n      {children}\n    </div>\n  );\n};\n","import * as React from 'react';\nimport { BoxProps, Box } from 'grommet';\nimport { CSSProperties } from 'react';\nimport styled from 'styled-components';\n\nexport const TabsEx = ({\n  tabs,\n  selected,\n  onChange,\n  store,\n  ...rest\n}: {\n  tabs: ITabOptions[];\n  store?: any; // TODO fix this\n  selected?: string;\n  onChange?(id: string): void;\n  style?: CSSProperties;\n} & BoxProps) => {\n  return (\n    <Box {...rest} direction=\"column-reverse\" align=\"baseline\">\n      <Tabs store={store} tabs={tabs} selected={selected} onChange={onChange} />\n    </Box>\n  );\n};\n\nconst Tabs: React.FunctionComponent<IProps> = ({\n  store,\n  onChange,\n  selected,\n  tabs,\n  small,\n  children,\n  ...rest\n}) => (\n  <Box {...rest} direction=\"row-responsive\">\n    {tabs.map(item => (\n      <Tab\n        store={store}\n        key={item.id}\n        onChange={onChange}\n        selected={selected}\n        small={small}\n        {...item}\n      />\n    ))}\n    {children}\n  </Box>\n);\n\nfunction CountCurrentProject(store, name) {\n  let count = store.store.allData.filter(item => item.status.includes(name.id))\n    .length;\n\n  if (name.id === 'ALL') {\n    return <span>&nbsp;({store.store.allData.length})</span>;\n  }\n\n  if (count === 0) {\n    return '';\n  }\n\n  return <span>&nbsp;({count})</span>;\n}\n\nconst Tab: React.FunctionComponent<ITabProps> = ({\n  store,\n  selected,\n  id,\n  text,\n  onChange,\n  className,\n  titleText,\n  small,\n  disabled,\n  ...rest\n}) => {\n  return (\n    <StyledTab\n      active={selected == id}\n      disabled={disabled}\n      onClick={() => onChange && !disabled && onChange(id)}\n      {...rest}\n    >\n      {text instanceof Function ? text() : text}\n      {/*{CountCurrentProject({ store }, { id })}*/}\n    </StyledTab>\n  );\n};\n\nconst StyledTab = styled.div<any>`\n  margin: 0 5px;\n  font-size: 12px;\n  font-weight: 600;\n  color: ${props =>\n    props.active ? props.theme.palette.BlackText : props.theme.palette.Grey};\n  border-bottom: ${props => (props.active ? '2px solid #4740a1' : null)};\n  padding: ${props => (props.active ? '0 2px 14px' : '0 2px')};\n  background-color: ${props =>\n    props.active ? 'white' : props.theme.styled.tabs.tab.backgroundColor};\n  font-family: ${props => props.theme.fontBase};\n  opacity: ${props => (props.disabled ? 0.5 : 1)};\n  cursor: ${props => (props.disabled ? 'auto' : 'pointer')};\n`;\n\ninterface ITabProps extends ITabOptions, React.ComponentProps<any> {\n  selected?: string;\n  onChange?(id: string): void;\n  small?: boolean;\n}\n\nexport interface ITabOptions {\n  id: string;\n  text: string | React.ReactNode;\n  titleText?: string;\n  className?: string;\n  disabled?: boolean;\n}\n\ninterface IProps {\n  selected?: string;\n  onChange?(id: string): void;\n  className?: string;\n  tabs: ITabOptions[];\n  small?: boolean;\n  store?: any;\n}\n","import * as React from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nexport const StyledRouterLink = styled(RouterLink)`\n  color: ${props => props.theme.palette.Green};\n`;\n\nexport function ExternalLink(props: AnchorProps) {\n  return (\n    <StyledAnchorElement target=\"_blank\" rel=\"noopener noreferrer\" {...props} />\n  );\n}\n\nexport function ExternalLinkBlue(props: AnchorProps) {\n  return (\n    <StyledAnchorElementBlue\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      {...props}\n    />\n  );\n}\n\nexport const WrapperExternalLink = styled(ExternalLink)`\n  text-decoration: none;\n  color: inherit;\n`;\n\nexport const StyledAnchorElement = styled.a`\n  color: ${props => props.theme.palette.Green};\n`;\n\nexport const StyledAnchorElementBlue = styled.a`\n  color: ${props => props.theme.palette.Blue600};\n`;\n\nexport const WrapperRouterLink = styled(RouterLink)`\n  text-decoration: none;\n  color: inherit;\n`;\n\ntype AnchorProps = React.ComponentProps<typeof StyledAnchorElement>;\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { Text } from '@we-ui-components/base';\nimport { useTheme } from 'utils';\nimport styled from 'styled-components';\n\ntype BoxProps = React.ComponentProps<typeof Box>;\n\ntype LabelVariant = 'filled' | 'outlined';\n\ninterface LabelProps extends BoxProps {\n  primaryColor: string;\n  secondaryColor?: string;\n  fontSize?: string;\n  variant?: LabelVariant;\n}\n\nexport function Label({\n  primaryColor,\n  fontSize,\n  children,\n  secondaryColor = 'White',\n  variant = 'filled',\n  style = {},\n  ...props\n}: LabelProps) {\n  const variantProps = useVariantProps({\n    primaryColor,\n    secondaryColor,\n    variant\n  });\n\n  return (\n    <StyledBox\n      background={variantProps.bgColor}\n      style={{ borderColor: variantProps.borderColor, ...style }}\n      {...props}\n    >\n      <Text size={fontSize} color={variantProps.textColor}>\n        {children}\n      </Text>\n    </StyledBox>\n  );\n}\n\nconst StyledBox = styled(Box)`\n  border-radius: 30px;\n  border: 1px solid;\n  padding: 4px 12px;\n\n  position: relative;\n\n  align-items: center;\n  justify-content: center;\n`;\n\ninterface UseVariantParams {\n  primaryColor: string;\n  secondaryColor: string;\n  variant: LabelVariant;\n}\n\ninterface VariantProps {\n  bgColor: string;\n  textColor: string;\n  borderColor: string;\n}\n\nfunction useVariantProps({\n  primaryColor,\n  secondaryColor,\n  variant\n}: UseVariantParams) {\n  const resolvedPrimaryColor = useThemeColor(primaryColor);\n\n  const filledProps: VariantProps = {\n    bgColor: resolvedPrimaryColor,\n    textColor: secondaryColor,\n    borderColor: resolvedPrimaryColor\n  };\n\n  const outlinedProps: VariantProps = {\n    bgColor: 'white',\n    textColor: resolvedPrimaryColor,\n    borderColor: resolvedPrimaryColor\n  };\n\n  return variant === 'filled' ? filledProps : outlinedProps;\n}\n\nfunction useThemeColor(color: string) {\n  const theme = useTheme();\n  return theme.palette[color] || color;\n}\n","import * as React from 'react';\nimport { TextInput, TextInputProps } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport { SearchIcon } from './Icons/CustomizedIcons';\nimport styled from 'styled-components';\n\nexport function SearchInput(props: TextInputProps) {\n  return (\n    <StyledTextInput\n      renderLeft={\n        <Box margin={{ left: '5px', right: '12px' }}>\n          <SearchIcon size=\"medium\" />\n        </Box>\n      }\n      {...props}\n    />\n  );\n}\n\nconst StyledTextInput = styled(TextInput)`\n  font-weight: 500;\n  font-size: 14px;\n\n  & ~ label {\n    left: 51px;\n    padding: 0;\n    font-weight: 500;\n    font-size: 14px;\n\n    color: ${props => props.theme.palette.DarkGray};\n  }\n`;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { Box } from 'grommet';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from './Responsive';\nimport { Button } from '@we-ui-components/base';\nimport { ArrowUpIcon } from './Icons';\nimport { isDefined } from 'utils';\n\ntype Offset = {\n  bottom?: string | number;\n  right?: string | number;\n};\n\ninterface ScrollToTopButtonProps extends Offset {\n  visible?: boolean;\n}\n\nexport function ScrollToTopButton({\n  visible,\n  ...ofset\n}: ScrollToTopButtonProps) {\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n\n  const isVisible = () => {\n    if (isDefined(visible)) return visible;\n    return !isLaptopOrWider;\n  };\n\n  if (!isVisible()) return null;\n\n  return (\n    <ScrollToTopButtonContainer {...ofset}>\n      <StyledButton onClick={scrollToTop}>\n        <ArrowUpIcon height=\"18px\" width=\"18px\" />\n      </StyledButton>\n    </ScrollToTopButtonContainer>\n  );\n}\n\nfunction scrollToTop() {\n  const container = document.querySelector('#grommetRoot');\n\n  container.scrollTo({\n    top: 0,\n    left: 0,\n    behavior: 'smooth'\n  });\n}\n\nconst ScrollToTopButtonContainer = styled(Box)<Offset>`\n  position: absolute;\n\n  bottom: ${props => props.bottom || '20px'};\n  right: ${props => props.right || '8px'};\n\n  z-index: 2;\n`;\n\nconst StyledButton = styled(Button)`\n  button {\n    border-radius: 50%;\n    user-select: none;\n  }\n`;\n","import * as React from \"react\";\n\nexport default <svg width=\"105\" height=\"29\" viewBox=\"0 0 105 29\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n  <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M93 0V12L99.02 6L93 0Z\" fill=\"#00A87A\"/>\n  <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M105 0V12L98.9795 6L105 0Z\" fill=\"black\"/>\n  <path d=\"M21.3661 14.4L17.2441 27H14.1121L11.3401 18.468L8.47813 27H5.36413L1.22413 14.4H4.24813L7.09213 23.256L10.0621 14.4H12.7621L15.6421 23.328L18.5761 14.4H21.3661ZM32.75 24.66V27H22.994V14.4H32.516V16.74H25.892V19.476H31.742V21.744H25.892V24.66H32.75ZM36.11 27.144C35.618 27.144 35.204 26.976 34.868 26.64C34.532 26.304 34.364 25.884 34.364 25.38C34.364 24.864 34.532 24.45 34.868 24.138C35.204 23.814 35.618 23.652 36.11 23.652C36.602 23.652 37.016 23.814 37.352 24.138C37.688 24.45 37.856 24.864 37.856 25.38C37.856 25.884 37.688 26.304 37.352 26.64C37.016 26.976 36.602 27.144 36.11 27.144ZM51.3853 14.4L45.9313 27H43.0513L37.6153 14.4H40.7653L44.5993 23.4L48.4873 14.4H51.3853ZM58.3812 27.216C57.0732 27.216 55.8912 26.934 54.8352 26.37C53.7912 25.806 52.9692 25.032 52.3692 24.048C51.7812 23.052 51.4872 21.936 51.4872 20.7C51.4872 19.464 51.7812 18.354 52.3692 17.37C52.9692 16.374 53.7912 15.594 54.8352 15.03C55.8912 14.466 57.0732 14.184 58.3812 14.184C59.6892 14.184 60.8652 14.466 61.9092 15.03C62.9532 15.594 63.7752 16.374 64.3752 17.37C64.9752 18.354 65.2752 19.464 65.2752 20.7C65.2752 21.936 64.9752 23.052 64.3752 24.048C63.7752 25.032 62.9532 25.806 61.9092 26.37C60.8652 26.934 59.6892 27.216 58.3812 27.216ZM58.3812 24.732C59.1252 24.732 59.7972 24.564 60.3972 24.228C60.9972 23.88 61.4652 23.4 61.8012 22.788C62.1492 22.176 62.3232 21.48 62.3232 20.7C62.3232 19.92 62.1492 19.224 61.8012 18.612C61.4652 18 60.9972 17.526 60.3972 17.19C59.7972 16.842 59.1252 16.668 58.3812 16.668C57.6372 16.668 56.9652 16.842 56.3652 17.19C55.7652 17.526 55.2912 18 54.9432 18.612C54.6072 19.224 54.4392 19.92 54.4392 20.7C54.4392 21.48 54.6072 22.176 54.9432 22.788C55.2912 23.4 55.7652 23.88 56.3652 24.228C56.9652 24.564 57.6372 24.732 58.3812 24.732ZM69.9009 16.776H65.8689V14.4H76.8489V16.776H72.8169V27H69.9009V16.776ZM88.1738 24.66V27H78.4178V14.4H87.9398V16.74H81.3158V19.476H87.1658V21.744H81.3158V24.66H88.1738Z\" fill=\"black\"/>\n</svg>\n","import * as React from 'react';\nimport { ActionModalsStore, ActionModalConfig } from 'stores/ActionModalsStore';\nimport { Text } from '@we-ui-components/base';\nimport { IpObjectList } from 'interfaces';\nimport { useLocation } from 'react-router';\n\nexport const useIsLoginRoute = () => {\n  const { pathname } = useLocation();\n\n  return pathname.includes('login');\n};\n\nexport function openDeactivateLegalEntityModal(\n  actionModals: ActionModalsStore,\n  legalEntity: IpObjectList,\n  onDeactivate: () => void | Promise<void>\n): void {\n  actionModals.open(\n    ({ config }: { config: ActionModalConfig }) => (\n      <Text size=\"medium\">\n        Работа организации и ее пользователей в системе будет не возможна\n      </Text>\n    ),\n    {\n      //title: `Деактивировать организацию ${legalEntity.name}?`,\n      title: `Деактивировать организацию и всех ее пользователей?`,\n      applyText: () => <>Продолжить</>,\n      closeText: () => <>Отмена</>,\n      noValidation: true,\n      onApply: async () => {\n        await onDeactivate();\n      }\n    }\n  );\n}\n\nexport function openUnsaveModal(\n  actionModals: ActionModalsStore,\n  onApply: () => void | Promise<void>\n  // onClose: () => void | Promise<void>,\n): void {\n  actionModals.open(\n    ({ config }: { config: ActionModalConfig }) => (\n      <Text size=\"medium\">Имеются несохраненные изменения</Text>\n    ),\n    {\n      title: `Вы уверены, что хотите покинуть страницу?`,\n      applyText: () => <>Продолжить</>,\n      closeText: () => <>Отмена</>,\n      noValidation: true,\n      onApply: async () => {\n        await onApply();\n      }\n      // onClose: async () => {\n      //   await onClose();\n      // },\n    }\n  );\n}\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { Button } from 'grommet';\nimport { IStyledProps } from 'themes/mainTheme';\n\nconst StyledIconButton = styled(Button)`\n  font-size: 13px;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 8px;\n  cursor: pointer;\n  background-color: ${(props: IStyledProps) => props.theme.palette.LightGrey};\n  color: ${(props: IStyledProps) => props.theme.palette.Purple};\n  font-weight: bold;\n  border-radius: 2px;\n  white-space: nowrap;\n\n  &:focus {\n    // background-color: ${(props: IStyledProps) => props.theme.palette.Purple};\n    // color: ${(props: IStyledProps) => props.theme.palette.White};\n  }\n`;\n\nconst IconContainer = styled.span`\n  margin-right: 8px;\n`;\n\ntype Props = React.ComponentProps<typeof Button> & {\n  renderIcon?: () => React.ReactNode;\n};\n\nexport const IconButton: React.FC<Props> = ({\n  renderIcon,\n  children,\n  ...props\n}) => (\n  <StyledIconButton {...props}>\n    {renderIcon ? <IconContainer>{renderIcon()}</IconContainer> : null}\n\n    {children}\n  </StyledIconButton>\n);\n","import * as React from 'react';\n\nexport function IPGLogo() {\n  return (\n    <svg width=\"118\" height=\"23\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        d=\"M0 7.457h3.657v15.192H0V7.457zM14.245 7.457c1.4 0 2.611.224 3.634.673 1.039.448 1.836 1.085 2.393 1.91.557.824.835 1.8.835 2.93 0 1.113-.278 2.09-.835 2.93-.557.824-1.354 1.46-2.393 1.909-1.023.434-2.234.651-3.634.651h-3.182v4.189H7.406V7.457h6.84zm-.203 8.138c1.099 0 1.934-.224 2.506-.672.571-.463.857-1.114.857-1.954 0-.853-.286-1.504-.857-1.953-.572-.463-1.407-.694-2.506-.694h-2.98v5.273h2.98zM23.106 15.183h6.388v2.713h-6.388v-2.713zM43.277 14.814h3.34v6.163c-.857.623-1.85 1.1-2.979 1.433-1.128.333-2.265.499-3.408.499-1.64 0-3.115-.333-4.424-.998-1.31-.68-2.34-1.614-3.092-2.8-.738-1.2-1.106-2.553-1.106-4.058s.368-2.85 1.106-4.037c.752-1.2 1.79-2.134 3.114-2.8 1.325-.68 2.814-1.02 4.47-1.02 1.384 0 2.64.225 3.769.673 1.129.449 2.077 1.1 2.844 1.953l-2.348 2.084c-1.128-1.143-2.49-1.715-4.085-1.715-1.008 0-1.904.203-2.686.608a4.457 4.457 0 00-1.828 1.715c-.437.738-.655 1.584-.655 2.539 0 .94.218 1.78.655 2.517a4.642 4.642 0 001.806 1.736c.782.406 1.67.608 2.663.608 1.053 0 2.001-.217 2.844-.651v-4.449zM62 10.973v11.676h-3.341v-1.39a4.787 4.787 0 01-1.67 1.173 5.57 5.57 0 01-2.1.39c-1.595 0-2.858-.441-3.792-1.324-.932-.882-1.399-2.192-1.399-3.928v-6.597h3.521v6.098c0 1.881.82 2.821 2.46 2.821.843 0 1.52-.26 2.032-.78.511-.536.767-1.325.767-2.366v-5.773H62zM70.16 10.8c1.88 0 3.325.433 4.333 1.301 1.008.854 1.513 2.149 1.513 3.885v6.663H72.71v-1.454c-.662 1.085-1.896 1.627-3.702 1.627-.932 0-1.745-.152-2.437-.456-.677-.303-1.197-.723-1.558-1.258a3.184 3.184 0 01-.541-1.823c0-1.085.42-1.939 1.264-2.561.857-.622 2.174-.933 3.95-.933h2.798c0-.738-.233-1.303-.7-1.693-.466-.405-1.166-.608-2.098-.608-.648 0-1.287.101-1.919.304-.617.188-1.144.448-1.58.781l-1.264-2.365c.662-.449 1.452-.796 2.37-1.042a11.2 11.2 0 012.867-.369zm-.271 9.744c.602 0 1.136-.13 1.602-.391.467-.275.798-.673.993-1.194v-1.193H70.07c-1.444 0-2.167.455-2.167 1.367 0 .434.174.781.52 1.041.36.247.85.37 1.467.37zM82.555 12.514c.422-.565.986-.991 1.693-1.28.723-.29 1.55-.435 2.483-.435v3.125a13.247 13.247 0 00-.79-.043c-1.008 0-1.798.275-2.37.825-.572.535-.858 1.345-.858 2.43v5.513h-3.52V10.973h3.362v1.54zM101.084 6.545V22.65h-3.363v-1.346c-.873 1.013-2.137 1.52-3.792 1.52-1.144 0-2.182-.247-3.115-.739a5.413 5.413 0 01-2.167-2.105c-.527-.911-.79-1.967-.79-3.168s.263-2.257.79-3.169a5.412 5.412 0 012.167-2.105c.933-.492 1.971-.738 3.115-.738 1.55 0 2.76.47 3.634 1.41V6.546h3.521zm-6.546 13.5c.888 0 1.625-.29 2.212-.869.587-.593.88-1.381.88-2.365 0-.984-.293-1.765-.88-2.344-.587-.593-1.324-.89-2.212-.89-.903 0-1.648.297-2.234.89-.587.579-.88 1.36-.88 2.344 0 .983.293 1.772.88 2.365.586.579 1.331.868 2.234.868z\"\n        fill=\"#0A0606\"\n      />\n      <path d=\"M107.249 0v10.227l5.341-5.111L107.249 0z\" fill=\"#00AA78\" />\n      <path d=\"M117.931 0v10.227l-5.341-5.111L117.931 0z\" fill=\"#000\" />\n    </svg>\n  );\n}\n","import * as React from 'react';\nimport { Input } from '@we-ui-components/form';\nimport { Title } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport { IPGLogo } from 'ui/IPGLogo';\n\nexport const commonInputStyles = {\n  width: '100%'\n};\n\nexport const StyledInput: typeof Input = props => {\n  return <Input style={commonInputStyles} {...props} />;\n};\n\nexport function WelcomeMessage() {\n  return (\n    <Box margin={{ bottom: '24px' }}>\n      <Box direction=\"row\" gap=\"10px\" align=\"baseline\">\n        <Title style={{ fontSize: '26px' }} color=\"Black\" bold>\n          Добро пожаловать в\n        </Title>\n        <IPGLogo />\n      </Box>\n      <Title style={{ fontSize: '26px' }} color=\"Black\" bold>\n        Пожалуйста, представьтесь\n      </Title>\n    </Box>\n  );\n}\n","import * as React from 'react';\nimport { Form, MobxForm, isRequired } from '@we-ui-components/form';\nimport { isTheSameAs } from 'utils';\nimport { Box } from 'grommet';\nimport { inject, observer } from 'mobx-react';\nimport { TActionModalProps } from 'components/ActionModals';\nimport { observable } from 'mobx';\nimport { Text, Title } from '@we-ui-components/base';\nimport { StyledInput } from 'pages/Registration/components';\nimport * as bcrypt from 'bcryptjs';\nimport { IStores } from 'stores/index';\n\n@inject('user')\n@observer\nexport class EncryptPasswordModal extends React.Component<\n  TActionModalProps & Pick<IStores, 'user'>\n> {\n  formRef: MobxForm;\n\n  @observable\n  data = { password: '', repeatPassword: '' };\n\n  componentDidMount(): void {\n    this.props.onValidate.callback = () => this.onValidate();\n  }\n\n  asyncValidate = async newPassword => {\n    return new Promise((resolve, reject) => {\n      bcrypt.compare(\n        newPassword,\n        this.props.user.encryptedContent,\n        (err, result) => {\n          if (err) {\n            reject(err);\n          }\n\n          if (result) {\n            resolve(result);\n          } else {\n            reject(\n              'Пароль не совпадает с паролем введенном на предыдущем устройстве'\n            );\n          }\n        }\n      );\n    });\n  };\n\n  onValidate = async () => {\n    const data = await this.formRef.validateFields();\n\n    if (this.props.user.encryptedContent) {\n      await this.asyncValidate(data.password);\n    }\n\n    return data;\n  };\n\n  render() {\n    return (\n      <Box gap=\"12px\">\n        <Title size=\"small\" bold>\n          {!this.props.user.encryptedContent\n            ? 'Создание пароля'\n            : 'Введите пароль'}\n        </Title>\n\n        {!this.props.user.encryptedContent ? (\n          <>\n            <Text size=\"xsmall\" style={{ lineHeight: '19px', fontWeight: 400 }}>\n              Мы обеспечиваем анонимность голосования. Ваш голос будет\n              зашифрован.\n            </Text>\n            <Text size=\"xsmall\" style={{ lineHeight: '19px', fontWeight: 400 }}>\n              Создание пароля позволит просмотреть историю вашего голосования.\n              Если вы не укажете пароль, история будет недоступна.\n            </Text>\n          </>\n        ) : (\n          <Text size=\"xsmall\" style={{ lineHeight: '19px', fontWeight: 400 }}>\n            Введите пароль, который вы задали ранее. Это позволит вам\n            посмотреть, как вы проголосовали\n          </Text>\n        )}\n        <Form ref={(ref: any) => (this.formRef = ref)} data={this.data}>\n          <Box margin={{ top: 'small' }}>\n            <StyledInput\n              name={'password'}\n              placeholder=\"Пароль*\"\n              type=\"password\"\n              rules={[isRequired]}\n              {...({} as any)}\n            />\n\n            {!this.props.user.encryptedContent ? (\n              <StyledInput\n                name={'repeatPassword'}\n                placeholder=\"Повторите пароль*\"\n                type=\"password\"\n                rules={[\n                  isRequired,\n                  isTheSameAs('password', 'Пароли не совпадают')\n                ]}\n              />\n            ) : null}\n          </Box>\n        </Form>\n      </Box>\n    );\n  }\n}\n","import * as React from 'react';\n\nexport const ExitSVG = () => (\n  <svg\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"12\"\n    height=\"12\"\n    viewBox=\"0 0 12 12\"\n  >\n    <path\n      d=\"M10.656 0c.354 0 .667.135.938.406.27.271.406.584.406.938v9.312c0 .354-.135.667-.406.938-.271.27-.584.406-.938.406H1.344c-.375 0-.698-.135-.969-.406A1.341 1.341 0 010 10.656V8h1.344v2.656h9.312V1.344H1.344V4H0V1.344C0 .99.125.677.375.406.645.136.969 0 1.344 0h9.312zM4.72 8.406l1.718-1.75H0V5.344h6.438l-1.72-1.75.938-.938L9 6 5.656 9.344l-.937-.938z\"\n      fill=\"#3B33B0\"\n    />\n  </svg>\n);\n\nexport const UserSVG = () => (\n  <svg\n    width=\"12\"\n    height=\"12\"\n    viewBox=\"0 0 12 12\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M2.46875 8.09375C3.69792 7.59375 4.875 7.34375 6 7.34375C7.125 7.34375 8.29167 7.59375 9.5 8.09375C10.7292 8.57292 11.3438 9.20833 11.3438 10V11.3438H0.65625V10C0.65625 9.20833 1.26042 8.57292 2.46875 8.09375ZM7.875 5.21875C7.35417 5.73958 6.72917 6 6 6C5.27083 6 4.64583 5.73958 4.125 5.21875C3.60417 4.69792 3.34375 4.07292 3.34375 3.34375C3.34375 2.61458 3.60417 1.98958 4.125 1.46875C4.64583 0.927083 5.27083 0.65625 6 0.65625C6.72917 0.65625 7.35417 0.927083 7.875 1.46875C8.39583 1.98958 8.65625 2.61458 8.65625 3.34375C8.65625 4.07292 8.39583 4.69792 7.875 5.21875Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n","import * as React from 'react';\nimport { useStores } from 'stores';\nimport { IconButton } from 'ui/IconButton';\nimport { UserSVG, ExitSVG } from './svgComponents';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\nimport { ExitIcon } from 'ui/Icons';\nimport styled from 'styled-components';\n\ninterface LogoutButtonProps {}\n\nexport function LogoutButton(props: LogoutButtonProps) {\n  const { projectList, user } = useStores();\n  const isTabletOrWider = useMediaQuery({ minWidth: breakpoints.tablet });\n\n  const handleClick = () => {\n    projectList.filters = { status: [] };\n    user.logout();\n  };\n\n  return isTabletOrWider ? (\n    <WideLogoutButton onClick={handleClick} />\n  ) : (\n    <CompactLogoutButton onClick={handleClick} />\n  );\n}\n\ninterface ButtonProps {\n  onClick: () => void;\n}\n\nfunction WideLogoutButton({ onClick }: ButtonProps) {\n  return (\n    <IconButton\n      onClick={onClick}\n      margin={{ left: '16px' }}\n      renderIcon={() => <UserSVG />}\n    >\n      Выйти из системы\n    </IconButton>\n  );\n}\n\nfunction CompactLogoutButton({ onClick }: ButtonProps) {\n  return (\n    <StyledIconButton\n      onClick={onClick}\n      margin={{ left: '16px' }}\n      renderIcon={() => <ExitSVG />}\n    />\n  );\n}\n\nconst StyledIconButton = styled(IconButton)`\n  & span {\n    margin: 0;\n  }\n`;\n","import * as React from 'react';\nimport { withTheme } from 'styled-components';\nimport { useRoutes, useTheme } from 'utils';\nimport { observer } from 'mobx-react';\nimport { useStores } from 'stores';\nimport { IStyledProps } from 'themes';\nimport { IconButton } from 'ui/IconButton';\nimport { Icon, Text } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport { useEffect } from 'react';\nimport { EncryptPasswordModal } from 'components/Head/components/EncryptPasswordModal';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\nimport { UserSVG } from './svgComponents';\nimport { LogoutButton } from './LogoutButton';\n\ntype TProps = IStyledProps & React.HTMLProps<HTMLDivElement>;\n\nconst PlusSVG = () => (\n  <svg\n    width=\"10\"\n    height=\"10\"\n    viewBox=\"0 0 10 10\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M9 5.56376H5.56376V9H4.43624V5.56376H1V4.43624H4.43624V1H5.56376V4.43624H9V5.56376Z\"\n      fill=\"currentColor\"\n      stroke=\"currentColor\"\n    />\n  </svg>\n);\n\nexport const UserMenu = withTheme(\n  observer(({ style, theme, ...props }: TProps) => {\n    const { user, routing } = useStores();\n    const routes = useRoutes();\n\n    const goToProfile = () => {\n      if (routing.location.pathname === `/${routes.profile}`) {\n        return;\n      }\n\n      routing.push(`/${routes.profile}`);\n    };\n\n    const goToCreateVote = () => {\n      routing.push(`/${routes.createVote}`);\n    };\n\n    const isRegulator = user.isContainRoles(['REGULATOR']);\n    const isVoter = user.isContainRoles(['VOTER']);\n\n    const isTabletOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.tablet\n    });\n\n    const isPasswordDialogButtonVisible = () => {\n      const isVoterWithoutPassword = () => isVoter && !user.encryptPassword;\n      return isVoterWithoutPassword() && isTabletOrWider;\n    };\n\n    // TODO routes\n    return (\n      <>\n        {isRegulator && (\n          <IconButton\n            onClick={goToCreateVote}\n            renderIcon={() => <PlusSVG />}\n            margin={{ left: '16px' }}\n          >\n            Создать голосование\n          </IconButton>\n        )}\n        {isPasswordDialogButtonVisible() && (\n          <PasswordDialogButton margin={{ left: '16px' }} />\n        )}\n\n        {!isVoter && (\n          <IconButton\n            onClick={goToProfile}\n            margin={{ left: '16px' }}\n            renderIcon={() => <UserSVG />}\n          >\n            Профиль\n          </IconButton>\n        )}\n\n        {isVoter && <LogoutButton />}\n      </>\n    );\n  })\n);\n\nexport const PasswordDialogButton: typeof IconButton = observer(\n  function PasswordDialogButton({ style = {}, ...props }) {\n    const theme = useTheme();\n    const { actionModals, user } = useStores();\n    const isLaptopOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.laptopL\n    });\n    const isTabletOrWider = useMediaQuery({ minWidth: breakpoints.tablet });\n\n    useEffect(() => {\n      if (\n        isLaptopOrWider &&\n        user.isAuthorized &&\n        user.roles.includes('VOTER') &&\n        !user.encryptPassword\n      ) {\n        displayEncryptPassModal();\n      }\n    }, [user.isAuthorized, user.encryptPassword, user.roles, isLaptopOrWider]);\n\n    const modalSuccessfulEncrypt = (): void => {\n      actionModals.open(\n        () => (\n          <Text size=\"xlarge\" bold style={{ marginBottom: '30px' }}>\n            История вашего голосования доступна для отображения\n          </Text>\n        ),\n        {\n          isOverlayClose: true,\n          setTimeCloseModal: 15000,\n          width: isLaptopOrWider ? '384px' : '100%',\n          modalStyle: {\n            maxWidth: isTabletOrWider ? '545px' : '100vw'\n          },\n          overlayStyle: {\n            padding: '32px 16px',\n            alignItems: isLaptopOrWider ? 'flex-end' : 'center'\n          }\n        }\n      );\n    };\n\n    const displayEncryptPassModal = () => {\n      actionModals.open(EncryptPasswordModal, {\n        width: isLaptopOrWider ? '384px' : '100%',\n        applyText: () =>\n          !user.encryptedContent ? <>Создать</> : <>Подтвердить</>,\n        closeText: () => <>Отмена</>,\n        noValidation: true,\n        onApply: async data => {\n          await user.saveEncryptPassword(data.password);\n          modalSuccessfulEncrypt();\n        },\n        overlayStyle: {\n          background: isLaptopOrWider ? 'transparent' : 'rgba(10, 6, 6, 0.5)',\n          alignItems: isLaptopOrWider ? 'flex-end' : 'center',\n          padding: '32px 16px'\n        },\n        modalStyle: {\n          boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04)',\n          position: isLaptopOrWider ? 'absolute' : 'relative',\n          top: isLaptopOrWider ? 72 : 'auto',\n          right: isLaptopOrWider ? 72 : 'auto',\n          maxWidth: '482px',\n          margin: 'auto',\n          marginTop: isLaptopOrWider ? 'auto' : '32px'\n        },\n        isOverlayClose: true\n      });\n    };\n\n    return (\n      <IconButton\n        onClick={() => {\n          displayEncryptPassModal();\n        }}\n        style={{\n          height: 'unset',\n          whiteSpace: 'normal',\n          padding: '4px 8px',\n          ...style\n        }}\n        {...props}\n      >\n        <Box\n          direction=\"row\"\n          align=\"center\"\n          style={{\n            color: theme.palette.Yellow,\n            height: 'unset'\n          }}\n        >\n          <Icon glyph=\"Alert\" size=\"14px\" style={{ marginRight: 5 }} />\n          <span\n            style={{\n              lineHeight: '16px'\n            }}\n          >\n            {!user.encryptedContent\n              ? 'Создайте пароль для просмотра истории'\n              : 'Введите пароль для просмотра истории'}\n          </span>\n        </Box>\n      </IconButton>\n    );\n  }\n);\n","import styled from 'styled-components';\nimport { Box } from 'grommet';\n\nexport const HeaderContainer = styled(Box)`\n  background-color: ${props => props.theme.palette.White};\n  overflow: visible;\n  position: sticky;\n  top: 0;\n  z-index: 2;\n  box-shadow: 0px 4px 8px rgba(10, 6, 6, 0.04);\n`;\n","import styled from 'styled-components';\nimport { ITabProps } from '.';\nimport { IStyledProps } from 'themes';\n\ninterface ITabContainerProps {\n  active: boolean;\n}\n\nexport const TabContainer = styled.div<\n  ITabContainerProps & ITabProps & IStyledProps\n>`\n  display: flex;\n  align-items: center;\n  font-size: 13px;\n  font-weight: 500;\n  font-style: normal;\n  font-stretch: normal;\n  line-height: normal;\n  cursor: pointer;\n  border-bottom: 2px solid transparent;\n\n  &:hover {\n    background-color: ${(props: IStyledProps) => props.theme.palette.Basic200};\n  }\n\n  &:first-child {\n    border-radius: 2px 0 0 2px;\n  }\n\n  &:last-child {\n    border-radius: 0 2px 2px 0;\n  }\n\n  ${(props: ITabContainerProps & IStyledProps) =>\n    props.active\n      ? `\n    border-bottom: 2px solid ${props.theme.palette.Purple};\n    color: ${props.theme.palette.BlackText};\n  `\n      : ` \n    color: ${props.theme.palette.GreyText};\n  `}\n\n  ${(props: ITabContainerProps & ITabProps & IStyledProps) =>\n    props.small &&\n    `\n    height: auto;\n    padding: 10px 8px 10px 8px; \n    font-size: 14px; \n    letter-spacing: 3px;\n  `}\n`;\n\nexport const TabItem = styled.div`\n  display: flex;\n  align-items: center;\n  padding: 0 15px;\n  height: 100%;\n`;\n\nexport const SubTabContainer = styled.div`\n  position: absolute;\n  margin-top: 3px;\n  width: 280px;\n  border-radius: 4px;\n  box-shadow: 8px 8px 8px 0\n    ${(props: IStyledProps) => props.theme.palette.LightGrey};\n  border: solid 1px ${(props: IStyledProps) => props.theme.palette.Basic200};\n  background-color: ${(props: IStyledProps) => props.theme.palette.White};\n  z-index: 999;\n`;\n\nexport const SubTabItem = styled.div<ITabContainerProps>`\n  display: flex;\n  display-direction: column;\n  height: 38px;\n  padding: 0px 31px;\n  align-items: center;\n\n  &:hover {\n    background-color: ${(props: IStyledProps) => props.theme.palette.Basic100};\n  }\n\n  ${(props: ITabContainerProps & IStyledProps) =>\n    props.active &&\n    `\n    padding: 0px 28px;\n    border-left: 3px solid ${props.theme.palette.Basic200};\n  `}\n`;\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { BoxProps } from 'grommet/es6';\nimport { TRole, PROJECT_STATUS } from 'interfaces';\nimport { useState, useCallback } from 'react';\nimport {\n  TabContainer,\n  TabItem,\n  SubTabContainer,\n  SubTabItem\n} from './components';\nimport styled, { withTheme } from 'styled-components';\nimport { IStyledProps } from 'themes';\n\nexport const Tabs: React.FC<IProps & BoxProps> = ({\n  onChange,\n  selected,\n  tabs,\n  small,\n  children,\n  projectsCount,\n  ...rest\n}) => {\n  return (\n    <Box direction=\"row\" {...rest}>\n      {tabs.map(item => (\n        <Tab\n          key={item.id}\n          onChange={onChange}\n          selected={selected}\n          small={small}\n          projectsCount={projectsCount}\n          {...item}\n        />\n      ))}\n      {children}\n    </Box>\n  );\n};\n\nconst CountTabProjects: React.FC<ICountTabProps> = ({\n  id,\n  projectsCount\n}): JSX.Element => {\n  let count;\n  if (projectsCount) {\n    if (id === 'ALL') {\n      count = Object.values(projectsCount).reduce(\n        (accumulator, current) => accumulator + current,\n        0\n      );\n    }\n    if (projectsCount[id]) {\n      count = projectsCount[id];\n    }\n  }\n  return count ? <span style={{ marginLeft: '2px' }}>({count})</span> : null;\n};\n\nconst Tab: React.FC<ITabProps & IStyledProps> = withTheme(\n  ({\n    selected,\n    id,\n    text,\n    onChange,\n    small,\n    children,\n    projectsCount,\n    disabled\n  }: ITabProps & IStyledProps) => {\n    const [showSubMenu, setShowSubMenu] = useState<boolean>(false);\n\n    const onClick = useCallback(\n      (id: string) => {\n        if (disabled) {\n          return;\n        }\n\n        id && onChange && onChange(id);\n        // if (!!children) {\n        //   setShowSubMenu(false);\n        // }\n      },\n      [showSubMenu, disabled]\n    );\n\n    const onMouseEnter = useCallback(() => {\n      if (!!children) {\n        setShowSubMenu(true);\n      }\n    }, [showSubMenu]);\n\n    const onMouseLeave = useCallback(() => {\n      setShowSubMenu(false);\n    }, [showSubMenu]);\n\n    return (\n      <TabContainer\n        active={\n          selected === id ||\n          (children && children.some(item => selected === item.id))\n        }\n        small={small}\n        onClick={() => onClick(id)}\n        // onMouseEnter={() => onMouseEnter()}\n        onMouseLeave={onMouseLeave}\n      >\n        <TabItem onMouseEnter={() => onMouseEnter()}>\n          <span>{text}</span>\n          <CountTabProjects id={id} projectsCount={projectsCount} />\n        </TabItem>\n        {showSubMenu && (\n          <SubTabContainer>\n            {children.map(item => (\n              <SubTabItem\n                key={item.id}\n                active={selected === item.id}\n                onClick={() => onClick(item.id)}\n              >\n                {item.text}\n              </SubTabItem>\n            ))}\n          </SubTabContainer>\n        )}\n      </TabContainer>\n    );\n  }\n);\n\nexport namespace Tabs {\n  export type TTabsProps = IProps;\n  export type TTabProps = ITabOptions;\n}\n\nexport interface ITabProps extends ITabOptions, React.ComponentProps<any> {\n  selected?: string;\n  onChange?: (id: string) => void;\n  small?: boolean;\n  projectsCount?: Record<PROJECT_STATUS, number>;\n}\n\nexport interface ITabOptions {\n  text: string | React.ReactNode;\n  id?: string;\n  disabled?: boolean;\n  roles?: TRole[];\n  children?: Array<ITabOptions>;\n  projectsCount?: Record<PROJECT_STATUS, number>;\n}\n\ninterface IProps {\n  selected?: string;\n  onChange?: (id: string) => void;\n  tabs: Array<ITabOptions>;\n  small?: boolean;\n  projectsCount?: Record<PROJECT_STATUS, number>;\n}\n\ninterface ICountTabProps {\n  id: string;\n  projectsCount?: Record<PROJECT_STATUS, number>;\n}\n\nexport const SlimTabs = styled(Tabs)`\n  height: auto;\n  max-width: 100%;\n  overflow-x: auto;\n\n  & ${TabItem} {\n    padding: 0;\n    height: 100%;\n    width: max-content;\n  }\n\n  & ${TabContainer} {\n    padding-bottom: 13px;\n\n    :not(:first-of-type) {\n      margin-left: 16px;\n    }\n  }\n`;\n","import { Routes } from 'constants/routes';\nimport { ITabOptions } from 'components';\nimport { ALL_ROLES } from '../../constants';\n\nexport const getRegulatorTabs = (): Array<ITabOptions> => {\n  return [\n    {\n      text: 'Голосования',\n      id: Routes.homeOrganizer,\n      roles: ALL_ROLES\n    },\n    {\n      text: 'Пользователи',\n      id: Routes.users,\n      roles: ['REGULATOR']\n    },\n    {\n      text: 'Архив',\n      id: Routes.archive,\n      roles: ['REGULATOR', 'VOTER']\n    }\n  ];\n};\n\nexport const getApplicantTabs = (): Array<ITabOptions> => {\n  return [\n    {\n      text: 'Мои проекты',\n      id: Routes.homeApplicant,\n      roles: ALL_ROLES\n    }\n  ];\n};\n\nexport const getVoterTabs = (): Array<ITabOptions> => {\n  return [\n    {\n      text: 'Голосования',\n      id: Routes.homeOrganizer,\n      roles: ALL_ROLES\n    },\n    {\n      text: 'Архив',\n      id: Routes.archive,\n      roles: ['REGULATOR', 'VOTER']\n    }\n  ];\n};\n","import * as React from 'react';\nimport logoSVG from './logo';\nimport styled, { withTheme } from 'styled-components';\nimport { BoxProps, Box } from 'grommet';\nimport { useStores } from 'stores';\nimport { observer } from 'mobx-react-lite';\nimport { useIsLoginRoute } from 'pages/utils';\nimport { TStyledChildrenProps } from 'interfaces';\nimport { UserMenu, PasswordDialogButton } from './UserMenu';\nimport { HeaderContainer } from './components';\nimport { SlimTabs } from 'components/Tabs';\nimport { getRegulatorTabs, getApplicantTabs, getVoterTabs } from '../getTabs';\nimport { getRootPathname } from 'utils';\nimport { useHistory, useLocation } from 'react-router-dom';\n\nexport const HeadCompact = withTheme(\n  observer(({ theme }: TStyledChildrenProps<BoxProps>) => {\n    const isLogin = useIsLoginRoute();\n    const { user } = useStores();\n    const { container } = theme;\n    const { minWidth, maxWidth } = container;\n    const history = useHistory();\n    const { pathname } = useLocation();\n\n    const isPasswordDialogButtonVisible = () =>\n      user.isContainRoles(['VOTER']) && !user.encryptPassword;\n\n    const getTabs = () => {\n      if (user.isContainRoles(['REGULATOR'])) {\n        return getRegulatorTabs();\n      }\n\n      if (user.isContainRoles(['APPLICANT'])) {\n        return getApplicantTabs();\n      }\n\n      if (user.isContainRoles(['VOTER'])) {\n        return getVoterTabs();\n      }\n\n      return [];\n    };\n\n    return (\n      <>\n        <CompactHeaderContainer>\n          <Box\n            direction=\"row\"\n            align=\"center\"\n            pad={{ horizontal: '8px' }}\n            style={{\n              minWidth,\n              maxWidth,\n              margin: '0 auto',\n              height: 44,\n              width: '100%'\n            }}\n          >\n            <Box style={{ marginRight: 20, height: 24 }}>\n              {logoSVG}\n            </Box>\n            <SlimTabs\n              height=\"100%\"\n              tabs={getTabs()}\n              selected={getRootPathname(pathname).replace('/', '')}\n              onChange={id => history.push(`/${id}`)}\n            />\n\n            {!isLogin && user.isAuthorized && (\n              <Box\n                direction=\"row\"\n                justify=\"end\"\n                align=\"center\"\n                margin={{ left: 'auto' }}\n              >\n                <UserMenu />\n              </Box>\n            )}\n          </Box>\n        </CompactHeaderContainer>\n\n        {isPasswordDialogButtonVisible() && (\n          <Box pad=\"16px 10px\">\n            <PasswordDialogButton />\n          </Box>\n        )}\n      </>\n    );\n  })\n);\n\nconst CompactHeaderContainer = styled(HeaderContainer)`\n  ${SlimTabs} {\n    margin-top: auto;\n  }\n`;\n","import * as React from 'react';\nimport logoSVG from './logo';\nimport { withTheme } from 'styled-components';\nimport { BoxProps, Box } from 'grommet';\nimport { useStores } from 'stores';\nimport { observer } from 'mobx-react-lite';\nimport { useIsLoginRoute } from 'pages/utils';\nimport { TStyledChildrenProps } from 'interfaces';\nimport { Tabs } from 'components';\nimport { useLocation, useHistory } from 'react-router';\nimport { getApplicantTabs, getRegulatorTabs, getVoterTabs } from '../getTabs';\nimport { getRootPathname } from 'utils';\nimport { HeaderContainer } from './components';\nimport { UserMenu } from './UserMenu';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\n\nexport const HeadWide = withTheme(\n  observer(({ theme }: TStyledChildrenProps<BoxProps>) => {\n    const history = useHistory();\n    const isLogin = useIsLoginRoute();\n    const { user } = useStores();\n    const { palette, container } = theme;\n    const { minWidth, maxWidth } = container;\n    const { pathname } = useLocation();\n\n    const isLaptopOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.laptopL\n    });\n\n    const getTabs = () => {\n      if (user.isContainRoles(['REGULATOR'])) {\n        return getRegulatorTabs();\n      }\n\n      if (user.isContainRoles(['APPLICANT'])) {\n        return getApplicantTabs();\n      }\n\n      if (user.isContainRoles(['VOTER'])) {\n        return getVoterTabs();\n      }\n\n      return [];\n    };\n\n    return (\n      <HeaderContainer\n        style={{\n          background: palette.White,\n          overflow: 'visible',\n          position: 'sticky',\n          top: 0,\n          zIndex: 2,\n          boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04)'\n        }}\n      >\n        <Box\n          direction=\"row\"\n          align=\"center\"\n          pad={{ horizontal: '32px' }}\n          style={{\n            minWidth,\n            maxWidth,\n            margin: '0 auto',\n            height: 56,\n            width: '100%'\n          }}\n        >\n          <Box style={{ marginRight: 20, height: 24 }}>\n            {logoSVG}\n          </Box>\n\n          {isLaptopOrWider && (\n            <Tabs\n              height=\"100%\"\n              tabs={getTabs()}\n              selected={getRootPathname(pathname).replace('/', '')}\n              onChange={id => history.push(`/${id}`)}\n            />\n          )}\n\n          {!isLogin && user.isAuthorized && (\n            <Box\n              direction=\"row\"\n              justify=\"end\"\n              align=\"center\"\n              style={{ flex: '1 0 auto' }}\n            >\n              <UserMenu />\n            </Box>\n          )}\n        </Box>\n      </HeaderContainer>\n    );\n  })\n);\n","import * as React from 'react';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\nimport { HeadCompact } from './components/compact';\nimport { HeadWide } from './components/wide';\n\nexport function Head() {\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  if (isTabletOrWider) {\n    return <HeadWide />;\n  }\n\n  return <HeadCompact />;\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport { ModalView } from 'ui/Modal';\n\nexport const Modals = observer(() => {\n  const { modals, actionModals } = useStores();\n  const { render, options = {} } = modals;\n\n  if (!render) {\n    return null;\n  }\n\n  const {\n    width = '700px',\n    position = 'center',\n    isOverlayClose = false\n  } = options;\n\n  return (\n    <ModalView\n      width={width}\n      position={position}\n      isOverlayClose={isOverlayClose}\n      onClose={() => modals.closeModal()}\n      style={{ visibility: actionModals.pool.length ? 'hidden' : 'visible' }}\n    >\n      {render()}\n    </ModalView>\n  );\n});\n","import * as React from 'react';\nimport { Box, BoxProps } from 'grommet';\nimport { Title } from '@we-ui-components/base';\nimport { CloseIcon, breakpoints } from 'ui';\nimport { CSSProperties } from 'react';\nimport { useMediaQuery } from 'react-responsive';\n\nexport const Header: React.FC<{\n  onClose: () => void;\n  title: string;\n  pending: boolean;\n  style?: CSSProperties;\n} & BoxProps> = ({ onClose, title, pending, ...props }) => {\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  return (\n    <Box\n      direction=\"row\"\n      justify=\"between\"\n      align=\"start\"\n      pad=\"28px 28px 12px 32px\"\n      {...props}\n    >\n      <Box direction=\"row\">\n        <Title\n          size={isTabletOrWider ? 'medium' : '24px'}\n          bold\n          style={{ marginRight: 16, marginTop: 19, maxWidth: '500px' }}\n        >\n          {title}\n        </Title>\n      </Box>\n      <CloseIcon\n        hover={true}\n        style={{ cursor: 'pointer' }}\n        onClick={onClose}\n        size=\"medium\"\n      />\n    </Box>\n  );\n};\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport { ModalView, breakpoints } from 'ui';\nimport { ActionModalConfig } from 'stores/ActionModalsStore';\nimport { useMemo, useRef } from 'react';\nimport { observable } from 'mobx';\nimport { ButtonEx, Error } from 'ui';\nimport { Header } from './Header';\nimport { withTheme } from 'styled-components';\nimport { IStyledProps } from 'themes';\nimport { Box } from 'grommet';\n\nexport type TActionModalProps<T = any> = {\n  config: ActionModalConfig;\n  actionData: TActionDataType<T>;\n  style?: any;\n  ref: any;\n  onValidate: {\n    callback?: () => Promise<any>;\n  };\n};\n\nexport type TActionDataType<T = any> = {\n  isValid: boolean;\n  data?: T;\n};\n\nfunction isClassComponent(component: any) {\n  return (\n    (!!component.prototype && !!component.prototype.isReactComponent) ||\n    typeof component !== 'function'\n  );\n}\n\nexport const ActionModal = withTheme(\n  observer<\n    {\n      config: ActionModalConfig;\n      visible: boolean;\n    } & IStyledProps\n  >(({ config, visible, theme }) => {\n    const { actionModals } = useStores();\n    const { bodyRender: BodyRender, options, id } = config;\n    const actionData = useMemo(\n      () =>\n        observable({\n          isValid: config.options.noValidation,\n          data: config.options.initData || {}\n        }),\n      []\n    );\n\n    const bodyRef = useRef<{ onValidate?: () => Promise<any> }>();\n\n    const onValidate: { callback?: () => Promise<any> } = useMemo(\n      () => ({}),\n      []\n    );\n\n    const {\n      width = '600px',\n      position = 'center',\n      isOverlayClose,\n      overlayStyle,\n      modalStyle,\n      actionsContainerStyle = {}\n    } = options;\n\n    const onClose = () => actionModals.close(id);\n\n    const isActionLoading = config.actionStatus === 'fetching';\n\n    const onApply = (data: any) => {\n      config.actionStatus = 'fetching';\n\n      return options.onApply(data).then(res => {\n        config.actionStatus = 'success';\n\n        return res;\n      });\n    };\n\n    return (\n      <ModalView\n        width={width}\n        position={position}\n        onClose={onClose}\n        isOverlayClose={isOverlayClose}\n        overlayStyle={overlayStyle}\n        modalStyle={modalStyle}\n        style={{ visibility: visible ? 'visible' : 'hidden' }}\n      >\n        <Header\n          title={options.title}\n          onClose={onClose}\n          pending={isActionLoading}\n          //style={{ borderBottom: `1px solid ${theme.palette.Basic200}` }}\n        />\n        <Box pad={{ horizontal: '32px' }}>\n          {!isClassComponent(BodyRender) ? (\n            BodyRender({ actionData, config })\n          ) : (\n            <BodyRender\n              actionData={actionData}\n              config={config}\n              ref={bodyRef}\n              onValidate={onValidate}\n            />\n          )}\n        </Box>\n        {(options.closeText || options.applyText) && (\n          <Box pad=\"24px 32px 32px 32px\">\n            {config.error && !isActionLoading && <Error error={config.error} />}\n            <Box\n              justify=\"between\"\n              direction=\"row\"\n              //style={{ borderTop: `1px solid ${theme.palette.Basic200}` }}\n            >\n              <Box\n                direction=\"row\"\n                justify=\"end\"\n                align=\"center\"\n                fill={true}\n                style={actionsContainerStyle}\n              >\n                {options.closeText && (\n                  <ButtonEx\n                    size=\"auto\"\n                    fontSize=\"16px\"\n                    transparent\n                    style={{\n                      padding: '11px 20px',\n                      marginRight: 16,\n                      height: 40\n                    }}\n                    onClick={onClose}\n                    color=\"Black\"\n                    disabled={isActionLoading}\n                  >\n                    {options.closeText({})}\n                  </ButtonEx>\n                )}\n                {options.applyText && (\n                  <ButtonEx\n                    style={{\n                      padding: '12px 20px',\n                      height: 40\n                    }}\n                    fontSize=\"16px\"\n                    size=\"auto\"\n                    {...options.applyButtonProps}\n                    textRender={options.applyIcon && options.applyIcon({})}\n                    onClick={(): void => {\n                      if (\n                        bodyRef &&\n                        bodyRef.current &&\n                        bodyRef.current.onValidate\n                      ) {\n                        bodyRef.current\n                          .onValidate()\n                          .then(onApply)\n                          .catch((err: any) => {\n                            config.actionStatus = 'error';\n                            actionModals.rejectError(err);\n                            throw err;\n                          });\n                      } else {\n                        onApply(actionData.data);\n                      }\n                    }}\n                    disabled={!actionData.isValid}\n                    isLoading={isActionLoading}\n                  >\n                    {options.applyText({})}\n                  </ButtonEx>\n                )}\n              </Box>\n              <Box>\n                {options.additionalText && <>{options.additionalText({})}</>}\n              </Box>\n            </Box>\n          </Box>\n        )}\n      </ModalView>\n    );\n  })\n);\n\nexport const ActionModals = observer(() => {\n  const { actionModals } = useStores();\n  return (\n    <>\n      {actionModals.pool.map((config, idx) => (\n        <ActionModal\n          key={config.id}\n          config={config}\n          visible={actionModals.pool.length - 1 === idx}\n        />\n      ))}\n    </>\n  );\n});\n","import * as React from 'react';\nimport { Box, BoxProps } from 'grommet';\nimport { TStyledChildrenProps } from 'interfaces';\nimport { withTheme } from 'styled-components';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport { useRef, useEffect } from 'react';\n\nexport const PageContainer = withTheme(\n  observer(({ children, theme, ...props }: TStyledChildrenProps<BoxProps>) => {\n    const { user } = useStores();\n    const { container } = theme;\n    const { minWidth, maxWidth } = container;\n\n    useEffect(() => {\n      scrollHandler();\n    }, []);\n\n    const scrollHandler = () => {\n      const scrollY = refDiv.current.getBoundingClientRect().top - 56;\n      user.isPageScrolling = scrollY !== 0;\n    };\n\n    const refDiv = useRef(null);\n\n    return (\n      <Box\n        style={{\n          minWidth,\n          maxWidth,\n          width: '100%',\n          minHeight: 'calc(100vh - 56px)'\n        }}\n        onScroll={scrollHandler}\n        {...props}\n      >\n        <div\n          ref={refDiv}\n          style={{\n            flex: 1,\n            display: 'flex',\n            flexDirection: 'column',\n            justifyContent: 'normal'\n          }}\n        >\n          {children}\n        </div>\n      </Box>\n    );\n  })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport { AuthStatus } from 'stores/UserStore';\nimport { statusFetching } from '../../constants';\n\ninterface AuthenticationGuardProps {\n  render: (props: { status?: AuthStatus }) => React.ReactNode;\n}\n\nexport const AuthenticationGuard = observer(function AuthenticationGuard({\n  render\n}: AuthenticationGuardProps) {\n  const { user, catalogs } = useStores();\n\n  const prevStatus = React.useRef<statusFetching>();\n\n  React.useEffect(() => {\n    prevStatus.current = user.status;\n  }, [user.status]);\n\n  if (\n    user.status === 'fetching' ||\n    (user.authStatus === 'authorized' && catalogs.fetchStatus === 'init')\n  ) {\n    return null;\n  }\n\n  return (\n    <>\n      {render({\n        status: user.authStatus\n      })}\n    </>\n  );\n});\n","import * as React from 'react';\nimport {\n  Redirect,\n  RedirectProps,\n  Route,\n  RouteProps,\n  useLocation\n} from 'react-router';\nimport { useStores } from 'stores';\nimport { observer } from 'mobx-react-lite';\nimport { TRole } from 'interfaces';\n\nexport const RoleRoute: React.FC<IRedirect & {\n  roles: Array<TRole>;\n} & RouteProps> = observer(props => {\n  const { roles, ...rest } = props;\n  const { user } = useStores();\n  return (\n    <ConditionRouter\n      condition={roles.length ? user.isContainOneOfRoles(roles) : true}\n      {...rest}\n    />\n  );\n});\n\nexport const ConditionRouter = ({\n  condition,\n  redirect,\n  ...rest\n}: TConditionRoute) =>\n  condition ? <Route {...rest} /> : <RedirectEx to={redirect || '/'} />;\n\nexport const RoleRedirect = observer(({ rolesOptions }: TRoleRedirect) => {\n  const { user } = useStores();\n  const redirectProps = rolesOptions.find(\n    (item: TRolesOptions) => !item.roles || user.isContainOneOfRoles(item.roles)\n  );\n  return redirectProps && <RedirectEx {...redirectProps} />;\n});\n\ntype TConditionRoute = IRedirect & ICondition & RouteProps;\ntype TRolesOptions = { roles?: TRole[]; to: string };\ntype TRoleRedirect = Partial<RedirectProps> & {\n  rolesOptions: Array<TRolesOptions>;\n};\n\nexport const RedirectEx: React.FC<RedirectProps> = observer(({ ...props }) => {\n  const { user } = useStores();\n  const { pathname, search } = useLocation();\n\n  user.saveRedirectUrl(pathname + search);\n\n  return <Redirect {...props} />;\n});\n\ninterface IRedirect {\n  redirect?: string;\n}\n\ninterface ICondition {\n  condition?: boolean;\n}\n\nexport * from './AuthenticationGuard';\n","import * as React from 'react';\nimport arrowTopSVG from './arrow-top.svg';\nimport { Box, BoxProps } from 'grommet';\nimport { CSSProperties, useEffect, useContext } from 'react';\nimport { observer } from 'mobx-react';\nimport { TStoreProps, IColumn } from 'interfaces';\nimport { Table } from '@we-ui-components/rc-table';\nimport { ITheme } from 'themes';\nimport { ThemeContext } from 'styled-components';\nimport { Pagination } from './components/pagination';\nimport unsortSVG from './unsort.svg';\n\ninterface ICommonTableProps<S> extends BoxProps, TStoreProps<S> {\n  style?: CSSProperties;\n  emptyListText?: string;\n  columns: IColumn[];\n  onRowClicked?: (rowData: S) => void;\n  customItem?: {\n    render:\n      | React.FunctionComponent<{\n          params: S;\n        }>\n      | React.ComponentClass<{\n          params: S;\n        }>;\n    bodyStyle?: any;\n    bodyClassName?: string;\n    dir?: 'row' | 'column';\n    wrap?: 'wrap' | 'nowrap';\n    wrapMargin?: string;\n  };\n  suppressInitialFetch?: boolean;\n  suppressInitialization?: boolean;\n}\n\nexport const CommonTable = observer(\n  <S extends object>({\n    store,\n    columns,\n    onRowClicked,\n    customItem,\n    emptyListText,\n    suppressInitialFetch = false,\n    suppressInitialization = false\n  }: ICommonTableProps<S>) => {\n    const theme: ITheme = useContext(ThemeContext);\n    const [tableFetchFired, setTableFetchFired] = React.useState(false);\n\n    const onChangeDataFlow = (props: any) => {\n      const shouldBeIgnored = () => suppressInitialFetch && !tableFetchFired;\n      const allowChangeDataFlow = () => setTableFetchFired(true);\n\n      if (shouldBeIgnored()) {\n        // ignore first `onChangeDataFlow` call (which comes from RcTable)\n        allowChangeDataFlow();\n      } else {\n        store.onChangeDataFlow(props);\n      }\n    };\n\n    useEffect(() => {\n      if (!suppressInitialization) {\n        store.init();\n\n        return () => store.clear();\n      }\n    }, []);\n\n    return (\n      <>\n        {store.fetchStatus !== 'init' &&\n        store.fetchStatus !== 'fetching' &&\n        !store.data.length ? (\n          <Box\n            fill={true}\n            background={theme.palette.White}\n            pad=\"medium\"\n            margin={{ vertical: 'medium' }}\n            align=\"center\"\n          >\n            {emptyListText || 'Не найдено записей по данному запросу'}\n          </Box>\n        ) : null}\n        <Table\n          columns={[]}\n          data={store.data}\n          isPending={store.isPending}\n          onChangeDataFlow={onChangeDataFlow}\n          dataLayerConfig={store.dataFlow}\n          customItem={customItem}\n        />\n      </>\n    );\n  }\n);\n","import * as React from 'react';\nimport e500SVG from './500.svg';\nimport refreshSVG from './refresh.svg';\nimport { Box } from 'grommet';\nimport { Error } from 'ui';\nimport { CSSProperties } from 'react';\nimport { Title, Text, Button } from '@we-ui-components/base';\nimport { useHistory } from 'react-router';\nimport { useStores } from 'stores/index';\nimport { observer } from 'mobx-react-lite';\n\ntype TPageErrorType = 'unknown' | '404' | '500';\n\nexport const PageError = observer(\n  ({ error, style, ...rest }: { error: any; style?: CSSProperties }) => {\n    const { user } = useStores();\n\n    const isRegulatorOrVoter = user.isContainOneOfRoles(['REGULATOR', 'VOTER']);\n    const isApplicant = user.isContainOneOfRoles(['APPLICANT']);\n\n    let titleText = '';\n    let descriptionText = '';\n    let buttonText = '';\n    let type: TPageErrorType = 'unknown';\n    if (typeof error === 'object') {\n      if ('status' in error) {\n        if (error.status === 404) {\n          type = '404';\n          titleText = 'Данная страница отсутствует';\n          descriptionText =\n            'Запрашиваемой страницы не существует. Возможно, она была удалена или в запросе указан неверный адрес страницы.';\n          if (isApplicant) {\n            buttonText = 'Перейти к списку проектов';\n          } else if (isRegulatorOrVoter) {\n            buttonText = 'Перейти к голосованиям';\n          } else buttonText = 'Вернутся обратно';\n        }\n        if (error.status === 500) {\n          type = '500';\n          titleText = 'Что-то пошло не так';\n          descriptionText =\n            'Сервис временно недоступен, попробуйте еще раз через несколько минут.';\n          buttonText = 'Обновить страницу';\n        }\n      }\n    }\n\n    const history = useHistory();\n\n    const onClick = () => {\n      if (type === '404') {\n        history.push(`/`);\n      }\n      if (type === '500') {\n        window.location.reload();\n      }\n    };\n\n    return (\n      <Box align=\"center\" justify=\"center\">\n        <Box\n          align=\"center\"\n          width=\"770px\"\n          style={{ marginTop: 50, padding: '0px 120px 50px 120px' }}\n          {...rest}\n        >\n          {type === 'unknown' ? (\n            <Error error={error} />\n          ) : (\n            <>\n              <Title bold style={{ marginBottom: 20 }}>\n                {titleText}\n              </Title>\n              <Text\n                size=\"xsmall\"\n                margin={{ vertical: 'small' }}\n                style={{ textAlign: 'center' }}\n              >\n                {descriptionText}\n              </Text>\n              <img src={e500SVG} alt=\"error\" />\n              <Button\n                onClick={onClick}\n              >\n                {type === '500' && (\n                  <img src={refreshSVG} style={{ marginRight: 13 }} alt=\"\" />\n                )}\n                {buttonText}\n              </Button>\n            </>\n          )}\n        </Box>\n      </Box>\n    );\n  }\n);\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjI0MCIgdmlld0JveD0iMCAwIDMyMCAyNDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yODguNjQyIDExMy44ODNDMzAxLjQwNSAxMTMuODgzIDMwNy41NDggMTIzLjk1MyAzMDkuODQzIDEzMS42NzZDMzEwLjU1IDEzNC4wNTUgMzA4LjYzMSAxMzYuMjM2IDMwNi4xNSAxMzYuMjM2SDI1OS44NDRDMjU2LjM3NSAxMzYuMjM2IDI1NC41NzYgMTMyLjMyIDI1Ny4wNzkgMTI5LjkxOEMyNjQuODAxIDEyMi41MSAyNzYuODI4IDExMy44ODMgMjg4LjY0MiAxMTMuODgzWiIgZmlsbD0iI0Y2RjdGOCIvPgo8cGF0aCBkPSJNNzIuNzY2MyA4OS44NDI5SDE2Ny42MDVDMTcxLjg3NyA4OS44NDI5IDE3NS4xNjQgODUuODcyNCAxNzIuOTY4IDgyLjIwODRDMTY4Ljg0NCA3NS4zMzAyIDE2MS4zMSA3MS4zNzMzIDE1My45NDQgNzAuODk2MkMxNDkuOTk2IDcwLjY0MDQgMTQ1Ljk2OSA2OC4yNzQxIDE0My43MDYgNjUuMDI4M0MxMzYuODU1IDU1LjE5NzQgMTIwLjQ0NSA0NyAxMDQuMDM0IDQ3QzgwLjg4NTUgNDcgNjguOTYxMSA2Ni4wMDk1IDY2LjQxMTUgODIuOTkwN0M2NS44NDczIDg2Ljc0ODEgNjguOTY2OCA4OS44NDI5IDcyLjc2NjMgODkuODQyOVoiIGZpbGw9IiNGNkY3RjgiLz4KPHBhdGggZD0iTTIyMC41OTYgMTMwQzIwOS4yNDkgMTI4Ljc0OCAxNTkuNTA4IDEyNC44NTIgMTU5LjUwOCAxMjQuODUyQzExNy4yNDggMTIxLjg5OSAxMTkuMjA1IDE0My44NzggMTE5LjU5NiAxNTdDMTE5LjkzNiAxNjguMzkxIDEyNC4wOTYgMjI3IDEyNC4wOTYgMjI3SDI1OS43MjVDMjU5LjcyNSAyMjcgMjU5LjcyNSAxNzIuMTY0IDI1OS43MjUgMTU5LjVDMjU5LjcyNSAxMzcuMTA5IDIzNS40NjUgMTMxLjY0IDIyMC41OTYgMTMwWiIgZmlsbD0iI0Q2RERFMiIvPgo8cGF0aCBkPSJNMjEwLjU5NiAxMjlMMTcwLjA5NiAxMjUuNUwxNzMuNTk2IDE2NS41TDIxMC41OTYgMTI5WiIgZmlsbD0iI0Y2RjdGOCIvPgo8cGF0aCBkPSJNMTY3LjU5NiAxNzEuNUwxNzMuODEgMTY1LjVNMjEwLjU5NiAxMjlMMTczLjgxIDE2NS41TTE3My44MSAxNjUuNUwxNzAuMDk2IDEyNiIgc3Ryb2tlPSIjMTgyOTNEIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTIzNi45MzEgMTY0TDI2NC41OTYgMjAwLjQyNkgyMjcuNzA5IiBzdHJva2U9IiNENkRERTIiIHN0cm9rZS13aWR0aD0iNTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9iKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjIwLjc4MyAyMjYuNDA2QzIyNS4zOTQgMjI2LjQwNiAyMzAuOTI3IDIyMy42NCAyMzAuOTI3IDIxNC44NzlDMjMwLjkyNyAyMDguNDI0IDIyNi4zMTYgMjAyLjQzIDIxOS44NjEgMjAyLjQzQzIxMy40MDYgMjAyLjQzIDIwOC41NzMgMjAyLjQzIDIwNC40MjYgMjAzLjQ0OUwxOTQuNzI2IDIwNi41OTVDMTg1LjU2NyAyMDkuNDUzIDE3Ni40NjEgMjEyLjQzNCAxNjcuMzc0IDIxNS41NzFDMTY1Ljc1OCAyMTYuMTI5IDE2NC43MjkgMjE3LjYxOCAxNjQuNjggMjE5LjIzMUMxNjMuODA3IDIyMC4wNTYgMTYzLjMxNSAyMjEuMjY0IDE2My40NDggMjIyLjU1MUMxNjMuNjc1IDIyNC43NDggMTY1LjY0IDIyNi4zNDUgMTY3LjgzOCAyMjYuMTE4TDE3Mi4wOTkgMjI1LjY3OEMxNzIuNzU0IDIyNi4xNDggMTczLjU1OCAyMjYuNDI1IDE3NC40MjYgMjI2LjQyNUwxOTguNDI2IDIyNi40MjVDMTk4LjU1NiAyMjYuNDI1IDE5OC42ODQgMjI2LjQxOCAxOTguODExIDIyNi40MDZMMjIwLjc4MyAyMjYuNDA2WiIgZmlsbD0iI0ZDQkQ5QSIvPgo8cGF0aCBkPSJNMjMwLjkyNyAyMTQuODc5TDIzMC40MjcgMjE0Ljg3OUwyMzAuNDI3IDIxNC44NzlMMjMwLjkyNyAyMTQuODc5Wk0yMjAuNzgzIDIyNi40MDZMMjIwLjc4MyAyMjYuOTA2TDIyMC43ODMgMjI2LjkwNkwyMjAuNzgzIDIyNi40MDZaTTIxOS44NjEgMjAyLjQzTDIxOS44NjEgMjAxLjkzTDIxOS44NjEgMjAxLjkzTDIxOS44NjEgMjAyLjQzWk0yMDQuNDI2IDIwMy40NDlMMjA0LjI3MiAyMDIuOTczTDIwNC4yODkgMjAyLjk2OEwyMDQuMzA3IDIwMi45NjRMMjA0LjQyNiAyMDMuNDQ5Wk0xOTQuNzI2IDIwNi41OTVMMTk0Ljg4MSAyMDcuMDcxTDE5NC44NzUgMjA3LjA3MkwxOTQuNzI2IDIwNi41OTVaTTE2Ny4zNzQgMjE1LjU3MUwxNjcuNTM3IDIxNi4wNDRMMTY3LjUzNyAyMTYuMDQ0TDE2Ny4zNzQgMjE1LjU3MVpNMTY0LjY4IDIxOS4yMzFMMTY1LjE4IDIxOS4yNDZMMTY1LjE3NCAyMTkuNDUzTDE2NS4wMjQgMjE5LjU5NEwxNjQuNjggMjE5LjIzMVpNMTYzLjQ0OCAyMjIuNTUxTDE2Mi45NSAyMjIuNjAyTDE2Mi45NSAyMjIuNjAyTDE2My40NDggMjIyLjU1MVpNMTY3LjgzOCAyMjYuMTE4TDE2Ny43ODYgMjI1LjYyMUwxNjcuNzg2IDIyNS42MjFMMTY3LjgzOCAyMjYuMTE4Wk0xNzIuMDk5IDIyNS42NzhMMTcyLjA0NyAyMjUuMThMMTcyLjIzNiAyMjUuMTYxTDE3Mi4zOSAyMjUuMjcxTDE3Mi4wOTkgMjI1LjY3OFpNMTc0LjQyNiAyMjYuNDI1TDE3NC40MjYgMjI1LjkyNUwxNzQuNDI2IDIyNS45MjVMMTc0LjQyNiAyMjYuNDI1Wk0xOTguNDI2IDIyNi40MjVMMTk4LjQyNiAyMjYuOTI1TDE5OC40MjYgMjI2LjkyNUwxOTguNDI2IDIyNi40MjVaTTE5OC44MTEgMjI2LjQwNkwxOTguNzY0IDIyNS45MDlMMTk4Ljc4NyAyMjUuOTA2TDE5OC44MTEgMjI1LjkwNkwxOTguODExIDIyNi40MDZaTTIzMS40MjcgMjE0Ljg3OUMyMzEuNDI3IDIxOS4zNzEgMjMwLjAwNCAyMjIuMzk4IDIyNy45MjEgMjI0LjI5N0MyMjUuODQ4IDIyNi4xODcgMjIzLjE4MSAyMjYuOTA2IDIyMC43ODMgMjI2LjkwNkwyMjAuNzgzIDIyNS45MDZDMjIyLjk5NiAyMjUuOTA2IDIyNS40MDEgMjI1LjI0MiAyMjcuMjQ3IDIyMy41NThDMjI5LjA4MyAyMjEuODg1IDIzMC40MjcgMjE5LjE0OCAyMzAuNDI3IDIxNC44NzlMMjMxLjQyNyAyMTQuODc5Wk0yMTkuODYxIDIwMS45M0MyMjYuNjY1IDIwMS45MyAyMzEuNDI3IDIwOC4yMjcgMjMxLjQyNyAyMTQuODc5TDIzMC40MjcgMjE0Ljg3OUMyMzAuNDI3IDIwOC42MjEgMjI1Ljk2NyAyMDIuOTMgMjE5Ljg2MSAyMDIuOTNMMjE5Ljg2MSAyMDEuOTNaTTIwNC4zMDcgMjAyLjk2NEMyMDguNTI2IDIwMS45MjcgMjEzLjQyNiAyMDEuOTMgMjE5Ljg2MSAyMDEuOTNMMjE5Ljg2MSAyMDIuOTNDMjEzLjM4NSAyMDIuOTMgMjA4LjYyMSAyMDIuOTMzIDIwNC41NDYgMjAzLjkzNUwyMDQuMzA3IDIwMi45NjRaTTE5NC41NzIgMjA2LjExOUwyMDQuMjcyIDIwMi45NzNMMjA0LjU4MSAyMDMuOTI1TDE5NC44ODEgMjA3LjA3MUwxOTQuNTcyIDIwNi4xMTlaTTE5NC44NzUgMjA3LjA3MkMxODUuNzIxIDIwOS45MjkgMTc2LjYxOSAyMTIuOTA5IDE2Ny41MzcgMjE2LjA0NEwxNjcuMjExIDIxNS4wOThDMTc2LjMwMyAyMTEuOTYgMTg1LjQxNCAyMDguOTc3IDE5NC41NzcgMjA2LjExOEwxOTQuODc1IDIwNy4wNzJaTTE2Ny41MzcgMjE2LjA0NEMxNjYuMTI0IDIxNi41MzEgMTY1LjIyMyAyMTcuODM0IDE2NS4xOCAyMTkuMjQ2TDE2NC4xOCAyMTkuMjE2QzE2NC4yMzUgMjE3LjQwMiAxNjUuMzkyIDIxNS43MjYgMTY3LjIxMSAyMTUuMDk4TDE2Ny41MzcgMjE2LjA0NFpNMTY1LjAyNCAyMTkuNTk0QzE2NC4yNTkgMjIwLjMxNyAxNjMuODI5IDIyMS4zNzQgMTYzLjk0NSAyMjIuNDk5TDE2Mi45NSAyMjIuNjAyQzE2Mi44MDEgMjIxLjE1NCAxNjMuMzU2IDIxOS43OTUgMTY0LjMzNyAyMTguODY4TDE2NS4wMjQgMjE5LjU5NFpNMTYzLjk0NSAyMjIuNDk5QzE2NC4xNDQgMjI0LjQyMiAxNjUuODY0IDIyNS44MiAxNjcuNzg2IDIyNS42MjFMMTY3Ljg4OSAyMjYuNjE2QzE2NS40MTcgMjI2Ljg3MSAxNjMuMjA2IDIyNS4wNzQgMTYyLjk1IDIyMi42MDJMMTYzLjk0NSAyMjIuNDk5Wk0xNjcuNzg2IDIyNS42MjFMMTcyLjA0NyAyMjUuMThMMTcyLjE1IDIyNi4xNzVMMTY3Ljg4OSAyMjYuNjE2TDE2Ny43ODYgMjI1LjYyMVpNMTcyLjM5IDIyNS4yNzFDMTcyLjk2MyAyMjUuNjgzIDE3My42NjYgMjI1LjkyNSAxNzQuNDI2IDIyNS45MjVWMjI2LjkyNUMxNzMuNDUgMjI2LjkyNSAxNzIuNTQ1IDIyNi42MTMgMTcxLjgwNyAyMjYuMDg0TDE3Mi4zOSAyMjUuMjcxWk0xNzQuNDI2IDIyNS45MjVMMTk4LjQyNiAyMjUuOTI1TDE5OC40MjYgMjI2LjkyNUwxNzQuNDI2IDIyNi45MjVMMTc0LjQyNiAyMjUuOTI1Wk0xOTguNDI2IDIyNS45MjVDMTk4LjU0IDIyNS45MjUgMTk4LjY1MyAyMjUuOTE5IDE5OC43NjQgMjI1LjkwOUwxOTguODU5IDIyNi45MDRDMTk4LjcxNiAyMjYuOTE4IDE5OC41NzIgMjI2LjkyNSAxOTguNDI2IDIyNi45MjVWMjI1LjkyNVpNMjIwLjc4MyAyMjYuOTA2TDE5OC44MTEgMjI2LjkwNkwxOTguODExIDIyNS45MDZMMjIwLjc4MyAyMjUuOTA2TDIyMC43ODMgMjI2LjkwNloiIGZpbGw9IiMxODI5M0QiLz4KPC9nPgo8cGF0aCBkPSJNMTcyLjkyNiAyMjYuNDQ5QzE3MC45MjYgMjI1LjQ0OSAxNjkuOTI2IDIyMi4wNzQgMTc0LjQyNiAyMjAuOTQ5QzE3Ni4wMjYgMjIwLjU0OSAxODkuNDI2IDIxNy45NDkgMTk2LjQyNiAyMTYuNDQ5IiBzdHJva2U9IiMxODI5M0QiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTY0LjU5NiAyMjVDMTYyLjU5NiAyMjMuNSAxNjIuNTk2IDIxOS4xMjUgMTY3LjA5NiAyMThDMTcxLjU5NiAyMTYuODc1IDE5My41OTYgMjEwIDE5My41OTYgMjEwIiBzdHJva2U9IiMxODI5M0QiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMjM5LjA0MyAyMTkuNTU2QzI0MC41ODggMjE5LjU0IDI0MS44NDggMjE4LjIyNCAyNDEuODMyIDIxNi42OEMyNDEuODE1IDIxNS4xMzUgMjQwLjUgMjEzLjg3NSAyMzguOTU1IDIxMy44OTFDMjM3LjQxIDIxMy45MDggMjM2LjE1IDIxNS4yMjMgMjM2LjE2NyAyMTYuNzY4QzIzNi4xODMgMjE4LjMxMyAyMzcuNDk5IDIxOS41NzMgMjM5LjA0MyAyMTkuNTU2WiIgc3Ryb2tlPSIjMTcyOTNFIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTIzMC44ODIgMjEzLjQ0OUMyMzIuNTg0IDIxOS42NzYgMjMyLjUwMyAyMjMuNzYyIDIzOC41ODQgMjIzLjk1QzI0NC41NzYgMjI0LjIxOSAyNTYuMTYzIDIyMy43NDcgMjU2LjE2MyAyMjMuNzQ3IiBzdHJva2U9IiMxNzI5M0UiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0yNzcuNTk2IDIyN0g2My41OTYyIiBzdHJva2U9IiMxODI5M0QiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMjQuMDk2IDIwNC4wMDFMMTYyLjc5MSAxNzYuMTI4TDEyMi41OTYgMTM2LjAwMUwxMTEuMDk2IDE1Ni41MDFMOTkuNTk2MiAxMjMuNTAxTDc2LjU5NjIgMTI4LjAwMUM3Ni41OTYyIDEyOC4wMDEgNzkuMDk2MiAxNzUuNjI4IDgxLjU5NjIgMTg3LjUwMUM4NC4wOTYyIDE5OS4zNzMgODYuNzQyOSAyMDMuNTQ4IDk1LjA5NjIgMjA4LjUwMUMxMDMuNDQ5IDIxMy40NTMgMTEzLjA5NiAyMTIuMDAxIDEyNC4wOTYgMjA0LjAwMVoiIGZpbGw9IiNENkRERTIiLz4KPHBhdGggZD0iTTcyLjE4MDggMTAyLjAyOEM3MC41Mjk0IDEwMy4zODIgNzAuODAzOCAxMDUuNjA3IDcxLjgyNjcgMTA3LjU4MUM3NC40OTQ0IDExMS4xMTQgODAuODQwMSAxMTguMDk2IDgyLjIyODQgMTIwLjQ0MUw5NS4yNTk1IDExNy44MzVDOTUuMjU5NSAxMTcuODM1IDg4LjM0NTkgMTExLjQ5MiA3OS42MjIzIDEwMy45MzZDNzYuNTA3NiAxMDEuMjM4IDczLjgzMDIgMTAwLjY3NiA3Mi4xODA4IDEwMi4wMjhaIiBmaWxsPSIjRkNCRDlBIiBzdHJva2U9IiMxNzI5M0UiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05OS42MDI2IDEyNS4wNjFDOTguMjU2OSAxMjAuNzc0IDk1Ljk3MTEgMTE1LjEzOSA4NC4zOTk5IDExNC4zNjNDNzIuNjIwNSAxMTMuNTc0IDU3LjAzNDggMTE0LjM2MyA1Ny4wMzQ4IDExNC4zNjNDNTUuNjEgMTEyLjM2NiA1My42NTIgMTA4LjY2MyA1MS45NTk1IDEwNS40NjFDNTAuODYgMTAzLjM4MiA0OS44NzI2IDEwMS41MTQgNDkuMjE2MyAxMDAuNDY0QzQ4LjEzMDQgOTguNzI2MiA0NS4zNzI2IDk2LjEyIDQzLjYzNTEgOTcuNDIzMUM0Mi42OTc4IDk4LjEyNjEgNDIuMTkwOCA5OC45NTU2IDQyLjIzNjIgMTAwLjIxNkM0MC45OTIgOTguOTkyMiAzOS45NjY4IDk4LjAxMDggMzkuMjk2MiA5Ny40MTQxQzM1LjQxMjMgOTMuOTU4NCAzMS4xMDgyIDk2Ljc3ODcgMzMuODg5NyAxMDEuMTU5QzM0LjEzODUgMTAxLjU1MSAzNC40MzcxIDEwMS45ODQgMzQuNzc3NiAxMDIuNDVDMzEuMjUzOSAxMDEuNzggMjguOTQ1MSAxMDUuMDY5IDMyLjI3NjEgMTA3Ljg0NUMzNi43MDggMTExLjUzOCA0OC4zNDI4IDExOS4zMjYgNTEuNzI3OSAxMjEuNTc1QzUzLjY5MTIgMTIzLjY2NyA1Ny41NTk2IDEyNC4wOTUgNjEuNTUyNyAxMjQuNTM2QzYyLjkxOTIgMTI0LjY4NyA2NC4zMDAyIDEyNC44NCA2NS42MjQ1IDEyNS4wNjFDNzAuMTQwNiAxMjUuODE3IDc0LjkzMDEgMTI2Ljk2IDc0LjkzMDEgMTI2Ljk2TDc0LjkzMDIgMTMxLjQxNEM3NC45MzAzIDEzNy4wNjEgNzkuNDMwMiAxNDIuOTE0IDg3LjkzMDEgMTQyLjkxNEM5OC42MDI3IDE0MS42NTggMTAwLjkwNiAxMzAuODY5IDEwMC4wMzcgMTI2Ljk2QzEwMC4wMzcgMTI2Ljk2IDk5Ljc4NDQgMTI1LjY0IDk5LjYwMjYgMTI1LjA2MVoiIGZpbGw9IiNGQ0JEOUEiLz4KPHBhdGggZD0iTTg0LjM5OTkgMTE0LjM2M0w4NC4zNjY1IDExNC44NjJMODQuMzY2NSAxMTQuODYyTDg0LjM5OTkgMTE0LjM2M1pNOTkuNjAyNiAxMjUuMDYxTDEwMC4wOCAxMjQuOTExTDEwMC4wOCAxMjQuOTExTDk5LjYwMjYgMTI1LjA2MVpNNTcuMDM0OCAxMTQuMzYzTDU3LjA2MDEgMTE0Ljg2M0w1Ni43ODY3IDExNC44NzdMNTYuNjI3NyAxMTQuNjU0TDU3LjAzNDggMTE0LjM2M1pNNTEuOTU5NSAxMDUuNDYxTDUxLjUxNzUgMTA1LjY5NUw1MS41MTc1IDEwNS42OTVMNTEuOTU5NSAxMDUuNDYxWk00OS4yMTYzIDEwMC40NjRMNDguNzkyMyAxMDAuNzI5TDQ4Ljc5MjMgMTAwLjcyOUw0OS4yMTYzIDEwMC40NjRaTTQzLjYzNTEgOTcuNDIzMUw0My45MzUxIDk3LjgyMzFMNDMuOTM1MSA5Ny44MjMxTDQzLjYzNTEgOTcuNDIzMVpNNDIuMjM2MiAxMDAuMjE2TDQyLjczNTkgMTAwLjE5OEw0Mi43ODExIDEwMS40NTNMNDEuODg1NiAxMDAuNTcyTDQyLjIzNjIgMTAwLjIxNlpNMzkuMjk2MiA5Ny40MTQxTDM4Ljk2MzggOTcuNzg3N0wzOC45NjM4IDk3Ljc4NzdMMzkuMjk2MiA5Ny40MTQxWk0zMy44ODk3IDEwMS4xNTlMMzMuNDY3NiAxMDEuNDI3TDMzLjQ2NzYgMTAxLjQyN0wzMy44ODk3IDEwMS4xNTlaTTM0Ljc3NzYgMTAyLjQ1TDM1LjE4MTMgMTAyLjE1NEwzNS45MjkgMTAzLjE3N0wzNC42ODQzIDEwMi45NDFMMzQuNzc3NiAxMDIuNDVaTTMyLjI3NjEgMTA3Ljg0NUwzMi41OTYyIDEwNy40NjFMMzIuNTk2MiAxMDcuNDYxTDMyLjI3NjEgMTA3Ljg0NVpNNTEuNzI3OSAxMjEuNTc1TDUyLjAwNDYgMTIxLjE1OUw1Mi4wNTI4IDEyMS4xOTFMNTIuMDkyNSAxMjEuMjMzTDUxLjcyNzkgMTIxLjU3NVpNNjEuNTUyNyAxMjQuNTM2TDYxLjYwNzcgMTI0LjAzOUw2MS42MDc3IDEyNC4wMzlMNjEuNTUyNyAxMjQuNTM2Wk02NS42MjQ1IDEyNS4wNjFMNjUuNzA3IDEyNC41NjhMNjUuNzA3IDEyNC41NjhMNjUuNjI0NSAxMjUuMDYxWk03NC45MzAxIDEyNi45Nkw3NS4wNDYyIDEyNi40NzRMNzUuNDMwMSAxMjYuNTY1TDc1LjQzMDEgMTI2Ljk2TDc0LjkzMDEgMTI2Ljk2Wk03NC45MzAyIDEzMS40MTRMNzUuNDMwMiAxMzEuNDE0TDc1LjQzMDIgMTMxLjQxNEw3NC45MzAyIDEzMS40MTRaTTg3LjkzMDEgMTQyLjkxNEw4Ny45ODg1IDE0My40MUw4Ny45NTk0IDE0My40MTRMODcuOTMwMSAxNDMuNDE0TDg3LjkzMDEgMTQyLjkxNFpNMTAwLjAzNyAxMjYuOTZMOTkuNTQ5IDEyNy4wNjhMOTkuNTQ3NCAxMjcuMDYxTDk5LjU0NiAxMjcuMDU0TDEwMC4wMzcgMTI2Ljk2Wk04NC40MzMzIDExMy44NjRDOTAuMjk4MSAxMTQuMjU4IDkzLjg4MzkgMTE1Ljg4OCA5Ni4xNzcxIDExOC4wM0M5OC40NjM2IDEyMC4xNjUgOTkuNDAyNSAxMjIuNzU0IDEwMC4wOCAxMjQuOTExTDk5LjEyNTYgMTI1LjIxMUM5OC40NTcgMTIzLjA4MSA5Ny41ODAxIDEyMC43MDkgOTUuNDk0NSAxMTguNzYxQzkzLjQxNTYgMTE2LjgxOSA5MC4wNzMgMTE1LjI0NSA4NC4zNjY1IDExNC44NjJMODQuNDMzMyAxMTMuODY0Wk01Ny4wMzQ4IDExNC4zNjNDNTcuMDA5NSAxMTMuODY0IDU3LjAwOTYgMTEzLjg2NCA1Ny4wMDk3IDExMy44NjRDNTcuMDA5OCAxMTMuODY0IDU3LjAxIDExMy44NjQgNTcuMDEwMyAxMTMuODY0QzU3LjAxMDggMTEzLjg2NCA1Ny4wMTE1IDExMy44NjQgNTcuMDEyNSAxMTMuODY0QzU3LjAxNDUgMTEzLjg2NCA1Ny4wMTc0IDExMy44NjQgNTcuMDIxMiAxMTMuODYzQzU3LjAyODggMTEzLjg2MyA1Ny4wNDAyIDExMy44NjIgNTcuMDU1MyAxMTMuODYyQzU3LjA4NTQgMTEzLjg2IDU3LjEzMDEgMTEzLjg1OCA1Ny4xODg4IDExMy44NTVDNTcuMzA2NCAxMTMuODUgNTcuNDgwMSAxMTMuODQyIDU3LjcwNTIgMTEzLjgzMUM1OC4xNTU1IDExMy44MTEgNTguODExNSAxMTMuNzg0IDU5LjYzNTQgMTEzLjc1M0M2MS4yODMxIDExMy42OTEgNjMuNjAyNyAxMTMuNjE3IDY2LjI5MDkgMTEzLjU2N0M3MS42NjQ1IDExMy40NjkgNzguNTIyNCAxMTMuNDY4IDg0LjQzMzMgMTEzLjg2NEw4NC4zNjY1IDExNC44NjJDNzguNDk4IDExNC40NjkgNzEuNjczNCAxMTQuNDY5IDY2LjMwOTMgMTE0LjU2N0M2My42Mjg2IDExNC42MTYgNjEuMzE1NiAxMTQuNjkgNTkuNjcyOCAxMTQuNzUyQzU4Ljg1MTUgMTE0Ljc4MyA1OC4xOTc5IDExNC44MSA1Ny43NDk4IDExNC44M0M1Ny41MjU3IDExNC44NCA1Ny4zNTMxIDExNC44NDkgNTcuMjM2NSAxMTQuODU0QzU3LjE3ODMgMTE0Ljg1NyA1Ny4xMzQxIDExNC44NTkgNTcuMTA0NCAxMTQuODZDNTcuMDg5NiAxMTQuODYxIDU3LjA3ODUgMTE0Ljg2MiA1Ny4wNzExIDExNC44NjJDNTcuMDY3NCAxMTQuODYyIDU3LjA2NDYgMTE0Ljg2MiA1Ny4wNjI3IDExNC44NjNDNTcuMDYxOCAxMTQuODYzIDU3LjA2MTEgMTE0Ljg2MyA1Ny4wNjA3IDExNC44NjNDNTcuMDYwNSAxMTQuODYzIDU3LjA2MDMgMTE0Ljg2MyA1Ny4wNjAyIDExNC44NjNDNTcuMDYwMSAxMTQuODYzIDU3LjA2MDEgMTE0Ljg2MyA1Ny4wMzQ4IDExNC4zNjNaTTUyLjQwMTYgMTA1LjIyOEM1NC4xMDE5IDEwOC40NDQgNTYuMDQxNCAxMTIuMTEgNTcuNDQxOCAxMTQuMDczTDU2LjYyNzcgMTE0LjY1NEM1NS4xNzg2IDExMi42MjIgNTMuMjAyMSAxMDguODgxIDUxLjUxNzUgMTA1LjY5NUw1Mi40MDE2IDEwNS4yMjhaTTQ5LjY0MDMgMTAwLjE5OUM1MC4zMDg3IDEwMS4yNjggNTEuMzA2OCAxMDMuMTU3IDUyLjQwMTYgMTA1LjIyOEw1MS41MTc1IDEwNS42OTVDNTAuNDEzMyAxMDMuNjA2IDQ5LjQzNjUgMTAxLjc1OSA0OC43OTIzIDEwMC43MjlMNDkuNjQwMyAxMDAuMTk5Wk00My4zMzUxIDk3LjAyMzFDNDQuNDgyOCA5Ni4xNjI0IDQ1Ljg3ODUgOTYuNjYzMyA0Ni45NTA0IDk3LjM4OTFDNDguMDU4NSA5OC4xMzk1IDQ5LjA2NTggOTkuMjc5NSA0OS42NDAzIDEwMC4xOTlMNDguNzkyMyAxMDAuNzI5QzQ4LjI4MDggOTkuOTEwMyA0Ny4zNjYzIDk4Ljg3ODUgNDYuMzg5NyA5OC4yMTcyQzQ1LjM3NjkgOTcuNTMxMyA0NC41MjUgOTcuMzgwNyA0My45MzUxIDk3LjgyMzFMNDMuMzM1MSA5Ny4wMjMxWk00MS43MzY2IDEwMC4yMzRDNDEuNzExMiA5OS41MjkxIDQxLjg0MDQgOTguOTE4IDQyLjEyNDYgOTguMzc3N0M0Mi40MDcgOTcuODQxMSA0Mi44MjYyIDk3LjQwNDggNDMuMzM1MSA5Ny4wMjMxTDQzLjkzNTEgOTcuODIzMUM0My41MDY3IDk4LjE0NDQgNDMuMjAzOCA5OC40NzQzIDQzLjAwOTYgOTguODQzM0M0Mi44MTc0IDk5LjIwODcgNDIuNzE1OSA5OS42NDI2IDQyLjczNTkgMTAwLjE5OEw0MS43MzY2IDEwMC4yMzRaTTM5LjYyODYgOTcuMDQwNkM0MC4zMDkzIDk3LjY0NjIgNDEuMzQyMiA5OC42MzU0IDQyLjU4NjkgOTkuODU5Nkw0MS44ODU2IDEwMC41NzJDNDAuNjQxNyA5OS4zNDkgMzkuNjI0MyA5OC4zNzUzIDM4Ljk2MzggOTcuNzg3N0wzOS42Mjg2IDk3LjA0MDZaTTMzLjQ2NzYgMTAxLjQyN0MzMi43Mjk5IDEwMC4yNjYgMzIuNDMxNiA5OS4xNTkzIDMyLjUxNjggOTguMTk2MUMzMi42MDI2IDk3LjIyNDcgMzMuMDc3NyA5Ni40MzEzIDMzLjgxMzQgOTUuOTMzOUMzNS4yODI2IDk0Ljk0MDUgMzcuNTgzNiA5NS4yMjEgMzkuNjI4NiA5Ny4wNDA2TDM4Ljk2MzggOTcuNzg3N0MzNy4xMjQ5IDk2LjE1MTUgMzUuMzMxOSA5Ni4xMTQzIDM0LjM3MzUgOTYuNzYyM0MzMy44OTUzIDk3LjA4NTYgMzMuNTczMSA5Ny42MDI2IDMzLjUxMjkgOTguMjg0MUMzMy40NTE5IDk4Ljk3MzcgMzMuNjU4NyA5OS44NjI5IDM0LjMxMTggMTAwLjg5MUwzMy40Njc2IDEwMS40MjdaTTM0LjM3NCAxMDIuNzQ1QzM0LjAyOSAxMDIuMjczIDMzLjcyMzggMTAxLjgzMSAzMy40Njc2IDEwMS40MjdMMzQuMzExOCAxMDAuODkxQzM0LjU1MzEgMTAxLjI3MiAzNC44NDUyIDEwMS42OTUgMzUuMTgxMyAxMDIuMTU0TDM0LjM3NCAxMDIuNzQ1Wk0zMS45NTYxIDEwOC4yMjlDMzAuMTcxOCAxMDYuNzQyIDI5Ljc2NDUgMTA0Ljk3NSAzMC41MTkgMTAzLjYxM0MzMS4yNTAxIDEwMi4yOTMgMzIuOTUzMiAxMDEuNTk0IDM0Ljg3MDkgMTAxLjk1OEwzNC42ODQzIDEwMi45NDFDMzMuMDc4NCAxMDIuNjM2IDMxLjg2NTIgMTAzLjI0NyAzMS4zOTM4IDEwNC4wOThDMzAuOTQ1NyAxMDQuOTA3IDMxLjA0OTQgMTA2LjE3MiAzMi41OTYyIDEwNy40NjFMMzEuOTU2MSAxMDguMjI5Wk01MS40NTEyIDEyMS45OTJDNDguMDc3IDExOS43NDkgMzYuNDE0IDExMS45NDQgMzEuOTU2MSAxMDguMjI5TDMyLjU5NjIgMTA3LjQ2MUMzNy4wMDIxIDExMS4xMzIgNDguNjA4NyAxMTguOTAyIDUyLjAwNDYgMTIxLjE1OUw1MS40NTEyIDEyMS45OTJaTTYxLjQ5NzggMTI1LjAzM0M1OS41MDk3IDEyNC44MTMgNTcuNTA5MSAxMjQuNTkzIDU1Ljc1OSAxMjQuMTZDNTQuMDEyNSAxMjMuNzI4IDUyLjQ0MjggMTIzLjA2NyA1MS4zNjMzIDEyMS45MTdMNTIuMDkyNSAxMjEuMjMzQzUyLjk3NjMgMTIyLjE3NSA1NC4zMjI1IDEyMi43NzQgNTUuOTk5MiAxMjMuMTg5QzU3LjY3MjQgMTIzLjYwMyA1OS42MDI2IDEyMy44MTcgNjEuNjA3NyAxMjQuMDM5TDYxLjQ5NzggMTI1LjAzM1pNNjUuNTQyIDEyNS41NTRDNjQuMjMzOCAxMjUuMzM2IDYyLjg2NjkgMTI1LjE4NCA2MS40OTc4IDEyNS4wMzNMNjEuNjA3NyAxMjQuMDM5QzYyLjk3MTUgMTI0LjE5IDY0LjM2NjYgMTI0LjM0NCA2NS43MDcgMTI0LjU2OEw2NS41NDIgMTI1LjU1NFpNNzQuOTMwMSAxMjYuOTZDNzQuODE0IDEyNy40NDYgNzQuODE0IDEyNy40NDYgNzQuODEzOSAxMjcuNDQ2Qzc0LjgxMzkgMTI3LjQ0NiA3NC44MTM5IDEyNy40NDYgNzQuODEzOCAxMjcuNDQ2Qzc0LjgxMzcgMTI3LjQ0NiA3NC44MTM1IDEyNy40NDYgNzQuODEzMiAxMjcuNDQ2Qzc0LjgxMjcgMTI3LjQ0NiA3NC44MTE4IDEyNy40NDYgNzQuODEwNyAxMjcuNDQ2Qzc0LjgwODUgMTI3LjQ0NSA3NC44MDUxIDEyNy40NDQgNzQuODAwNiAxMjcuNDQzQzc0Ljc5MTUgMTI3LjQ0MSA3NC43NzggMTI3LjQzOCA3NC43NjAxIDEyNy40MzRDNzQuNzI0MiAxMjcuNDI1IDc0LjY3MDkgMTI3LjQxMyA3NC42MDE0IDEyNy4zOTZDNzQuNDYyNCAxMjcuMzY0IDc0LjI1ODQgMTI3LjMxNiA3My45OTk1IDEyNy4yNTdDNzMuNDgxNiAxMjcuMTM4IDcyLjc0MzkgMTI2Ljk3MiA3MS44NjUzIDEyNi43ODNDNzAuMTA3MyAxMjYuNDAzIDY3Ljc4OTMgMTI1LjkzIDY1LjU0MiAxMjUuNTU0TDY1LjcwNyAxMjQuNTY4QzY3Ljk3NTggMTI0Ljk0OCA3MC4zMTA2IDEyNS40MjQgNzIuMDc2MyAxMjUuODA1QzcyLjk1OTYgMTI1Ljk5NiA3My43MDE1IDEyNi4xNjMgNzQuMjIyOCAxMjYuMjgyQzc0LjQ4MzQgMTI2LjM0MiA3NC42ODkgMTI2LjM5IDc0LjgyOTUgMTI2LjQyM0M3NC44OTk3IDEyNi40MzkgNzQuOTUzOCAxMjYuNDUyIDc0Ljk5MDMgMTI2LjQ2Qzc1LjAwODUgMTI2LjQ2NSA3NS4wMjI0IDEyNi40NjggNzUuMDMxOCAxMjYuNDdDNzUuMDM2NSAxMjYuNDcxIDc1LjA0IDEyNi40NzIgNzUuMDQyNCAxMjYuNDczQzc1LjA0MzYgMTI2LjQ3MyA3NS4wNDQ2IDEyNi40NzMgNzUuMDQ1MiAxMjYuNDczQzc1LjA0NTUgMTI2LjQ3NCA3NS4wNDU3IDEyNi40NzQgNzUuMDQ1OSAxMjYuNDc0Qzc1LjA0NiAxMjYuNDc0IDc1LjA0NiAxMjYuNDc0IDc1LjA0NjEgMTI2LjQ3NEM3NS4wNDYxIDEyNi40NzQgNzUuMDQ2MiAxMjYuNDc0IDc0LjkzMDEgMTI2Ljk2Wk03NC40MzAyIDEzMS40MTRMNzQuNDMwMSAxMjYuOTZMNzUuNDMwMSAxMjYuOTZMNzUuNDMwMiAxMzEuNDE0TDc0LjQzMDIgMTMxLjQxNFpNODcuOTMwMSAxNDMuNDE0Qzc5LjE1OCAxNDMuNDE0IDc0LjQzMDMgMTM3LjM0MSA3NC40MzAyIDEzMS40MTRMNzUuNDMwMiAxMzEuNDE0Qzc1LjQzMDMgMTM2Ljc4IDc5LjcwMjQgMTQyLjQxNCA4Ny45MzAxIDE0Mi40MTRMODcuOTMwMSAxNDMuNDE0Wk0xMDAuNTI1IDEyNi44NTJDMTAwLjk4OSAxMjguOTQxIDEwMC42MDEgMTMyLjczNyA5OC43NTE4IDEzNi4xNjlDOTYuODg2NCAxMzkuNjMxIDkzLjUxMjcgMTQyLjc2IDg3Ljk4ODUgMTQzLjQxTDg3Ljg3MTcgMTQyLjQxN0M5My4wMjAyIDE0MS44MTEgOTYuMTM0MyAxMzguOTE5IDk3Ljg3MTQgMTM1LjY5NUM5OS42MjQ2IDEzMi40NDEgOTkuOTUzNSAxMjguODg5IDk5LjU0OSAxMjcuMDY4TDEwMC41MjUgMTI2Ljg1MlpNMTAwLjA4IDEyNC45MTFDMTAwLjE3OSAxMjUuMjI2IDEwMC4yOTIgMTI1LjcyMyAxMDAuMzc3IDEyNi4xMjNDMTAwLjQyMSAxMjYuMzI3IDEwMC40NTggMTI2LjUxMiAxMDAuNDg1IDEyNi42NDdDMTAwLjQ5OSAxMjYuNzE0IDEwMC41MDkgMTI2Ljc2OSAxMDAuNTE3IDEyNi44MDZDMTAwLjUyIDEyNi44MjUgMTAwLjUyMyAxMjYuODQgMTAwLjUyNSAxMjYuODVDMTAwLjUyNiAxMjYuODU1IDEwMC41MjcgMTI2Ljg1OSAxMDAuNTI3IDEyNi44NjJDMTAwLjUyOCAxMjYuODYzIDEwMC41MjggMTI2Ljg2NCAxMDAuNTI4IDEyNi44NjVDMTAwLjUyOCAxMjYuODY1IDEwMC41MjggMTI2Ljg2NSAxMDAuNTI4IDEyNi44NjZDMTAwLjUyOCAxMjYuODY2IDEwMC41MjggMTI2Ljg2NiAxMDAuNTI4IDEyNi44NjZDMTAwLjUyOCAxMjYuODY2IDEwMC41MjggMTI2Ljg2NiAxMDAuNTI4IDEyNi44NjZDMTAwLjUyOCAxMjYuODY2IDEwMC41MjggMTI2Ljg2NiAxMDAuMDM3IDEyNi45NkM5OS41NDYgMTI3LjA1NCA5OS41NDYgMTI3LjA1NCA5OS41NDYgMTI3LjA1NEM5OS41NDYgMTI3LjA1NCA5OS41NDYgMTI3LjA1NCA5OS41NDYgMTI3LjA1NEM5OS41NDYgMTI3LjA1NCA5OS41NDYgMTI3LjA1NCA5OS41NDYgMTI3LjA1NEM5OS41NDYgMTI3LjA1NCA5OS41NDU5IDEyNy4wNTQgOTkuNTQ1OSAxMjcuMDUzQzk5LjU0NTggMTI3LjA1MyA5OS41NDU2IDEyNy4wNTIgOTkuNTQ1NCAxMjcuMDUxQzk5LjU0NDkgMTI3LjA0OCA5OS41NDQyIDEyNy4wNDUgOTkuNTQzMyAxMjcuMDRDOTkuNTQxNSAxMjcuMDMgOTkuNTM4NyAxMjcuMDE2IDk5LjUzNTIgMTI2Ljk5OEM5OS41MjggMTI2Ljk2MSA5OS41MTc2IDEyNi45MDggOTkuNTA0NSAxMjYuODQzQzk5LjQ3ODIgMTI2LjcxMSA5OS40NDE0IDEyNi41MzEgOTkuMzk5IDEyNi4zMzJDOTkuMzEyNyAxMjUuOTI4IDk5LjIwODQgMTI1LjQ3NSA5OS4xMjU2IDEyNS4yMTFMMTAwLjA4IDEyNC45MTFaIiBmaWxsPSIjMTgyOTNEIi8+CjxwYXRoIGQ9Ik00Mi4yNjY2IDEwMC40NjFDNDIuMjY2NiAxMDQuMzcgNDcuOTEzNCAxMTUuNjY0IDQ3LjkxMzQgMTE1LjY2NCIgc3Ryb2tlPSIjMTcyOTNFIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTM0LjQ0ODIgMTAyLjE5OEw0Mi43MDEyIDExMi4xODkiIHN0cm9rZT0iIzE3MjkzRSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMjAuOTI2IDIwMi40NDlMMjQ4Ljg2NCAxOTUuMDQ4TTI2My45MjYgMjA0LjQ0OUMyNTguNDI2IDE5My45NDkgMjQ4Ljg2NCAxOTUuMDQ4IDI0OC44NjQgMTk1LjA0OE0yNDguODY0IDE5NS4wNDhMMjM5LjE4MSAxNzguNDQ5TTExMS41OTYgMTU2LjVMMTE5LjA5NiAxNzguNDQ5IiBzdHJva2U9IiMxODI5M0QiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNOTAuMDI5OCAxNTAuMjc0QzkwLjM3NDIgMTUxLjc4IDkxLjkyNzcgMTUyLjczMSA5My40MzM2IDE1Mi4zODZDOTQuOTM5NCAxNTIuMDQyIDk1Ljg5MDcgMTUwLjQ4OCA5NS41NDYzIDE0OC45ODNDOTUuMjAxOCAxNDcuNDc3IDkzLjY0ODMgMTQ2LjUyNSA5Mi4xNDI1IDE0Ni44N0M5MC42MzY2IDE0Ny4yMTQgODkuNjg1MyAxNDguNzY4IDkwLjAyOTggMTUwLjI3NFoiIHN0cm9rZT0iIzE3MjkzRSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik05NC41OTYyIDE0MC41Qzg5LjA5NjIgMTQ0IDg0LjUyOSAxNDQuNzc3IDg1LjYzOSAxNTAuNzU5Qzg2LjY1MDEgMTU2LjY3MSA4OS41NzU4IDE2Ny44OTIgODkuNTc1OCAxNjcuODkyIiBzdHJva2U9IiMxNzI5M0UiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xOTMuNTQ2IDc3LjM0MTVDMjAxLjg0MiA3NC43NDQ3IDIxMC42MTQgNzkuNTA4NyAyMTMuMTU4IDg3LjczMTJDMjE1Ljc1NCA5Ni4wMjczIDIxMC45OSAxMDQuNzk5IDIwMi43NjggMTA3LjM0M0MxOTQuNDcyIDEwOS45NCAxODUuNyAxMDUuMTc2IDE4My4xNTYgOTYuOTUzM0MxODAuNjEyIDg4LjczMDkgMTg1LjI1IDc5LjkzODQgMTkzLjU0NiA3Ny4zNDE1WiIgZmlsbD0iIzE3MjkzRSIvPgo8cGF0aCBkPSJNMjAxLjkxIDcwLjc4ODNDMjAwLjIzNSA2NS4xODAxIDE5NC4yNjEgNjEuOTgzMiAxODguNTc5IDYzLjcxMTFDMTgyLjk3MSA2NS4zODYyIDE3OS43NzQgNzEuMzYwNiAxODEuNTAyIDc3LjA0MjVDMTgzLjE3NyA4Mi42NTA3IDE4OS4xNTEgODUuODQ3NiAxOTQuODMzIDg0LjExOTdDMjAwLjM4OCA4Mi4zNzA5IDIwMy41ODUgNzYuMzk2NSAyMDEuOTEgNzAuNzg4M1oiIGZpbGw9IiMxNzI5M0UiLz4KPHBhdGggZD0iTTE4MC4xODMgOTAuOTM0OEMxODguNDc5IDg4LjMzNzkgMTk3LjI1IDkzLjEwMiAxOTkuNzk0IDEwMS4zMjRDMjAyLjM5MSAxMDkuNjIxIDE5Ny42MjcgMTE4LjM5MiAxODkuNDA1IDEyMC45MzZDMTgxLjEwOSAxMjMuNTMzIDE3Mi4zMzcgMTE4Ljc2OSAxNjkuNzkzIDExMC41NDdDMTY3LjE5NiAxMDIuMjUgMTcxLjkwNyA5My40MDUgMTgwLjE4MyA5MC45MzQ4WiIgZmlsbD0iI0ZDQkQ5QSIvPgo8cGF0aCBkPSJNMjEyLjc4OSAxMDEuMzg4QzIxMS42MDIgOTcuNTUxMSAyMDcuNjAxIDk1LjM5NTMgMjAzLjc2NCA5Ni41ODI1QzE5OS45MjcgOTcuNzY5NyAxOTcuNzcxIDEwMS43NyAxOTguOTU4IDEwNS42MDdDMjAwLjE0NSAxMDkuNDQ0IDIwNC4xNDYgMTExLjYgMjA3Ljk4MyAxMTAuNDEzQzIxMS44MiAxMDkuMjI2IDIxMy45MjMgMTA1LjE1MiAyMTIuNzg5IDEwMS4zODhaIiBmaWxsPSIjRkNCRDlBIi8+CjxwYXRoIGQ9Ik0xODIuODAyIDc5Ljc5MjlDMTgyLjgwMiA3OS43OTI5IDIwMC4zMSA4Ni43NzkyIDIwMS44OTMgODcuNDMwNkMyMDMuNDc2IDg4LjA4MjEgMjA0LjEzMyA4OS42MjA5IDIwMy40NDkgOTEuMDAzNUMyMDIuNjE4IDkyLjQ5MTkgMTk3Ljk3MSA5NS4wNDA5IDE5OS45OTMgOTkuNzMxQzE5OS40NTcgMTAxLjAwOCAxOTkuMDM3IDEwMS45NzkgMTk5LjAzNyAxMDEuOTc5TDE3Ny4zOTIgOTMuMjY5NEwxODIuODAyIDc5Ljc5MjlaIiBmaWxsPSIjRkNCRDlBIi8+CjxwYXRoIGQ9Ik0xOTQuNjEgOTEuODc4OUwxODkuNTEgODcuOTk5NCIgc3Ryb2tlPSIjMTgyOTNEIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE4NC42ODQgODYuNTc5MUwxODAuMjcxIDg2LjU3OTEiIHN0cm9rZT0iIzE4MjkzRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjkuNzkzIDExMC41NDZDMTcyLjM5IDExOC44NDIgMTgxLjEwOSAxMjMuNTMyIDE4OS40MDUgMTIwLjkzNkMxOTUuNDM1IDExOS4wNyAxOTkuNDY2IDExMy45NDkgMjAwLjM1NCAxMDguMTc4QzIwMi4yMTMgMTEwLjMwNiAyMDUuMTY4IDExMS4zMTQgMjA3Ljk4MiAxMTAuNDEzQzIxMS44MTkgMTA5LjIyNiAyMTMuOTc1IDEwNS4yMjUgMjEyLjc4OCAxMDEuMzg4QzIxMS42MDEgOTcuNTUwOSAyMDcuNiA5NS4zOTUgMjAzLjc2MyA5Ni41ODIyQzIwMi4xMTkgOTcuMDkxIDIwMC43NyA5OC4xNjg4IDE5OS44MzQgOTkuNTA5N0MxOTguMTcxIDk1LjAwODkgMjAyLjYxOCA5Mi40OTE5IDIwMy4zNzUgOTEuMDU2M0MyMDQuMTExIDg5Ljc0NzQgMjAzLjQwMiA4OC4xMzQ5IDIwMS44MTkgODcuNDgzNUMyMDAuMjM2IDg2LjgzMiAxODIuNzI4IDc5Ljg0NTcgMTgyLjcyOCA3OS44NDU3TDE3Ny45NDggOTEuODY1OEMxNzEuMTA4IDk1LjA5MzEgMTY3LjQ1MSAxMDMuMDcyIDE2OS43OTMgMTEwLjU0NloiIHN0cm9rZT0iIzE3MjkzRSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yMDguNDk3IDEwMS4wMDZMMjAzLjUwMSAxMDIuOTEyIiBzdHJva2U9IiMxNzI5M0UiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMDcuMTExIDEwNS40NThMMjA1LjU4NyAxMDIuMDg1IiBzdHJva2U9IiMxNzI5M0UiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xODEuMTg2IDk4LjI1MjJMMTc4LjE1NiA5NS43MzYzTDE4My43OTUgOTEuNDYxOSIgc3Ryb2tlPSIjMTcyOTNFIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTg5LjkxNyA5Ni40NDg5QzE5MS41IDk3LjEwMDQgMTkyLjYyNSA5NC42MjAxIDE5MC45MTUgOTMuOTQ3OEMxODkuMzMyIDkzLjI5NjQgMTg4LjIwOCA5NS43NzY2IDE4OS45MTcgOTYuNDQ4OVoiIGZpbGw9IiMxNzI5M0UiLz4KPHBhdGggZD0iTTE4MC42ODQgOTMuMjM5M0MxODIuMjY3IDkzLjg5MDcgMTgzLjM5MSA5MS40MTA1IDE4MS42ODIgOTAuNzM4MkMxODAuMDQ2IDkwLjAxMyAxNzkuMDQ4IDkyLjUxNDEgMTgwLjY4NCA5My4yMzkzWiIgZmlsbD0iIzE3MjkzRSIvPgo8cGF0aCBkPSJNMTc2Ljk5MiA5OS45NzM0TDE4NC4xNjYgMTAxLjQwMyIgc3Ryb2tlPSIjMTgyOTNEIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTg4IDYzLjVDODggNDguMzEyMiA3NS42ODc4IDM2IDYwLjUgMzZDNDUuMzEyMiAzNiAzMyA0OC4zMTIyIDMzIDYzLjVDMzMgNzguNjg3OCA0NS4zMTIyIDkxIDYwLjUgOTFDNzUuNjg3OCA5MSA4OCA3OC42ODc4IDg4IDYzLjVaIiBmaWxsPSIjRUQ2MjYxIi8+CjxwYXRoIGQ9Ik03MC41NzU3IDcxLjI0ODlMNjMuODg3OCA2NC41NjA5QzYzLjMwMiA2My45NzUxIDYzLjMwMiA2My4wMjU0IDYzLjg4NzggNjIuNDM5Nkw3MC41NzU3IDU1Ljc1MTZDNzEuMjE4NCA1NS4xMDkgNzEuMjE4NCA1NC4wNjcgNzAuNTc1NyA1My40MjQzQzY5LjkzMzEgNTIuNzgxNyA2OC44OTExIDUyLjc4MTcgNjguMjQ4NCA1My40MjQzTDYxLjU2MDQgNjAuMTEyM0M2MC45NzQ3IDYwLjY5ODEgNjAuMDI0OSA2MC42OTgxIDU5LjQzOTEgNjAuMTEyM0w1Mi43NTEyIDUzLjQyNDNDNTIuMTA4NSA1Mi43ODE3IDUxLjA2NjUgNTIuNzgxNyA1MC40MjM4IDUzLjQyNDNDNDkuNzgxMiA1NC4wNjcgNDkuNzgxMiA1NS4xMDkgNTAuNDIzOCA1NS43NTE2TDU3LjExMTggNjIuNDM5NkM1Ny42OTc2IDYzLjAyNTQgNTcuNjk3NiA2My45NzUxIDU3LjExMTggNjQuNTYwOUw1MC40MjM4IDcxLjI0ODlDNDkuNzgxMiA3MS44OTE2IDQ5Ljc4MTIgNzIuOTMzNiA1MC40MjM4IDczLjU3NjJDNTEuMDY2NSA3NC4yMTg5IDUyLjEwODUgNzQuMjE4OSA1Mi43NTEyIDczLjU3NjJMNTkuNDM5MSA2Ni44ODgyQzYwLjAyNDkgNjYuMzAyNSA2MC45NzQ3IDY2LjMwMjUgNjEuNTYwNCA2Ni44ODgyTDY4LjI0ODQgNzMuNTc2MkM2OC44OTExIDc0LjIxODkgNjkuOTMzMSA3NC4yMTg5IDcwLjU3NTcgNzMuNTc2MkM3MS4yMTg0IDcyLjkzMzYgNzEuMjE4NCA3MS44OTE2IDcwLjU3NTcgNzEuMjQ4OVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IndoaXRlIi8+CjxyZWN0IHg9IjE2MCIgd2lkdGg9IjEiIGhlaWdodD0iMjQwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjAxIi8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2IiIHg9IjE1OC43NjUiIHk9IjE5Ny43NjgiIHdpZHRoPSI3Ni44MjQxIiBoZWlnaHQ9IjMzLjMxODIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlR2F1c3NpYW5CbHVyIGluPSJCYWNrZ3JvdW5kSW1hZ2UiIHN0ZERldmlhdGlvbj0iMi4wODA4NCIvPgo8ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXIiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2JhY2tncm91bmRCbHVyIiByZXN1bHQ9InNoYXBlIi8+CjwvZmlsdGVyPgo8L2RlZnM+Cjwvc3ZnPgo=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIwLjAwMDEgNEgxNi4wMDAxVjhIMTcuMDAwMVY1LjcwN0wxNy42NDYxIDYuMzUzTDE3Ljg2NDEgNi41NThDMTkuMjQzMSA4LjA0MiAyMC4wMDAxIDkuOTYzIDIwLjAwMDEgMTJDMjAuMDAwMSAxNi40MTEgMTYuNDExMSAyMCAxMi4wMDAxIDIwQzExLjY1MjEgMjAgMTEuMzAwMSAxOS45NzggMTAuOTU1MSAxOS45MzNMMTAuODI3MSAyMC45MjVDMTEuMjE0MSAyMC45NzUgMTEuNjA5MSAyMSAxMi4wMDAxIDIxQzE2Ljk2MzEgMjEgMjEuMDAwMSAxNi45NjMgMjEuMDAwMSAxMkMyMS4wMDAxIDkuNTk3IDIwLjA2MzEgNy4zMzYgMTguMzYzMSA1LjYzNkwxNy43MTkxIDVIMjAuMDAwMVY0WiIgZmlsbD0iI2ZmZmZmZiIvPgo8cGF0aCBkPSJNMyAxMkMzIDE0LjQwNCAzLjkzNyAxNi42NjUgNS42MzcgMTguMzY0TDYuMjgxIDE5SDRWMjBIOFYxNkg3VjE4LjI5M0w2LjM1NCAxNy42NDdMNi4xMzYgMTcuNDQyQzQuNzU2IDE1Ljk1OCA0IDE0LjAzNyA0IDEyQzQgNy41ODkgNy41ODkgNCAxMiA0QzEyLjM0OCA0IDEyLjcgNC4wMjIgMTMuMDQ1IDQuMDY3TDEzLjE3NCAzLjA3NUMxMi43ODYgMy4wMjUgMTIuMzkxIDMgMTIgM0M3LjAzOCAzIDMgNy4wMzcgMyAxMloiIGZpbGw9IiNmZmZmZmYiLz4KPC9zdmc+Cg==\"","import * as React from 'react';\nimport { Box, BoxProps } from 'grommet';\nimport { CSSProperties, useEffect } from 'react';\nimport { observer } from 'mobx-react';\nimport { TFilterProps } from 'interfaces';\nimport { SearchInput } from 'ui';\n\ninterface IFilterSearchProps<S, T> extends BoxProps, TFilterProps<S, T> {\n  style?: CSSProperties;\n}\n\nexport const FilterSearch = observer(\n  <S extends object, T extends string>({\n    store,\n    filterField,\n    initialValue,\n    ...rest\n  }: IFilterSearchProps<S, T>) => {\n    const searchText = store.filters[filterField] || initialValue;\n\n    useEffect(() => {\n      if (initialValue)\n        store.onChangeDataFlow({ filters: { [filterField]: searchText } });\n    }, []);\n\n    const setSearchParams = (value: T, withDebounce = false) => {\n      if (value) {\n        store.onChangeDataFlow(\n          { filters: { [filterField]: value } },\n          { withDebounce }\n        );\n      } else {\n        store.onChangeDataFlow({\n          filters: { [filterField]: undefined }\n        });\n      }\n    };\n\n    return (\n      <Box\n        {...rest}\n        onKeyDown={event => {\n          if (event.key === 'Enter') setSearchParams(searchText);\n        }}\n      >\n        <SearchInput\n          size=\"auto\"\n          value={searchText}\n          placeholder=\"Поиск\"\n          style={{\n            background: '#efefef',\n            border: 'none',\n            borderRadius: '2px',\n            height: '48px'\n          }}\n          onChange={value => setSearchParams(value, true)}\n        />\n      </Box>\n    );\n  }\n);\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { BoxProps } from 'grommet';\nimport { observer } from 'mobx-react';\nimport { TTabITabOptionsEx, TFilterProps } from 'interfaces';\nimport { ITabOptions } from '@we-ui-components/base';\nimport { TabsEx } from 'ui';\n\nexport interface IFilterComponent {\n  tabs: ITabOptions[];\n  selected?: string;\n  onChange?(id: string): void;\n  store: any; // TODO - need toi fix\n}\n\ninterface IFilterTabsProps<S, T> extends BoxProps, TFilterProps<S, T> {\n  tabs: TTabITabOptionsEx<T>;\n  component?: React.FC<IFilterComponent>;\n  style?: CSSProperties;\n}\n\nexport const FilterTabs = observer(\n  <S extends object, T extends string>({\n    store,\n    tabs,\n    filterField,\n    initialValue,\n    component: Component = TabsEx,\n    ...rest\n  }: IFilterTabsProps<S, T>) => {\n    const value = store.filters[filterField] ?? initialValue;\n\n    const setFilter = (value: T) => {\n      store.onChangeDataFlow({\n        filters: {\n          [filterField]: value !== initialValue ? value : undefined\n        }\n      });\n    };\n\n    return (\n      <Component\n        store={store}\n        tabs={tabs}\n        onChange={setFilter}\n        selected={value}\n        {...rest}\n      />\n    );\n  }\n);\n","import { ISelectProps, Select } from '@we-ui-components/base';\nimport * as React from 'react';\nimport { ListStoreConstructor } from '../stores/core/ListStoreConstructor';\nimport { observer } from 'mobx-react-lite';\n\nexport type TSort = 'none' | 'asc' | 'desc';\n\ninterface ITableSortSelect<S extends { id: string } = { id: string }> {\n  store: ListStoreConstructor<S>;\n  sortedField: string;\n}\n\nconst getSorterValue = (sorter: string | string[], dataIndex: string) => {\n  const parseSorter = (s: string) => s.split(',');\n  if (sorter instanceof Array) {\n    const sorterEntries = sorter.map(parseSorter);\n    const [, value] = sorterEntries.find(([name]) => name === dataIndex) || [];\n    return value;\n  }\n  if (typeof sorter === 'string') {\n    const [name, value] = parseSorter(sorter);\n    if (name === dataIndex) {\n      return value;\n    }\n  }\n  return null;\n};\n\nexport const TableSortSelect = observer(\n  (props: ITableSortSelect & ISelectProps) => {\n    const { store, sortedField, ...selectProps } = props;\n\n    const onChange = (value: TSort) => {\n      store.onChangeDataFlow({\n        sorter: `${sortedField},${value}`\n      });\n    };\n\n    const value = getSorterValue(store.sorter, sortedField);\n\n    return (\n      <div>\n        <Select\n          size=\"small\"\n          type=\"filter\"\n          styles={{\n            control: {\n              border: 'none',\n              width: '160px',\n              height: '38px',\n              fontSize: '13px'\n            },\n            valueContainer: {\n              padding: '5px 14px',\n              height: '38px',\n              fontSize: '13px'\n            },\n            indicatorsContainer: {\n              padding: 0,\n              height: '38px'\n            },\n            dropdownIndicator: (provided: any, state: Record<string, any>) => ({\n              ...provided,\n              padding: 0,\n              margin: '-1px 4px 0 0',\n              color: state.theme.palette.Grey\n            }),\n            option: (provided: any, state: Record<string, any>) => {\n              const getBgColor = () => {\n                if (state.isSelected) return state.theme.palette.Basic300;\n                if (state.isFocused) return state.theme.palette.Basic100;\n                return 'transparent';\n              };\n\n              return {\n                ...provided,\n                backgroundColor: getBgColor(),\n                color: state.theme.textColor,\n                padding: '14px',\n                fontSize: '13px',\n                fontFamily: state.theme.fontBase\n              };\n            }\n          }}\n          {...selectProps}\n          onChange={onChange}\n          value={value}\n        />\n      </div>\n    );\n  }\n);\n","import * as React from 'react';\n\ntype DivProps = React.DetailedHTMLProps<\n  React.HTMLAttributes<HTMLDivElement>,\n  HTMLDivElement\n>;\n\ninterface DropableAreaProps extends DivProps {}\n\nexport function DropableArea({ onDrop, ...props }: DropableAreaProps) {\n  useIgnoreDefaultWindowDragAndDrop();\n\n  return (\n    <div\n      onDragOver={e => {\n        // workaround for correct onDrop working\n        e.preventDefault();\n      }}\n      onDrop={e => {\n        // save event from reusing on event pooling,\n        // so we can use it for async operation (sush as drop)\n        // remove for React 17.0.0+\n        e.persist();\n\n        onDrop(e);\n      }}\n      {...props}\n    />\n  );\n}\n\nfunction useIgnoreDefaultWindowDragAndDrop() {\n  React.useEffect(() => {\n    const events = ['drop', 'dragover'];\n\n    const ignore = (e: DragEvent): void => {\n      e.preventDefault();\n    };\n\n    events.forEach(eventName => {\n      window.addEventListener(eventName, ignore);\n    });\n\n    return () => {\n      events.forEach(eventName => {\n        window.removeEventListener(eventName, ignore);\n      });\n    };\n  }, []);\n}\n","export function concatFilesWithoutDoubles(target: File[], files: File[]) {\n  const result = target.concat();\n  const isDouble = (file: File) => target.some(f => isSameFile(f, file));\n\n  for (const file of files) {\n    if (!isDouble(file)) {\n      result.push(file);\n    }\n  }\n\n  return result;\n}\n\nfunction isSameFile(f1: File, f2: File) {\n  return fileHash(f1) === fileHash(f2);\n}\n\nfunction fileHash(file: File) {\n  const filePropsCopy = {};\n\n  for (const prop in file) {\n    filePropsCopy[prop] = file[prop];\n  }\n\n  return JSON.stringify(filePropsCopy);\n}\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { DropableArea } from 'components/DropableArea';\nimport { concatFilesWithoutDoubles } from './utils';\n\ntype InputProps = React.DetailedHTMLProps<\n  React.InputHTMLAttributes<HTMLInputElement>,\n  HTMLInputElement\n>;\n\ntype DivProps = React.DetailedHTMLProps<\n  React.HTMLAttributes<HTMLDivElement>,\n  HTMLDivElement\n>;\n\ninterface FileInputProps extends Omit<DivProps, 'onChange' | 'onDrop'> {\n  value: File[];\n  onChange: (files: File[]) => void;\n  inputProps?: InputProps; // temporarily workaround\n  onDrop?: (files: File[]) => void;\n}\n\nexport const FileInput = React.forwardRef<HTMLInputElement, FileInputProps>(\n  function FileInput(\n    {\n      value = [],\n      onChange,\n      inputProps,\n      children,\n      onDrop = onChange,\n      ...wrapperProps\n    },\n    forwardedRef\n  ) {\n    return (\n      <DropableArea\n        onDrop={e => {\n          const files = Array.from(e.dataTransfer.files) as File[];\n          if (onDrop instanceof Function) {\n            onDrop(concatFilesWithoutDoubles(value, files));\n          }\n        }}\n        {...wrapperProps}\n      >\n        {children}\n\n        <HiddenInput\n          ref={forwardedRef}\n          type=\"file\"\n          onChange={e => {\n            const files = Array.from(e.target.files) as File[];\n            onChange(concatFilesWithoutDoubles(value, files));\n\n            // clear input value\n            e.target.value = '';\n          }}\n          {...(inputProps as any)} // temporarily workaround\n        />\n      </DropableArea>\n    );\n  }\n);\n\nconst HiddenInput = styled.input`\n  display: none;\n`;\n","import * as React from 'react';\nimport { ENDPOINTS } from 'services';\nimport styled from 'styled-components';\nimport fallbackUserPic from './unknown-person.svg';\n\ntype ImgProps = React.DetailedHTMLProps<\n  React.ImgHTMLAttributes<HTMLImageElement>,\n  HTMLImageElement\n>;\n\ninterface AvatarProps extends ImgProps {\n  size: string;\n  personId: string;\n  shape?: 'circle' | 'square';\n}\n\nexport function Avatar({\n  size,\n  personId,\n  shape = 'circle',\n  ...imgProps\n}: AvatarProps) {\n  const Component = shape === 'circle' ? RoundImage : BaseImage;\n\n  const imgRef = React.useRef<HTMLImageElement>(null);\n\n  React.useEffect(() => {\n    imgRef.current.onerror = () => {\n      imgRef.current.src = fallbackUserPic;\n    };\n  }, []);\n\n  return (\n    <Component\n      ref={imgRef}\n      width={size}\n      height={size}\n      alt=\"\"\n      src={ENDPOINTS.avatar(personId)}\n      {...(imgProps as any)}\n    />\n  );\n}\n\nconst BaseImage = styled.img``;\n\nconst RoundImage = styled(BaseImage)`\n  &,\n  &::before {\n    border-radius: 50%;\n  }\n`;\n","import { DownloadIcon } from './download-icon';\nimport { InternetIcon } from './internet-icon';\nimport { LocationIcon } from './location-icon';\n\nexport const glyphs = {\n  download: DownloadIcon,\n  internet: InternetIcon,\n  location: LocationIcon\n};\n","import * as React from 'react';\n\nexport function DocumentSVG() {\n  return (\n    <svg\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 8 12\"\n      style={{\n        height: '1em',\n        width: 'auto',\n        maxWidth: '8px',\n        marginTop: '5px'\n      }}\n    >\n      <path\n        d=\"M4.491 4.397h2.76l-2.76-2.93v2.93zm1.497 2.68V6H2.012v1.077h3.976zm0 2.128V8.128H2.012v1.077h3.976zM5.006.667L8 3.872v6.41c0 .283-.101.534-.304.75a.97.97 0 01-.702.301H1.006a.97.97 0 01-.702-.3A1.068 1.068 0 010 10.28l.023-8.563c0-.284.094-.526.281-.726.203-.217.437-.325.702-.325h4z\"\n        fill=\"#3B33B0\"\n      />\n    </svg>\n  );\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport { Form, MobxForm, Select } from '@we-ui-components/form';\nimport { useLocalStore } from 'mobx-react';\nimport { TActionModalProps } from 'components';\nimport styled from 'styled-components';\nimport { Button, Text, ISelectOption } from '@we-ui-components/base';\nimport { getRange, generateSimpleOptions, getCurrentYear } from 'utils';\n\nexport type ExportProjectsFormData = {\n  type: 'DISTRICT' | 'SCHOOL_GROUP';\n  year: number;\n};\n\ntype ExportProjectsModalProps = TActionModalProps<{}>;\n\nexport const ExportProjectsModal = observer<ExportProjectsModalProps>(\n  function ExportProjectsModal(props, forwardedRef) {\n    const formRef = React.useRef<MobxForm>();\n\n    const formData: ExportProjectsFormData = useLocalStore(() => ({\n      type: 'DISTRICT',\n      year: getCurrentYear()\n    }));\n\n    const handleSubmit = async () => {\n      const data: ExportProjectsFormData = await formRef.current.validateFields();\n      return data;\n    };\n\n    React.useImperativeHandle(forwardedRef, () => ({\n      onValidate: handleSubmit\n    }));\n\n    return (\n      <Box>\n        <Form ref={formRef} data={formData} {...({} as any)}>\n          <Box gap=\"8px\" margin={{ bottom: '24px' }}>\n            <Text size=\"13px\" color=\"Grey\">\n              Тип голосования*\n            </Text>\n\n            <Box direction=\"row\" gap=\"8px\">\n              <StyledButton\n                active={formData.type === 'DISTRICT'}\n                onClick={() => {\n                  formData.type = 'DISTRICT';\n                }}\n              >\n                Муниципальные образования\n              </StyledButton>\n\n              <StyledButton\n                active={formData.type === 'SCHOOL_GROUP'}\n                onClick={() => {\n                  formData.type = 'SCHOOL_GROUP';\n                }}\n              >\n                Школьные группы\n              </StyledButton>\n            </Box>\n          </Box>\n\n          <Select name=\"year\" options={generateOptions()} />\n        </Form>\n      </Box>\n    );\n  },\n  { forwardRef: true }\n);\n\nexport const StyledButton = styled(Button).attrs(() => ({\n  transparent: true\n}))<{\n  active: boolean;\n}>`\n  button {\n    color: ${computeButtonColor};\n    padding: 0;\n\n    &:hover {\n      color: ${computeButtonColor};\n    }\n  }\n`;\n\nfunction computeButtonColor(props: Record<string, any>) {\n  const palette = props?.theme?.palette || {};\n  return props.active ? palette.Purple : palette.Grey;\n}\n\nfunction generateOptions(): ISelectOption[] {\n  const START_YEAR = 2021;\n  return generateSimpleOptions(getRange(START_YEAR, getCurrentYear()));\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport { DocumentSVG } from 'pages/Archive/components/DocumentSVG';\nimport styled from 'styled-components';\nimport { IconButton } from 'ui/IconButton';\nimport { api, ENDPOINTS } from 'services';\nimport { createQS } from 'we-oauth2/lib/auth/api-utils';\nimport { download } from 'utils';\nimport {\n  ExportProjectsModal,\n  ExportProjectsFormData\n} from './ExportProjectsModal';\n\ninterface ExportProjectsButtonProps {}\n\nexport const ExportProjectsButton = observer<ExportProjectsButtonProps>(\n  function ExportProjectButton(props) {\n    const { actionModals } = useStores();\n\n    const handleDownloadReportClick = () => {\n      actionModals.open(ExportProjectsModal, {\n        width: '482px',\n        title: 'Скачать отчет',\n        applyText: () => <span>Создать</span>,\n        closeText: () => <span>Отмена</span>,\n        onApply: async ({ type, year }: ExportProjectsFormData) => {\n          const url = getDownloadURL(type, year);\n          download(url);\n        },\n        noValidation: true\n      });\n    };\n\n    return (\n      <StyledIconButton\n        onClick={handleDownloadReportClick}\n        renderIcon={() => <DocumentSVG />}\n      >\n        Скачать отчет\n      </StyledIconButton>\n    );\n  }\n);\n\nconst StyledIconButton = styled(IconButton)`\n  display: flex;\n  flex-flow: row no-wrap;\n`;\n\nfunction getDownloadURL(type: string, year: number) {\n  const endpoint = ENDPOINTS.exportProjects();\n  const access_token = api.getToken();\n\n  return endpoint + createQS({ type, year, access_token });\n}\n","import { createGlobalStyle } from 'styled-components';\n\nexport const GlobalStyle = createGlobalStyle<any>`\n  body {\n    font-family: ${props => props.theme.fontBase || 'Montserrat'};\n  }\n  \n  @-webkit-keyframes autofill {\n      to {\n          color: #666;\n          background: transparent;\n      }\n  }\n\n    input:-webkit-autofill {\n        -webkit-animation-name: autofill;\n        -webkit-animation-fill-mode: both;\n    }\n    \n    .ag-header-filter-with {\n      position: relative;\n      \n      &:before {\n        content: '';\n        position: absolute;\n        top: 50%;\n        left: 0;\n        width: 100%;\n        height: 1px;\n        background-color: #e7ecf7;\n        z-index: 2;\n      }\n    }\n\n  .react-tel-input input {\n    outline: none;\n  }\n`;\n","import * as React from 'react';\nimport { Title, Text } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport { IStores } from 'stores';\nimport { Form, Input, MobxForm, isRequired } from '@we-ui-components/form';\nimport { ButtonEx, Spinner2, Panel } from 'ui';\nimport { inject, observer } from 'mobx-react';\nimport { IStyledProps } from 'themes';\nimport { observable } from 'mobx';\nimport { withTheme } from 'styled-components';\n\ninterface ILogin {\n  login: string;\n  password: string;\n}\n\n@inject('user')\n@observer\nclass LoginPageClass extends React.Component<\n  IStyledProps & Pick<IStores, 'user'>\n> {\n  defaultData: ILogin = {\n    login: '',\n    password: ''\n  };\n\n  @observable data: ILogin = this.defaultData;\n\n  @observable isLoading = false;\n\n  formRef: MobxForm;\n\n  @observable error = '';\n\n  componentDidMount() {\n    window.addEventListener('keyup', this.enterPressListener);\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('keyup', this.enterPressListener);\n  }\n\n  enterPressListener = (e: KeyboardEvent) => {\n    if (e.key === 'Enter') this.onSubmit();\n  };\n\n  onSubmit = (event?: Event): void => {\n    const { user } = this.props;\n    this.formRef.validateFields().then((data: ILogin) => {\n      if (event) {\n        event.preventDefault();\n      }\n\n      this.isLoading = true;\n      user.loginEx(data.login, data.password).then(\n        () => {\n          this.isLoading = false;\n        },\n        () => {\n          this.isLoading = false;\n          this.error = 'Введен неверный логин или пароль';\n        }\n      );\n    });\n  };\n\n  render() {\n    const { theme } = this.props;\n    return (\n      <Box\n        style={{\n          backgroundColor: theme.palette.LightGrey,\n          backgroundSize: '100%',\n          backgroundRepeat: 'no-repeat'\n        }}\n        height={{ min: '100vh' }}\n        width={{ min: '100vw' }}\n      >\n        <Box\n          align=\"center\"\n          justify=\"center\"\n          style={{ margin: 'auto' }}\n          direction=\"row\"\n          gap=\"30px\"\n        >\n          <Panel align=\"center\" width=\"544px\" pad=\"32px\">\n            <Box style={{ paddingBottom: 33, width: '100%' }}>\n              <Box direction=\"row\" gap=\"10px\" align=\"baseline\">\n                <Title style={{ fontSize: '26px' }} color=\"Black\" bold>\n                  Добро пожаловать в систему инициативного голосования\n                  Волгоградской области\n                </Title>\n              </Box>\n            </Box>\n            <Form\n              ref={(ref: any): void => (this.formRef = ref)}\n              data={this.data}\n            >\n              <Input\n                placeholder=\"Введите email\"\n                name=\"login\"\n                rules={[isRequired]}\n              />\n              <Input\n                placeholder=\"Введите пароль\"\n                name=\"password\"\n                style={{ marginTop: 18 }}\n                type=\"password\"\n                rules={[isRequired]}\n              />\n            </Form>\n\n            {this.error && (\n              <Box align=\"center\" style={{ paddingTop: '10px' }}>\n                <Text size=\"small\" color=\"Red\">\n                  {this.error}\n                </Text>\n              </Box>\n            )}\n\n            <ButtonEx\n              style={{\n                marginTop: 18,\n                width: '481px',\n                height: 46,\n                alignItems: 'center',\n                fontSize: '13px'\n              }}\n              spinnerRender={\n                <Spinner2\n                  height=\"16px\"\n                  width=\"16px\"\n                  color=\"white\"\n                  style={{ marginRight: 5 }}\n                />\n              }\n              fontSize=\"18px\"\n              isLoading={this.isLoading}\n              onClick={() => {\n                this.onSubmit();\n              }}\n            >\n              Войти\n            </ButtonEx>\n          </Panel>\n        </Box>\n      </Box>\n    );\n  }\n}\n\nexport const LoginPage = withTheme(LoginPageClass as any);\n","import { createValidate } from 'utils';\n\nexport const PASSWORD_SPECIAL_SYMBOLS = ' !\"#$%&\\'()*+,-./:;<=>?@[]^_`{|}~';\n\nexport const passwordChecks = {\n  hasForbiddenSymbols: (value: string) =>\n    !/^[a-z0-9 !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]+$/gi.test(value),\n  noUpperCase: (value: string) => !/[A-Z]/.test(value),\n  noLowerCase: (value: string) => !/[a-z]/.test(value),\n  noDigits: (value: string) => !/\\d/.test(value),\n  noSpecialSymbols: (value: string) =>\n    !/[ !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]/.test(value)\n};\n\nconst validationMessage = 'Выполнены не все условия';\n\nconst onlyAllowedValidator = createValidate(\n  passwordChecks.hasForbiddenSymbols,\n  validationMessage\n);\n\nconst upperCaseValidator = createValidate(\n  passwordChecks.noUpperCase,\n  validationMessage\n);\n\nconst lowerCaseValidator = createValidate(\n  passwordChecks.noLowerCase,\n  validationMessage\n);\n\nconst digitsValidator = createValidate(\n  passwordChecks.noDigits,\n  validationMessage\n);\n\nconst specialValidator = createValidate(\n  passwordChecks.noSpecialSymbols,\n  validationMessage\n);\n\nexport const passwordValidators = [\n  onlyAllowedValidator,\n  upperCaseValidator,\n  lowerCaseValidator,\n  digitsValidator,\n  specialValidator\n];\n","import * as React from 'react';\nimport { Icon, Text } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport { passwordChecks, PASSWORD_SPECIAL_SYMBOLS } from './registration.utils';\n\nexport function PasswordHint({ password }: { password: string }) {\n  const isValidLength = password.length >= 8 && password.length <= 14;\n  const hasForbiddenSymbols =\n    password.length > 0 && passwordChecks.hasForbiddenSymbols(password);\n\n  const hasAllCases = !(\n    passwordChecks.noLowerCase(password) || passwordChecks.noUpperCase(password)\n  );\n\n  return (\n    <Box>\n      <Row>\n        <StatusIcon ok={isValidLength} />\n        <HintText>Не менее 8 и не более 14 символов</HintText>\n      </Row>\n\n      <Row>\n        <StatusIcon ok={hasAllCases} />\n        <HintText>Заглавные и строчные буквы латинского алфавита</HintText>\n      </Row>\n\n      <Row>\n        <StatusIcon ok={!passwordChecks.noDigits(password)} />\n        <HintText>Цифры</HintText>\n      </Row>\n\n      <Row align=\"start\">\n        <Box margin={{ top: '3px' }}>\n          <StatusIcon ok={!passwordChecks.noSpecialSymbols(password)} />\n        </Box>\n        <Box>\n          <HintText>Специальные символы: </HintText>\n          <HintText>{PASSWORD_SPECIAL_SYMBOLS}</HintText>\n        </Box>\n      </Row>\n\n      {hasForbiddenSymbols && (\n        <Row>\n          <StatusIcon ok={!hasForbiddenSymbols} />\n          <HintText>Запрещенные символы</HintText>\n        </Row>\n      )}\n    </Box>\n  );\n}\n\nconst Row: typeof Box = props => <Box direction=\"row\" gap=\"5px\" {...props} />;\n\nfunction HintText(props: any) {\n  return <Text size=\"xsmall\" {...props} />;\n}\n\nfunction StatusIcon({ ok }: { ok: boolean }) {\n  return ok ? <OkIcon /> : <ErrorIcon />;\n}\n\nconst OkIcon = () => <Icon glyph=\"Check\" color=\"Green\" size=\"12px\" />;\nconst ErrorIcon = () => <Icon glyph=\"Close\" color=\"Red\" size=\"12px\" />;\n","import * as React from 'react';\n// @ts-ignore\nimport PhoneNumberInput from 'react-phone-number-input/input';\nimport { FieldWrapper, TextInput } from '@we-ui-components/base';\nimport { createField } from '@we-ui-components/form';\nimport { commonInputStyles } from './components';\n\ninterface PhoneInputProps {\n  value: string;\n  onChange: (value: string) => void;\n}\n\nexport function PhoneInputComponent(props: PhoneInputProps) {\n  return (\n    <PhoneNumberInput\n      placeholder=\"+7 999 123 45 67*\"\n      inputComponent={StyledTextInput}\n      international\n      countryCallingCodeEditable={false}\n      withCountryCallingCode\n      limitMaxLength={true}\n      country=\"RU\"\n      {...props}\n      onChange={(value = '') => props.onChange(value)}\n    />\n  );\n}\n\nconst StyledTextInput = React.forwardRef<any, any>((props, ref) => (\n  <TextInput style={commonInputStyles} ref={ref} {...props} />\n));\n\nexport const PhoneInput = createField<any>({\n  component: PhoneInputComponent,\n  wrapper: FieldWrapper\n});\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { Text } from '@we-ui-components/base';\nimport { StyledAnchorElement } from 'ui';\n\nexport const Footer: typeof Box = props => {\n  const userAgreementURL = () => {\n    const fileName = 'Пользовательское соглашение.pdf';\n    return encodeURI(`/${fileName}`);\n  };\n\n  return (\n    <Box {...props}>\n      <Row>\n        <SmallText>\n          Нажимая на кнопку “Создать аккаунт” вы подтверждаете, что ознакомились\n        </SmallText>\n      </Row>\n\n      <Row>\n        <SmallText> и принимаете </SmallText>\n        <StyledAnchorElement\n          style={{\n            textDecoration: 'none',\n            fontSize: '11px',\n            marginLeft: '5px'\n          }}\n          download\n          href={userAgreementURL()}\n        >\n          Пользовательское соглашение\n        </StyledAnchorElement>\n      </Row>\n    </Box>\n  );\n};\n\nconst Row: typeof Box = props => (\n  <Box direction=\"row\" align=\"baseline\" justify=\"center\" {...props} />\n);\n\nconst SmallText = (props: React.PropsWithChildren<{}>) => (\n  <Text size=\"11px\" color=\"Basic700\" {...props} />\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Box, BoxProps } from 'grommet';\nimport { Form, isEmail, isRequired, MobxForm } from '@we-ui-components/form';\nimport {\n  allowEmpty,\n  isCorrectLastName,\n  isLengthBetween,\n  isTheSameAs,\n  oneOfLengths,\n  P\n} from 'utils';\nimport { Text } from '@we-ui-components/base';\nimport { Panel, Error as ErrorUI, ButtonEx, StyledRouterLink } from 'ui';\nimport { StyledInput, WelcomeMessage } from './components';\nimport { PasswordHint } from './PasswordHint';\nimport { PhoneInput } from './PhoneInput';\nimport { Footer } from './Footer';\nimport { Routes } from '../../constants';\nimport { useLocalStore } from 'mobx-react';\nimport { passwordValidators } from './registration.utils';\nimport * as bcrypt from 'bcryptjs';\nimport { useStores } from 'stores';\n\nexport const RegistrationFormPanel = observer<BoxProps>(\n  function RegistrationFormPanel(props) {\n    const formRef = React.useRef<MobxForm>();\n    const { user: userStore } = useStores();\n    const [networkError, setNetworkError] = React.useState<string>();\n    const [requestSending, setRequestSending] = React.useState(false);\n\n    const [passwordHintVisible, setPasswordHintVisible] = React.useState(false);\n\n    const user = useLocalStore<UserFormData>(() => {\n      return {\n        surname: '',\n        name: '',\n        patronymic: '',\n        phoneNumber: '+7',\n        email: '',\n        password: '',\n        repeatPassword: ''\n      };\n    });\n\n    const handleSubmit = async () => {\n      const formData = (await formRef.current.validateFields()) as UserFormData;\n\n      try {\n        setRequestSending(true);\n\n        await userStore.registration({\n          name: formData.name,\n          surname: formData.surname,\n          email: formData.email,\n          patronymic: formData.patronymic,\n          phoneNumber: formData.phoneNumber,\n          encodedPassword: bcrypt.hashSync(formData.password)\n        });\n\n        await userStore.login(formData.email, formData.password);\n      } catch (error) {\n        setNetworkError(\n          error?.detail || 'Неизвестная ошибка. Повторите попытку позже'\n        );\n      } finally {\n        setRequestSending(false);\n      }\n    };\n\n    return (\n      <Panel width=\"736px\" pad=\"32px\" style={{ zIndex: 2 }} {...props}>\n        <WelcomeMessage />\n\n        <Form ref={formRef} data={user} {...({} as any)}>\n          <Box justify=\"between\" direction=\"row\">\n            <StyledInput\n              placeholder=\"Фамилия*\"\n              name={P<UserFormData>(u => u.surname)}\n              rules={[isRequired, isLengthBetween(2, 20), isCorrectLastName]}\n            />\n            <StyledInput\n              placeholder=\"Имя*\"\n              name={P<UserFormData>(u => u.name)}\n              rules={[isRequired, isLengthBetween(2, 20), isCorrectLastName]}\n            />\n          </Box>\n\n          <StyledInput\n            placeholder=\"Отчество\"\n            name={P<UserFormData>(u => u.patronymic)}\n            rules={[\n              allowEmpty(isLengthBetween(2, 20)),\n              allowEmpty(isCorrectLastName)\n            ]}\n          />\n\n          <Box justify=\"between\" direction=\"row\">\n            <PhoneInput\n              name=\"phoneNumber\"\n              rules={[\n                isRequired,\n                oneOfLengths([12], 'Введите корректный номер')\n              ]}\n            />\n\n            <StyledInput\n              placeholder=\"Email*\"\n              name={P<UserFormData>(u => u.email)}\n              rules={[isRequired, isEmail]}\n            />\n          </Box>\n\n          <Box justify=\"between\" direction=\"row\">\n            <Box width=\"320px\">\n              <StyledInput\n                name={P<UserFormData>(u => u.password)}\n                onFocus={() => {\n                  setPasswordHintVisible(true);\n                }}\n                onBlur={() => {\n                  setPasswordHintVisible(false);\n                }}\n                placeholder=\"Пароль*\"\n                type=\"password\"\n                rules={[\n                  isRequired,\n                  isLengthBetween(8, 14),\n                  ...passwordValidators\n                ]}\n                {...({} as any)}\n              />\n            </Box>\n\n            <StyledInput\n              name={P<UserFormData>(u => u.repeatPassword)}\n              placeholder=\"Повторите пароль*\"\n              type=\"password\"\n              rules={[\n                isRequired,\n                isTheSameAs('password', 'Пароли не совпадают')\n              ]}\n            />\n          </Box>\n\n          {passwordHintVisible && <PasswordHint password={user.password} />}\n        </Form>\n\n        {networkError && (\n          <ErrorUI style={{ marginTop: '10px' }} error={networkError} />\n        )}\n\n        <Box\n          margin={{ vertical: '16px' }}\n          direction=\"row\"\n          justify=\"between\"\n          align=\"center\"\n        >\n          <Text>\n            Уже есть аккаунт?{' '}\n            <StyledRouterLink to={`/${Routes.loginOrganizer}`}>\n              Войдите\n            </StyledRouterLink>\n          </Text>\n\n          <ButtonEx\n            isLoading={requestSending}\n            onClick={() => {\n              handleSubmit();\n            }}\n            pad={{ horizontal: '40px', vertical: '14px' }}\n          >\n            Создать аккаунт\n          </ButtonEx>\n        </Box>\n\n        <Footer />\n      </Panel>\n    );\n  }\n);\n\ntype UserFormData = {\n  surname: string;\n  name: string;\n  patronymic: string;\n  phoneNumber: string;\n  email: string;\n  password: string;\n  repeatPassword: string;\n};\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { Title, NumberInput } from '@we-ui-components/base';\nimport { Panel, Error as ErrorUI, ButtonEx } from 'ui';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport { applyMask } from 'utils';\n\nexport const VerifyPhonePage = observer(() => {\n  const [confirmationCode, setConfirmationCode] = React.useState('');\n  const { user } = useStores();\n  const phoneNumber = applyMask(\n    hidePhone(user.userInfo.phone, { start: 5, amount: 5 }),\n    'NN (NNN) NNN-NN-NN'\n  );\n\n  const [error, setError] = React.useState('');\n  const [sending, setSending] = React.useState(false);\n\n  const handleSumbit = async () => {\n    try {\n      setSending(true);\n      await user.verify(confirmationCode);\n    } catch (error) {\n      setError(error?.detail || 'Неизвестная ошибка. Повторите попытку позже');\n    } finally {\n      setSending(false);\n    }\n  };\n\n  return (\n    <Box align=\"center\" margin={{ top: '39px' }}>\n      <Panel width=\"736px\" pad=\"32px\" margin={{ top: '27px' }} gap=\"16px\">\n        <Title>\n          На номер {phoneNumber} отправлено смс с кодом подтверждения\n        </Title>\n\n        <NumberInput\n          value={confirmationCode}\n          onChange={value => {\n            setError('');\n            setConfirmationCode(value);\n          }}\n          style={{ padding: '18px 16px', width: '320px' }}\n        />\n\n        {error && <ErrorUI error={error} />}\n\n        <ButtonEx\n          isLoading={sending}\n          disabled={confirmationCode.length === 0}\n          onClick={() => {\n            handleSumbit();\n          }}\n        >\n          Подтвердить\n        </ButtonEx>\n      </Panel>\n    </Box>\n  );\n});\n\nfunction hidePhone(\n  phone: string,\n  {\n    start,\n    amount,\n    char = '*'\n  }: { start: number; amount: number; char?: string }\n) {\n  const end = start + amount;\n  const between = (value: number) => value >= start && value < end;\n\n  return phone\n    .split('')\n    .map((it, index) => (between(index) ? char : it))\n    .join('');\n}\n","import React from 'react';\nimport { Box } from 'grommet';\nimport { observer } from 'mobx-react';\nimport { observable } from 'mobx';\nimport styled from 'styled-components';\nimport { lighten } from 'polished';\n\ninterface IWizardProps {\n  style?: React.CSSProperties;\n  steps: IWizardStepProps[];\n  footer: React.FC<{\n    currentStep: number;\n    isFirst: boolean;\n    isLast: boolean;\n    changeStep: (step: number) => void;\n  }>;\n}\n\ninterface IWizardStepProps {\n  title: string;\n  render: React.FC;\n}\n\n@observer\nexport class Wizard extends React.Component<IWizardProps> {\n  @observable currentStep: number = 1;\n\n  changeStep = (step: number) => {\n    this.currentStep = step;\n  };\n\n  render() {\n    const { style, steps, footer } = this.props;\n    const Footer = footer;\n    return (\n      <Box style={style}>\n        <Box\n          direction=\"row\"\n          style={{ width: '100%', borderRadius: '6px', overflow: 'hidden' }}\n        >\n          {steps.map((step, i) => (\n            <WizardHeaderTab\n              key={step.title}\n              isPassed={this.currentStep > i + 1}\n              isActive={this.currentStep === i + 1}\n              style={{ width: `${(100 / steps.length).toFixed(2)}%` }}\n            >\n              {step.title}\n            </WizardHeaderTab>\n          ))}\n        </Box>\n        <Box>\n          {steps.map((step, i) => {\n            const Step = step.render;\n            const isActive = this.currentStep === i + 1;\n            return (\n              <Box\n                style={{\n                  height: isActive ? 'auto' : 0,\n                  overflow: isActive ? 'visible' : 'hidden'\n                }}\n              >\n                <Step />\n              </Box>\n            );\n          })}\n        </Box>\n        <Box>\n          <Footer\n            currentStep={this.currentStep}\n            changeStep={this.changeStep}\n            isFirst={this.currentStep === 1}\n            isLast={this.currentStep === steps.length}\n          />\n        </Box>\n      </Box>\n    );\n  }\n}\n\ninterface IHeaderTabProps {\n  isPassed: boolean;\n  isActive: boolean;\n  style: React.CSSProperties;\n  children: React.ReactNode;\n}\n\nconst WizardHeaderTab = (props: IHeaderTabProps) => (\n  <WizardTab\n    style={props.style}\n    justify=\"center\"\n    align=\"center\"\n    isPassed={props.isPassed}\n    isActive={props.isActive}\n  >\n    {props.children}\n  </WizardTab>\n);\n\nconst WizardTab = styled(Box)<{ isPassed: boolean; isActive: boolean }>`\n  height: 32px;\n  color: ${props =>\n    props.isPassed || props.isActive\n      ? props.theme.palette.White\n      : props.theme.palette.Black};\n  background-color: ${props =>\n    props.isPassed || props.isActive\n      ? props.theme.styled.colors.colorPrimary\n      : '#EFEFEF'};\n  transition: 0.2s all;\n  outline: none;\n`;\n","import React from 'react';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { Box } from 'grommet';\nimport { Text } from '@we-ui-components/base';\nimport { TextInput } from '@we-ui-components/base';\n\ninterface IProps {\n  options: any[];\n  onChange: (value: string, filteredOptions: any[]) => void;\n  searchString: string;\n  searchPlaceholder: string;\n  checkedOptionsLength: number;\n}\n\n@observer\nexport class FilterSearchArea extends React.Component<IProps> {\n  filteredOptions(value) {\n    const { options } = this.props;\n    if (!value) {\n      return [];\n    }\n\n    return options.filter(\n      option => option.name.toLowerCase().indexOf(value.toLowerCase()) > -1\n    );\n  }\n\n  onChange = value => {\n    this.props.onChange(value, this.filteredOptions(value));\n  };\n\n  render() {\n    const {\n      searchPlaceholder,\n      searchString,\n      checkedOptionsLength\n    } = this.props;\n    return (\n      <Box>\n        <Box direction=\"row\" gap=\"medium\" margin={{ bottom: 'small' }}>\n          <Text bold>{this.props.options.length} МО в списке</Text>\n          <Text bold>{checkedOptionsLength} выбрано</Text>\n        </Box>\n        <TextInput\n          renderLeft={() => <div>icon</div>}\n          placeholder={searchPlaceholder}\n          onChange={this.onChange}\n          size=\"xxlarge\"\n          value={searchString}\n        />\n      </Box>\n    );\n  }\n}\n","import React from 'react';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { Text } from '@we-ui-components/base';\nimport groupSVG from './group.svg';\nimport citySVG from './location_city.svg';\n\nexport interface IRegionCheckbox {\n  checked: boolean;\n  searched: boolean;\n  disabled: boolean;\n  onClick: () => void;\n  text: string;\n}\n\nexport const RegionBox = (props: IRegionCheckbox) => {\n  const { checked, searched, disabled, text, onClick } = props;\n  return (\n    <RegionCheckboxWrap\n      searched={searched}\n      disabled={disabled}\n      direction=\"row\"\n      align=\"center\"\n      onClick={() => !disabled && onClick()}\n    >\n      <CheckboxIcon checked={checked} />\n      <div>{text}</div>\n    </RegionCheckboxWrap>\n  );\n};\n\nfunction getCount(str: string) {\n  const numbers = str\n    .split(' ')\n    .filter(i => !isNaN(Number(i)))\n    .map(i => +i);\n  if (numbers.length === 1) {\n    if (numbers[0] < 100) {\n      numbers.unshift(0);\n    } else {\n      return `${numbers[0]}+`;\n    }\n  }\n\n  numbers[1] = numbers[1] - 1;\n\n  return numbers.join(' - ');\n}\n\nexport interface ISchoolCheckbox extends IRegionCheckbox {\n  text: string;\n  personalCount: number;\n}\n\nexport const SchoolBox = (props: ISchoolCheckbox) => {\n  const { checked, searched, disabled, text, onClick, personalCount } = props;\n  const count = getCount(text);\n\n  return (\n    <RegionCheckboxWrap\n      searched={searched}\n      disabled={disabled}\n      direction=\"row\"\n      align=\"center\"\n      onClick={() => !disabled && onClick()}\n    >\n      <CheckboxIcon checked={checked} />\n      <Box gap=\"3px\">\n        <Text\n          size=\"xsmall\"\n          style={{\n            maxWidth: '240px',\n            whiteSpace: 'nowrap',\n            textOverflow: 'ellipsis',\n            overflow: 'hidden'\n          }}\n        >\n          {text}\n        </Text>\n        <Box direction=\"row\" gap=\"xsmall\" align=\"center\">\n          <img src={groupSVG} alt=\"\" />\n          <Text bold size=\"xxsmall\">\n            {count}\n          </Text>\n        </Box>\n      </Box>\n      {/*<Box*/}\n      {/*  direction=\"row\"*/}\n      {/*  justify=\"end\"*/}\n      {/*  align=\"center\"*/}\n      {/*  gap=\"xsmall\"*/}\n      {/*  style={{ flex: '1' }}*/}\n      {/*>*/}\n      {/*  <Text size=\"small\" bold>*/}\n      {/*    {personalCount}*/}\n      {/*  </Text>*/}\n      {/*  <img src={citySVG} alt=\"\" />*/}\n      {/*</Box>*/}\n    </RegionCheckboxWrap>\n  );\n};\n\nexport const RegionCheckboxWrap = styled(Box)<{\n  searched: boolean;\n  disabled: boolean;\n}>`\n  width: 314px;\n  max-width: 25%;\n  padding: 17px;\n  margin-bottom: 12px;\n  margin-left: 12px;\n  background-color: #efefef;\n  border-radius: 4px;\n  border: 3px solid ${props => (props.searched ? '#3B33B0' : '#EFEFEF')};\n  opacity: ${props => (props.disabled ? '0.3' : '1')};\n  transition: 0.2s all;\n  cursor: ${props => (props.disabled ? 'auto' : 'pointer')};\n  overflow: hidden;\n\n  * {\n    user-select: none;\n  }\n`;\n\nexport const CheckboxIcon = (props: { checked: boolean }) => {\n  return (\n    <CheckboxWrap>\n      <CheckboxMark checked={props.checked} />\n    </CheckboxWrap>\n  );\n};\n\nconst CheckboxWrap = styled.div`\n  display: flex;\n  width: 14px;\n  height: 14px;\n  padding: 2px;\n  border: 3px solid #3b33b0;\n  border-radius: 5px;\n  margin-right: 12px;\n  flex: 0 0 auto;\n`;\n\nconst CheckboxMark = styled.div<{ checked: boolean }>`\n  width: 100%;\n  height: 100%;\n  border-radius: 4px;\n  background-color: ${props => (props.checked ? '#3B33B0' : 'transparent')};\n`;\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTAiIHZpZXdCb3g9IjAgMCAxNiAxMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEwLjY1NjIgNS42NTYyNUMxMS4yMzk2IDUuNjU2MjUgMTEuODc1IDUuNzM5NTggMTIuNTYyNSA1LjkwNjI1QzEzLjI1IDYuMDcyOTIgMTMuODg1NCA2LjM0Mzc1IDE0LjQ2ODggNi43MTg3NUMxNS4wNTIxIDcuMDkzNzUgMTUuMzQzOCA3LjUyMDgzIDE1LjM0MzggOFY5LjY1NjI1SDExLjM0MzhWOEMxMS4zNDM4IDcuMDgzMzMgMTAuOTA2MiA2LjMxMjUgMTAuMDMxMiA1LjY4NzVDMTAuMTc3MSA1LjY2NjY3IDEwLjM4NTQgNS42NTYyNSAxMC42NTYyIDUuNjU2MjVaTTMuNDM3NSA1LjkwNjI1QzQuMTI1IDUuNzM5NTggNC43NjA0MiA1LjY1NjI1IDUuMzQzNzUgNS42NTYyNUM1LjkyNzA4IDUuNjU2MjUgNi41NjI1IDUuNzM5NTggNy4yNSA1LjkwNjI1QzcuOTM3NSA2LjA3MjkyIDguNTYyNSA2LjM0Mzc1IDkuMTI1IDYuNzE4NzVDOS43MDgzMyA3LjA5Mzc1IDEwIDcuNTIwODMgMTAgOFY5LjY1NjI1SDAuNjU2MjVWOEMwLjY1NjI1IDcuNTIwODMgMC45NDc5MTcgNy4wOTM3NSAxLjUzMTI1IDYuNzE4NzVDMi4xMTQ1OCA2LjM0Mzc1IDIuNzUgNi4wNzI5MiAzLjQzNzUgNS45MDYyNVpNNi43MTg3NSAzLjc1QzYuMzQzNzUgNC4xNDU4MyA1Ljg4NTQyIDQuMzQzNzUgNS4zNDM3NSA0LjM0Mzc1QzQuODAyMDggNC4zNDM3NSA0LjMzMzMzIDQuMTQ1ODMgMy45Mzc1IDMuNzVDMy41NDE2NyAzLjM1NDE3IDMuMzQzNzUgMi44ODU0MiAzLjM0Mzc1IDIuMzQzNzVDMy4zNDM3NSAxLjgwMjA4IDMuNTQxNjcgMS4zMzMzMyAzLjkzNzUgMC45Mzc1QzQuMzMzMzMgMC41NDE2NjcgNC44MDIwOCAwLjM0Mzc1IDUuMzQzNzUgMC4zNDM3NUM1Ljg4NTQyIDAuMzQzNzUgNi4zNDM3NSAwLjU0MTY2NyA2LjcxODc1IDAuOTM3NUM3LjExNDU4IDEuMzMzMzMgNy4zMTI1IDEuODAyMDggNy4zMTI1IDIuMzQzNzVDNy4zMTI1IDIuODg1NDIgNy4xMTQ1OCAzLjM1NDE3IDYuNzE4NzUgMy43NVpNMTIuMDYyNSAzLjc1QzExLjY2NjcgNC4xNDU4MyAxMS4xOTc5IDQuMzQzNzUgMTAuNjU2MiA0LjM0Mzc1QzEwLjExNDYgNC4zNDM3NSA5LjY0NTgzIDQuMTQ1ODMgOS4yNSAzLjc1QzguODU0MTcgMy4zNTQxNyA4LjY1NjI1IDIuODg1NDIgOC42NTYyNSAyLjM0Mzc1QzguNjU2MjUgMS44MDIwOCA4Ljg1NDE3IDEuMzMzMzMgOS4yNSAwLjkzNzVDOS42NDU4MyAwLjU0MTY2NyAxMC4xMTQ2IDAuMzQzNzUgMTAuNjU2MiAwLjM0Mzc1QzExLjE5NzkgMC4zNDM3NSAxMS42NjY3IDAuNTQxNjY3IDEyLjA2MjUgMC45Mzc1QzEyLjQ1ODMgMS4zMzMzMyAxMi42NTYyIDEuODAyMDggMTIuNjU2MiAyLjM0Mzc1QzEyLjY1NjIgMi44ODU0MiAxMi40NTgzIDMuMzU0MTcgMTIuMDYyNSAzLjc1WiIgZmlsbD0iIzhEOEQ4RCIvPgo8L3N2Zz4K\"","import React from 'react';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { Box } from 'grommet';\nimport { RegionBox, SchoolBox } from './components';\nimport { IGroupObject } from '../Step1';\n\ninterface IProps {\n  searchedOptions: IGroupObject[];\n  options: IGroupObject[];\n  value: IGroupObject[];\n  displayType: 'REGIONS' | 'SCHOOL_PARTY';\n  onChange: (objects: IGroupObject[]) => void;\n}\n\n@observer\nexport class RegionList extends React.Component<IProps> {\n  @computed\n  get propertiesList() {\n    const { options, searchedOptions, value } = this.props;\n    const searched = searchedOptions.reduce((res, region) => {\n      res[region.value] = true;\n      return res;\n    }, {});\n\n    const checked = value.reduce((res, region) => {\n      res[region.value] = true;\n      return res;\n    }, {});\n\n    const disabled = options.reduce((res, region) => {\n      if (region.disabled) {\n        res[region.value] = true;\n      }\n      return res;\n    }, {});\n\n    return options.reduce((accum, region) => {\n      accum[region.value] = {\n        searched: !!searched[region.value],\n        checked: !!checked[region.value],\n        disabled: !!disabled[region.value]\n      };\n      return accum;\n    }, {});\n  }\n\n  get disabledOptions() {\n    return Object.values(this.propertiesList).filter(\n      (i: any) => i.disabled\n    ) as IGroupObject[];\n  }\n\n  checkRegion = (regionValue: number, checked: boolean) => {\n    const { options, value, onChange } = this.props;\n    if (checked) {\n      const region = options.find(i => i.value === regionValue);\n      return onChange(value.concat([region]));\n    }\n\n    onChange(value.filter(i => i.value !== regionValue));\n  };\n\n  checkAll = () => {\n    const { options, value, onChange } = this.props;\n\n    options.length - this.disabledOptions.length === value.length\n      ? onChange([])\n      : onChange(\n          options\n            .filter(i => !i.disabled)\n            .filter(i => !this.disabledOptions.find(j => j.value === i.value))\n        );\n  };\n\n  render() {\n    const { options, value, displayType } = this.props;\n\n    const DisplayBox =\n      displayType === 'REGIONS' ? RegionBox : (SchoolBox as any);\n    return (\n      <Box style={{ marginLeft: '-12px', marginTop: '16px' }}>\n        <RegionBox\n          searched={false}\n          disabled={false}\n          checked={\n            options.length - this.disabledOptions.length === value.length\n          }\n          text=\"Выбрать все\"\n          onClick={this.checkAll}\n        />\n        <Box direction=\"row\" style={{ flexWrap: 'wrap' }}>\n          {this.props.options.map(region => {\n            const { checked, searched, disabled } = this.propertiesList[\n              region.value\n            ];\n            return (\n              <DisplayBox\n                key={region.value}\n                checked={checked}\n                searched={searched}\n                disabled={disabled}\n                onClick={() => this.checkRegion(region.value, !checked)}\n                text={region.name}\n                personalCount={region.activeProjectsCount}\n              />\n            );\n          })}\n        </Box>\n      </Box>\n    );\n  }\n}\n","import React from 'react';\nimport { observer } from 'mobx-react';\nimport { Box } from 'grommet';\nimport { Form, Select, RadioGroup } from '@we-ui-components/form';\nimport { Text } from '@we-ui-components/base';\nimport { isRequired } from 'utils/validators';\nimport { FilterSearchArea } from './FilterSearchArea';\nimport { observable } from 'mobx';\nimport { RegionList } from './RegionList';\nimport { getCurrentYear } from 'utils/misc';\n\ninterface IProps {\n  getRef: (form: any) => void;\n  data: INewVote1Step;\n  onChange: (value: any, key: string) => void;\n  districts: IDistrict[];\n  schoolRegions: IDistrict[];\n  errorText?: string;\n}\n\nexport interface INewVote1Step {\n  type: 'REGIONS' | 'SCHOOL_PARTY';\n  directory: TDirectory;\n  objects: IGroupObject[];\n}\n\nexport interface IDistrict {\n  id: number;\n  name: string;\n  hasPoll: boolean;\n  status: string;\n  statusDueDate: string;\n  activeProjectsCount: number;\n  disabled?: boolean;\n  type: 'DISTRICT' | 'SCHOOL_GROUP';\n}\n\ntype TDirectory = 'ACTUAL_REGIONS_2023' | 'ACTUAL_SCHOOL_PARTY_2023';\n\nexport interface IGroupObject {\n  name: string;\n  value: number;\n  activeProjectsCount?: number;\n  disabled?: boolean;\n}\n\n@observer\nexport class Step1 extends React.Component<IProps> {\n  @observable filteredOptions: any[] = [];\n  @observable searchString: string = '';\n  onChangeFilter = (value, filteredOptions) => {\n    this.searchString = value;\n    this.filteredOptions = filteredOptions;\n  };\n\n  onChangeVotingType = (value: string) => {\n    this.searchString = '';\n    this.filteredOptions = [];\n    this.props.onChange(value, 'type');\n  };\n\n  render() {\n    const {\n      getRef,\n      data,\n      onChange,\n      errorText,\n      districts,\n      schoolRegions\n    } = this.props;\n    const { type } = data;\n\n    const regionOptions = districts.map(i => ({\n      name: i.name,\n      value: i.id,\n      disabled: i.hasPoll\n    }));\n    const schoolGroupOptions = schoolRegions.map(i => ({\n      name: i.name,\n      value: i.id,\n      activeProjectsCount: i.activeProjectsCount,\n      disabled: i.hasPoll\n    }));\n\n    return (\n      <Box margin={{ vertical: 'medium' }}>\n        <Form ref={getRef} data={data}>\n          <RadioGroup\n            name=\"type\"\n            label=\"Тип голосования\"\n            size=\"auto\"\n            direction=\"row\"\n            displayMode=\"stickers\"\n            options={typeOptions}\n            rules={[isRequired()]}\n            onChange={this.onChangeVotingType}\n          />\n          <Box margin={{ bottom: 'small' }}>\n            {type === 'REGIONS' && (\n              <Select\n                name=\"directory\"\n                placeholder=\"Справочник\"\n                size=\"xxlarge\"\n                options={directoryRegionsOptions}\n                rules={[isRequired()]}\n              />\n            )}\n            {type === 'SCHOOL_PARTY' && (\n              <Select\n                name=\"directory\"\n                placeholder=\"Справочник\"\n                size=\"xxlarge\"\n                options={directorySchoolGroupsOptions}\n                rules={[isRequired()]}\n              />\n            )}\n          </Box>\n          <FilterSearchArea\n            options={type === 'REGIONS' ? regionOptions : schoolGroupOptions}\n            onChange={this.onChangeFilter}\n            searchString={this.searchString}\n            checkedOptionsLength={this.props.data.objects.length}\n            searchPlaceholder={\n              type === 'SCHOOL_PARTY'\n                ? 'Поиск по школьным группам'\n                : 'Поиск по МО'\n            }\n          />\n          <RegionList\n            displayType={type}\n            options={type === 'REGIONS' ? regionOptions : schoolGroupOptions}\n            searchedOptions={this.filteredOptions}\n            value={this.props.data.objects}\n            onChange={objects => onChange(objects, 'objects')}\n          />\n          {!!errorText && (\n            <Text margin={{ vertical: 'xsmall' }} color=\"Red\">\n              {errorText}\n            </Text>\n          )}\n        </Form>\n      </Box>\n    );\n  }\n}\n\nconst typeOptions = [\n  {\n    text: 'Муниципальные образования',\n    value: 'REGIONS'\n  },\n  {\n    text: 'Школьные группы',\n    value: 'SCHOOL_PARTY'\n  }\n];\n\nconst directoryRegionsOptions = [\n  // {\n  //   text: 'Актуальные МО 2021',\n  //   value: 'ACTUAL_REGIONS_2021'\n  // },\n  // {\n  //   text: 'Актуальные МО 2022',\n  //   value: 'ACTUAL_REGIONS_2022'\n  // },\n  {\n    text: `Актуальные МО ${getCurrentYear()}`,\n    value: 'ACTUAL_REGIONS_2023'\n  }\n];\n\nconst directorySchoolGroupsOptions = [\n  // {\n  //   text: 'Актуальные школьные группы 2021',\n  //   value: 'ACTUAL_SCHOOL_PARTY_2021'\n  // },\n  // {\n  //   text: 'Актуальные школьные группы 2022',\n  //   value: 'ACTUAL_SCHOOL_PARTY_2022'\n  // },\n  {\n    text: `Актуальные школьные группы ${getCurrentYear()}`,\n    value: 'ACTUAL_SCHOOL_PARTY_2023'\n  },\n];\n","import React from 'react';\nimport * as moment from 'moment';\nimport { Box } from 'grommet';\nimport {\n  Form,\n  NumberInput,\n  RadioGroup,\n  DateTimePicker\n} from '@we-ui-components/form';\nimport { Text } from '@we-ui-components/base';\nimport {\n  isRequired,\n  notEqualDataField,\n  isAfterDateField,\n  isPresentTime,\n  showHours,\n  showMinutes\n} from 'utils';\nimport { observer } from 'mobx-react';\nimport styled from 'styled-components';\nimport WarningSVG from './Warning.svg';\n\ninterface IProps {\n  getRef: (form: any) => void;\n  techWindow: number;\n  data: INewVote2Step;\n}\n\nexport interface INewVote2Step {\n  applicationStartDate: Date;\n  applicationEndDate: Date;\n  votingStartDate: Date;\n  votingEndDate: Date;\n  hasMinVotesCount: 'any' | 'number';\n  votingThreshold: null | number;\n}\n\nconst minDate = moment()\n  .startOf('day')\n  .toDate();\nconst maxDate = moment()\n  .endOf('year')\n  .toDate();\n\n@observer\nexport class Step2 extends React.Component<IProps> {\n  render() {\n    const { getRef, data, techWindow } = this.props;\n    const { hasMinVotesCount } = data;\n    const relativeTime = getRelativeTime(techWindow);\n\n    return (\n      <Box direction=\"row\" margin={{ vertical: 'medium' }}>\n        <Box\n          pad=\"medium\"\n          style={{ flex: '1 1 100%', backgroundColor: 'white' }}\n        >\n          <Form ref={getRef} data={data}>\n            <Box>\n              <Text size=\"small\" bold margin={{ bottom: 'xsmall' }}>\n                Даты приема проектов *\n              </Text>\n              <DateTimePicker\n                name=\"applicationStartDate\"\n                calendarProps={{\n                  placeholderText: 'Начало приема *',\n                  size: 'xlarge',\n                  minDate,\n                  maxDate\n                }}\n                timeInputProps={{\n                  placeholder: 'Время *'\n                }}\n                rules={[isRequired(), isPresentTime()]}\n                {...({} as any)}\n              />\n              <DateTimePicker\n                name=\"applicationEndDate\"\n                calendarProps={{\n                  placeholderText: 'Окончание приема *',\n                  size: 'xlarge',\n                  minDate: data.applicationStartDate,\n                  maxDate\n                }}\n                timeInputProps={{\n                  placeholder: 'Время *'\n                }}\n                rules={[\n                  notEqualDataField(\n                    'applicationStartDate',\n                    'Дата не должна совпадать с началом приема'\n                  ),\n                  isAfterDateField(\n                    'applicationStartDate',\n                    0,\n                    'Дата должна быть позже даты начала приема'\n                  )\n                ]}\n                {...({} as any)}\n              />\n            </Box>\n            <Line />\n            <Box>\n              <Text size=\"small\" bold margin={{ bottom: 'xsmall' }}>\n                Даты голосования *\n              </Text>\n              <DateTimePicker\n                name=\"votingStartDate\"\n                calendarProps={{\n                  placeholderText: 'Начало голосования *',\n                  size: 'xlarge',\n                  minDate: data.applicationEndDate,\n                  maxDate\n                }}\n                timeInputProps={{\n                  placeholder: 'Время *'\n                }}\n                rules={[\n                  isRequired(),\n                  isAfterDateField(\n                    'applicationEndDate',\n                    techWindow,\n                    `Между окончанием приема и началом голосования должно пройти не менее ${relativeTime}`\n                  )\n                ]}\n                {...({} as any)}\n              />\n              <DateTimePicker\n                name=\"votingEndDate\"\n                calendarProps={{\n                  placeholderText: 'Окончание голосования *',\n                  size: 'xlarge',\n                  minDate: data.votingStartDate,\n                  maxDate\n                }}\n                timeInputProps={{\n                  placeholder: 'Время *'\n                }}\n                rules={[\n                  notEqualDataField(\n                    'votingStartDate',\n                    'Дата не должна совпадать с началом голосования'\n                  ),\n                  isAfterDateField(\n                    'votingStartDate',\n                    0,\n                    'Дата должна быть позже даты начала голосования'\n                  )\n                ]}\n                {...({} as any)}\n              />\n            </Box>\n            <Line />\n            <RadioGroup\n              name=\"hasMinVotesCount\"\n              label=\"Минимальное количество голосов для принятия решения\"\n              size=\"auto\"\n              direction=\"row\"\n              displayMode=\"stickers\"\n              options={[\n                { text: 'Любое', value: 'any' },\n                { text: 'Введите число', value: 'number' }\n              ]}\n              rules={[isRequired()]}\n            />\n            {hasMinVotesCount === 'number' && (\n              <NumberInput\n                type=\"integer\"\n                placeholder=\"Количество голосов\"\n                name=\"votingThreshold\"\n                size=\"large\"\n                rules={[isRequired()]}\n              />\n            )}\n          </Form>\n        </Box>\n        <Box style={{ flex: '1 1 100%' }} pad=\"medium\">\n          <Box direction=\"row\">\n            <Box\n              direction=\"row\"\n              margin={{ left: 'xsmall', right: 'medium' }}\n              align=\"center\"\n            >\n              <img src={WarningSVG} alt=\"\" />\n            </Box>\n            <Text size=\"small\" style={{ flex: '1' }}>\n              За 2 часа до начала голосования система начнет формирование\n              бюллетеней. Внесение изменений, в том числе при работе с\n              проектами, будет невозможно.\n            </Text>\n          </Box>\n        </Box>\n      </Box>\n    );\n  }\n}\n\nfunction getRelativeTime(timestamp: number) {\n  const hours = moment.duration(timestamp).hours();\n  const minutes = moment.duration(timestamp).minutes();\n\n  return `${!!hours ? showHours(hours) : ''} ${\n    !!minutes ? showMinutes(minutes) : ''\n  }`;\n}\n\nconst Line = styled.div`\n  width: 100%;\n  height: 1px;\n  background-color: #d1d1d1;\n  margin-bottom: 16px;\n  margin-top: 4px;\n`;\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNS4xNjEgMTEuNzQyOEwxMC43MjQgMi4xMjkxM0MxMC40MjUgMS40ODEzOSA5LjkwNDk5IDAuOTYxMzg1IDkuMjU3MjUgMC42NjI0MjdDNy43NTI5IC0wLjAzMTg5MSA1Ljk3MDUyIDAuNjI0Nzc1IDUuMjc2MiAyLjEyOTEzTDAuODM5MTEgMTEuNzQyOEMwLjY1NzE5NyAxMi4xMzcgMC41NjI5ODggMTIuNTY1OSAwLjU2Mjk4OCAxM0MwLjU2Mjk4OCAxNC42NTY5IDEuOTA2MTMgMTYgMy41NjI5OSAxNkgxMi40MzcyQzEyLjg3MTMgMTYgMTMuMzAwMiAxNS45MDU4IDEzLjY5NDMgMTUuNzIzOUMxNS4xOTg3IDE1LjAyOTYgMTUuODU1NCAxMy4yNDcyIDE1LjE2MSAxMS43NDI4Wk04LjQxOTE0IDIuNDc4MzVDOC42MzUwNSAyLjU3OCA4LjgwODM5IDIuNzUxMzMgOC45MDgwNCAyLjk2NzI1TDEzLjM0NTEgMTIuNTgwOUMxMy41NzY2IDEzLjA4MjQgMTMuMzU3NyAxMy42NzY1IDEyLjg1NjIgMTMuOTA4QzEyLjcyNDggMTMuOTY4NiAxMi41ODE5IDE0IDEyLjQzNzIgMTRIMy41NjI5OUMzLjAxMDcgMTQgMi41NjI5OSAxMy41NTIzIDIuNTYyOTkgMTNDMi41NjI5OSAxMi44NTUzIDIuNTk0MzkgMTIuNzEyMyAyLjY1NTAzIDEyLjU4MDlMNy4wOTIxMiAyLjk2NzI1QzcuMzIzNTYgMi40NjU4IDcuOTE3NjkgMi4yNDY5MSA4LjQxOTE0IDIuNDc4MzVaTTcuMDAwMDggNkM3LjAwMDA4IDUuNDQ3NzIgNy40NDc3OSA1IDguMDAwMDggNUM4LjU1MjM2IDUgOS4wMDAwOCA1LjQ0NzcyIDkuMDAwMDggNlY5QzkuMDAwMDggOS41NTIyOSA4LjU1MjM2IDEwIDguMDAwMDggMTBDNy40NDc3OSAxMCA3LjAwMDA4IDkuNTUyMjkgNy4wMDAwOCA5VjZaTTkuMDAwMDggMTJDOS4wMDAwOCAxMi41NTIzIDguNTUyMzYgMTMgOC4wMDAwOCAxM0M3LjQ0Nzc5IDEzIDcuMDAwMDggMTIuNTUyMyA3LjAwMDA4IDEyQzcuMDAwMDggMTEuNDQ3NyA3LjQ0Nzc5IDExIDguMDAwMDggMTFDOC41NTIzNiAxMSA5LjAwMDA4IDExLjQ0NzcgOS4wMDAwOCAxMloiIGZpbGw9IiNGOEI3MDAiLz4KPC9zdmc+Cg==\"","import React from 'react';\nimport * as moment from 'moment';\nimport { observer, inject } from 'mobx-react';\nimport { Title, Button, Text } from '@we-ui-components/base';\nimport { MobxForm } from '@we-ui-components/form';\nimport { Box } from 'grommet';\nimport { observable, toJS } from 'mobx';\nimport { PageContainer } from 'components/PageContainer';\nimport { BackButton } from 'components/BackButton';\nimport { useRoutes } from 'utils/useRoutes';\nimport { Wizard } from './Wizard';\nimport { INewVote1Step, Step1 } from './Step1';\nimport { INewVote2Step, Step2 } from './Step2';\nimport {\n  createVote,\n  getDistricts,\n  getSchoolRegions,\n  getTechWindow\n} from 'services';\nimport { Routes } from 'constants/routes';\nimport { IStores } from 'stores';\n\nimport leftArrow from 'components/BackButton/arrow-left.svg';\nimport parse from 'parse-duration';\n\ninterface IProps {}\n\ninterface INewRawVote extends INewVote1Step, INewVote2Step {}\nexport interface INewVote\n  extends Omit<\n    INewRawVote,\n    | 'applicationStartDate'\n    | 'applicationEndDate'\n    | 'votingStartDate'\n    | 'votingEndDate'\n    | 'hasMinVotesCount'\n  > {\n  applicationStartDate: string;\n  applicationEndDate: string;\n  votingStartDate: string;\n  votingEndDate: string;\n}\n\n@inject('actionModals', 'routing', 'votings')\n@observer\nexport class CreateVote extends React.Component<\n  IProps & Pick<IStores, 'actionModals' | 'routing' | 'votings'>\n> {\n  formRef1: MobxForm;\n  formRef2: MobxForm;\n\n  @observable\n  districts: any[] = [];\n  @observable\n  schoolRegions: any[] = [];\n\n  @observable form1: INewVote1Step = {\n    type: 'REGIONS',\n    directory: 'ACTUAL_REGIONS_2023',\n    objects: []\n  } as any;\n  @observable form2: INewVote2Step = {\n    applicationStartDate: moment()\n      .startOf('day')\n      .add(1, 'day')\n      .add(12, 'hours')\n      .toDate(),\n    applicationEndDate: moment()\n      .startOf('day')\n      .add(2, 'day')\n      .toDate(),\n    votingStartDate: moment()\n      .add(3, 'day')\n      .startOf('day')\n      .toDate(),\n    votingEndDate: moment()\n      .add(1, 'week')\n      .startOf('day')\n      .toDate(),\n    hasMinVotesCount: 'any',\n    votingThreshold: ''\n  } as any;\n  @observable data: INewRawVote = {} as any;\n  @observable regionsError: string = '';\n  @observable techWindow: number = 0;\n\n  componentDidMount(): void {\n    getDistricts().then(res => {\n      this.districts = res.content;\n    });\n    getSchoolRegions().then(res => {\n      this.schoolRegions = res.content;\n    });\n    getTechWindow().then(res => {\n      this.techWindow = parse(`${res.prepareTechWindow}s`);\n    });\n  }\n\n  nextStep = (currentStep, changeStep) => {\n    switch (currentStep) {\n      case 1:\n        this.regionsError = '';\n        this.formRef1.validateFields().then(res => {\n          if (this.form1.objects.length !== 0) {\n            changeStep(currentStep + 1);\n          } else {\n            this.regionsError = 'Выберите хотя бы один регион';\n          }\n        });\n        break;\n      case 2:\n        this.formRef2.validateFields().then(res => {\n          this.createVote();\n        });\n        break;\n    }\n  };\n\n  createVote = () => {\n    const { actionModals, routing, votings } = this.props;\n    const data = processData({ ...toJS(this.form1), ...toJS(this.form2) });\n\n    createVote(data)\n      .then(() => {\n        actionModals.open(\n          () => (\n            <Box\n              align=\"end\"\n              style={{ flex: '1 1 100%' }}\n              pad={{ bottom: 'xlarge' }}\n            >\n              <Button\n                onClick={() => {\n                  actionModals.closeLastModal();\n                }}\n              >\n                Закрыть\n              </Button>\n            </Box>\n          ),\n          {\n            title: 'Голосование создано',\n            width: '545px',\n            onClose: async () => {\n              votings.init({}, true);\n              routing.push(`/${Routes.homeOrganizer}`);\n            }\n          }\n        );\n      })\n      .catch(error => {\n        actionModals.open(\n          () => (\n            <Box pad={{ bottom: 'xlarge' }}>\n              <Text margin={{ bottom: 'xsmall' }}>\n                {error.title || error.message}\n              </Text>\n              <Box align=\"end\" style={{ flex: '1 1 100%' }}>\n                <Button onClick={actionModals.closeLastModal}>Закрыть</Button>\n              </Box>\n            </Box>\n          ),\n          {\n            title: 'Ошибка',\n            width: '545px'\n          }\n        );\n      });\n  };\n\n  onChangeForm1 = (value: any, key: string) => {\n    this.form1[key] = value;\n\n    if (key === 'type') {\n      this.form1.directory =\n        value === 'REGIONS'\n          ? 'ACTUAL_REGIONS_2023'\n          : 'ACTUAL_SCHOOL_PARTY_2023';\n      this.form1.objects = [];\n    }\n  };\n\n  render() {\n    const Routes = useRoutes();\n    this.regionsError; // Mobx update render\n    this.schoolRegions;\n    this.districts;\n\n    return (\n      <PageContainer>\n        <Box pad={{ vertical: '32px', horizontal: '64px' }}>\n          <Box margin={{ bottom: 'medium' }}>\n            <BackButton url={`/${Routes.homeOrganizer}`} />\n          </Box>\n          <Box margin={{ bottom: 'medium' }}>\n            <Title size=\"large\" bold>\n              Создание голосования\n            </Title>\n          </Box>\n          <Wizard\n            steps={[\n              {\n                title: 'Тип голосований',\n                render: () => (\n                  <Step1\n                    getRef={(ref: MobxForm) => (this.formRef1 = ref)}\n                    data={this.form1}\n                    errorText={this.regionsError}\n                    onChange={this.onChangeForm1}\n                    districts={this.districts}\n                    schoolRegions={this.schoolRegions}\n                  />\n                )\n              },\n              {\n                title: 'Параметры голосований',\n                render: () => (\n                  <Step2\n                    getRef={(ref: MobxForm) => (this.formRef2 = ref)}\n                    data={this.form2}\n                    techWindow={this.techWindow}\n                  />\n                )\n              }\n            ]}\n            footer={props => {\n              const { currentStep, changeStep, isFirst, isLast } = props;\n              return (\n                <Box\n                  margin={{ top: 'small' }}\n                  direction=\"row\"\n                  justify=\"between\"\n                >\n                  <Box>\n                    {!isFirst && (\n                      <Button\n                        bordered\n                        transparent\n                        color=\"Purple\"\n                        onClick={() => changeStep(currentStep - 1)}\n                      >\n                        <img src={leftArrow} alt=\"\" />\n                        <span style={{ marginLeft: '12px' }}>\n                          Настроить тип голосования\n                        </span>\n                      </Button>\n                    )}\n                  </Box>\n                  <Box>\n                    <Button\n                      onClick={() => this.nextStep(currentStep, changeStep)}\n                    >\n                      {isLast ? 'Создать голосование' : 'Следующий шаг'}\n                    </Button>\n                  </Box>\n                </Box>\n              );\n            }}\n          />\n        </Box>\n      </PageContainer>\n    );\n  }\n}\n\nfunction processData(data: INewRawVote): INewVote {\n  const res = {\n    form: 'CUMULATIVE',\n    ...data,\n    applicationStartDate: data.applicationStartDate.toISOString(),\n    applicationEndDate: data.applicationEndDate.toISOString(),\n    votingStartDate: data.votingStartDate.toISOString(),\n    votingEndDate: data.votingEndDate.toISOString(),\n    subjectsIds: data.objects.map(i => i.value),\n    votingThreshold:\n      data.hasMinVotesCount === 'any' ? null : +data.votingThreshold\n  };\n  delete res.hasMinVotesCount;\n  delete res.directory;\n  delete res.objects;\n  delete res.type;\n\n  return res;\n}\n","import * as React from 'react';\nimport { TRole } from 'interfaces/apiTypes';\n\nconst SUPPORTED_ROLES = ['APPLICANT', 'REGULATOR'] as const;\n\ntype SupportedRoleT = typeof SUPPORTED_ROLES extends readonly (infer T)[]\n  ? T\n  : never;\n\ninterface RoleIconProps {\n  role: TRole;\n}\n\nexport function RoleIcon({ role }: RoleIconProps) {\n  const RoleIconSVG = roleToIconRenderMap[role];\n  return <RoleIconSVG />;\n}\n\nconst roleToIconRenderMap = {\n  APPLICANT: PersonIcon,\n  REGULATOR: CrownIcon\n};\n\nfunction CrownIcon() {\n  return (\n    <svg\n      fill=\"none\"\n      height=\"1em\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 16 12\"\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M14.658 2.85c.21-.101.46-.07.636.081.178.15.248.392.18.614l-2.226 7.291a.586.586 0 01-.56.414H3.313a.586.586 0 01-.561-.414L.525 3.545a.582.582 0 01.18-.614.588.588 0 01.637-.08L4.55 4.403 7.557.951a.587.587 0 01.886 0l3.008 3.454 3.207-1.554zM3.875 9.75L2.75 5.25 5 6.375l3-3.75 3 3.75 2.25-1.125-1.125 4.5h-8.25z\"\n        fill=\"#0A0606\"\n      />\n    </svg>\n  );\n}\n\nfunction PersonIcon() {\n  return (\n    <svg\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      height=\"1em\"\n      viewBox=\"0 0 10 10\"\n    >\n      <path\n        d=\"M1.696 6.96C2.846 6.49 3.947 6.256 5 6.256s2.144.234 3.275.702C9.425 7.407 10 8.002 10 8.743V10H0V8.743c0-.741.565-1.336 1.696-1.784zm5.058-2.691A2.393 2.393 0 015 5a2.393 2.393 0 01-1.754-.731 2.393 2.393 0 01-.731-1.754c0-.683.243-1.267.73-1.755C3.734.253 4.319 0 5 0c.682 0 1.267.253 1.754.76.488.488.731 1.072.731 1.755 0 .682-.243 1.267-.73 1.754z\"\n        fill=\"#0A0606\"\n      />\n    </svg>\n  );\n}\n","import { useCallback } from 'react';\nimport { useStores } from 'stores';\nimport { useMutation, useRequest } from 'utils';\n\nexport function useIsDeletableUser(personId: string) {\n  const { userList } = useStores();\n\n  const requestFn = useCallback(() => {\n    return userList.isDeletableUser(personId);\n  }, [personId]);\n\n  return useRequest(requestFn);\n}\n\nexport function useDeleteUser(personId: string) {\n  const { userList, modals } = useStores();\n\n  const requestFn = useCallback(() => userList.deleteUser(personId), [\n    personId\n  ]);\n\n  return useMutation(requestFn, {\n    onSuccess: () => {\n      modals.closeModal();\n      userList.fetch();\n    }\n  });\n}\n","import { useState, useEffect, useCallback } from 'react';\n\ninterface UseRequestParams<T> {\n  onSuccess?: (data: T) => void;\n  onError?: (error: string) => void;\n}\n\nexport function useMutation<T>(\n  requestFn: () => Promise<T>,\n  { onSuccess, onError }: UseRequestParams<T> = {}\n) {\n  const [status, setStatus] = useState<Status>('idle');\n  const [error, setError] = useState<string>('');\n\n  const mutate = useCallback(() => {\n    setStatus('fetching');\n    setError('');\n\n    requestFn()\n      .then(response => {\n        setStatus('success');\n\n        if (typeof onSuccess === 'function') {\n          onSuccess(response);\n        }\n      })\n      .catch(error => {\n        const message =\n          error?.title ?? error?.detail ?? error?.message ?? error;\n\n        console.error(error);\n        setStatus('error');\n        setError(message);\n\n        if (typeof onError === 'function') {\n          onError(error);\n        }\n      });\n  }, [onSuccess, onError, requestFn]);\n\n  return [mutate, { status, error }] as const;\n}\n\ntype Status = 'fetching' | 'success' | 'error' | 'idle';\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport { useStores } from 'stores';\nimport { Text, Title } from '@we-ui-components/base';\nimport styled from 'styled-components';\nimport { Spinner2, ButtonEx, CloseIcon, Error as ErrorUI } from 'ui';\nimport { useDeleteUser, useIsDeletableUser } from './utils';\n\ntype DeleteUserModalProps = {\n  personId: string;\n};\n\nexport function DeleteUserModal({ personId }: DeleteUserModalProps) {\n  const [isDeletable, { status }] = useIsDeletableUser(personId);\n\n  if (status === 'fetching') {\n    return (\n      <Container align=\"center\" justify=\"center\">\n        <Spinner2 color=\"Grey\" />\n      </Container>\n    );\n  }\n\n  if (!isDeletable) {\n    return <SingleOrganizerMessage />;\n  }\n\n  return <DeleteUserForm personId={personId} />;\n}\n\nexport const DeleteUserForm = observer<DeleteUserModalProps>(\n  function DeleteUserModal({ personId }) {\n    const { userList, modals } = useStores();\n    const person = userList.selectUser(personId);\n    const [deleteUser, { status, error }] = useDeleteUser(personId);\n\n    return (\n      <Container justify=\"between\">\n        <Title size=\"small\" bold margin={{ bottom: '6px' }}>\n          Удалить пользователя\n        </Title>\n\n        <Text\n          size=\"xsmall\"\n          fontWeight=\"500\"\n          style={{ lineHeight: '19px', maxWidth: '350px' }}\n          margin={{ bottom: '32px' }}\n        >\n          Вы уверены, что хотите удалить пользователя{' '}\n          <Email>{person.email}</Email> ?\n        </Text>\n\n        {status === 'error' && <ErrorUI error={error} />}\n\n        <Box direction=\"row\" justify=\"end\" align=\"center\" fill={true}>\n          <ButtonEx\n            size=\"auto\"\n            fontSize=\"16px\"\n            transparent\n            style={{\n              padding: '11px 20px',\n              marginRight: 16,\n              height: 40\n            }}\n            onClick={modals.closeModal}\n            color=\"Black\"\n            disabled={status === 'fetching'}\n          >\n            Отмена\n          </ButtonEx>\n          <ButtonEx\n            style={{\n              padding: '12px 20px',\n              height: 40\n            }}\n            bgColor=\"Red\"\n            fontSize=\"16px\"\n            size=\"auto\"\n            onClick={deleteUser}\n            isLoading={status === 'fetching'}\n            disabled={status === 'fetching'}\n          >\n            Удалить\n          </ButtonEx>\n        </Box>\n      </Container>\n    );\n  }\n);\n\nfunction SingleOrganizerMessage() {\n  return (\n    <Container pad={{ right: '74px' }}>\n      <Title size=\"small\">\n        Невозможно удалить последнюю учетную запись с ролью Организатор\n      </Title>\n    </Container>\n  );\n}\n\nconst Container: typeof Box = ({ children, ...props }) => {\n  const { modals } = useStores();\n\n  return (\n    <StyledBox {...props}>\n      <StyledCloseIcon hover={true} onClick={modals.closeModal} size=\"medium\" />\n      {children}\n    </StyledBox>\n  );\n};\n\nconst Email = styled.span`\n  color: ${props => props.theme.palette.Purple};\n`;\n\nconst StyledBox = styled(Box)`\n  width: 482px;\n  padding: 32px;\n  min-height: 163px;\n  position: relative;\n`;\n\nconst StyledCloseIcon = styled(CloseIcon)`\n  cursor: pointer;\n  position: absolute;\n\n  top: 30px;\n  right: 30px;\n`;\n","import { createValidate } from 'utils';\nimport { isRequired, minLength } from '@we-ui-components/form';\n\nconst passwordChecks = {\n  hasForbiddenSymbols: (value: string) => !/^[a-z0-9]+$/gi.test(value),\n  noDigits: (value: string) => !/\\d/.test(value),\n  lessThan4AlphabeticChars: (value: string) => {\n    const matches = value.match(/[a-z]/gi);\n\n    if (!matches) return true;\n    return matches.length < 4;\n  }\n};\n\nconst onlyAllowedValidator = createValidate(\n  passwordChecks.hasForbiddenSymbols,\n  'Пароль должен состоять только из цифр и латинских букв'\n);\n\nconst digitsValidator = createValidate(\n  passwordChecks.noDigits,\n  'Пароль должен содержать цифры'\n);\n\nconst lettersValidator = createValidate(\n  passwordChecks.lessThan4AlphabeticChars,\n  'Пароль должен содержать минимум 4 буквы латинского алфавита'\n);\n\nexport const passwordValidators = [\n  isRequired,\n  minLength(5, 'Длина пароля должна быть не менее 5 символов'),\n  lettersValidator,\n  digitsValidator,\n  onlyAllowedValidator\n];\n\nexport const phoneValidators = [\n  {\n    type: 'string',\n    max: 25,\n    message: 'Максимальная длина - 25 символов'\n  }\n];\n","import * as React from 'react';\nimport { observer, useLocalStore } from 'mobx-react-lite';\nimport { Form, MobxForm, Input, isRequired } from '@we-ui-components/form';\n\nimport { isTheSameAs } from 'utils';\nimport { passwordValidators } from './userPasswordValidators';\n\ninterface UpdateUserCredentialsModalProps {}\n\ntype FormData = {\n  password: string;\n  confirm_password: string;\n};\n\nexport const UpdateUserCredentialsModal = observer<\n  UpdateUserCredentialsModalProps\n>(\n  function UpdateUserCredentialsModal(props, ref) {\n    const handleSubmit = async () => {\n      const data: FormData = await formRef.current.validateFields();\n      return data.password;\n    };\n\n    React.useImperativeHandle(ref, () => ({\n      onValidate: handleSubmit\n    }));\n\n    const formData = useLocalStore(() => ({\n      password: '',\n      password_confirm: ''\n    }));\n\n    const formRef = React.useRef<MobxForm>();\n\n    return (\n      <Form ref={formRef} data={formData} {...({} as any)}>\n        <Input\n          placeholder=\"Новый пароль\"\n          name=\"password\"\n          style={{ marginTop: 18 }}\n          type=\"password\"\n          rules={passwordValidators}\n        />\n\n        <Input\n          placeholder=\"Повторите новый пароль\"\n          name=\"password_confirm\"\n          style={{ marginTop: 18 }}\n          type=\"password\"\n          rules={[\n            isRequired,\n            isTheSameAs('password', 'Пароли должны совпадать!')\n          ]}\n        />\n      </Form>\n    );\n  },\n  {\n    forwardRef: true\n  }\n);\n","import * as voteServise from 'services/voteService';\nimport { useRequest } from 'utils';\nimport { useCallback } from 'react';\nimport { PollSubject } from 'interfaces';\nimport { ISelectOption } from '@we-ui-components/base';\n\nexport function useDistrictOptions() {\n  const requestFn = useCallback(async () => {\n    const response = await voteServise.getDistricts();\n    return response.content;\n  }, []);\n\n  const [districts, { status }] = useRequest(requestFn, { initialData: [] });\n\n  return [formatDistrictOptions(districts), { status }] as const;\n}\n\nfunction formatDistrictOptions(districts: PollSubject[]): ISelectOption[] {\n  return districts.map(it => ({\n    text: it.name,\n    value: it.id\n  }));\n}\n","import styled from 'styled-components';\nimport { Input } from '@we-ui-components/form';\nimport { PhoneInput } from 'pages/Registration/PhoneInput';\nimport { Button } from '@we-ui-components/base';\nimport { AsyncSelect } from 'ui';\n\nexport const FixedWidthUserInput = styled(Input)`\n  width: 418px;\n`;\n\nexport const FixedWidthUserPhoneUnput = styled(PhoneInput)`\n  width: 418px;\n`;\n\nexport const UserRoleButton = styled(Button).attrs(() => ({\n  transparent: true\n}))<{\n  active: boolean;\n}>`\n  button {\n    color: ${computeRoleButtonColor};\n    padding: 0;\n\n    &:hover {\n      color: ${computeRoleButtonColor};\n    }\n  }\n`;\n\nexport const FixedHeightUserSelect = styled(AsyncSelect)`\n  /* control */\n  > div > div > div {\n    min-height: 56px;\n  }\n`;\n\nfunction computeRoleButtonColor(props: Record<string, any>) {\n  const palette = props?.theme?.palette || {};\n  return props.active ? palette.Purple : palette.Grey;\n}\n","import * as React from 'react';\nimport { observer, useLocalStore } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport {\n  Form,\n  MobxForm,\n  Input,\n  isRequired,\n  isEmail\n} from '@we-ui-components/form';\nimport { Text, Title } from '@we-ui-components/base';\n\nimport { IUser, UpdateUserFullyRequest } from 'interfaces';\nimport { useDistrictOptions } from './useDistrictOptions';\nimport {\n  UserRoleButton,\n  FixedWidthUserInput,\n  FixedHeightUserSelect,\n  FixedWidthUserPhoneUnput\n} from '../components/styled';\nimport { TActionModalProps } from 'components';\nimport { useStores } from 'stores';\nimport { phoneValidators } from './userPasswordValidators';\n\ntype UpdateUserModalProps = TActionModalProps<{ personId: string }>;\n\nexport const UpdateUserModal = observer<UpdateUserModalProps>(\n  function UpdateUserModal(props, ref) {\n    const { userList } = useStores();\n\n    const initialUser = React.useMemo(() => {\n      const personId = props?.actionData?.data?.personId;\n      if (personId) {\n        return userList.selectUser(personId);\n      }\n\n      return {} as IUser;\n    }, [props?.actionData?.data?.personId]);\n\n    const handleSubmit = async () => {\n      const data: UpdateUserFullyRequest = await formRef.current.validateFields();\n      return data;\n    };\n\n    const [districtOptions, { status }] = useDistrictOptions();\n\n    React.useImperativeHandle(ref, () => ({\n      onValidate: handleSubmit\n    }));\n\n    const formData = useLocalStore<UpdateUserFullyRequest>(() => {\n      return {\n        company: initialUser.company,\n        districtId: initialUser.districtId,\n        firstName: initialUser.firstName,\n        lastName: initialUser.lastName,\n        patronymic: initialUser.patronymic,\n        phone: initialUser.phone,\n        email: initialUser.email\n      };\n    });\n\n    const formRef = React.useRef<MobxForm>();\n\n    return (\n      <Box>\n        <Title\n          margin={{ top: '-35px', bottom: '24px' }}\n          style={{ maxWidth: '700px' }}\n          bold\n          size=\"small\"\n        >\n          Редактирование данных пользователя\n        </Title>\n\n        <Form ref={formRef} data={formData} {...({} as any)}>\n          <Box direction=\"row\" justify=\"between\">\n            <FixedWidthUserInput\n              size=\"full\"\n              placeholder=\"Фамилия\"\n              name=\"lastName\"\n            />\n\n            <FixedWidthUserInput\n              size=\"full\"\n              placeholder=\"Имя\"\n              name=\"firstName\"\n            />\n          </Box>\n\n          <FixedWidthUserInput placeholder=\"Отчество\" name=\"patronymic\" />\n\n          {initialUser.businessRole === 'APPLICANT' && (\n            <>\n              <FixedHeightUserSelect\n                name=\"districtId\"\n                loading={status === 'fetching'}\n                options={districtOptions}\n                label=\"Район пользователя\"\n              />\n\n              <Input name=\"company\" placeholder=\"Организация пользователя\" />\n            </>\n          )}\n\n          <Box direction=\"row\" justify=\"between\">\n            <FixedWidthUserInput\n              name=\"email\"\n              placeholder=\"Email*\"\n              rules={[isRequired, isEmail]}\n            />\n            <FixedWidthUserInput\n              size=\"full\"\n              placeholder=\"Телефон\"\n              name=\"phone\"\n              rules={phoneValidators}\n            />\n          </Box>\n        </Form>\n      </Box>\n    );\n  },\n  {\n    forwardRef: true\n  }\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { ClickOutside, KebabIcon } from 'ui';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { useStores } from 'stores';\nimport { DeleteUserModal } from '../modals/DeleteUserModal';\nimport { UpdateUserCredentialsModal } from '../modals/UpdateUserCredentialsModal';\nimport { UpdateUserModal } from '../modals/UpdateUserModal';\nimport { UpdateUserFullyRequest } from 'interfaces';\n\ninterface UsersActionsMenuProps {\n  personId: string;\n}\n\nexport const UsersActionsMenu = observer<UsersActionsMenuProps>(\n  function UsersActionsMenu({ personId, ...props }) {\n    const { modals, actionModals, userList } = useStores();\n\n    const [isMenuVisible, setIsMenuVisible] = React.useState(false);\n    const toggleVisibility = () => {\n      setIsMenuVisible(v => !v);\n    };\n\n    const openDeleteModal = async () => {\n      modals.openModal(() => <DeleteUserModal personId={personId} />, null, {\n        width: '482px',\n        isOverlayClose: true\n      });\n    };\n\n    const openUpdateCredentialsModal = async () => {\n      actionModals.open(UpdateUserCredentialsModal, {\n        title: 'Изменение пароля',\n        width: '545px',\n        applyText: () => <span>Сохранить изменения</span>,\n        onApply: async (newPassword: string) =>\n          userList.updateUserPassword(personId, newPassword),\n        closeText: () => <span>Отмена</span>,\n        noValidation: true\n      });\n    };\n\n    const openUpdateUserModal = async () => {\n      actionModals.open(UpdateUserModal, {\n        initData: { personId },\n        width: '931px',\n        onApply: async (data: UpdateUserFullyRequest) => {\n          await userList.updateUserByAdmin(personId, data);\n          await userList.fetch();\n        },\n        applyText: () => <span>Сохранить</span>,\n        closeText: () => <span>Отменить</span>,\n        noValidation: true\n      });\n    };\n\n    return (\n      <MenuContainer\n        {...props}\n        onClickOutside={(): void => setIsMenuVisible(false)}\n        onClick={toggleVisibility}\n      >\n        <Box width=\"20px\">\n          <KebabIcon color=\"Grey\" width=\"1em\" />\n        </Box>\n        {isMenuVisible && (\n          <ActionsContainer>\n            <MenuItem onClick={openUpdateCredentialsModal}>\n              Редактировать пароль\n            </MenuItem>\n\n            <MenuItem onClick={openUpdateUserModal}>\n              Редактировать данные пользователя\n            </MenuItem>\n\n            {!userList.isCurrentUser(personId) && (\n              <MenuItem color=\"Red\" onClick={openDeleteModal}>\n                Удалить пользователя\n              </MenuItem>\n            )}\n          </ActionsContainer>\n        )}\n      </MenuContainer>\n    );\n  }\n);\n\nconst MenuContainer = styled(ClickOutside)`\n  position: 'relative';\n  cursor: pointer;\n`;\n\nconst ActionsContainer = styled(Box)`\n  position: absolute;\n  top: 50px;\n  right: 30px;\n\n  border: 1px solid #f4f5f8;\n  box-shadow: 0px 3px 4px rgba(0, 0, 0, 0.15);\n  background: white;\n\n  z-index: 1;\n  cursor: pointer;\n\n  max-width: none;\n  min-width: 239px;\n`;\n\nconst MenuItem = styled.button`\n  font-size: 13px;\n  color: ${props => props.color || props.theme.palette.BlackText};\n  font-weight: normal;\n  font-family: ${props => props.theme.fontBase};\n  padding: 16px 16px;\n\n  border-radius: 0;\n  border: none;\n  background-color: transparent;\n\n  cursor: pointer;\n\n  text-align: start;\n\n  &:hover {\n    background-color: ${props => props.theme.palette.LightGrey};\n  }\n`;\n","import * as React from 'react';\n\nexport const useClickOutside = (onClickOutside: () => void) => {\n  const savedCb = React.useRef(onClickOutside);\n  const target = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect((): void | (() => void) => {\n    if (target) {\n      const handler = (e: MouseEvent) => {\n        if (!target.current.contains(e.target as Element)) {\n          savedCb.current();\n        }\n      };\n\n      window.addEventListener('click', handler);\n      return () => window.removeEventListener('click', handler);\n    }\n  });\n\n  return target;\n};\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!./UsersPage.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// copypaste from @we-ui-components/forms\nimport * as React from 'react';\nimport styled from 'styled-components';\n\ninterface IPagerProps {\n  current: number;\n  total: number;\n  offset?: number;\n  goToPage(page: number): void;\n  theme?: object;\n  activeColor?: string;\n}\n\ntype TPAGECLICKER = 'default' | 'active' | 'dots';\n\ninterface IPageClickerProps {\n  text: string;\n  type: TPAGECLICKER;\n  value: number;\n  onClick?(page: number): void;\n  theme?: object;\n  activeColor?: string;\n}\n\nconst PagerWrap = styled.div<any>`\n  display: flex;\n`;\n\nfunction generatePageList(\n  current: number,\n  total: number,\n  offset: number\n): IPageClickerProps[] {\n  let pageList: IPageClickerProps[] = [];\n\n  if (current < 1) {\n    current = 1;\n  }\n\n  if (total < 1) {\n    total = 1;\n  }\n\n  if (offset < 1) {\n    offset = 1;\n  }\n\n  // first page\n  if (current !== 1) {\n    pageList.push({\n      text: String(1),\n      type: 'default',\n      value: 1\n    });\n  }\n\n  // left dots fault\n  if (current - offset > 1) {\n    pageList.push({\n      text: '...',\n      type: 'dots',\n      value: -1\n    });\n  }\n\n  // left offset part\n  let placedLeftOffset = 1;\n  const leftOffset = [];\n  while (current - placedLeftOffset > 1 && placedLeftOffset <= offset) {\n    leftOffset.push({\n      text: String(current - placedLeftOffset),\n      type: 'default',\n      value: current - placedLeftOffset\n    });\n    placedLeftOffset++;\n  }\n  leftOffset.reverse();\n  pageList = pageList.concat(leftOffset as any[]);\n\n  // current active page\n  pageList.push({\n    text: String(current),\n    type: 'active',\n    value: current\n  });\n\n  // right offset part\n  let placedRightOffset = 1;\n  while (current + placedRightOffset < total && placedRightOffset <= offset) {\n    pageList.push({\n      text: String(current + placedRightOffset),\n      type: 'default',\n      value: current + placedRightOffset\n    });\n    placedRightOffset++;\n  }\n\n  // right dots fault\n  if (total - current > offset) {\n    pageList.push({\n      text: '...',\n      type: 'dots',\n      value: -2\n    });\n  }\n\n  // last page\n  if (current !== total) {\n    pageList.push({\n      text: String(total),\n      type: 'default',\n      value: total\n    });\n  }\n\n  return pageList;\n}\n\nexport const Pager: React.FunctionComponent<IPagerProps> = props => {\n  const { current, offset = 2, total, goToPage, activeColor } = props;\n  const pageList = generatePageList(current, total, offset);\n\n  return (\n    <PagerWrap>\n      {pageList.map(page => (\n        <PagerCell\n          key={page.value}\n          {...page}\n          activeColor={activeColor}\n          onClick={goToPage}\n        />\n      ))}\n    </PagerWrap>\n  );\n};\n\nfunction getBgColor(props: any) {\n  const { type, theme, activeColor } = props;\n  if (type === 'dots') {\n    return 'transparent';\n  }\n  if (type === 'active') {\n    return theme.palette[activeColor] || theme.palette.Purple500 || activeColor;\n  }\n\n  return 'white';\n}\n\nconst StyledPageCell = styled.div<any>`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  height: 32px;\n  padding: 0 12px;\n  border-radius: 4px;\n  border: ${props =>\n    `1px solid ${props.type === 'dots' ? 'transparent' : '#e7ecf7'}`};\n  background-color: ${getBgColor};\n  color: ${props => (props.type === 'active' ? 'white' : 'black')};\n  cursor: ${props => (props.type === 'default' ? 'pointer' : 'auto')};\n  margin-right: 8px;\n  font-size: 14px;\n`;\n\nconst PagerCell: React.FunctionComponent<IPageClickerProps> = props => {\n  const { text, value, type, onClick, theme, activeColor } = props;\n\n  return (\n    <StyledPageCell\n      type={type}\n      activeColor={activeColor}\n      onClick={() => type === 'default' && onClick(value)}\n      theme={theme}\n    >\n      {text}\n    </StyledPageCell>\n  );\n};\n","import * as React from 'react';\nimport { Select } from '@we-ui-components/base';\nimport styled from 'styled-components';\nimport { Box } from 'grommet';\nimport { usePagination } from '@we-ui-components/rc-table';\nimport { Pager } from './Pager';\nimport { useTheme } from 'utils';\n\nexport function TablePagination() {\n  const { setPageSize, goToPage, config } = usePagination();\n  const theme = useTheme();\n\n  return (\n    <PaginationWrap>\n      <Pager\n        current={config.currentPage}\n        total={config.totalPages}\n        offset={2}\n        activeColor=\"Purple\"\n        goToPage={goToPage}\n      />\n      <Box width=\"266px\">\n        <Select\n          name=\"pageSize\"\n          type=\"filter\"\n          styles={{\n            control: (provided: any) => ({\n              ...provided,\n              border: '1px solid #D1D1D1',\n              boxShadow: 'none',\n              ':hover': {\n                ...provided[':hover'],\n                border: '1px solid #D1D1D1',\n                boxShadow: 'none'\n              },\n              ':active': {\n                ...provided[':active'],\n                border: '1px solid #D1D1D1',\n                boxShadow: 'none'\n              }\n            }),\n            indicatorsContainer: {\n              padding: 0,\n              borderLeft: '1px solid #D1D1D1'\n            },\n            singleValue: {\n              fontSize: '16px',\n              color: theme.palette.Black\n            }\n          }}\n          value={config.pageSize}\n          size=\"full\"\n          options={[\n            { text: 'Показать 10 записей', value: 10 },\n            { text: 'Показать 30 записей', value: 30 },\n            { text: 'Показать 50 записей', value: 50 },\n            { text: 'Показать 100 записей', value: 100 }\n          ]}\n          onChange={setPageSize}\n        />\n      </Box>\n    </PaginationWrap>\n  );\n}\n\nconst PaginationWrap = styled.div<any>`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 32px 0;\n`;\n","import * as React from 'react';\nimport { observer, useLocalStore } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport {\n  Form,\n  Input,\n  isEmail,\n  isRequired,\n  MobxForm\n} from '@we-ui-components/form';\nimport { Text, Title } from '@we-ui-components/base';\nimport { passwordValidators, phoneValidators } from './userPasswordValidators';\n\nimport { INewUser } from 'interfaces';\nimport { useDistrictOptions } from './useDistrictOptions';\n\nimport {\n  FixedHeightUserSelect,\n  FixedWidthUserInput,\n  UserRoleButton\n} from '../components/styled';\n\ninterface CreateUserProps {\n}\n\nexport const CreateUserModal = observer<CreateUserProps>(\n  function CreateUser(props, ref) {\n    const handleSubmit = async () => {\n      const data: INewUser = await formRef.current.validateFields();\n      return data;\n    };\n\n    const [districtOptions, { status }] = useDistrictOptions();\n\n    React.useImperativeHandle(ref, () => ({\n      onValidate: handleSubmit\n    }));\n\n    const formData = useLocalStore(() => ({\n      ...DEFAULT_USER\n    }));\n\n    const formRef = React.useRef<MobxForm>();\n\n    return (\n      <Box>\n        <Title\n          margin={{ top: '-35px', bottom: '24px' }}\n          style={{ maxWidth: '700px' }}\n          bold\n          size=\"small\"\n        >\n          Добавление нового пользователя\n        </Title>\n\n        <Form ref={formRef} data={formData} {...({} as any)}>\n          <Box direction=\"row\" justify=\"between\">\n            <FixedWidthUserInput\n              size=\"full\"\n              placeholder=\"Фамилия\"\n              name=\"lastName\"\n            />\n\n            <FixedWidthUserInput\n              size=\"full\"\n              placeholder=\"Имя\"\n              name=\"firstName\"\n            />\n          </Box>\n\n          <FixedWidthUserInput placeholder=\"Отчество\" name=\"patronymic\"/>\n\n          <Box direction=\"row\" justify=\"between\">\n            <FixedWidthUserInput\n              placeholder=\"Email*\"\n              name=\"email\"\n              rules={[isRequired, isEmail]}\n            />\n\n            <FixedWidthUserInput\n              placeholder=\"Пароль*\"\n              type=\"password\"\n              name=\"password\"\n              rules={passwordValidators}\n            />\n          </Box>\n\n          <Box gap=\"8px\" margin={{ bottom: '24px' }}>\n            <Text size=\"13px\" color=\"Grey\">\n              Роль пользователя*\n            </Text>\n            <Box direction=\"row\" gap=\"8px\">\n              <UserRoleButton\n                active={formData.businessRole === 'APPLICANT'}\n                onClick={() => {\n                  formData.businessRole = 'APPLICANT';\n                }}\n              >\n                Заявитель\n              </UserRoleButton>\n\n              <UserRoleButton\n                active={formData.businessRole === 'REGULATOR'}\n                onClick={() => {\n                  formData.businessRole = 'REGULATOR';\n                  formData.districtId = null;\n                  formData.company = null;\n                }}\n              >\n                Организатор\n              </UserRoleButton>\n            </Box>\n          </Box>\n\n          {formData.businessRole === 'APPLICANT' && (\n            <>\n              <FixedHeightUserSelect\n                name=\"districtId\"\n                loading={status === 'fetching'}\n                options={districtOptions}\n                label=\"Район пользователя\"\n              />\n              <Input name=\"company\" placeholder=\"Организация пользователя\"/>\n            </>\n          )}\n\n          <FixedWidthUserInput\n            placeholder=\"Телефон\"\n            name=\"phone\"\n            rules={phoneValidators}\n          />\n        </Form>\n      </Box>\n    );\n  },\n  {\n    forwardRef: true\n  }\n);\n\nconst DEFAULT_USER: INewUser = {\n  email: '',\n  password: '',\n  firstName: null,\n  lastName: null,\n  patronymic: null,\n  districtId: null,\n  company: null,\n  phone: null,\n  businessRole: 'APPLICANT'\n};\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Button, Title } from '@we-ui-components/base';\nimport styled from 'styled-components';\nimport { Box } from 'grommet';\nimport { SearchInput } from 'ui';\nimport { FilterTabs } from 'components';\nimport { Table } from '@we-ui-components/rc-table';\nimport { useStores } from 'stores';\nimport { getColumns } from './getColumns';\nimport './UsersPage.css';\nimport { TablePagination } from './components/TablePagination';\nimport { IconButton } from 'ui/IconButton';\nimport { PlusIconSVG } from 'ui/Icons';\nimport { CreateUserModal } from './modals/CreateUserModal';\nimport { INewUser } from 'interfaces';\nimport { useLocalStore } from \"mobx-react\";\nimport {useEffect} from \"react\";\nimport { Routes } from \"../../constants\";\n\ninterface UsersPageProps {}\n\nexport const UsersPage = observer<UsersPageProps>(function UsersPage(props) {\n  const { userList, actionModals } = useStores();\n\n  const onSearch = React.useCallback(\n    next => {\n      userList.updateSearch(next);\n    },\n    [userList]\n  );\n\n  const handleCreateUserClick = () => {\n    actionModals.open(CreateUserModal, {\n      width: '931px',\n      onApply: async (user: INewUser) => {\n        await userList.createUser(user);\n        await userList.fetch();\n        actionModals.open(\n          () => (\n            <Box\n              align=\"end\"\n              style={{ flex: '1 1 100%' }}\n              pad={{ bottom: 'xlarge' }}\n            >\n              <Button\n                onClick={() => {\n                  actionModals.closeLastModal();\n                }}\n              >\n                Закрыть\n              </Button>\n            </Box>\n          ),\n          {\n            title: 'Пользователь создан',\n            width: '545px'\n          }\n        );\n      },\n      applyText: () => <span>Создать</span>,\n      closeText: () => <span>Отменить</span>,\n      noValidation: true\n    });\n  };\n\n  return (\n    <PageContainer className=\"users-page-container\">\n      <Box direction=\"row\" margin={{ bottom: '20px' }} align=\"center\">\n        <Title size=\"small\" bold>\n          Пользователи системы\n        </Title>\n\n        <IconButton\n          onClick={handleCreateUserClick}\n          renderIcon={() => <PlusIconSVG />}\n          margin={{ left: '24px' }}\n        >\n          Добавить пользователя\n        </IconButton>\n      </Box>\n\n      <SearchInput\n        placeholder=\"Поиск\"\n        style={{ width: '650px' }}\n        value={userList.search}\n        onChange={onSearch}\n      />\n\n      <FilterTabs\n        store={userList}\n        style={{ margin: '24px 0' }}\n        filterField=\"businessRoles\"\n        tabs={[\n          { id: undefined, text: 'Все' },\n          { id: 'REGULATOR', text: 'Организаторы' },\n          { id: 'APPLICANT', text: 'Заявители' }\n        ]}\n      />\n\n      <Table\n        data={userList.data}\n        columns={getColumns()}\n        isPending={userList.isPending}\n        dataLayerConfig={userList.dataFlow}\n        onChangeDataFlow={(props: any) => userList.onChangeDataFlow(props)}\n        paginationComponent={TablePagination}\n      />\n    </PageContainer>\n  );\n});\n\nconst PageContainer = styled(Box)`\n  padding: 40px 64px;\n`;\n","import * as React from 'react';\nimport { IColumn, ISystemUser, IUser, TRole } from 'interfaces';\nimport { P, formatPersonName, applyMask } from 'utils';\nimport { Text } from '@we-ui-components/base';\nimport { RoleIcon } from './components/RoleIcon';\nimport { Box } from 'grommet';\nimport { PhoneIcon, KebabIcon } from 'ui';\nimport { UsersActionsMenu } from './components/UsersActionsMenu';\n\nexport const getColumns = (): Array<IColumn<IUser & { _actions: string }>> => {\n  return [\n    {\n      title: 'Email',\n      dataIndex: 'email',\n      key: 'email',\n      width: 210,\n      sortable: false,\n      render: (value: any, data) => {\n        if (!data) return null;\n        return (\n          <Text style={{ whiteSpace: 'nowrap' }} size=\"xsmall\">\n            {data.email}\n          </Text>\n        );\n      }\n    },\n    {\n      title: 'Роль',\n      dataIndex: 'businessRole',\n      key: 'businessRole',\n      width: '50px',\n      sortable: false,\n      render: (value: any, data) => {\n        if (data?.businessRole === undefined) return null;\n\n        return (\n          <Box align=\"center\" justify=\"center\">\n            <RoleIcon role={data.businessRole} />\n          </Box>\n        );\n      }\n    },\n    {\n      title: 'ФИО',\n      dataIndex: 'firstName',\n      key: 'firstName',\n      width: 300,\n      sortable: false,\n      render: (value: any, data) => {\n        if (!data) return null;\n\n        const personName = [data.lastName, data.firstName, data.patronymic]\n          .filter(i => i)\n          .join(' ');\n\n        return <Text size=\"xsmall\">{personName}</Text>;\n      }\n    },\n    {\n      title: 'Организация',\n      dataIndex: 'company',\n      key: 'company',\n      width: '260px',\n      sortable: false,\n      render: (value: any, data) => {\n        if (!data) return null;\n\n        return (\n          <Text style={{ width: '260px' }} size=\"xsmall\">\n            {data.company || '--'}\n          </Text>\n        );\n      }\n    },\n    {\n      title: 'Район',\n      dataIndex: 'district',\n      key: 'district',\n      width: '260px',\n      sortable: false,\n      render: (value: any, data) => {\n        if (!data) return null;\n\n        return (\n          <Text style={{ whiteSpace: 'nowrap' }} size=\"xsmall\">\n            {data.district || '--'}\n          </Text>\n        );\n      }\n    },\n    {\n      title: 'Телефон',\n      dataIndex: 'phone',\n      key: 'phone',\n      width: '260px',\n      sortable: false,\n      render: (value: any, data) => {\n        if (!data?.phone) return null;\n\n        return (\n          <Box direction=\"row\" gap=\"6px\">\n            <PhoneIcon color=\"Purple\" />\n            <Text size=\"xsmall\">{data.phone}</Text>\n          </Box>\n        );\n      }\n    },\n    {\n      title: '',\n      width: 15,\n      key: '_actions',\n      dataIndex: '_actions',\n      render: (value: any, data) => {\n        if (!data || !data.personId) return null;\n        return <UsersActionsMenu personId={data.personId} />;\n      }\n    }\n  ];\n};\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js?modules!../../../node_modules/stylus-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./region.styl\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { TToken } from 'we-oauth2/lib/auth/interfaces';\nimport { TRole } from './apiTypes';\nimport { PollingType } from '../pages/Organizer/tabs';\nimport { PollingStatus } from 'components/RegionMap';\n\nexport interface ITokenEx extends TToken {\n  accountId: string;\n  personInfo: IUserInfo;\n}\n\nexport interface IUserMeta {\n  position?: string;\n  patronymic?: string;\n  permitionDocumentName?: string;\n  phone?: UserAuthenticationFactor;\n  email?: UserAuthenticationFactor;\n  company: string;\n  district: string;\n}\n\ninterface UserAuthenticationFactor<T = string> {\n  value: T;\n  confirmed: boolean;\n}\n\nexport interface IUserInfo {\n  accountId: string;\n  businessRoles: Array<TRole>;\n  companyId: string;\n  companyName: string;\n  displayName: string;\n  email: string | null;\n  firstName: string;\n  lastName: string;\n  nodeAlias: string;\n  participantAddress: string | null;\n  participantPublicKey: string | null;\n  personId: string;\n  phone: string;\n  meta: IUserMeta | null;\n}\n\nexport interface IAccount {\n  accountId: string;\n  accountNonExpired: boolean;\n  accountNonLocked: boolean;\n  credentialsNonExpired: boolean;\n  enabled: boolean;\n  password: string | null;\n  roles: Array<string>;\n  username: string;\n}\n\nexport interface ICompanyMeta {\n  bankName: string;\n  logo?: string;\n  paymentAccount: string;\n  directorLastName: string;\n  directorFirstName: string;\n  directorPatronymic: string;\n  correspondentAccount: string;\n  bankIdentificationCode: string;\n\n  bik: string;\n  address?: string;\n  directorFullName?: {\n    lastName: string;\n    firstName: string;\n    middleName: string;\n  };\n}\n\nexport interface ICompany {\n  id: string;\n  nodeAlias: string;\n  name: string;\n  shortName: string;\n  type: TRole;\n  address: string;\n  phone: string;\n  email: string;\n  okpo?: string;\n  ogrn: string;\n  inn: string;\n  kpp: string;\n  meta: ICompanyMeta | null;\n}\n\nexport interface IBusinessRole {\n  name: TRole;\n  displayName: string;\n  description: string;\n}\n\nexport interface ICompanyType extends IBusinessRole {}\n\nexport enum IP_OBJECT_STATUS {\n  ALL = 'ALL', //Only UI\n  ACTIVE = 'ACTIVE',\n  DEACTIVATED = 'DEACTIVATED'\n}\n\nexport interface IpObjectList {\n  id: string | null;\n  name: string;\n  ownerId: string;\n  status: IP_OBJECT_STATUS;\n  validTillDate: string;\n  logo: string;\n  companyName: string;\n  companyShortName: string;\n}\n\nexport interface IpObject extends IpObjectList {\n  legalDocumentNumber: string;\n  validFromDate: string;\n  validTillDate: string;\n}\n\nexport interface RegistrationRequest {\n  name: string;\n  surname: string;\n  patronymic: string;\n  email: string;\n  phoneNumber: string;\n  encodedPassword: string;\n}\n\nexport interface RegistrationResponse {\n  accountId: string;\n  personId: string;\n}\n\nexport interface ConfirmationRequest {\n  accountId: string;\n  confirmationCode: string;\n}\n\ninterface CommonViolation {\n  inn: string;\n  name: string;\n  environment: 'INTERNET' | 'PHYSICAL';\n  date: Date | string;\n  comment: string;\n  reason?: string;\n  files: Array<{ name: string; content: string; type: string }>;\n}\n\nexport interface InternetViolation extends CommonViolation {\n  url: string;\n  type: string;\n}\n\nexport interface PhysicalViolation extends CommonViolation {\n  address: string;\n  marketName: string;\n  floor: string;\n  pavilion: string;\n  addressComment: string;\n}\n\nexport interface ListViolationResponse {\n  id: string;\n  date: string;\n  created: string;\n  ipObject: {\n    id: string;\n    created: string;\n    companyId: string;\n    companyName: string;\n    companyShortName: string;\n    logo: string;\n    name: string;\n    legalDocumentNumber: string;\n    validFromDate: string;\n    validTillDate: string;\n  };\n  environment: 'INTERNET' | 'PHYSICAL';\n  name: string;\n  status: ViolationStatus;\n  type: ViolationType;\n  lastUnsuccessfulTxId?: string;\n  lastUnsuccessfulTxStatus?: string;\n}\n\nexport interface ListResponse<T> {\n  content: T[];\n  empty: boolean;\n  first: boolean;\n  last: boolean;\n  number: number;\n  numberOfElements: number;\n  size: number;\n  totalElements: number;\n  totalPages: number;\n}\n\nexport enum ViolationStatus {\n  NEW = 'NEW',\n  REJECTED = 'REJECTED',\n  DUPLICATE = 'DUPLICATE',\n  IN_WORK = 'IN_WORK',\n  DECLINED = 'DECLINED',\n  CONFIRMED = 'CONFIRMED'\n}\n\nexport enum ViolationType {\n  COMMERCIAL_USE = 'COMMERCIAL_USE'\n}\n\ninterface CommonViolationResponse {\n  comment?: string;\n  date: string;\n  created: string;\n  files: FileParams[];\n  id: string;\n  inn: string;\n  ipObject: {\n    companyId: string;\n    companyName: string;\n    companyShortName: string;\n    id: string;\n    legalDocumentNumber: string;\n    logo: string;\n    name: string;\n    status: 'ACTIVE' | 'DEACTIVATED';\n    validFromDate: string;\n    validTillDate: string;\n  };\n  name: string;\n  status: ViolationStatus;\n  type: ViolationType;\n  reason?: string;\n  environment: 'INTERNET' | 'PHYSICAL';\n  lastUnsuccessfulTxId?: string;\n  lastUnsuccessfulTxStatus?: string;\n}\n\nexport interface PhysicalViolationResponse extends CommonViolationResponse {\n  environment: 'PHYSICAL';\n  address: string;\n  marketName: string;\n  floor: string;\n  pavilion: string;\n  addressComment: string;\n}\n\nexport interface InternetViolationResponse extends CommonViolationResponse {\n  environment: 'INTERNET';\n  url: string;\n}\n\nexport type ViolationResponse =\n  | PhysicalViolationResponse\n  | InternetViolationResponse;\n\nexport interface FileParams {\n  externalRef: string;\n  fileHash: string;\n  name: string;\n}\n\ninterface CommonViolationDuplicateResponse {\n  id: string;\n  name: string;\n  type: ViolationType;\n  date: string;\n  comment?: string;\n  files: FileParams[];\n  environment: 'INTERNET' | 'PHYSICAL';\n  created: string;\n}\n\nexport interface ViolationDuplicateResponse\n  extends CommonViolationDuplicateResponse {\n  address?: string;\n  marketName?: string;\n  floor?: string;\n  pavilion?: string;\n  addressComment?: string;\n  url?: string;\n  status: ViolationStatus;\n}\n\n//test\nexport enum PROJECT_STATUS {\n  ALL = 'ALL',\n  IN_REVIEW = 'IN_REVIEW',\n  REWORK_REQUIRED = 'REWORK_REQUIRED',\n  REWORK_COMPLETED = 'REWORK_COMPLETED',\n  IN_PROGRESS = 'IN_PROGRESS',\n  DECLINED = 'DECLINED',\n  CANCELED = 'CANCELED',\n  DRAFT = 'DRAFT',\n  APPROVED = 'APPROVED',\n  DONE = 'DONE',\n  ARCHIVED = 'ARCHIVED',\n  DELETED = 'DELETED'\n}\n\nexport interface ISchool {\n  districtId: number;\n  districtName: string;\n  id: string;\n  name: string;\n  personCount: number;\n  pollId: string;\n  schoolGroupId: number;\n  schoolGroupName: number;\n}\n\nexport interface IFile {\n  id: string;\n  name: string;\n  type: string;\n}\n\nexport interface IProject {\n  id: string;\n  name: string;\n  status: PROJECT_STATUS;\n  pollId: string;\n  logoFileId: string;\n  endDate: string;\n  startDate: string;\n  place: string;\n  totalCost?: number;\n  schoolId: string;\n  description: string;\n  sphere: string;\n  budgetSummary: number;\n  beneficiaries: number;\n  administrationLink: string;\n  budgetRegion: number;\n  budgetDistrict: number;\n  budgetPeople: number;\n  noBudgetFunds: number;\n  implDescription?: string;\n  implFiles?: IFile[];\n  declineReason?: string;\n  bulletinOrder: number | null;\n  reworkReason?: string;\n  files: IFile[];\n  privateFiles: IFile[];\n\n  applicantLogin?: any;\n  applicantPhone?: any;\n\n  subject?: PollSubject;\n  school?: ISchool;\n  creator: {\n    firstName: string;\n    lastName: string;\n    patronymic: string;\n    phoneNumber: string;\n  };\n\n  score: {\n    average: number;\n    totalCount: number;\n    currentUser: number;\n  };\n}\n\nexport interface IProjects extends Omit<IProject, 'password'> {\n  status: any;\n  personId: string;\n}\n\nexport type PollSubject = {\n  id: string;\n  regionCode: string;\n  pollId: string;\n  name: string;\n  inProgressProjectsCount: number;\n  activeProjectsCount: number;\n  reviewProjectsCount: number;\n  hasPoll: boolean;\n  statusDueDate: string;\n  type: PollingType;\n  status: PollingStatus;\n  year: number;\n  voteCount: number;\n};\n\nexport type DistrictType = 'OBLAST_DISTRICTS' | 'VOLGOGRAD_DISTRICTS';\n\nexport type PollSubjectShort = Pick<PollSubject, 'id' | 'name' | 'type'> & {\n  year: string;\n};\n\nexport type IPoll = {\n  applicationEndDate: string;\n  applicationStartDate: string;\n  form: 'CUMULATIVE';\n  id: string;\n  contractId: string;\n  status: PollSubject['status'];\n  statusDueDate: string;\n  subject: PollSubjectShort;\n  systemStatus:\n    | 'PUBLISHED'\n    | 'SENT_TO_VOTING'\n    | 'RESULTS_READY'\n    | 'ERROR'\n    | 'PREPARE_RESULTS';\n  votesCount: number;\n  dynamicVoteCount: number;\n  votingEndDate: string;\n  votingId: string;\n  votingStartDate: string;\n  votingThreshold: number;\n  bulletinProjectsCount?: number;\n  votingThresholdReached: boolean;\n  techWindowStarted: boolean;\n};\n\nexport type ArchivePollApiDTO = Pick<\n  IPoll,\n  | 'id'\n  | 'bulletinProjectsCount'\n  | 'status'\n  | 'subject'\n  | 'votingEndDate'\n  | 'votingStartDate'\n> & {\n  voteCount: number;\n};\n\nexport type IPollResults = {\n  votesCountByProjectId: Record<string, number>;\n};\n\nexport interface IUserHasVote {\n  createdDate: string;\n  encryptedBulletin: string;\n  votingTxId: string;\n  votingTxStatus: string;\n}\n\nexport interface INewSystemUser {\n  login: string;\n  surname: string;\n  name: string;\n  patronymic?: string;\n  email: string;\n  password: string;\n  roles: TRole[];\n  organization: string; // update after backend impl\n  district: string; // update after backend impl\n  phone: string; // update after backend impl\n}\n\ninterface IBasicUser {\n  businessRole: TRole;\n  company: string;\n  districtId: string;\n  email: string;\n  firstName: string;\n  lastName: string;\n  patronymic: string;\n  phone: string;\n}\n\nexport interface INewUser extends IBasicUser {\n  password: string;\n}\n\nexport interface IUser extends IBasicUser {\n  personId: string;\n  district: string;\n  id: string;\n}\n\nexport type UpdateUserFullyRequest = Pick<\n  IUser,\n  | 'email'\n  | 'phone'\n  | 'firstName'\n  | 'lastName'\n  | 'patronymic'\n  | 'company'\n  | 'districtId'\n>;\n\nexport interface ISystemUser extends Omit<INewSystemUser, 'password'> {\n  status: any; // TODO add correct typing\n  personId: string;\n  /** @deprecated */\n  id: string;\n}\n\nexport type UpdateAccountRequest = {\n  login: string;\n  password: string;\n};\n\nexport type UpdatePersonRequest = {\n  firstName: string;\n  lastName: string;\n  patronymic: string;\n  roles?: TRole[];\n  email: string;\n  phone: string;\n};\n\nexport type IHistoryItem = {\n  comment: string;\n  createdDate: string;\n  id: string;\n  status: PROJECT_STATUS;\n}","import * as React from 'react';\nimport loadable from '@loadable/component';\nimport * as d3Type from 'd3';\nimport styles from './region.styl';\nimport clsx from 'classnames';\nimport { Spinner2 } from 'ui/Spinner2';\nimport { Box } from 'grommet';\nimport { DistrictType, PollSubject } from 'interfaces/apiEntities';\n\nexport type Area = {\n  regionCode: string;\n  name: string;\n  status: PollingStatus;\n};\n\nexport type PollingStatus =\n  | 'PUBLISHED'\n  | 'APPLICATIONS_RECEIVING'\n  | 'VOTING'\n  | 'FINISHED'\n  | 'WAITING_FOR_VOTING'\n  | '__DELETED'; // Временный\n\nconst MAP_TYPE_URLS: Record<DistrictType, string> = {\n  OBLAST_DISTRICTS: 'map.svg',\n  VOLGOGRAD_DISTRICTS: 'city_map.svg'\n};\n\nexport type RegionAreaProps = Readonly<{\n  isPending: boolean;\n  type: DistrictType;\n  areas: PollSubject[];\n  isDisabled?: (PollSubject) => boolean;\n  onClickArea?: (item: PollSubject, node: SVGGraphicsElement) => void;\n  d3: typeof d3Type;\n  mapRef?: React.RefObject<HTMLElement>;\n}>;\n\nexport interface IRegionArea {\n  zoomTo(target: PollSubject): void;\n}\n\nconst D3 = loadable.lib(() => import('d3'));\n\nexport class RegionMapRender extends React.Component<RegionAreaProps, any>\n  implements IRegionArea {\n  private mapRef = React.createRef<HTMLDivElement>();\n  private legendRef = React.createRef<HTMLDivElement>();\n\n  public getMapRef() {\n    return (this.props.mapRef || this.mapRef).current;\n  }\n\n  public zoomTo = (target: PollSubject) => {\n    const d3 = this.props.d3;\n    const mapRef = this.getMapRef();\n\n    const node = d3\n      .select(mapRef)\n      .selectAll(`g[id=${target.regionCode}]`)\n      .node() as SVGGraphicsElement;\n\n    const xy = getBoundingBox(node);\n\n    const { width: mw, height: mh } = mapRef.getBoundingClientRect();\n\n    const scale = Math.min(mw / xy[1], mh / xy[3], 3);\n\n    const tx = -xy[0] + (xy[1] * scale) / (2 * scale);\n    const ty = -xy[2] + (xy[3] * scale) / (2 * scale);\n\n    d3.select(mapRef)\n      .selectAll('#viewport')\n      .transition()\n      .duration(750)\n      .attr(\n        'transform',\n        'scale(' + scale + ')translate(' + tx + ',' + ty + ')'\n      );\n  };\n\n  initializeMap() {\n    const { onClickArea, areas, type, isDisabled } = this.props;\n    const d3 = this.props.d3;\n\n    const mapRef = this.getMapRef();\n\n    d3.xml(MAP_TYPE_URLS[type], { headers: { Accept: 'image/svg+xml' } }).then(\n      (svgMap: XMLDocument) => {\n        const map = d3\n          .select(mapRef)\n          .node()\n          .appendChild(svgMap.documentElement);\n\n        const areasMap = d3\n          .select(map)\n          .selectAll('#region')\n          .attr('class', styles.region)\n          .selectAll('g');\n\n        d3.select(map)\n          .selectAll('#water')\n          .attr('class', styles.regionWater);\n\n        d3.select(map)\n          .selectAll('#titles')\n          .attr('class', styles.regionTitles);\n\n        areasMap\n          .on('mouseover', function(d) {\n            d3.select(this as SVGGraphicsElement)\n              .node()\n              .classList.add(styles.regionAreaHover);\n          })\n          .on('mouseout', function(d) {\n            if (!d3.select(this).classed(styles.regionAreaHover)) return;\n\n            d3.select(this as SVGGraphicsElement)\n              .node()\n              .classList.remove(styles.regionAreaHover);\n          });\n\n        areasMap\n          .data(areas, function(this: SVGGraphicsElement, d: Area) {\n            return d && d.regionCode ? d.regionCode : this.id;\n          })\n          .each(function(d) {\n            const className = clsx(styles.regionArea, {\n              [styles.regionAreaStatusVote]:\n                d.status === 'VOTING' || d.status === 'FINISHED',\n              [styles.regionAreaStatusAcceptance]:\n                d.status === 'APPLICATIONS_RECEIVING',\n              [styles.regionAreaDisabled]: isDisabled(d)\n            });\n\n            d3.select(this as SVGGraphicsElement)\n              .node()\n              .classList.add(...className.split(' '));\n          })\n          .on('click', function(ev, area) {\n            if (isDisabled(area)) {\n              return;\n            }\n\n            onClickArea &&\n              onClickArea(area, d3.select(this).node() as SVGGraphicsElement);\n          });\n      }\n    );\n  }\n\n  componentDidMount() {\n    this.initializeMap();\n  }\n\n  componentDidUpdate(prevProps: Readonly<RegionAreaProps>) {\n    const reinitializeMap = this.props.type !== prevProps.type;\n\n    // TODO only upd bounded data on areas change\n\n    if (reinitializeMap) {\n      this.props.d3\n        .select(this.getMapRef())\n        .select('svg')\n        .remove();\n\n      this.initializeMap();\n    }\n  }\n\n  render() {\n    if (this.props.mapRef) {\n      return null;\n    }\n\n    return (\n      <>\n        <div ref={this.mapRef} />\n        <div ref={this.legendRef} />\n      </>\n    );\n  }\n}\n\nexport const RegionMap: React.FC<Omit<\n  RegionAreaProps,\n  'd3'\n>> = React.forwardRef((props, ref: React.Ref<RegionMapRender>) => {\n  const loader = (\n    <Box align=\"center\" justify=\"center\" height=\"medium\">\n      <Spinner2 />\n    </Box>\n  );\n\n  if (props.isPending) {\n    return loader;\n  }\n\n  return (\n    <D3>\n      {d3 => {\n        return props.isPending ? (\n          loader\n        ) : (\n          <RegionMapRender {...props} d3={d3} ref={ref} />\n        );\n      }}\n    </D3>\n  );\n});\n\nfunction getBoundingBox<E extends SVGGraphicsElement>(node: E) {\n  const bbox = node.getBBox();\n\n  const cx = bbox.x + bbox.width / 2;\n  const cy = bbox.y + bbox.height / 2;\n\n  return [bbox.x, bbox.width, bbox.y, bbox.height, cx, cy];\n}\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { Box } from 'grommet';\n\ntype BoxProps = React.ComponentProps<typeof Box>;\n\nexport const Counter = styled(Box).attrs({ direction: 'row', align: 'center' })`\n  color: ${props => props.color || props.theme.palette.GreyText};\n  font-weight: 500;\n  display: flex;\n  align-items: center;\n  font-size: ${props => props.theme.sizes.text.xsmall};\n`;\n\nexport const ListItemCounter: React.FC<Readonly<\n  { icon: React.ReactNode; count: number } & BoxProps\n>> = ({ count, icon, children, ...props }) => {\n  return (\n    <Counter {...props}>\n      <Box margin=\"0 8px 0 0\">{icon}</Box>\n\n      {count}\n    </Counter>\n  );\n};\n","import * as React from 'react';\n\nexport const VotesIcon = () => (\n  <svg\n    width=\"14\"\n    height=\"9\"\n    viewBox=\"0 0 14 9\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M0.246094 5.32031L1.06641 4.5L4.32031 7.75391L3.5 8.57422L0.246094 5.32031ZM12.9609 0.753906L13.8086 1.57422L6.80859 8.57422L3.52734 5.32031L4.375 4.5L6.80859 6.93359L12.9609 0.753906ZM10.5 1.57422L6.80859 5.29297L5.98828 4.47266L9.67969 0.753906L10.5 1.57422Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nexport const ProjectIcon = () => (\n  <svg\n    width=\"10\"\n    height=\"13\"\n    viewBox=\"0 0 10 13\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M5.57422 4.75H8.80078L5.57422 1.55078V4.75ZM7.32422 7.67578V6.5H2.67578V7.67578H7.32422ZM7.32422 10V8.82422H2.67578V10H7.32422ZM6.17578 0.675781L9.67578 4.17578V11.1758C9.67578 11.4857 9.55729 11.7591 9.32031 11.9961C9.08333 12.2148 8.8099 12.3242 8.5 12.3242H1.5C1.1901 12.3242 0.916667 12.2148 0.679688 11.9961C0.442708 11.7591 0.324219 11.4857 0.324219 11.1758L0.351562 1.82422C0.351562 1.51432 0.460938 1.25 0.679688 1.03125C0.916667 0.794271 1.1901 0.675781 1.5 0.675781H6.17578Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nexport const HouseIcon = () => (\n  <svg\n    width=\"12\"\n    height=\"13\"\n    viewBox=\"0 0 12 13\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M10.6562 8.89136V7.51111H9.34375V8.89136H10.6562ZM10.6562 11.6198V10.2716H9.34375V11.6198H10.6562ZM6.65625 3.40247V2.05432H5.34375V3.40247H6.65625ZM6.65625 6.16296V4.78272H5.34375V6.16296H6.65625ZM6.65625 8.89136V7.51111H5.34375V8.89136H6.65625ZM6.65625 11.6198V10.2716H5.34375V11.6198H6.65625ZM2.65625 6.16296V4.78272H1.34375V6.16296H2.65625ZM2.65625 8.89136V7.51111H1.34375V8.89136H2.65625ZM2.65625 11.6198V10.2716H1.34375V11.6198H2.65625ZM8 6.16296H12V13H0V3.40247H4V2.05432L6 0L8 2.05432V6.16296Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nexport const SocialIcon = () => (\n  <svg\n    width=\"16\"\n    height=\"10\"\n    viewBox=\"0 0 16 10\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M10.6562 5.65625C11.2396 5.65625 11.875 5.73958 12.5625 5.90625C13.25 6.07292 13.8854 6.34375 14.4688 6.71875C15.0521 7.09375 15.3438 7.52083 15.3438 8V9.65625H11.3438V8C11.3438 7.08333 10.9062 6.3125 10.0312 5.6875C10.1771 5.66667 10.3854 5.65625 10.6562 5.65625ZM3.4375 5.90625C4.125 5.73958 4.76042 5.65625 5.34375 5.65625C5.92708 5.65625 6.5625 5.73958 7.25 5.90625C7.9375 6.07292 8.5625 6.34375 9.125 6.71875C9.70833 7.09375 10 7.52083 10 8V9.65625H0.65625V8C0.65625 7.52083 0.947917 7.09375 1.53125 6.71875C2.11458 6.34375 2.75 6.07292 3.4375 5.90625ZM6.71875 3.75C6.34375 4.14583 5.88542 4.34375 5.34375 4.34375C4.80208 4.34375 4.33333 4.14583 3.9375 3.75C3.54167 3.35417 3.34375 2.88542 3.34375 2.34375C3.34375 1.80208 3.54167 1.33333 3.9375 0.9375C4.33333 0.541667 4.80208 0.34375 5.34375 0.34375C5.88542 0.34375 6.34375 0.541667 6.71875 0.9375C7.11458 1.33333 7.3125 1.80208 7.3125 2.34375C7.3125 2.88542 7.11458 3.35417 6.71875 3.75ZM12.0625 3.75C11.6667 4.14583 11.1979 4.34375 10.6562 4.34375C10.1146 4.34375 9.64583 4.14583 9.25 3.75C8.85417 3.35417 8.65625 2.88542 8.65625 2.34375C8.65625 1.80208 8.85417 1.33333 9.25 0.9375C9.64583 0.541667 10.1146 0.34375 10.6562 0.34375C11.1979 0.34375 11.6667 0.541667 12.0625 0.9375C12.4583 1.33333 12.6562 1.80208 12.6562 2.34375C12.6562 2.88542 12.4583 3.35417 12.0625 3.75Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nexport const TrashIcon = () => {\n  return (\n    <svg\n      width=\"10\"\n      height=\"12\"\n      viewBox=\"0 0 10 12\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M9.65625 0.65625V2H0.34375V0.65625H2.65625L3.34375 0H6.65625L7.34375 0.65625H9.65625ZM1 10.6562V2.65625H9V10.6562C9 11.0104 8.86458 11.3229 8.59375 11.5938C8.32292 11.8646 8.01042 12 7.65625 12H2.34375C1.98958 12 1.67708 11.8646 1.40625 11.5938C1.13542 11.3229 1 11.0104 1 10.6562Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n\nexport const HappyScholarVoting = () => {\n  return (\n    <svg\n      width=\"568px\"\n      height=\"536px\"\n      viewBox=\"0 0 568 536\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <rect opacity=\"0.8\" width=\"568\" height=\"536\" fill=\"url(#pattern0)\" />\n      <defs>\n        <pattern\n          id=\"pattern0\"\n          patternContentUnits=\"objectBoundingBox\"\n          width=\"1\"\n          height=\"1\"\n        >\n          <use\n            xlinkHref=\"#image0\"\n            transform=\"translate(0 0.166194) scale(0.0025 0.00264925)\"\n          />\n        </pattern>\n        <image\n          id=\"image0\"\n          width=\"400\"\n          height=\"252\"\n          xlinkHref=\"data:image/png;base64,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\"\n        />\n      </defs>\n    </svg>\n  );\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { SyntheticEvent } from 'react';\n\ntype Props<A = any> = {\n  checked: boolean;\n  value?: string;\n  onChange?: (...args: any[]) => void;\n};\n\nexport const StyledCheckbox = styled.div<Pick<Props, 'checked'>>`\n  width: 23px;\n  height: 23px;\n  border: 2px solid ${props => props.theme.palette.Purple};\n  box-sizing: border-box;\n  border-radius: 1px;\n\n  background-color: ${props =>\n    props.checked ? props.theme.palette.Purple : 'transparent'};\n  color: ${props =>\n    props.checked ? props.theme.palette.White : props.theme.palette.Purple};\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nexport const Checkbox: React.FC<Props> = ({ checked, onChange, value }) => {\n  const inputRef = React.useRef<HTMLInputElement>(null);\n\n  const handleInputChange = (...args) => {\n    onChange && onChange(...args);\n  };\n\n  const handleCheckboxClick = (ev: React.SyntheticEvent<HTMLDivElement>) => {\n    ev.stopPropagation();\n\n    inputRef.current.click();\n  };\n\n  return (\n    <StyledCheckbox checked={checked} onClick={handleCheckboxClick}>\n      {checked && <CheckboxIcon />}\n\n      <input\n        ref={inputRef}\n        type=\"checkbox\"\n        onChange={handleInputChange}\n        style={{ display: 'none' }}\n        value={value}\n      />\n    </StyledCheckbox>\n  );\n};\n\nfunction CheckboxIcon() {\n  return (\n    <svg\n      width=\"13\"\n      height=\"11\"\n      viewBox=\"0 0 13 11\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M4.34375 8.53223L11.958 0.884277L12.9688 1.89502L4.34375 10.52L0.334473 6.51074L1.31152 5.5L4.34375 8.53223Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n}\n","import * as React from 'react';\nimport { PollSubject } from 'interfaces/apiEntities';\nimport { PollingStatus } from 'components/RegionMap';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { breakpoints } from 'ui';\n\nconst formatDate = (dateString: string) => {\n  const date = new Date(Date.parse(dateString));\n\n  const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(\n    date\n  );\n  const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);\n\n  return `${day}.${month}`;\n};\n\ntype VotingStatusProps = BoxProps &\n  JSX.IntrinsicElements['div'] & { status: PollingStatus };\n\nfunction mapColor({\n  status,\n  theme\n}: BoxProps & { status: PollingStatus; theme: any }): string {\n  if (status === 'APPLICATIONS_RECEIVING') {\n    return theme.palette.Orange;\n  }\n\n  if (status === 'VOTING' || status === 'FINISHED') {\n    return theme.palette.Green;\n  }\n\n  if (status === '__DELETED') {\n    return theme.palette.White;\n  }\n\n  return theme.palette.GreyText;\n}\n\nfunction mapBgColor({\n  status,\n  theme\n}: BoxProps & { status: PollingStatus; theme: any }): string {\n  if (status === '__DELETED') {\n    return theme.palette.Red;\n  }\n\n  return theme.palette.LightGrey50;\n}\n\nexport const VotingStatusStyled: React.FC<VotingStatusProps> = styled(Box)`\n  font-size: 14px;\n  font-weight: 500;\n  padding: 0 4px;\n  height: 16px;\n  line-height: 16px;\n  border-radius: 2px;\n  text-align: center;\n  white-space: nowrap;\n  flex: 0 0 auto;\n\n  background-color: ${mapBgColor};\n  color: ${mapColor};\n\n  @media (min-width: ${breakpoints.laptop}) {\n    font-size: 11px;\n  }\n`;\n\nexport const PollStatus: React.FC<BoxProps & {\n  poll: PollSubject;\n}> = props => {\n  const { status, statusDueDate } = props.poll;\n\n  return (\n    <VotingStatusStyled {...props} status={status}>\n      {AREA_UI_TEXT[status]} {statusDueDate ? formatDate(statusDueDate) : ''}\n    </VotingStatusStyled>\n  );\n};\n\nconst AREA_UI_TEXT: Record<PollSubject['status'], string> = {\n  PUBLISHED: 'Прием заявок начнется',\n  APPLICATIONS_RECEIVING: 'Прием заявок до',\n  WAITING_FOR_VOTING: 'Голосование начнется',\n  VOTING: 'Идёт голосование до',\n  FINISHED: 'Голосование Завершено',\n  __DELETED: 'Отменено'\n};\n\ntype BoxProps = React.ComponentProps<typeof Box>;\n","import { useTheme } from 'utils/hooks';\nimport { Box } from 'grommet';\nimport { Text, Title } from '@we-ui-components/base';\nimport { ListItemCounter } from './ListItemCounter';\nimport { HouseIcon, ProjectIcon, SocialIcon, VotesIcon } from './icons';\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { Checkbox } from 'ui/Checkbox';\nimport { useStores } from 'stores/index';\nimport { PollSubject } from 'interfaces/apiEntities';\nimport { PollStatus } from 'components/PollStatus/PollStatus';\nimport { breakpoints } from 'ui';\nimport { useMediaQuery } from 'react-responsive';\n\nconst ItemContainer = styled((props: any) => <Box {...props} />).attrs({\n  justify: 'start',\n  direction: 'row',\n  flex: 'grow',\n  width: '100%'\n})`\n  cursor: pointer;\n  user-select: none;\n\n  &:hover {\n    background-color: ${props => props.theme.palette.LightGrey50};\n  }\n\n  @media (max-width: ${breakpoints.laptop}) {\n    border-top: ${props => (props.withoutBorder ? '' : '1px solid #e5e5e5')};\n  }\n`;\n\nconst SubItemContainer = styled((props: any) => <Box {...props} />).attrs({\n})`\n  cursor: pointer;\n  user-select: none;\n\n  flex-direction: row;\n  justify: start;\n  align-items: center;\n  height: 100%;\n  flex-grow: 1;\n\n  &:hover {\n    background-color: ${props => props.theme.palette.LightGrey50};\n  }\n`;\n\nconst ReviewProjectsCounter = styled(Box)`\n  min-width: 18px;\n  height: 18px;\n  padding: 0 6px;\n  border-radius: 50%;\n  font-weight: 700;\n  font-size: 13px;\n  text-align: center;\n  line-height: 18px;\n  color: ${props => props.theme.palette.White};\n  background-color: ${props => props.theme.palette.Purple};\n  position: relative;\n  left: 5px;\n`;\n\nexport type RenderLitItemProps = { params: PollSubject } & {\n  isMoType: boolean;\n  deleting: boolean;\n  withoutBorder?: boolean;\n  onClick: (poll: PollSubject) => void;\n};\n\nexport function renderListItem({\n  params: polling,\n  isMoType,\n  withoutBorder,\n  deleting,\n  onClick\n}: RenderLitItemProps) {\n  const theme = useTheme();\n  const { votings, user } = useStores();\n\n  const isVoter = user.isContainOneOfRoles(['VOTER'])\n\n  const handleChange = React.useCallback(\n    ev => {\n      votings.delete.selectPolling(polling);\n    },\n    [polling]\n  );\n\n  const schoolGroupCounters = (\n    <Box\n      basis=\"100%\"\n      direction=\"row\"\n      align=\"center\"\n      style={{ lineHeight: 1.5 }}\n    >\n      <ListItemCounter count={1302} icon={<HouseIcon />} />\n      <ListItemCounter\n        count={1501}\n        icon={<SocialIcon />}\n        margin={{ left: '8px' }}\n      />\n    </Box>\n  );\n\n  const deleteCheckbox = (\n    <Box justify=\"center\" flex=\"grow\" width=\"23px\" margin={{ right: '12px' }}>\n      <Checkbox\n        checked={votings.delete.isSelected(polling)}\n        onChange={handleChange}\n        value={polling.id}\n      />\n    </Box>\n  );\n\n  const showDeleteCheckbox =\n    deleting && polling.hasPoll === true && votings.delete.isDeletable(polling);\n\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n\n  const isIpadProOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptop\n  });\n\n  const calculateTitleWidth = () => {\n    if (isLaptopOrWider && withoutBorder) return '135px';\n    if (isLaptopOrWider) return '155px';\n    if (isIpadProOrWider) return '400px';\n    if (isTabletOrWider) return '300px';\n    return '100%';\n  };\n\n  const calculatePollStatusWidth = () => {\n    if (isLaptopOrWider) return '170px';\n    if (isTabletOrWider) return '220px';\n  };\n\n  const calculateIndicatorsMargin = () => {\n    if (isLaptopOrWider) return '18px';\n    if (isTabletOrWider) return 'auto';\n    return '0';\n  };\n\n  return (\n    <ItemContainer\n      withoutBorder={withoutBorder}\n      onClick={() => onClick(polling)}\n    >\n      <div\n        style={{\n          padding: polling.type === 'SCHOOL_GROUP' ? '16px 10px' : '16px',\n          display: 'flex',\n          width: '100%'\n        }}\n      >\n        {showDeleteCheckbox && deleteCheckbox}\n\n        <Box\n          justify=\"start\"\n          direction={isTabletOrWider ? 'row' : 'column'}\n          wrap\n          width=\"100%\"\n          gap={isTabletOrWider ? '0' : '6px'}\n        >\n          <Box margin={{ right: '18px' }} width={calculateTitleWidth()}>\n            <Title\n              size={isLaptopOrWider ? '13px' : '16px'}\n              color={theme.palette.BlackText}\n              style={{ lineHeight: 1.5 }}\n            >\n              {polling.name}\n            </Title>\n          </Box>\n\n          <Box\n            direction=\"row\"\n            align=\"center\"\n            justify=\"start\"\n            width={calculatePollStatusWidth()}\n          >\n            <PollStatus poll={polling} />\n          </Box>\n\n          <Box\n            direction=\"row\"\n            margin={{ left: calculateIndicatorsMargin() }}\n            width={{ width: 'auto', max: '140px', min: '130px' }}\n            justify=\"between\"\n            flex={\n              isIpadProOrWider && user.isContainOneOfRoles(['REGULATOR'])\n                ? 'grow'\n                : 'shrink'\n            }\n          >\n            <Box direction=\"row\" align=\"center\">\n              <ListItemCounter\n                count={isVoter ? polling.inProgressProjectsCount : polling.activeProjectsCount}\n                icon={<ProjectIcon />}\n                margin={isTabletOrWider ? '0 auto 0 0' : '0'}\n                style={{ minWidth: '5ch' }}\n              />\n              {polling.reviewProjectsCount > 0 && (\n                <ReviewProjectsCounter>\n                  {polling.reviewProjectsCount}\n                </ReviewProjectsCounter>\n              )}\n            </Box>\n            <ListItemCounter\n              margin={{ left: '8px' }}\n              count={polling.voteCount}\n              icon={<VotesIcon />}\n            />\n          </Box>\n\n          {/*{!isMoType && schoolGroupCounters}*/}\n        </Box>\n      </div>\n    </ItemContainer>\n  );\n}\n\nexport type RenderLitSubItemProps = {\n  title: string,\n  polling: PollSubject,\n  onClick: (params: { pollId: string, status: string, search: string }) => void,\n};\n\nexport function renderListSubItem({ title, polling, onClick }: RenderLitSubItemProps) {\n  return (\n    <SubItemContainer\n      onClick={() => onClick({ ...polling, search: title })}\n    >\n      <Box>\n        <Text style={{ fontSize: 13 }}>{title}</Text>\n      </Box>\n    </SubItemContainer>\n  )\n}\n\nexport const SumVoteCount = ({\n  padding,\n  count,\n}: {\n  count: number;\n  padding: string;\n}) => {\n  const theme = useTheme();\n  const { user } = useStores();\n\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n\n  const isIpadProOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptop\n  });\n\n  const calculateTitleWidth = () => {\n    if (isLaptopOrWider) return '155px';\n    if (isIpadProOrWider) return '400px';\n    if (isTabletOrWider) return '300px';\n    return '100%';\n  };\n\n  const calculatePollStatusWidth = () => {\n    if (isLaptopOrWider) return '170px';\n    if (isTabletOrWider) return '220px';\n  };\n\n  const calculateIndicatorsMargin = () => {\n    if (isLaptopOrWider) return '18px';\n    if (isTabletOrWider) return 'auto';\n    return '0';\n  };\n\n  return (\n    <Box\n      direction=\"row\"\n      style={{\n        display: 'flex',\n        width: '100%',\n        borderTop: '1px solid #e5e5e5',\n        height: isTabletOrWider ? '5%' : '10%',\n        position: 'sticky',\n        flex: 'grow',\n      }}\n    >\n      <div\n        style={{\n          padding: padding,\n          display: 'flex',\n          width: '100%'\n        }}\n      >\n        {isTabletOrWider ? (\n          <Box justify=\"start\" direction=\"row\" wrap width=\"100%\">\n            <Box margin={{ right: '18px' }} width={calculateTitleWidth()}>\n              <Title\n                bold\n                size=\"16px\"\n                color={theme.palette.BlackText}\n                style={{ lineHeight: 1.5 }}\n              >\n                Всего голосов\n              </Title>\n            </Box>\n\n            <Box\n              direction=\"row\"\n              align=\"center\"\n              justify=\"start\"\n              width={calculatePollStatusWidth()}\n            />\n\n            <Box\n              direction=\"row\"\n              margin={{ left: calculateIndicatorsMargin() }}\n              width={{ width: 'auto', max: '140px', min: '130px' }}\n              justify=\"end\"\n              flex={\n                isIpadProOrWider && user.isContainOneOfRoles(['REGULATOR'])\n                  ? 'grow'\n                  : 'shrink'\n              }\n            >\n              <ListItemCounter\n                color={theme.palette.BlackText}\n                count={count}\n                icon={<VotesIcon />}\n              />\n            </Box>\n          </Box>\n        ) : (\n          <Box justify=\"between\" wrap width=\"100%\" direction=\"row\">\n            <Box>\n              <Title\n                bold\n                size=\"16px\"\n                color={theme.palette.BlackText}\n                style={{ lineHeight: 1.5 }}\n              >\n                Всего голосов\n              </Title>\n            </Box>\n            <ListItemCounter\n              color={theme.palette.BlackText}\n              count={count}\n              icon={<VotesIcon />}\n            />\n          </Box>\n        )}\n      </div>\n    </Box>\n  );\n};\n","import { IPoll, ISchool, PollSubject } from 'interfaces/apiEntities';\n\nexport enum NODE_TYPE {\n  DISTRICT = 'DISTRICT',\n  SCHOOL_GROUP = 'SCHOOL_GROUP',\n  SCHOOL = 'SCHOOL'\n}\n\nexport interface INode {\n  title: string | number;\n  id: number;\n  schollGroupId: number;\n  children?: INode[];\n  type: NODE_TYPE;\n  polling?: PollSubject;\n}\n\nexport const generateSchoolTree = (\n  schools: ISchool[],\n  pollingList: PollSubject[]\n) => {\n  const root: INode[] = [];\n\n  schools.forEach(school => {\n    let schoolGroup = root.find(i => i.id === school.schoolGroupId);\n    const polling = pollingList.find(v => Number(v.id) === school.schoolGroupId)\n\n    if (!schoolGroup) {\n      schoolGroup = {\n        polling,\n        title: school.schoolGroupName,\n        id: school.schoolGroupId,\n        schollGroupId: school.schoolGroupId,\n        type: NODE_TYPE.SCHOOL_GROUP,\n        children: []\n      };\n\n      root.push(schoolGroup);\n    }\n\n    let district = schoolGroup.children.find(\n      district => district.id === school.districtId\n    );\n\n    if (!district) {\n      district = {\n        polling,\n        title: school.districtName,\n        id: school.districtId,\n        type: NODE_TYPE.DISTRICT,\n        schollGroupId: school.schoolGroupId,\n        children: []\n      };\n\n      schoolGroup.children.push(district);\n    }\n\n    district.children.push({\n      ...school,\n      polling,\n      schollGroupId: school.schoolGroupId,\n      type: NODE_TYPE.SCHOOL,\n      title: school.name,\n      id: Number(school.id)\n    });\n  });\n\n  return root;\n};\n\nexport type TSearchMethod = (school: ISchool) => boolean;\n\nexport const filteredTree = (\n  schools: ISchool[],\n  search: TSearchMethod,\n  pollingList: PollSubject[]\n): INode[] => {\n  return generateSchoolTree(schools.filter(search), pollingList);\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst prop = (prop: string, fallback: string = '') => props =>\n  props[prop] || fallback ? `${prop}: ${props[prop] || fallback}` : '';\n\nexport type SvgProps = JSX.IntrinsicElements['svg'] & {\n  opacity?: string;\n  cursor?: string;\n  width?: string;\n};\n\nexport const SVG = styled.svg<SvgProps>`\n  ${prop('opacity')}\n  ${prop('cursor', 'auto')}\n  ${prop('width')}\n`;\n\nexport const Arrow: React.FC<SvgProps> = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"16\"\n      height=\"12\"\n      viewBox=\"0 0 16 12\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n      ref={ref}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M1 7C0.447715 7 0 6.55228 0 6C0 5.44772 0.447715 5 1 5H15C15.5523 5 16 5.44772 16 6C16 6.55228 15.5523 7 15 7H1Z\"\n        fill=\"#0A0606\"\n      />\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M9.29289 1.70711C8.90237 1.31658 8.90237 0.683418 9.29289 0.292893C9.68342 -0.0976311 10.3166 -0.0976311 10.7071 0.292893L15.7071 5.29289C16.0976 5.68342 16.0976 6.31658 15.7071 6.70711C15.3166 7.09763 14.6834 7.09763 14.2929 6.70711L9.29289 1.70711Z\"\n        fill=\"#0A0606\"\n      />\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M10.7071 11.7071C10.3166 12.0976 9.68342 12.0976 9.29289 11.7071C8.90237 11.3166 8.90237 10.6834 9.29289 10.2929L14.2929 5.29289C14.6834 4.90237 15.3166 4.90237 15.7071 5.29289C16.0976 5.68342 16.0976 6.31658 15.7071 6.70711L10.7071 11.7071Z\"\n        fill=\"#0A0606\"\n      />\n    </SVG>\n  );\n});\n\nexport const PrivateIcon = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"16\"\n      height=\"13\"\n      viewBox=\"0 0 16 13\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        d=\"M7.90625 4H8C8.54167 4 9.01042 4.19792 9.40625 4.59375C9.80208 4.98958 10 5.45833 10 6V6.125L7.90625 4ZM5.03125 4.53125C4.78125 5.03125 4.65625 5.52083 4.65625 6C4.65625 6.91667 4.97917 7.70833 5.625 8.375C6.29167 9.02083 7.08333 9.34375 8 9.34375C8.47917 9.34375 8.96875 9.21875 9.46875 8.96875L8.4375 7.9375C8.27083 7.97917 8.125 8 8 8C7.45833 8 6.98958 7.80208 6.59375 7.40625C6.19792 7.01042 6 6.54167 6 6C6 5.875 6.02083 5.72917 6.0625 5.5625L5.03125 4.53125ZM1.34375 0.84375L2.1875 0L14 11.8125L13.1562 12.6562C13.0521 12.5521 12.7188 12.2292 12.1562 11.6875C11.6146 11.1458 11.1979 10.7292 10.9062 10.4375C10.0104 10.8125 9.04167 11 8 11C6.35417 11 4.86458 10.5417 3.53125 9.625C2.19792 8.70833 1.23958 7.5 0.65625 6C1.17708 4.70833 2.01042 3.60417 3.15625 2.6875C2.90625 2.4375 2.55208 2.08333 2.09375 1.625C1.65625 1.16667 1.40625 0.90625 1.34375 0.84375ZM8 2.65625C7.58333 2.65625 7.17708 2.73958 6.78125 2.90625L5.34375 1.46875C6.15625 1.15625 7.04167 1 8 1C9.64583 1 11.125 1.45833 12.4375 2.375C13.7708 3.29167 14.7292 4.5 15.3125 6C14.8125 7.22917 14.0521 8.28125 13.0312 9.15625L11.0938 7.21875C11.2604 6.82292 11.3438 6.41667 11.3438 6C11.3438 5.08333 11.0104 4.30208 10.3438 3.65625C9.69792 2.98958 8.91667 2.65625 8 2.65625Z\"\n        fill=\"#8D8D8D\"\n      />\n    </SVG>\n  );\n});\n\nexport const ExternalLink = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 16 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M6 5C6.55228 5 7 5.44772 7 6C7 6.55228 6.55228 7 6 7H3C2.44772 7 2 7.44772 2 8V13C2 13.5523 2.44772 14 3 14H8.00377C8.55606 14 9.00377 13.5523 9.00377 13V10C9.00377 9.44772 9.45149 9 10.0038 9C10.5561 9 11.0038 9.44772 11.0038 10V13C11.0038 14.6569 9.66063 16 8.00377 16H3C1.34315 16 0 14.6569 0 13V8C0 6.34315 1.34315 5 3 5H6Z\"\n        fill=\"#3B33B0\"\n      />\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M14.2929 0.292893C14.6834 -0.0976311 15.3166 -0.0976311 15.7071 0.292893C16.0976 0.683418 16.0976 1.31658 15.7071 1.70711L10.7071 6.70711C10.3166 7.09763 9.68342 7.09763 9.29289 6.70711C8.90237 6.31658 8.90237 5.68342 9.29289 5.29289L14.2929 0.292893Z\"\n        fill=\"#3B33B0\"\n      />\n    </SVG>\n  );\n});\n\nexport const CollapseArrow: React.FC<SvgProps> = React.forwardRef(\n  (props, ref) => {\n    return (\n      <SVG\n        width=\"17\"\n        height=\"11\"\n        viewBox=\"0 0 17 11\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n        ref={ref}\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M8.33367 8.35471L1.4777 1.33325L1 1.82253L8.33367 9.33325L15.6667 1.82253L15.189 1.33325L8.33367 8.35471Z\"\n          fill=\"#3B33B0\"\n          stroke=\"#3B33B0\"\n        />\n      </SVG>\n    );\n  }\n);\n\nexport const VkIcon: React.FC<SvgProps> = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"32\"\n      height=\"33\"\n      viewBox=\"0 0 32 33\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n      ref={ref}\n    >\n      <path\n        d=\"M0 16.7344C0 25.5709 7.16344 32.7344 16 32.7344C24.8366 32.7344 32 25.5709 32 16.7344C32 7.89782 24.8366 0.734375 16 0.734375C7.16344 0.734375 0 7.89782 0 16.7344Z\"\n        fill=\"#3B33B0\"\n      />\n      <path\n        d=\"M22.0887 17.5255C21.7902 17.1486 21.8757 16.9809 22.0887 16.6439C22.0924 16.6401 24.5564 13.2355 24.8099 12.0809L24.8117 12.0801C24.9379 11.6593 24.8117 11.3501 24.2019 11.3501H22.1834C21.669 11.3501 21.4321 11.6155 21.3053 11.9124C21.3053 11.9124 20.2778 14.3724 18.8239 15.967C18.3547 16.4278 18.1378 16.5755 17.8816 16.5755C17.7554 16.5755 17.5593 16.4278 17.5593 16.007V12.0801C17.5593 11.5755 17.4154 11.3501 16.99 11.3501H13.8162C13.4939 11.3501 13.3024 11.5855 13.3024 11.8047C13.3024 12.2831 14.0293 12.3932 14.1047 13.7393V16.6601C14.1047 17.3001 13.9885 17.4178 13.7308 17.4178C13.0447 17.4178 11.3793 14.9478 10.3924 12.1209C10.1932 11.5724 9.99852 11.3508 9.48079 11.3508H7.46159C6.88541 11.3508 6.76929 11.6163 6.76929 11.9132C6.76929 12.4378 7.45544 15.0462 9.96005 18.4924C11.6293 20.8447 13.9801 22.1193 16.1185 22.1193C17.4039 22.1193 17.5609 21.8363 17.5609 21.3493C17.5609 19.1016 17.4447 18.8893 18.0885 18.8893C18.3869 18.8893 18.9008 19.037 20.1008 20.1716C21.4721 21.517 21.6979 22.1193 22.4653 22.1193H24.4837C25.0591 22.1193 25.3508 21.8363 25.1834 21.2778C24.7994 20.1031 22.2056 17.687 22.0887 17.5255Z\"\n        fill=\"white\"\n      />\n    </SVG>\n  );\n});\n\nexport const OkIcon: React.FC<SvgProps> = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"32\"\n      height=\"33\"\n      viewBox=\"0 0 32 33\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n      ref={ref}\n    >\n      <path\n        d=\"M0 16.7344C0 25.5709 7.16344 32.7344 16 32.7344C24.8366 32.7344 32 25.5709 32 16.7344C32 7.89782 24.8366 0.734375 16 0.734375C7.16344 0.734375 0 7.89782 0 16.7344Z\"\n        fill=\"#3B33B0\"\n      />\n      <path\n        d=\"M11.4548 17.3098C11.0462 18.0971 11.5102 18.4734 12.5692 19.1163C13.4689 19.6611 14.7126 19.8604 15.5108 19.9401C15.1834 20.2485 16.6837 18.8347 12.3637 22.9069C11.4474 23.7674 12.9225 25.1479 13.8375 24.3057L16.3157 21.9635C17.2646 22.8579 18.1735 23.7151 18.7938 24.309C19.7095 25.1544 21.1834 23.7856 20.2775 22.9102C20.2099 22.8468 16.9194 19.7539 17.1206 19.9434C17.9292 19.8637 19.1539 19.6527 20.0431 19.1196L20.0425 19.1189C21.1009 18.4728 21.5649 18.0971 21.1625 17.3098C20.9188 16.8629 20.2628 16.4892 19.3895 17.1354C19.3895 17.1354 18.2105 18.0206 16.3083 18.0206C14.4056 18.0206 13.2271 17.1354 13.2271 17.1354C12.3545 16.4859 11.6954 16.8629 11.4548 17.3098Z\"\n        fill=\"white\"\n      />\n      <path\n        d=\"M16.307 16.8273C18.6258 16.8273 20.5187 15.0515 20.5187 12.8655C20.5187 10.6703 18.6258 8.89453 16.307 8.89453C13.9877 8.89453 12.0941 10.6703 12.0941 12.8655C12.0941 15.0515 13.9877 16.8273 16.307 16.8273ZM16.307 10.9062C17.4461 10.9062 18.3753 11.7822 18.3753 12.8655C18.3753 13.9396 17.4461 14.8157 16.307 14.8157C15.1673 14.8157 14.2381 13.9396 14.2381 12.8655C14.2375 11.7816 15.1667 10.9062 16.307 10.9062Z\"\n        fill=\"white\"\n      />\n    </SVG>\n  );\n});\n\nexport const ShareIcon: React.FC<SvgProps> = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"18\"\n      height=\"16\"\n      viewBox=\"0 0 18 16\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n      ref={ref}\n    >\n      <path\n        d=\"M11.0156 4C7.76562 4.46875 5.26562 5.71875 3.51562 7.75C1.73438 9.75 0.5625 12.1719 0 15.0156C2.40625 11.6094 6.07812 9.90625 11.0156 9.90625V13.9844L18 7L11.0156 0.015625V4Z\"\n        fill=\"currentColor\"\n      />\n    </SVG>\n  );\n});\n\nexport const TavernIcon: React.FC<SvgProps> = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"12\"\n      height=\"13\"\n      viewBox=\"0 0 12 13\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M10.6562 8.89136V7.51111H9.34375V8.89136H10.6562ZM10.6562 11.6198V10.2716H9.34375V11.6198H10.6562ZM6.65625 3.40247V2.05432H5.34375V3.40247H6.65625ZM6.65625 6.16296V4.78272H5.34375V6.16296H6.65625ZM6.65625 8.89136V7.51111H5.34375V8.89136H6.65625ZM6.65625 11.6198V10.2716H5.34375V11.6198H6.65625ZM2.65625 6.16296V4.78272H1.34375V6.16296H2.65625ZM2.65625 8.89136V7.51111H1.34375V8.89136H2.65625ZM2.65625 11.6198V10.2716H1.34375V11.6198H2.65625ZM8 6.16296H12V13H0V3.40247H4V2.05432L6 0L8 2.05432V6.16296Z\"\n        fill=\"#8D8D8D\"\n      />\n    </SVG>\n  );\n});\n\nexport const ArrowDownIcon: React.FC<SvgProps> = React.forwardRef(\n  (props, ref) => {\n    return (\n      <SVG\n        width=\"24\"\n        height=\"24\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M11.5003 15.2661L6.35827 10L6 10.367L11.5003 16L17 10.367L16.6417 10L11.5003 15.2661Z\"\n          fill=\"#3B33B0\"\n          stroke=\"#3B33B0\"\n        />\n      </SVG>\n    );\n  }\n);\n\nexport const ArrowUpIcon: React.FC<SvgProps> = React.forwardRef(\n  (props, ref) => {\n    return (\n      <SVG\n        width=\"24\"\n        height=\"24\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M11.5003 8.73391L6.35827 14L6 13.633L11.5003 8L17 13.633L16.6417 14L11.5003 8.73391Z\"\n          fill=\"#3B33B0\"\n          stroke=\"#3B33B0\"\n        />\n      </SVG>\n    );\n  }\n);\n","import React from 'react';\nimport { Box } from 'grommet';\nimport { Text } from '@we-ui-components/base';\nimport { CollapseArrow, TavernIcon } from '../../Poll/icons';\nimport { INode, NODE_TYPE } from './helpers';\n\nconst NodeItem = (props: {\n  node: INode;\n  customItem: any;\n  isSearchMatch: boolean;\n  isSearchFocus: boolean;\n  lowerSiblingCounts: number[];\n  scaffoldBlockPxWidth: number;\n}) => {\n  const RenderItem = props.customItem.render;\n\n  const isFocused = props.isSearchFocus && props.node.type === NODE_TYPE.SCHOOL;\n\n  const scaffoldBlockCount = props.lowerSiblingCounts.length - 1;\n\n  return (\n    <Box\n      direction=\"row\"\n      fill={true}\n      align=\"center\"\n      style={{\n        // border: props.isSearchMatch ? '1px solid yellow' : '',\n        borderBottom: '1px solid #dedede',\n        cursor: 'auto'\n        // background: props.isSearchFocus ? '#efefef' : ''\n      }}\n    >\n      {!!props.node.polling ? (\n        <RenderItem {...props.node} />\n      ) : (\n        <Box\n          direction=\"row\"\n          justify=\"between\"\n          align=\"center\"\n          fill={true}\n          style={{\n            paddingRight: props.scaffoldBlockPxWidth * scaffoldBlockCount\n          }}\n        >\n          <Text\n            bold={isFocused ? true : false}\n            style={{ fontSize: isFocused ? 14 : 13 }}\n          >\n            {props.node.title}\n          </Text>\n          <Box margin={{ right: '10px' }}>\n            <Text\n              bold={isFocused ? true : false}\n              style={{ fontSize: isFocused ? 14 : 13 }}\n            >\n              {props.node.type === NODE_TYPE.DISTRICT && props.node.children ? (\n                <Box direction=\"row\" align=\"center\">\n                  <TavernIcon style={{ opacity: 0.2 }} />\n                  <span style={{ marginLeft: '5px' }}>\n                    {props.node.children.length}\n                  </span>\n                </Box>\n              ) : (\n                ''\n              )}\n            </Text>\n          </Box>\n        </Box>\n      )}\n    </Box>\n  );\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport const NodeRenderer = (props: any) => {\n  const {\n    scaffoldBlockPxWidth,\n    toggleChildrenVisibility,\n    connectDragPreview,\n    connectDragSource,\n    isDragging,\n    canDrop,\n    canDrag,\n    node,\n    title,\n    subtitle,\n    draggedNode,\n    path,\n    treeIndex,\n    isSearchMatch,\n    isSearchFocus,\n    icons,\n    buttons = [],\n    className,\n    style,\n    didDrop,\n    swapFrom,\n    swapLength,\n    swapDepth,\n    treeId, // Not needed, but preserved for other renderers\n    isOver, // Not needed, but preserved for other renderers\n    parentNode, // Needed for dndManager\n    rowDirection,\n    ...otherProps\n  } = props;\n\n  return (\n    <Box direction=\"row\" align=\"center\" fill={true}>\n      <Box\n        margin={{\n          horizontal: 'xsmall'\n        }}\n        style={{ height: '100%' }}\n      >\n        {toggleChildrenVisibility &&\n          node.children &&\n          (node.children.length > 0 || typeof node.children === 'function') && (\n            <Box\n              onClick={() =>\n                toggleChildrenVisibility({\n                  node,\n                  path,\n                  treeIndex\n                })\n              }\n              style={{ height: '100%' }}\n              align=\"center\"\n              justify=\"center\"\n            >\n              <CollapseArrow\n                style={{\n                  transform: node.expanded && 'rotate(180deg)',\n                  marginRight: '8px'\n                }}\n              />\n            </Box>\n          )}\n      </Box>\n\n      <NodeItem {...props} />\n    </Box>\n  );\n};\n","import React, { Component, Children, cloneElement } from 'react';\n\nexport class FileThemeTreeNodeRenderer extends Component<any> {\n  render() {\n    const {\n      children,\n      listIndex,\n      swapFrom,\n      swapLength,\n      swapDepth,\n      scaffoldBlockPxWidth,\n      lowerSiblingCounts,\n      connectDropTarget,\n      isOver,\n      draggedNode,\n      canDrop,\n      treeIndex,\n      treeId, // Delete from otherProps\n      getPrevRow, // Delete from otherProps\n      node, // Delete from otherProps\n      path, // Delete from otherProps\n      rowDirection,\n      ...otherProps\n    } = this.props;\n\n    const scaffoldBlockCount = lowerSiblingCounts.length - 1;\n\n    return connectDropTarget(\n      <div\n        {...{\n          ...otherProps,\n          style: {\n            ...otherProps.style,\n            paddingLeft: scaffoldBlockPxWidth * scaffoldBlockCount\n          }\n        }}\n      >\n        {Children.map(children, (child: any) => {\n          // console.log(child.props.node.id);\n          return cloneElement(child, {\n            isOver,\n            canDrop,\n            draggedNode,\n            lowerSiblingCounts,\n            listIndex,\n            swapFrom,\n            swapLength,\n            swapDepth\n          });\n        })}\n      </div>\n    );\n  }\n}\n\n// import React, { Component, Children, cloneElement } from 'react';\n//\n// const styles: any = {};\n//\n// export class treeNodeRenderer extends Component<any> {\n//   state: any = {};\n//   bound: any;\n//\n//   render() {\n//     const {\n//       children,\n//       swapFrom,\n//       swapLength,\n//       swapDepth,\n//       scaffoldBlockPxWidth,\n//       lowerSiblingCounts,\n//       connectDropTarget,\n//       isOver,\n//       draggedNode,\n//       canDrop,\n//       treeIndex,\n//       treeId,\n//       listIndex,\n//       rowDirection,\n//       getPrevRow, // Delete from otherProps\n//       node, // Delete from otherProps\n//       path, // Delete from otherProps\n//       ...otherProps\n//     } = this.props;\n//     // Construct the scaffold representing the structure of the tree\n//     const scaffoldBlockCount = lowerSiblingCounts.length - 1;\n//\n//     return (\n//       <div\n//         {...otherProps}\n//         onFocus={() => {}}\n//         className={\n//           'rstcustom__node' +\n//           (this.state.highlight ? ` ${styles.highlight}` : '')\n//         }\n//         style={{\n//           width: '50%',\n//           // whiteSpace: 'nowrap',\n//           position: 'relative',\n//           minWidth: '100%',\n//           overflow: 'hidden',\n//           height: 62\n//         }}\n//       >\n//         <div\n//           className={'rstcustom__nodeContent'}\n//           style={{\n//             paddingLeft: scaffoldBlockPxWidth * scaffoldBlockCount,\n//             position: 'absolute',\n//             top: 0,\n//             bottom: 0,\n//             width: '100%'\n//           }}\n//         >\n//           {Children.map(children, (child: any) =>\n//             cloneElement(child, {\n//               isOver,\n//               canDrop,\n//               draggedNode\n//             })\n//           )}\n//         </div>\n//       </div>\n//     );\n//   }\n// }\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport * as _ from 'lodash';\nimport { Box } from 'grommet';\n\nimport SortableTree from 'react-sortable-tree';\nimport { filteredTree, generateSchoolTree, INode, NODE_TYPE } from './helpers';\nimport { Spinner2 } from 'ui/Spinner2';\nimport { NodeRenderer } from './NodeRenderer';\nimport { FileThemeTreeNodeRenderer } from './TreeTheme';\nimport { SearchInput } from 'ui/SearchInput';\nimport { useStores } from 'stores/index';\nimport { ISelectOption, Select } from '@we-ui-components/base';\nimport { ISchool } from 'interfaces/apiEntities';\nimport { ArrowDownIcon, ArrowUpIcon } from '../../Poll/icons';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\nimport styled from 'styled-components';\nimport { SumVoteCount } from '../ListItem';\nimport { position } from 'polished';\n\nexport const SchoolTree = observer(\n  (params: { customItem: any; loading: boolean }) => {\n    // const theme = useTheme();\n    const { votings } = useStores();\n    //\n    // const isRegulator = user.isContainOneOfRoles(['REGULATOR']);\n    // const isVoter = user.isContainOneOfRoles(['VOTER']);\n    const isMobile = useMediaQuery({\n      maxDeviceWidth: breakpoints.mobile\n    });\n\n    const isTablet = useMediaQuery({\n      maxDeviceWidth: breakpoints.tabletM\n    });\n\n    const [treeData, setTreeData] = useState();\n    const [schools, setSchools] = useState();\n    const [loading, setLoading] = useState(true);\n\n    const [groupFilter, setGroupFilter] = useState<number | null>(null);\n    const [districtsFilter, setDistrictsFilter] = useState<number | null>(null);\n\n    const [districtsOptions, setDistrictsOptions] = useState<ISelectOption[]>(\n      []\n    );\n    const [schoolGroupOptions, setSchoolGroupOptions] = useState<\n      ISelectOption[]\n    >([]);\n\n    const [searchString, setSearchString] = useState('');\n    const [searchFocusIndex, setSearchFocusIndex] = useState(0);\n    const [searchFoundCount, setSearchFoundCount] = useState(0);\n\n    useEffect(() => {\n      if (!params.loading) {\n        votings.getSchools().then(res => {\n          setLoading(false);\n\n          const schools = res.content.filter((s: ISchool) =>\n            votings.pollingList.find(sg => Number(sg.id) === s.schoolGroupId)\n          );\n\n          setTreeData(generateSchoolTree(schools, votings.pollingList));\n\n          setSchools(schools);\n\n          setDistrictsOptions(\n            [{ text: 'Все районы', value: null }].concat(\n              _.uniqBy(schools, (s: ISchool) => s.districtId).map(s => ({\n                text: s.districtName,\n                value: s.districtId\n              }))\n            )\n          );\n\n          setSchoolGroupOptions(\n            [{ text: 'Все школьные группы', value: null }].concat(\n              _.uniqBy(schools, (s: ISchool) => s.schoolGroupId).map(s => ({\n                text: String(s.schoolGroupName),\n                value: s.schoolGroupId\n              }))\n            )\n          );\n        });\n      }\n    }, [params.loading, votings.pollingList]);\n\n    if (loading || params.loading) {\n      return (\n        <Box align=\"center\" justify=\"center\" height=\"medium\">\n          <Spinner2 />\n        </Box>\n      );\n    }\n\n    const setTreeDataCommon = params => {\n      const {\n        searchStringP = searchString,\n        districtsFilterP = districtsFilter,\n        groupFilterP = groupFilter\n      } = params;\n\n      setTreeData(\n        filteredTree(\n          schools,\n          school => {\n            const hasDistrict =\n              !districtsFilterP || school.districtId === districtsFilterP;\n\n            const hasGroup =\n              !groupFilterP || school.schoolGroupId === groupFilterP;\n\n            const hasSchool =\n              !searchStringP ||\n              school.name.toLowerCase().indexOf(searchStringP.toLowerCase()) >\n                -1;\n\n            return hasDistrict && hasGroup && hasSchool;\n          },\n          votings.pollingList\n        )\n      );\n    };\n\n    // const treeNodeRenderer = FileExplorerTheme.treeNodeRenderer;\n\n    // Case insensitive search of `node.title`\n    const customSearchMethod = ({ node, searchQuery }) =>\n      searchQuery &&\n      node.type === NODE_TYPE.SCHOOL &&\n      node.title.toLowerCase().indexOf(searchQuery.toLowerCase()) > -1;\n\n    const selectPrevMatch = () =>\n      setSearchFocusIndex(\n        searchFocusIndex !== null\n          ? (searchFoundCount + searchFocusIndex - 1) % searchFoundCount\n          : searchFoundCount - 1\n      );\n\n    const selectNextMatch = () =>\n      setSearchFocusIndex(\n        searchFocusIndex !== null\n          ? (searchFocusIndex + 1) % searchFoundCount\n          : 0\n      );\n\n    const navigationArrow = () => {\n      return (\n        <Box\n          direction=\"row\"\n          margin={{ horizontal: 'medium' }}\n          gap=\"10px\"\n          align=\"center\"\n        >\n          <Box\n            style={{\n              border: '1px solid #3B33B020',\n              borderRadius: 5,\n              cursor: 'pointer',\n              opacity: !searchFoundCount ? 0.4 : 1\n            }}\n            pad={{ vertical: '11px', horizontal: '16px' }}\n            onClick={selectPrevMatch}\n            align=\"center\"\n            justify=\"center\"\n          >\n            <ArrowUpIcon />\n          </Box>\n\n          <Box\n            style={{\n              border: '1px solid #3B33B020',\n              borderRadius: 5,\n              cursor: 'pointer',\n              opacity: !searchFoundCount ? 0.4 : 1\n            }}\n            pad={{ vertical: '11px', horizontal: '16px' }}\n            align=\"center\"\n            justify=\"center\"\n            onClick={selectNextMatch}\n          >\n            <ArrowDownIcon />\n          </Box>\n\n          <span>\n            &nbsp;\n            {searchFoundCount > 0 ? searchFocusIndex + 1 : 0}\n            &nbsp;/&nbsp;\n            {searchFoundCount || 0}\n          </span>\n        </Box>\n      );\n    };\n\n    return (\n      <Box fill={true}>\n        <div style={{ height: 56, marginTop: isMobile ? '-24px' : 0 }}>\n          <Box\n            direction=\"row\"\n            align=\"center\"\n            pad={{ right: 'small' }}\n            margin={{ right: 'small' }}\n          >\n            <SearchInputStyle\n              style={{ width: '100%' }}\n              borderBottom=\"none\"\n              borderRadius=\"2px\"\n              onChange={value => {\n                setTreeDataCommon({ searchStringP: value });\n\n                setSearchString(value);\n              }}\n              value={searchString}\n              customPlaceholder={false}\n              placeholder=\"Найти школу в группе\"\n            />\n\n            {navigationArrow()}\n          </Box>\n        </div>\n\n        <div style={{ height: 'auto', margin: '12px 0' }}>\n          <Box\n            direction={isMobile ? 'column' : 'row'}\n            align=\"center\"\n            justify=\"between\"\n            fill={true}\n            gap=\"10px\"\n          >\n            <div style={{ width: isMobile ? '100%' : '48%' }}>\n              <Select\n                size=\"full\"\n                value={districtsFilter}\n                options={districtsOptions}\n                onChange={value => {\n                  setDistrictsFilter(value);\n                  setTreeDataCommon({ districtsFilterP: value });\n                }}\n              />\n            </div>\n            <div style={{ width: isMobile ? '100%' : '48%' }}>\n              <Select\n                size=\"full\"\n                value={groupFilter}\n                options={schoolGroupOptions}\n                onChange={value => {\n                  setGroupFilter(value);\n                  setTreeDataCommon({ groupFilterP: value });\n                }}\n              />\n            </div>\n          </Box>\n        </div>\n\n        <div style={{ height: '100%' }}>\n          <SortableTree\n            treeData={treeData}\n            onChange={setTreeData}\n            isVirtualized={true}\n            theme={{\n              treeNodeRenderer: FileThemeTreeNodeRenderer,\n              scaffoldBlockPxWidth: 45,\n              locals: {\n                node: 'rstcustom__node',\n                nodeContent: 'rstcustom__nodeContent',\n                validDrop: 'rstcustom__validDrop',\n                invalidDrop: 'rstcustom__invalidDrop',\n                highlight: 'rstcustom__highlight'\n              }\n            }}\n            getNodeKey={({ node }: { node: INode }) => `${node.type}-${node.schollGroupId}-${node.id}`}\n            rowHeight={({\n              node,\n              prevPath\n            }: {\n              node: INode;\n              prevPath: string[];\n            }) => {\n              return isTablet && node.type === NODE_TYPE.SCHOOL_GROUP\n                ? 100\n                : 62;\n            }}\n            canDrag={false}\n            nodeContentRenderer={props => (\n              <NodeRenderer {...props} customItem={params.customItem} />\n            )}\n            style={{ outline: 'none' }}\n            innerStyle={{ outline: 'none' }}\n            searchMethod={customSearchMethod}\n            //\n            // The query string used in the search. This is required for searching.\n            searchQuery={searchString}\n            onlyExpandSearchedNodes={true}\n            //\n            // When matches are found, this property lets you highlight a specific\n            // match and scroll to it. This is optional.\n            searchFocusOffset={searchFocusIndex}\n            //\n            // This callback returns the matches from the search,\n            // including their `node`s, `treeIndex`es, and `path`s\n            // Here I just use it to note how many matches were found.\n            // This is optional, but without it, the only thing searches\n            // do natively is outline the matching nodes.\n            searchFinishCallback={matches => {\n              // console.log(matches);\n              // console.log(treeData);\n\n              setSearchFoundCount(matches.length);\n\n              setSearchFocusIndex(\n                matches.length > 0 ? searchFocusIndex % matches.length : 0\n              );\n\n              // setTimeout(selectNextMatch, 1000);\n            }}\n          />\n        </div>\n        <SumVoteCount\n          count={treeData?.reduce(\n            (sum, item) => sum + item.polling.voteCount,\n            0\n          )}\n          padding='16px 10px'\n        />\n      </Box>\n    );\n  }\n);\n\nconst SearchInputStyle = styled(SearchInput)`\n  @media (max-width: ${breakpoints.mobileL}) {\n    & ~ label {\n      font-size: 12px;\n    }\n  }\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { useEffect, useCallback } from 'react';\nimport { Table } from '@we-ui-components/rc-table';\nimport { useStores } from 'stores/index';\nimport { renderListItem, renderListSubItem, SumVoteCount } from './ListItem';\nimport { SearchInput } from 'ui/SearchInput';\nimport { Box } from 'grommet';\nimport { IconButton } from 'ui/IconButton';\nimport { TrashIcon } from './icons';\nimport Scrollbar from 'react-scrollbars-custom';\nimport { Button, Text, Title } from '@we-ui-components/base';\nimport { useTheme } from 'utils/hooks';\nimport { Checkbox } from 'ui/Checkbox';\nimport { deletePolls } from 'services/pollSubjects';\nimport { useHistory } from 'react-router';\nimport { Routes } from '../../constants';\nimport { VOTER_DISABLED_STATUS } from './index';\nimport { SchoolTree } from './SchoolTree';\nimport { NODE_TYPE } from './SchoolTree/helpers';\nimport { createQS } from 'we-oauth2/lib/auth/api-utils';\n\nexport const VotingList = observer(({ listStatus }) => {\n  const theme = useTheme();\n  const { votings, user, actionModals } = useStores();\n\n  const isRegulator = user.isContainOneOfRoles(['REGULATOR']);\n  const isVoter = user.isContainOneOfRoles(['VOTER']);\n\n  useEffect(() => {\n    votings.init();\n    //votings.fetch(); // TODO: correct fetch with first init\n\n    return () => votings.clear();\n  }, []);\n\n  const onSearch = React.useCallback(\n    next => {\n      votings.updateSearch(next);\n    },\n    [votings]\n  );\n\n  const onChangeDataFlow = (props: any) => {\n    votings.onChangeDataFlow(props);\n  };\n\n  function flushChanges() {\n    listStatus.unsetDeleting();\n    votings.delete.flush();\n  }\n\n  function deleteConfirmation() {\n    const pollIds = votings.delete.selectedIds.map(\n      id => votings.pollingList.find(p => p.id === id).pollId\n    );\n\n    deletePolls(pollIds)\n      .then(() => {\n        votings.fetch();\n        actionModals.closeLastModal();\n        flushChanges();\n      })\n      .catch(error => {\n        actionModals.closeLastModal();\n\n        actionModals.open(\n          () => (\n            <Box pad={{ bottom: 'xlarge' }}>\n              <Text margin={{ bottom: 'xsmall' }}>\n                {error.title || error.message}\n              </Text>\n              <Box align=\"end\" style={{ flex: '1 1 100%' }}>\n                <Button onClick={actionModals.closeLastModal}>Закрыть</Button>\n              </Box>\n            </Box>\n          ),\n          {\n            title: 'Ошибка',\n            width: '545px',\n            onClose: () => Promise.resolve(flushChanges())\n          }\n        );\n      });\n  }\n\n  const deletePollings = React.useCallback(function deletePollings() {\n    actionModals.open(\n      () => {\n        const votingsDelete = votings.delete.selectedIds\n          .map(id => votings.pollingList.find(p => p.id === id))\n          .filter(Boolean)\n          .map(({ name }) => name);\n\n        return (\n          <Box>\n            <Text fontWeight=\"500\">\n              Вы уверены, что хотите удалить следующие голосования?\n              <Box pad=\"xsmall\">\n                {votingsDelete.map(name => (\n                  <Text>- {name}</Text>\n                ))}\n              </Box>\n              Изменить результаты решения будет невозможно\n            </Text>\n\n            <Box direction=\"row\" justify=\"end\" margin=\"16px 0\">\n              <Button onClick={actionModals.closeLastModal}>Отменить</Button>\n\n              <Button\n                bgColor=\"#F0222B\"\n                onClick={deleteConfirmation}\n                margin={{ left: '16px' }}\n              >\n                Удалить\n              </Button>\n            </Box>\n          </Box>\n        );\n      },\n      {\n        title: 'Удаление голосований',\n        width: '545px',\n        position: 'flex-start'\n      }\n    );\n  }, []);\n\n  const history = useHistory();\n\n  const onItemClick = useCallback(({ pollId, status, search }) => {\n    if (isVoter && VOTER_DISABLED_STATUS.includes(status)) {\n      return;\n    }\n\n    let url = `${Routes.poll}/${pollId}`\n    if (search) {\n      url += createQS({ search })\n    }\n    history.push(url);\n  }, [history, votings, isVoter, VOTER_DISABLED_STATUS])\n\n  return (\n    <>\n      <Box direction=\"row\" margin={'24px 0'} wrap>\n        {votings.pollingType === 'SCHOOL_GROUP' ? null : (\n          <Box style={{ flex: isRegulator ? '1 0 50%' : '1 0' }}>\n            <SearchInput\n              style={!isRegulator ? { width: '100%' } : {}}\n              borderBottom=\"none\"\n              borderRadius=\"2px\"\n              onChange={onSearch}\n              value={votings.searchString}\n              customPlaceholder={false}\n              placeholder=\"Поиск\"\n            />\n          </Box>\n        )}\n        {isRegulator && (\n          <>\n            <Box\n              justify=\"center\"\n              align={\n                votings.pollingType === 'SCHOOL_GROUP' ? 'start' : 'center'\n              }\n              flex=\"grow\"\n              basis=\"50%\"\n            >\n              {listStatus.deleting ? (\n                <Box\n                  direction=\"column\"\n                  align=\"center\"\n                  margin={{ left: '10px' }}\n                >\n                  <IconButton onClick={flushChanges}>Отменить</IconButton>\n\n                  <IconButton\n                    disabled={votings.delete.selectedIds.length === 0}\n                    margin={{ left: '16px', top: '8px' }}\n                    renderIcon={() => <TrashIcon/>}\n                    onClick={deletePollings}\n                  >\n                    Удалить голосований: {votings.delete.selectedIds.length}\n                  </IconButton>\n                </Box>\n              ) : (\n                <IconButton\n                  renderIcon={() => <TrashIcon />}\n                  onClick={() => listStatus.setDeleting()}\n                >\n                  Удалить голосования\n                </IconButton>\n              )}\n            </Box>\n\n            {listStatus.deleting && (\n              <Box pad=\"small\" direction=\"row\" basis=\"100%\" gap=\"16px\">\n                <Checkbox\n                  checked={votings.delete.isAllSelected}\n                  onChange={() => votings.delete.selectAll()}\n                />\n\n                <Title\n                  size=\"14px\"\n                  color={theme.palette.BlackText}\n                  style={{ lineHeight: 1.5 }}\n                >\n                  Выбрать все\n                </Title>\n              </Box>\n            )}\n          </>\n        )}\n      </Box>\n\n      {votings.pollingType === 'SCHOOL_GROUP' ? (\n        <SchoolTree\n          loading={votings.isLoading}\n          customItem={{\n            render: observer(props =>\n              props.type === NODE_TYPE.SCHOOL_GROUP\n                ? (\n                renderListItem({\n                  withoutBorder: true,\n                  params: props.polling,\n                  isMoType: votings.isMOListType,\n                  deleting: listStatus.deleting,\n                  onClick: onItemClick,\n                })\n              ) : renderListSubItem({\n                title: props.title,\n                polling: props.polling,\n                onClick: onItemClick,\n              })\n            )\n          }}\n        />\n      ) : (\n        <>\n          <Scrollbar\n            scrollTop={votings.scrollPosition}\n            style={{ top: 0 }}\n            trackYProps={{ style: { top: 0 } }}\n            onUpdate={({ scrollTop }) => (votings.scrollPosition = scrollTop)}\n          >\n            <Box style={{ overflowY: 'auto' }}>\n              {votings.isEmptyList && !votings.isLoading && (\n                <Text> Голосований по выбранным параметрам не найдено</Text>\n              )}\n              <Table\n                columns={[]}\n                data={votings.pollingList}\n                isPending={votings.isLoading}\n                onChangeDataFlow={onChangeDataFlow}\n                dataLayerConfig={votings.dataFlow}\n                hidePagination={true}\n                customItem={{\n                  render: observer(props =>\n                    renderListItem({\n                      ...props,\n                      isMoType: votings.isMOListType,\n                      deleting: listStatus.deleting,\n                      onClick: onItemClick\n                    })\n                  )\n                }}\n              />\n            </Box>\n          </Scrollbar>\n          <SumVoteCount\n            count={votings.pollingList.reduce(\n              (sum, item) => sum + item.voteCount,\n              0\n            )}\n            padding=\"16px\"\n          />\n        </>\n      )}\n    </>\n  );\n});\n","import * as React from 'react';\nimport {\n  ExportProjectsButton,\n  PageContainer,\n  SlimTabs,\n  Tabs\n} from 'components';\nimport { Title } from '@we-ui-components/base';\n\nimport { observer } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport { RegionMap } from 'components/RegionMap';\nimport { getRegionMapTabs, getVoteListTabs, PollingType } from './tabs';\nimport { VotingList } from './VotingList';\nimport { useStores } from 'stores';\nimport { toJS } from 'mobx';\nimport school from './img/school.svg';\nimport { useLocalStore } from 'mobx-react';\nimport { DistrictType } from 'interfaces/apiEntities';\nimport { useHistory } from 'react-router';\nimport { Routes } from '../../constants';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\nimport { getCurrentYear } from 'utils/misc';\n\nconst regionTabs = getRegionMapTabs();\n\nexport const VOTER_DISABLED_STATUS = [\n  'PUBLISHED',\n  'APPLICATIONS_RECEIVING',\n  'WAITING_FOR_VOTING'\n]\n\nexport const OrganizerPage = observer(function OrganizerPage() {\n  const listStatus = useLocalStore(() => ({\n    deleting: false,\n    setDeleting() {\n      listStatus.deleting = true;\n    },\n    unsetDeleting() {\n      listStatus.deleting = false;\n    }\n  }));\n\n  const { votings, user } = useStores();\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  const history = useHistory();\n\n  const isVoter = user.isContainOneOfRoles(['VOTER']);\n  const isOrganizer = user.isContainOneOfRoles(['REGULATOR']);\n\n  const rightContent = votings.isMOListType ? (\n    <>\n      <Box direction=\"row\" justify=\"center\">\n        <Tabs\n          margin=\"32px 0\"\n          height=\"32px\"\n          tabs={regionTabs}\n          selected={votings.districtType}\n          onChange={(r: DistrictType) => {\n            votings.updateDistrictType(r);\n            listStatus.unsetDeleting();\n            votings.delete.flush();\n          }}\n        />\n      </Box>\n\n      <Box margin=\"0 35px\">\n        <RegionMap\n          type={votings.districtType}\n          areas={toJS(votings.pollingList)}\n          isPending={votings.isLoading}\n          isDisabled={poll => isVoter && VOTER_DISABLED_STATUS.includes(poll.status)}\n          onClickArea={({ pollId }) => {\n            history.push(`${Routes.poll}/${pollId}`);\n          }}\n        />\n      </Box>\n    </>\n  ) : (\n    <Box align=\"center\" justify=\"center\" height=\"100%\">\n      <img src={school} alt=\"\"/>\n    </Box>\n  );\n\n  return (\n    <PageContainer>\n      <Box\n        direction=\"row\"\n        background=\"transparent\"\n        justify=\"between\"\n        style={{ padding: 0, height: 'calc(100vh - 56px)' }}\n      >\n        <Box\n          direction=\"column\"\n          background=\"white\"\n          style={{\n            maxWidth: isLaptopOrWider ? '625px' : 'unset',\n            width: isLaptopOrWider ? 'auto' : '100%',\n            padding: isTabletOrWider ? '32px' : '8px'\n          }}\n        >\n          <Box\n            direction=\"row\"\n            justify=\"between\"\n            margin={{ bottom: 'small' }}\n            gap=\"medium\"\n          >\n            <Title\n              size={isTabletOrWider ? '24px' : '18px'}\n              bold\n              style={{\n                lineHeight: isTabletOrWider ? '32px' : '24px'\n              }}\n            >\n              {`Голосование по Волгоградской области ${getCurrentYear()}`}\n            </Title>\n\n            {isOrganizer && <ExportProjectsButton/>}\n          </Box>\n\n          <Box basis=\"auto\">\n            <SlimTabs\n              tabs={getVoteListTabs()}\n              selected={toJS(votings.pollingType)}\n              onChange={next => {\n                votings.updatePollingType(next as PollingType);\n                listStatus.unsetDeleting();\n                votings.delete.flush();\n              }}\n            />\n          </Box>\n\n          <Box flex={{ grow: 1, shrink: 0 }} basis=\"0%\">\n            <VotingList listStatus={listStatus}/>\n          </Box>\n        </Box>\n\n        {isLaptopOrWider && (\n          <Box direction=\"column\" flex=\"grow\">\n            {rightContent}\n          </Box>\n        )}\n      </Box>\n    </PageContainer>\n  );\n});\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTI1IiBoZWlnaHQ9IjUyNCIgdmlld0JveD0iMCAwIDUyNSA1MjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjc5LjU4IDMxNC43NDhDMjc5LjczNSAzMDUuNzg2IDI3OS4xNzQgMjk2LjgyNyAyNzcuOTAxIDI4Ny45NTRMMjQ1LjIxMyAyODkuNzM1QzI0NC45MTkgMjk2LjkyNyAyNDQuMTYgMzA0LjA5MiAyNDIuOTQxIDMxMS4xODZDMjQxLjk2MiAzMTcuMzcyIDI0MC4wOTQgMzIzLjM4NCAyMzcuMzk0IDMyOS4wMzVDMjM1LjM1NiAzMzMuNDA1IDIzMi4yNDMgMzM3LjE4NyAyMjguMzQ2IDM0MC4wMjdDMjI0LjIxNyAzNDIuODk2IDIxOS41NTMgMzQ0LjkwOCAyMTQuNjMyIDM0NS45NDJDMjAzLjI5MyAzNDguODA4IDE4OC4zOTEgMzQ5LjA5NSAxNzIuNTg5IDM0OS4zMkMxNzAuOCAzNDkuMzQ1IDE2OC45OTUgMzQ5LjM2NyAxNjcuMTc1IDM0OS4zODlDMTUyLjkxNyAzNDkuNTYxIDEzNy43MDQgMzQ5Ljc0NSAxMjEuNjIyIDM1MS43OTZDMTEyLjEzMSAzNTIuOTQgMTAyLjc1NiAzNTQuODk4IDkzLjYwMDYgMzU3LjY1QzgzLjY3NiAzNjAuNjg5IDc0LjE4NzkgMzY1LjAwMyA2NS4zNzQxIDM3MC40ODRDNTYuMjI5NiAzNzYuMTk5IDQ3Ljk5NzYgMzgzLjI1OCA0MC45NTUgMzkxLjQyNEMzNC4xNzE0IDM5OS4yOTYgMjguNDAyIDQwNy45ODggMjMuNzgxNyA0MTcuMjk2QzE5LjQyODMgNDI2LjAzOCAxNS43OTk5IDQzNS4xMjMgMTIuOTMzMiA0NDQuNDU4QzEwLjY4NDIgNDUxLjg3NSA4LjgwNTY2IDQ1OS4zOTggNy4zMDQyIDQ2N0g2OC41NjQ4QzcwLjA1NjggNDU4LjM1NiA3Mi4zODY0IDQ0OS44NjcgNzUuNTI2NyA0NDEuNjU0Qzc5LjQwMTcgNDMxLjE3NCA4Ni4xNjQ4IDQyMi4wMDUgOTUuMDMzNCA0MTUuMjA5QzEwMy42OTIgNDA4Ljc2MSAxMTUuNDIgNDA0LjQ2MyAxMjkuMTU1IDQwMi4wMjdDMTQxLjYzIDM5OS44MTQgMTU1LjM1NCAzOTguOTUzIDE3MC4wMzcgMzk4LjAzMUMxNzEuNTE5IDM5Ny45MzggMTczLjAxMiAzOTcuODQ1IDE3NC41MTQgMzk3Ljc0OUMxODIuNzAxIDM5Ny4yMzcgMTkxLjE5NiAzOTYuNTgyIDIwMC4wNzkgMzk1LjM5NUMyMDkuNTgzIDM5NC4yMDUgMjE4Ljk0OCAzOTIuMDg3IDIyOC4wMzkgMzg5LjA3QzIzMy4xMTIgMzg3LjMwOCAyMzguMDE3IDM4NS4wOTYgMjQyLjY5NSAzODIuNDU5QzI0My45NDMgMzgxLjc5OCAyNDUuMTUzIDM4MS4wNjcgMjQ2LjMxOCAzODAuMjY4QzI0Ni42NzQgMzgwLjAyOSAyNDcuMDMxIDM3OS43OTMgMjQ3LjM4NiAzNzkuNTU3QzI0OC4yMTYgMzc5LjAwOCAyNDkuMDQyIDM3OC40NjEgMjQ5Ljg1OSAzNzcuODc0QzI1Mi4yMTQgMzc2LjE2NSAyNTQuNDUxIDM3NC4yOTggMjU2LjU1MiAzNzIuMjg2QzI2Mi44NTkgMzY2LjM2NyAyNjcuOTYxIDM1OS4yODUgMjcxLjU3NiAzNTEuNDI4QzI3MS43NzIgMzUwLjk4IDI3MS45OCAzNTAuNTM0IDI3Mi4xODcgMzUwLjA5QzI3Mi41NjYgMzQ5LjI3NyAyNzIuOTQzIDM0OC40NjkgMjczLjIzNCAzNDcuNjYyTDI3NC42MDYgMzQzLjg3NUMyNzcuNzMxIDMzNC40NzQgMjc5LjQwOCAzMjQuNjUzIDI3OS41OCAzMTQuNzQ4WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMzU5LjUxIDE1Mi4zMDhWMjMxLjY2NUgyNzMuNjAzVjMxMi4yOTJIMzU5LjUxSDM4MS44MDFINDMxLjc0NFYxNTIuMzA4SDM1OS41MVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE2Ni43MTUgMjMxLjY2NVYxNTIuMzA4SDk0LjQ4MDdWMzEyLjI5MkgxNDQuNDI0SDE2Ni43MTVIMjUyLjY0M1YyMzEuNjY1SDE2Ni43MTVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zMjQuMzA0IDE4MC4yODlIMjAxLjk0MlYzMTIuMjkySDMyNC4zMDRWMTgwLjI4OVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI4OS45NTcgMjUxLjc4NkgyMzMuMTU2VjMxMi4yOTJIMjg5Ljk1N1YyNTEuNzg2WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMzA4LjIxNSAyNTEuNzg2SDIxNC44OThMMjYxLjU2NyAyMjguNzc5TDMwOC4yMTUgMjUxLjc4NloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMwMi4zMiAyNTEuNzg2SDIyMC43OTNMMjYxLjU2NyAyMzEuNzI3TDMwMi4zMiAyNTEuNzg2WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzAxLjQ2MSAzMDcuOTczSDIyMS42NzRWMzEyLjI3MUgzMDEuNDYxVjMwNy45NzNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yOTcuOTQgMzAzLjY3NEgyMjUuMTc0VjMwNy45NzNIMjk3Ljk0VjMwMy42NzRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yODkuOTU3IDI5OS4zNzZIMjMzLjE1NlYzMDMuNjc0SDI4OS45NTdWMjk5LjM3NloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI3NS40ODYgMjYxLjMyNUgyNDcuNjI4VjI5OS4zNzZIMjc1LjQ4NlYyNjEuMzI1WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMjYxLjU0NyAyOTkuMzc2VjI2MS4zMjVWMjk5LjM3NloiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzAxLjQ0IDI1MS43ODZIMjk3LjA2VjMwNy45NzNIMzAxLjQ0VjI1MS43ODZaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yMjYuMDU0IDI1MS43ODZIMjIxLjY3NFYzMDcuOTczSDIyNi4wNTRWMjUxLjc4NloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI2MS41NjcgMjQ3Ljg5N0MyNjQuMTQ1IDI0Ny44OTcgMjY2LjIzNCAyNDUuODA4IDI2Ni4yMzQgMjQzLjIzQzI2Ni4yMzQgMjQwLjY1MyAyNjQuMTQ1IDIzOC41NjMgMjYxLjU2NyAyMzguNTYzQzI1OC45OSAyMzguNTYzIDI1Ni45IDI0MC42NTMgMjU2LjkgMjQzLjIzQzI1Ni45IDI0NS44MDggMjU4Ljk5IDI0Ny44OTcgMjYxLjU2NyAyNDcuODk3WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMjI1LjI3NiAxOTcuMDk0QzIyOC4wMjggMTk3LjA5NCAyMzAuNjY4IDE5OC4xODcgMjMyLjYxNCAyMDAuMTMzQzIzNC41NiAyMDIuMDc5IDIzNS42NTQgMjA0LjcxOSAyMzUuNjU0IDIwNy40NzFWMjIzLjg0NkgyMTQuOTE5VjIwNy40NzFDMjE0LjkxOSAyMDQuNzIyIDIxNi4wMDkgMjAyLjA4NiAyMTcuOTUxIDIwMC4xNEMyMTkuODkzIDE5OC4xOTUgMjIyLjUyNyAxOTcuMDk5IDIyNS4yNzYgMTk3LjA5NFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTIyNS4yNzYgMTk2LjkwOVYyMjMuODA1IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTIxNC45MTkgMjA4LjQzM0gyMzUuNTUxIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI2MS41NjcgMTk3LjA5NEMyNjIuOTMgMTk3LjA5NCAyNjQuMjc5IDE5Ny4zNjIgMjY1LjUzOCAxOTcuODg0QzI2Ni43OTggMTk4LjQwNSAyNjcuOTQyIDE5OS4xNyAyNjguOTA1IDIwMC4xMzNDMjY5Ljg2OSAyMDEuMDk3IDI3MC42MzMgMjAyLjI0MSAyNzEuMTU1IDIwMy41QzI3MS42NzYgMjA0Ljc1OSAyNzEuOTQ1IDIwNi4xMDggMjcxLjk0NSAyMDcuNDcxVjIyMy44NDZIMjUxLjE4OVYyMDcuNDcxQzI1MS4xODkgMjA0LjcxOSAyNTIuMjgzIDIwMi4wNzkgMjU0LjIyOSAyMDAuMTMzQzI1Ni4xNzUgMTk4LjE4NyAyNTguODE1IDE5Ny4wOTQgMjYxLjU2NyAxOTcuMDk0VjE5Ny4wOTRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yNjEuNTY3IDE5Ni45MDlWMjIzLjgwNSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yNTEuMTg5IDIwOC40MzNIMjcxLjg0MiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yOTcuNzk3IDE5Ny4wOTRDMzAwLjU0OSAxOTcuMDk0IDMwMy4xODkgMTk4LjE4NyAzMDUuMTM1IDIwMC4xMzNDMzA3LjA4MSAyMDIuMDc5IDMwOC4xNzUgMjA0LjcxOSAzMDguMTc1IDIwNy40NzFWMjIzLjg0NkgyODcuNTYzVjIwNy40NzFDMjg3LjU2MiAyMDQuNzQ0IDI4OC42MzYgMjAyLjEyNSAyOTAuNTUxIDIwMC4xODNDMjkyLjQ2NyAxOTguMjQxIDI5NS4wNjkgMTk3LjEzMSAyOTcuNzk3IDE5Ny4wOTRWMTk3LjA5NFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI5Ny44MzggMTk2LjkwOVYyMjMuODA1IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI4Ny40NiAyMDguNDMzSDMwOC4xMTMiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzM1LjkxIDI0MC4zMjRDMzM3LjE1MyAyNDAuMzI0IDMzOC4zNDUgMjQwLjgxNyAzMzkuMjI0IDI0MS42OTZDMzQwLjEwMyAyNDIuNTc2IDM0MC41OTcgMjQzLjc2OCAzNDAuNTk3IDI0NS4wMTFWMjk4LjY2SDMzMS4yMDJWMjQ1LjAxMUMzMzEuMjAyIDI0NC4zOTQgMzMxLjMyNCAyNDMuNzgyIDMzMS41NjEgMjQzLjIxMkMzMzEuNzk4IDI0Mi42NDIgMzMyLjE0NSAyNDIuMTI1IDMzMi41ODIgMjQxLjY4OUMzMzMuMDIgMjQxLjI1NCAzMzMuNTM5IDI0MC45MDkgMzM0LjExIDI0MC42NzVDMzM0LjY4MSAyNDAuNDQgMzM1LjI5MyAyNDAuMzIxIDMzNS45MSAyNDAuMzI0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzUwLjg3MiAyNDAuMzI0QzM1Mi4xMTUgMjQwLjMyNCAzNTMuMzA4IDI0MC44MTcgMzU0LjE4NyAyNDEuNjk3QzM1NS4wNjYgMjQyLjU3NiAzNTUuNTYgMjQzLjc2OCAzNTUuNTYgMjQ1LjAxMVYyOTguNjZIMzQ2LjE2NVYyNDUuMDExQzM0Ni4xNjUgMjQzLjc2OCAzNDYuNjU4IDI0Mi41NzYgMzQ3LjUzNyAyNDEuNjk3QzM0OC40MTYgMjQwLjgxNyAzNDkuNjA5IDI0MC4zMjQgMzUwLjg1MiAyNDAuMzI0SDM1MC44NzJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNzUuMjMgMjQwLjMyNEMxNzUuODQ2IDI0MC4zMjQgMTc2LjQ1NSAyNDAuNDQ1IDE3Ny4wMjQgMjQwLjY4QzE3Ny41OTMgMjQwLjkxNiAxNzguMTA5IDI0MS4yNjEgMTc4LjU0NSAyNDEuNjk3QzE3OC45OCAyNDIuMTMyIDE3OS4zMjUgMjQyLjY0OCAxNzkuNTYxIDI0My4yMTdDMTc5Ljc5NiAyNDMuNzg2IDE3OS45MTcgMjQ0LjM5NSAxNzkuOTE3IDI0NS4wMTFWMjk4LjY2SDE3MC41NDNWMjQ1LjAxMUMxNzAuNTQzIDI0My43NjggMTcxLjAzNyAyNDIuNTc2IDE3MS45MTYgMjQxLjY5N0MxNzIuNzk1IDI0MC44MTcgMTczLjk4NyAyNDAuMzI0IDE3NS4yMyAyNDAuMzI0VjI0MC4zMjRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xOTAuMTkzIDI0MC4zMjRDMTkxLjQzNiAyNDAuMzI0IDE5Mi42MjggMjQwLjgxNyAxOTMuNTA3IDI0MS42OTdDMTk0LjM4NiAyNDIuNTc2IDE5NC44OCAyNDMuNzY4IDE5NC44OCAyNDUuMDExVjI5OC42NkgxODUuNTA1VjI0NS4wMTFDMTg1LjUwNSAyNDMuNzY4IDE4NS45OTkgMjQyLjU3NiAxODYuODc4IDI0MS42OTdDMTg3Ljc1NyAyNDAuODE3IDE4OC45NSAyNDAuMzI0IDE5MC4xOTMgMjQwLjMyNFYyNDAuMzI0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzc4LjY5IDE2NS43OTdDMzgxLjI2MyAxNjUuNzk3IDM4My43MyAxNjYuODE5IDM4NS41NSAxNjguNjM5QzM4Ny4zNyAxNzAuNDU4IDM4OC4zOTIgMTcyLjkyNiAzODguMzkyIDE3NS40OTlWMTg2Ljg4SDM2OC45ODdWMTc1LjQ1OEMzNjguOTk4IDE3Mi44OTIgMzcwLjAyNSAxNzAuNDM1IDM3MS44NDMgMTY4LjYyNEMzNzMuNjYyIDE2Ni44MTMgMzc2LjEyMyAxNjUuNzk3IDM3OC42OSAxNjUuNzk3VjE2NS43OTdaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zNzguNjg5IDE2NS41OTJWMTg2LjgzOSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zNjguOTY3IDE3NC43MDFIMzg4LjI4OSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik00MTIuNTg2IDE2NS43OTdDNDE1LjE1OSAxNjUuNzk3IDQxNy42MjcgMTY2LjgxOSA0MTkuNDQ2IDE2OC42MzlDNDIxLjI2NiAxNzAuNDU4IDQyMi4yODggMTcyLjkyNiA0MjIuMjg4IDE3NS40OTlWMTg2Ljg4SDQwMi44ODRWMTc1LjQ1OEM0MDIuODk1IDE3Mi44OTIgNDAzLjkyMiAxNzAuNDM1IDQwNS43NCAxNjguNjI0QzQwNy41NTggMTY2LjgxMyA0MTAuMDIgMTY1Ljc5NyA0MTIuNTg2IDE2NS43OTdWMTY1Ljc5N1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQxMi41ODYgMTY1LjU5MlYxODYuODM5IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQwMi44ODQgMTc0LjcwMUg0MjIuMjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM3OC42OSAyMDMuMTUyQzM4MS4yNjMgMjAzLjE1MiAzODMuNzMgMjA0LjE3NSAzODUuNTUgMjA1Ljk5NEMzODcuMzcgMjA3LjgxNCAzODguMzkyIDIxMC4yODEgMzg4LjM5MiAyMTIuODU1VjIyNC4yMzVIMzY4Ljk4N1YyMTIuODc1QzM2OC45ODUgMjExLjU5OSAzNjkuMjM0IDIxMC4zMzUgMzY5LjcyIDIwOS4xNTZDMzcwLjIwNiAyMDcuOTc2IDM3MC45MjEgMjA2LjkwNCAzNzEuODIyIDIwNi4wMDFDMzcyLjcyMyAyMDUuMDk4IDM3My43OTMgMjA0LjM4MiAzNzQuOTcyIDIwMy44OTNDMzc2LjE1IDIwMy40MDQgMzc3LjQxNCAyMDMuMTUyIDM3OC42OSAyMDMuMTUyVjIwMy4xNTJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zNzguNjg5IDIwMi45ODlWMjI0LjIzNSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zNjguOTY3IDIxMi4wOTdIMzg4LjI4OSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik00MTIuNTg2IDIwMy4xNTJDNDE1LjE1OSAyMDMuMTUyIDQxNy42MjcgMjA0LjE3NSA0MTkuNDQ2IDIwNS45OTRDNDIxLjI2NiAyMDcuODE0IDQyMi4yODggMjEwLjI4MSA0MjIuMjg4IDIxMi44NTVWMjI0LjIzNUg0MDIuODg0VjIxMi44NzVDNDAyLjg4NCAyMTAuMzAyIDQwMy45MDYgMjA3LjgzNCA0MDUuNzI2IDIwNi4wMTVDNDA3LjU0NSAyMDQuMTk1IDQxMC4wMTMgMjAzLjE3MyA0MTIuNTg2IDIwMy4xNzNWMjAzLjE1MloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQxMi41ODYgMjAyLjk4OVYyMjQuMjM1IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQwMi44ODQgMjEyLjA5N0g0MjIuMjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM3OC42OSAyNDAuMzI0QzM4MS4yNjMgMjQwLjMyNCAzODMuNzMgMjQxLjM0NiAzODUuNTUgMjQzLjE2NUMzODcuMzcgMjQ0Ljk4NSAzODguMzkyIDI0Ny40NTMgMzg4LjM5MiAyNTAuMDI2VjI2MS40MDZIMzY4Ljk4N1YyNTAuMDI2QzM2OC45ODcgMjQ3LjQ1MyAzNzAuMDEgMjQ0Ljk4NSAzNzEuODI5IDI0My4xNjVDMzczLjY0OSAyNDEuMzQ2IDM3Ni4xMTYgMjQwLjMyNCAzNzguNjkgMjQwLjMyNFYyNDAuMzI0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzc4LjY4OSAyNDAuMTZWMjYxLjQwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zNjguOTY3IDI0OS4yNjhIMzg4LjI4OSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik00MTIuNTg2IDI0MC4zMjRDNDE1LjE1OSAyNDAuMzI0IDQxNy42MjcgMjQxLjM0NiA0MTkuNDQ2IDI0My4xNjVDNDIxLjI2NiAyNDQuOTg1IDQyMi4yODggMjQ3LjQ1MyA0MjIuMjg4IDI1MC4wMjZWMjYxLjQwNkg0MDIuODg0VjI1MC4wMjZDNDAyLjg4NCAyNDcuNDUzIDQwMy45MDYgMjQ0Ljk4NSA0MDUuNzI2IDI0My4xNjVDNDA3LjU0NSAyNDEuMzQ2IDQxMC4wMTMgMjQwLjMyNCA0MTIuNTg2IDI0MC4zMjRWMjQwLjMyNFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQxMi41ODYgMjQwLjE2VjI2MS40MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNDAyLjg4NCAyNDkuMjY4SDQyMi4yMDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzc4LjY5IDI3Ny41NzdDMzgxLjI2MyAyNzcuNTc3IDM4My43MyAyNzguNTk5IDM4NS41NSAyODAuNDE4QzM4Ny4zNyAyODIuMjM4IDM4OC4zOTIgMjg0LjcwNiAzODguMzkyIDI4Ny4yNzlWMjk4LjY2SDM2OC45ODdWMjg3LjI3OUMzNjguOTg3IDI4NC43MDYgMzcwLjAxIDI4Mi4yMzggMzcxLjgyOSAyODAuNDE4QzM3My42NDkgMjc4LjU5OSAzNzYuMTE2IDI3Ny41NzcgMzc4LjY5IDI3Ny41NzdWMjc3LjU3N1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM3OC42ODkgMjc3LjQxM1YyOTguNjYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzY4Ljk2NyAyODYuNTIySDM4OC4yODkiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNDEyLjU4NiAyNzcuNTc3QzQxNS4xNTkgMjc3LjU3NyA0MTcuNjI3IDI3OC41OTkgNDE5LjQ0NiAyODAuNDE4QzQyMS4yNjYgMjgyLjIzOCA0MjIuMjg4IDI4NC43MDYgNDIyLjI4OCAyODcuMjc5VjI5OC42Nkg0MDIuODg0VjI4Ny4yNzlDNDAyLjg4NCAyODQuNzA2IDQwMy45MDYgMjgyLjIzOCA0MDUuNzI2IDI4MC40MThDNDA3LjU0NSAyNzguNTk5IDQxMC4wMTMgMjc3LjU3NyA0MTIuNTg2IDI3Ny41NzdaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik00MTIuNTg2IDI3Ny40MTNWMjk4LjY2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQwMi44ODQgMjg2LjUyMkg0MjIuMjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTExMy41NzggMTY1Ljc5N0MxMTYuMTUxIDE2NS43OTcgMTE4LjYxOSAxNjYuODE5IDEyMC40MzkgMTY4LjYzOUMxMjIuMjU4IDE3MC40NTggMTIzLjI4IDE3Mi45MjYgMTIzLjI4IDE3NS40OTlWMTg2Ljg4SDEwMy45MzhWMTc1LjQ1OEMxMDMuOTQ4IDE3Mi45MDMgMTA0Ljk2NyAxNzAuNDU1IDEwNi43NzIgMTY4LjY0NkMxMDguNTc3IDE2Ni44MzcgMTExLjAyMyAxNjUuODEzIDExMy41NzggMTY1Ljc5N1YxNjUuNzk3WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTEzLjY0IDE2NS41OTJWMTg2LjgzOSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMDMuOTM4IDE3NC43MDFIMTIzLjI2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE0Ny41NTYgMTY1Ljc5N0MxNTAuMTMgMTY1Ljc5NyAxNTIuNTk3IDE2Ni44MTkgMTU0LjQxNyAxNjguNjM5QzE1Ni4yMzYgMTcwLjQ1OCAxNTcuMjU5IDE3Mi45MjYgMTU3LjI1OSAxNzUuNDk5VjE4Ni44OEgxMzcuODU0VjE3NS40NThDMTM3Ljg2NSAxNzIuODkyIDEzOC44OTIgMTcwLjQzNSAxNDAuNzEgMTY4LjYyNEMxNDIuNTI5IDE2Ni44MTMgMTQ0Ljk5IDE2NS43OTcgMTQ3LjU1NiAxNjUuNzk3VjE2NS43OTdaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNDcuNTU2IDE2NS41OTJWMTg2LjgzOSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMzcuODU0IDE3NC43MDFIMTU3LjE3NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMTMuNTc4IDIwMy4xNTJDMTE0Ljg2MSAyMDMuMTQyIDExNi4xMzMgMjAzLjM4NSAxMTcuMzIxIDIwMy44NjlDMTE4LjUwOSAyMDQuMzUzIDExOS41ODkgMjA1LjA2OCAxMjAuNDk5IDIwNS45NzJDMTIxLjQwOSAyMDYuODc2IDEyMi4xMzEgMjA3Ljk1MiAxMjIuNjIyIDIwOS4xMzdDMTIzLjExMyAyMTAuMzIyIDEyMy4zNjUgMjExLjU5MiAxMjMuMzYyIDIxMi44NzVWMjI0LjI1NkgxMDMuOTM4VjIxMi44NzVDMTAzLjkzMiAyMTAuMzA5IDEwNC45NDMgMjA3Ljg0NSAxMDYuNzUgMjA2LjAyM0MxMDguNTU3IDIwNC4yMDEgMTExLjAxMiAyMDMuMTY5IDExMy41NzggMjAzLjE1MlYyMDMuMTUyWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTEzLjY0IDIwMi45ODlWMjI0LjIzNSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMDMuOTM4IDIxMi4wOTdIMTIzLjI2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE0Ny41NTYgMjAzLjE1MkMxNDguODMyIDIwMy4xNTIgMTUwLjA5NiAyMDMuNDA0IDE1MS4yNzQgMjAzLjg5M0MxNTIuNDUyIDIwNC4zODIgMTUzLjUyMyAyMDUuMDk4IDE1NC40MjQgMjA2LjAwMUMxNTUuMzI1IDIwNi45MDQgMTU2LjA0IDIwNy45NzYgMTU2LjUyNiAyMDkuMTU2QzE1Ny4wMTIgMjEwLjMzNSAxNTcuMjYxIDIxMS41OTkgMTU3LjI1OSAyMTIuODc1VjIyNC4yNTZIMTM3Ljg1NFYyMTIuODc1QzEzNy44NTQgMjEwLjMwMiAxMzguODc2IDIwNy44MzQgMTQwLjY5NiAyMDYuMDE1QzE0Mi41MTUgMjA0LjE5NSAxNDQuOTgzIDIwMy4xNzMgMTQ3LjU1NiAyMDMuMTczVjIwMy4xNTJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNDcuNTU2IDIwMi45ODlWMjI0LjIzNSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMzcuODU0IDIxMi4wOTdIMTU3LjE3NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMTMuNTc4IDI0MC4zMjRDMTE2LjE1MSAyNDAuMzI0IDExOC42MTkgMjQxLjM0NiAxMjAuNDM5IDI0My4xNjVDMTIyLjI1OCAyNDQuOTg1IDEyMy4yOCAyNDcuNDUzIDEyMy4yOCAyNTAuMDI2VjI2MS40MDZIMTAzLjkzOFYyNTAuMDI2QzEwMy45MzcgMjQ3LjQ2MyAxMDQuOTUxIDI0NS4wMDUgMTA2Ljc1NyAyNDMuMTg3QzEwOC41NjQgMjQxLjM2OSAxMTEuMDE2IDI0MC4zNCAxMTMuNTc4IDI0MC4zMjRWMjQwLjMyNFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTExMy42NCAyNDAuMTZWMjYxLjQwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMDMuOTM4IDI0OS4yNjhIMTIzLjI2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE0Ny41NTYgMjQwLjMyNEMxNTAuMTMgMjQwLjMyNCAxNTIuNTk3IDI0MS4zNDYgMTU0LjQxNyAyNDMuMTY1QzE1Ni4yMzYgMjQ0Ljk4NSAxNTcuMjU5IDI0Ny40NTMgMTU3LjI1OSAyNTAuMDI2VjI2MS40MDZIMTM3Ljg1NFYyNTAuMDI2QzEzNy44NTQgMjQ3LjQ1MyAxMzguODc2IDI0NC45ODUgMTQwLjY5NiAyNDMuMTY1QzE0Mi41MTUgMjQxLjM0NiAxNDQuOTgzIDI0MC4zMjQgMTQ3LjU1NiAyNDAuMzI0VjI0MC4zMjRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNDcuNTU2IDI0MC4xNlYyNjEuNDA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEzNy44NTQgMjQ5LjI2OEgxNTcuMTc3IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTExMy41NzggMjc3LjU3N0MxMTYuMTUxIDI3Ny41NzcgMTE4LjYxOSAyNzguNTk5IDEyMC40MzkgMjgwLjQxOEMxMjIuMjU4IDI4Mi4yMzggMTIzLjI4IDI4NC43MDYgMTIzLjI4IDI4Ny4yNzlWMjk4LjY2SDEwMy45MzhWMjg3LjI3OUMxMDMuOTM3IDI4NC43MTYgMTA0Ljk1MSAyODIuMjU4IDEwNi43NTcgMjgwLjQ0QzEwOC41NjQgMjc4LjYyMiAxMTEuMDE2IDI3Ny41OTMgMTEzLjU3OCAyNzcuNTc3WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTEzLjY0IDI3Ny40MTNWMjk4LjY2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEwMy45MzggMjg2LjUyMkgxMjMuMjYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQ3LjU1NiAyNzcuNTc3QzE1MC4xMyAyNzcuNTc3IDE1Mi41OTcgMjc4LjU5OSAxNTQuNDE3IDI4MC40MThDMTU2LjIzNiAyODIuMjM4IDE1Ny4yNTkgMjg0LjcwNiAxNTcuMjU5IDI4Ny4yNzlWMjk4LjY2SDEzNy44NTRWMjg3LjI3OUMxMzcuODU0IDI4NC43MDYgMTM4Ljg3NiAyODIuMjM4IDE0MC42OTYgMjgwLjQxOEMxNDIuNTE1IDI3OC41OTkgMTQ0Ljk4MyAyNzcuNTc3IDE0Ny41NTYgMjc3LjU3N1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE0Ny41NTYgMjc3LjQxM1YyOTguNjYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTM3Ljg1NCAyODYuNTIySDE1Ny4xNzciIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNDQ2Ljg3MSAyOTAuMTY1QzQ0Ny41MjYgMjkyLjcyNCA0NDYuMDczIDI5NS40MjYgNDQ0LjUxNyAzMDAuOTkzQzQ0NC4xMDIgMzAyLjk1MiA0NDQuMTE5IDMwNC45NzggNDQ0LjU2OCAzMDYuOTNDNDQ1LjAxNyAzMDguODgxIDQ0NS44ODcgMzEwLjcxMSA0NDcuMTE3IDMxMi4yOTJINDY0LjY3OUM0NjYuODY2IDMwOC43OTggNDY3Ljc0NCAzMDQuNjQzIDQ2Ny4xNTYgMzAwLjU2M0M0NjYuMzk4IDI5NC45MTQgNDU3LjkwNCAyODguNjUgNDU3LjgyMiAyODQuMTg4QzQ1Ny41NzEgMjgxLjI1NiA0NTguMDA1IDI3OC4zMDYgNDU5LjA5MSAyNzUuNTcxQzQ2MC4yNzggMjcxLjk4OSA0NjAuNTAzIDI2Ni45MzMgNDUzLjQ0MiAyNjcuMzgzQzQ0Ni4zOCAyNjcuODM0IDQ0MS45MTggMjcxLjgyNSA0NDIuNTExIDI3OC44MjVDNDQzLjEwNSAyODUuODI2IDQ0Ni4yMTYgMjg3LjYwNiA0NDYuODcxIDI5MC4xNjVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik00NTEuMzEzIDI3NC4xMThDNDUwLjU5NiAyODMuNDMxIDQ0OS40MDkgMjg1LjM3NSA0NTguNjgxIDMwOC45MTRaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNDUxLjMxMyAyNzQuMTE4QzQ1MC41OTYgMjgzLjQzMSA0NDkuNDA5IDI4NS4zNzUgNDU4LjY4MSAzMDguOTE0IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTQ4Ni45MDggMzEyLjI5MkM0ODguMDg2IDMxMC45NDkgNDg5LjAzNCAzMDkuNDIxIDQ4OS43MTIgMzA3Ljc2OEM0OTIuNTM3IDMwMC45MzIgNDg0LjgyIDI5MC41NTQgNDg0LjkwMiAyODYuMjU2QzQ4NC45ODQgMjgxLjk1NyA0OTIuNTE2IDI3Ni4wMjEgNDkyLjMxMiAyNjkuNTczQzQ5Mi4xMDcgMjYzLjEyNiA0ODkuMjgyIDI2Mi40MDkgNDg1LjM1MiAyNjAuNDI0QzQ4MS40MjIgMjU4LjQzOCA0OTEuODIgMjQ0LjA0OSA0ODMuNzE1IDI0My4yOTJDNDc1LjYwOSAyNDIuNTM0IDQ3My40OCAyNDkuNjk4IDQ3Mi42MjEgMjU1LjM2OEM0NzEuNzYxIDI2MS4wMzggNDY3LjY4OCAyNjAuNzUxIDQ2NC44MjIgMjY2LjA5NEM0NjAuMTc2IDI3NC41ODggNDY1LjY2MSAyODMuMzI4IDQ2Ni4zNzggMjg2LjIzNUM0NjguMDE1IDI5My4wMzEgNDU2LjczNyAyOTEuNTE2IDQ1Ni4xNDMgMzAzLjAxOUM0NTUuOTggMzA2LjAyOCA0NTguMDY3IDMwOS40MjYgNDYwLjk3NCAzMTIuMzEyTDQ4Ni45MDggMzEyLjI5MloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQ3OS4zMTQgMjUyLjYyNUM0NzQuNDE2IDI3MC42NjkgNDcyLjEyOCAyODkuMzIxIDQ3Mi41MTggMzA4LjAxNFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00NzkuMzE0IDI1Mi42MjVDNDc0LjQxNiAyNzAuNjY5IDQ3Mi4xMjggMjg5LjMyMSA0NzIuNTE4IDMwOC4wMTQiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNjYuMjc1MSAyNjkuNjM1VjMxMS4xODYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOTguODIwMyAyMzYuOTg3Qzk4Ljg1ODEgMjMzLjQ0MiA5Ny45NDExIDIyOS45NTMgOTYuMTY1NiAyMjYuODg0Qzk0LjM5MDEgMjIzLjgxNiA5MS44MjE1IDIyMS4yODIgODguNzI5MiAyMTkuNTQ4QzgxLjg3MjIgMjE1LjE0NyA4OC4yOTk0IDIwMy42NjQgNzguNjU4NiAxOTUuODI1QzYzLjc3NzggMTg1LjUyOSA0OC4wNzgzIDE5Ni41IDQ4LjA3ODMgMjExLjQwMUM0OC4zNjI0IDIxMi45MzIgNDguMTU5OSAyMTQuNTEzIDQ3LjQ5OSAyMTUuOTIzQzQ2LjgzODIgMjE3LjMzMyA0NS43NTIzIDIxOC41IDQ0LjM5MzkgMjE5LjI2MUM0MS4xNjc2IDIyMC45NjYgMzguNDY3MyAyMjMuNTE4IDM2LjU4MzkgMjI2LjY0M0MzNC43MDA0IDIyOS43NjkgMzMuNzA1MSAyMzMuMzQ4IDMzLjcwNTEgMjM2Ljk5N0MzMy43MDUxIDI0MC42NDYgMzQuNzAwNCAyNDQuMjI2IDM2LjU4MzkgMjQ3LjM1MUMzOC40NjczIDI1MC40NzcgNDEuMTY3NiAyNTMuMDI5IDQ0LjM5MzkgMjU0LjczNEM0NS41NTc0IDI1NS4zNTIgNDYuNTIxMyAyNTYuMjg5IDQ3LjE3MzYgMjU3LjQzNEM0Ny44MjU4IDI1OC41NzkgNDguMTM5NiAyNTkuODg1IDQ4LjA3ODMgMjYxLjIwMkM0OC4wNzgzIDI3NS43MzUgNjMuMTAyNCAyODYuNTgzIDc3LjY3NjEgMjc3LjQzM0M4Ny45MTA1IDI2OS41NTMgODIuMTU4OCAyNTguODI3IDg4LjcwODggMjU0LjQyN0M5MS44MDYzIDI1Mi42OTcgOTQuMzgwMiAyNTAuMTY1IDk2LjE1OTcgMjQ3LjA5NkM5Ny45MzkxIDI0NC4wMjcgOTguODU4MyAyNDAuNTM1IDk4LjgyMDMgMjM2Ljk4N1YyMzYuOTg3WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNjYuMjc1MSAyODUuMjczVjIxMC4zNTciIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNjYuMjc1MSAyNjkuNTMyQzY2LjI3NTEgMjY5LjUzMiA3My4yNzU0IDI2NC41MzggNzMuOTUwOSAyNTkuMDczIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTY2LjI3NTEgMjI5LjA4NkM2Ni4yNzUxIDIyOS4wODYgNzMuMjc1NCAyMjQuMTEyIDczLjk1MDkgMjE4LjY0NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik02Ni4yNzUyIDI0Ny4zNDRDNjYuMjc1MiAyNDcuMzQ0IDU5LjI5NTMgMjQyLjM1IDU4LjYxOTkgMjM2Ljg4NSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMDAuOTIgMzEyLjM1NkMxMDAuNjg3IDMxMC42MzMgOTkuOTI5NiAzMDkuMDIzIDk4Ljc1MDUgMzA3Ljc0NUM5Ny41NzE1IDMwNi40NjcgOTYuMDI3OCAzMDUuNTgzIDk0LjMyOTEgMzA1LjIxMkM5My40MzkyIDMwMi41MDEgOTEuNzA2IDMwMC4xNDUgODkuMzgyNSAyOTguNDg4Qzg3LjA1OSAyOTYuODMxIDg0LjI2NjggMjk1Ljk2IDgxLjQxMzMgMjk2LjAwMUM3OS4xNzExIDI5NS45ODUgNzYuOTU5NCAyOTYuNTIyIDc0Ljk3NDIgMjk3LjU2NEM3Mi45ODkxIDI5OC42MDcgNzEuMjkxOCAzMDAuMTIzIDcwLjAzMjcgMzAxLjk3OEg2OS4yMzQ0QzY2LjU4NDIgMzAxLjkzNCA2NC4wMjM0IDMwMi45MzcgNjIuMTA3NSAzMDQuNzY4QzYwLjE5MTYgMzA2LjYgNTkuMDc1MSAzMDkuMTEzIDU5IDMxMS43NjJDNTkgMzExLjk2NyA1OSAzMTIuMTcyIDU5IDMxMi4zNzZMMTAwLjkyIDMxMi4zNTZaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMzcgNDY2LjkzNEMxMzYuMjQ0IDQ2MS4zNTcgMTMzLjc4NyA0NTYuMTQ4IDEyOS45NjIgNDUyLjAxMkMxMjYuMTM2IDQ0Ny44NzYgMTIxLjEyOCA0NDUuMDE0IDExNS42MTcgNDQzLjgxNUMxMTIuNzMgNDM1LjAzOSAxMDcuMTA3IDQyNy40MTQgOTkuNTY5MyA0MjIuMDUxQzkyLjAzMTMgNDE2LjY4OCA4Mi45NzI1IDQxMy44NjkgNzMuNzE0OCA0MTQuMDA1QzY2LjQ0MDUgNDEzLjk1MSA1OS4yNjUyIDQxNS42ODggNTIuODI0OSA0MTkuMDYyQzQ2LjM4NDUgNDIyLjQzNyA0MC44Nzc5IDQyNy4zNDMgMzYuNzkzIDQzMy4zNDhIMzQuMjAzMUMyNS42MDUyIDQzMy4yMDUgMTcuMjk3NCA0MzYuNDQ5IDExLjA4MTcgNDQyLjM3N0M0Ljg2NTk1IDQ0OC4zMDUgMS4yNDM1IDQ1Ni40MzggMSA0NjUuMDEzQzEgNDY1LjY3NSAxIDQ2Ni4zMzggMSA0NjdMMTM3IDQ2Ni45MzRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNjkuMjc0IDI3Ny4yMjlMMTgyLjQ3NiAyOTYuMjY1QzE4Mi44MjkgMjk2LjgyNyAxODIuOTQ1IDI5Ny41MDcgMTgyLjggMjk4LjE1NEMxODIuNjU0IDI5OC44MDIgMTgyLjI1OCAyOTkuMzY2IDE4MS42OTggMjk5LjcyNEwxODEuNDUzIDI5OS44NDdMMTczLjg1OSAzMDMuNTcyQzE3My4yNjQgMzAzLjg2NSAxNzIuNTc4IDMwMy45MSAxNzEuOTUgMzAzLjY5N0MxNzEuMzIzIDMwMy40ODQgMTcwLjgwNSAzMDMuMDMgMTcwLjUxMiAzMDIuNDM2QzE3MC4yMTkgMzAxLjg0MiAxNzAuMTc0IDMwMS4xNTUgMTcwLjM4NyAzMDAuNTI3QzE3MC42IDI5OS45IDE3MS4wNTQgMjk5LjM4MyAxNzEuNjQ4IDI5OS4wODlMMTc2LjYyMiAyOTYuNzk3TDE2My43MjcgMjgxLjA1NkMxNjMuMjAzIDI4MC4zMzcgMTYyLjk4NyAyNzkuNDM5IDE2My4xMjUgMjc4LjU2QzE2My4yNjMgMjc3LjY4MSAxNjMuNzQ1IDI3Ni44OTMgMTY0LjQ2NCAyNzYuMzY5QzE2NS45NTggMjc1LjI4NCAxNjguMDQ2IDI3My42MDYgMTY5LjEzMSAyNzUuMUMxNjkuMTcyIDI3NS4wOCAxNjkuMjMzIDI3Ny4xNjcgMTY5LjI3NCAyNzcuMjI5WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTU3LjUwNCAyODEuODM0QzE1NS42ODkgMjg0LjMwNCAxNTMuODk1IDI4Ni44MDEgMTUyLjEyMSAyODkuMzI2TDE0Ni45ODMgMjk2Ljc5N0MxNDYuOTgzIDI5Ni43OTcgMTQ1LjU5MSAzMDAuODkxIDE0NC45MzYgMzAzLjE4M0MxNDQuMjgxIDMwNS40NzYgMTQzLjQ4MyAzMDcuNzA3IDE0Mi44ODkgMzA5Ljk3OUMxNDIuNzAyIDMxMC42MTcgMTQyLjI2OSAzMTEuMTU0IDE0MS42ODYgMzExLjQ3M0MxNDEuMTAyIDMxMS43OTEgMTQwLjQxNiAzMTEuODY1IDEzOS43NzggMzExLjY3OEMxMzkuMTQgMzExLjQ5IDEzOC42MDMgMzExLjA1NyAxMzguMjg0IDMxMC40NzRDMTM3Ljk2NiAzMDkuODkgMTM3Ljg5MiAzMDkuMjA0IDEzOC4wNzkgMzA4LjU2NkMxMzguMDcgMzA4LjUyNiAxMzguMDcgMzA4LjQ4NCAxMzguMDc5IDMwOC40NDRDMTM4Ljg1NyAzMDYuMTkyIDEzOS42MTQgMzAzLjk0IDE0MC4zMzEgMzAxLjY4OUMxNDEuMDQ3IDI5OS40MzcgMTQxLjc0MyAyOTcuMTQ1IDE0Mi4zNzggMjk0Ljg3M0MxNDIuNDM0IDI5NC43MTcgMTQyLjUwMiAyOTQuNTY3IDE0Mi41ODIgMjk0LjQyM1YyOTQuM0wxNDcuMjcgMjg2LjMzN0MxNDguODA1IDI4My42NzYgMTUwLjMyIDI4MS4wMTUgMTUxLjgxNCAyNzguMzE0QzE1Mi4yNDMgMjc3LjUzNyAxNTIuOTYyIDI3Ni45NjMgMTUzLjgxNSAyNzYuNzE3QzE1NC42NjcgMjc2LjQ3MiAxNTUuNTgyIDI3Ni41NzUgMTU2LjM1OCAyNzcuMDA0QzE1Ny4xMzQgMjc3LjQzMiAxNTcuNzA4IDI3OC4xNTIgMTU3Ljk1NCAyNzkuMDA0QzE1OC4yIDI3OS44NTYgMTU4LjA5NyAyODAuNzcxIDE1Ny42NjggMjgxLjU0OEMxNTcuNjE4IDI4MS42NDYgMTU3LjU2MyAyODEuNzQxIDE1Ny41MDQgMjgxLjgzNFYyODEuODM0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTUzLjE0NCAzNjguNTZIMTUzLjAwMUMxNTIuNDQ2IDM2OC41NjEgMTUxLjg5NiAzNjguNDQ5IDE1MS4zODYgMzY4LjIzQzE1MC44NzUgMzY4LjAxMiAxNTAuNDE0IDM2Ny42OTIgMTUwLjAzMSAzNjcuMjlDMTQ5LjY0OCAzNjYuODg4IDE0OS4zNTEgMzY2LjQxMiAxNDkuMTU4IDM2NS44OTFDMTQ4Ljk2NSAzNjUuMzcxIDE0OC44NzkgMzY0LjgxNiAxNDguOTA3IDM2NC4yNjJMMTQ5Ljc4NyAzMzcuMDU5TDE1MC40NjMgMzEyLjg0NEMxNTAuNDYzIDMxMS43NTkgMTUwLjg5NCAzMTAuNzE3IDE1MS42NjIgMzA5Ljk1QzE1Mi40MyAzMDkuMTgyIDE1My40NzEgMzA4Ljc1MSAxNTQuNTU3IDMwOC43NTFIMTU0LjY3OUMxNTUuMjM1IDMwOC43NSAxNTUuNzg0IDMwOC44NjIgMTU2LjI5NSAzMDkuMDgxQzE1Ni44MDUgMzA5LjI5OSAxNTcuMjY2IDMwOS42MTkgMTU3LjY0OSAzMTAuMDIxQzE1OC4wMzIgMzEwLjQyMyAxNTguMzI5IDMxMC44OTkgMTU4LjUyMiAzMTEuNDJDMTU4LjcxNiAzMTEuOTQgMTU4LjgwMSAzMTIuNDk1IDE1OC43NzMgMzEzLjA0OUwxNTguMiAzMzcuMzI1TDE1Ny4zMiAzNjQuNTI4QzE1Ny4zMTIgMzY1LjA2NyAxNTcuMTk3IDM2NS42IDE1Ni45ODMgMzY2LjA5NUMxNTYuNzY5IDM2Ni41OSAxNTYuNDU4IDM2Ny4wMzggMTU2LjA3IDM2Ny40MTJDMTU1LjY4MiAzNjcuNzg3IDE1NS4yMjQgMzY4LjA4MSAxNTQuNzIyIDM2OC4yNzhDMTU0LjIyIDM2OC40NzUgMTUzLjY4NCAzNjguNTcxIDE1My4xNDQgMzY4LjU2WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTY3LjgyIDM2MS43MjRDMTY2LjgzIDM2MS43MzQgMTY1Ljg3IDM2MS4zODUgMTY1LjExNyAzNjAuNzQyQzE2NC4zNjQgMzYwLjA5OCAxNjMuODcgMzU5LjIwNCAxNjMuNzI3IDM1OC4yMjRMMTYwLjM5IDMzNy41NzFDMTYwLjM0OSAzMzcuMjI0IDE2MC4zNDkgMzM2Ljg3NCAxNjAuMzkgMzM2LjUyN0wxNjIuNDM3IDMxMy41NEMxNjIuNTMyIDMxMi40MzggMTYzLjA2MSAzMTEuNDE5IDE2My45MDcgMzEwLjcwN0MxNjQuMzI3IDMxMC4zNTUgMTY0LjgxMSAzMTAuMDg4IDE2NS4zMzMgMzA5LjkyM0MxNjUuODU1IDMwOS43NTcgMTY2LjQwNSAzMDkuNjk2IDE2Ni45NSAzMDkuNzQzQzE2Ny40OTYgMzA5Ljc5IDE2OC4wMjcgMzA5Ljk0NCAxNjguNTEzIDMxMC4xOTdDMTY4Ljk5OSAzMTAuNDQ5IDE2OS40MzEgMzEwLjc5NSAxNjkuNzg0IDMxMS4yMTRDMTcwLjEzNiAzMTEuNjMzIDE3MC40MDMgMzEyLjExNyAxNzAuNTY4IDMxMi42MzlDMTcwLjczNCAzMTMuMTYyIDE3MC43OTQgMzEzLjcxMSAxNzAuNzQ3IDMxNC4yNTdMMTY4LjcwMSAzMzYuNzcyTDE3MS45NTUgMzU2LjkzNEMxNzIuMDU0IDM1Ny40NzcgMTcyLjA0MyAzNTguMDM0IDE3MS45MjEgMzU4LjU3M0MxNzEuNzk5IDM1OS4xMTEgMTcxLjU3IDM1OS42MTkgMTcxLjI0NyAzNjAuMDY2QzE3MC45MjQgMzYwLjUxNCAxNzAuNTEzIDM2MC44OTEgMTcwLjA0MSAzNjEuMTc2QzE2OS41NjggMzYxLjQ2MSAxNjkuMDQyIDM2MS42NDcgMTY4LjQ5NiAzNjEuNzI0QzE2OC4yNzEgMzYxLjc0NSAxNjguMDQ1IDM2MS43NDUgMTY3LjgyIDM2MS43MjRWMzYxLjcyNFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE0OS4yNTUgMzA3LjMxOEwxNTEuOTU3IDI4MC44MzFDMTUyLjIzNCAyNzguNjQxIDE1My4zMDEgMjc2LjYyNyAxNTQuOTU3IDI3NS4xNjdDMTU2LjYxMyAyNzMuNzA3IDE1OC43NDUgMjcyLjkwMSAxNjAuOTUzIDI3Mi45MDFDMTYzLjE2MSAyNzIuOTAxIDE2NS4yOTMgMjczLjcwNyAxNjYuOTQ5IDI3NS4xNjdDMTY4LjYwNiAyNzYuNjI3IDE2OS42NzIgMjc4LjY0MSAxNjkuOTQ5IDI4MC44MzFMMTcyLjYzMSAzMDcuMzE4QzE3Mi43NzQgMzA4LjgzOCAxNzIuNjE1IDMxMC4zNzEgMTcyLjE2MyAzMTEuODI5QzE3MS43MTEgMzEzLjI4NyAxNzAuOTc1IDMxNC42NDIgMTY5Ljk5NyAzMTUuODE0QzE2OS4wMTggMzE2Ljk4NiAxNjcuODE4IDMxNy45NTMgMTY2LjQ2NCAzMTguNjU5QzE2NS4xMTEgMzE5LjM2NSAxNjMuNjMxIDMxOS43OTYgMTYyLjExIDMxOS45MjdDMTU5LjA1MiAzMjAuMjUgMTU1Ljk5MSAzMTkuMzU4IDE1My41ODYgMzE3LjQ0M0MxNTEuMTgxIDMxNS41MjggMTQ5LjYyNSAzMTIuNzQ0IDE0OS4yNTUgMzA5LjY5MkMxNDkuMTc5IDMwOC45MDMgMTQ5LjE3OSAzMDguMTA3IDE0OS4yNTUgMzA3LjMxOFYzMDcuMzE4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTYyLjQ3OCAyNzIuMjM0VjI3Mi45NTFDMTYyLjQ3OCAyNzMuNzI5IDE2MS42MzkgMjc0LjM2MyAxNjAuNTk1IDI3NC4zNjNDMTU5LjU1MSAyNzQuMzYzIDE1OC43MTIgMjczLjcyOSAxNTguNzEyIDI3Mi45NTEiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNjIuNDc4IDI3Mi4yMzRWMjcyLjk1MUMxNjIuNDc4IDI3My43MjkgMTYxLjYzOSAyNzQuMzYzIDE2MC41OTUgMjc0LjM2M0MxNTkuNTUxIDI3NC4zNjMgMTU4LjcxMiAyNzMuNzI5IDE1OC43MTIgMjcyLjk1MSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjcuOTIzIDI2NS42NDNDMTY2LjkyIDI2OS41OTQgMTYyLjQxNyAyNzMuODMxIDE1OC40NjYgMjcyLjg0OEMxNTQuNTE2IDI3MS44NjYgMTUyLjYxMiAyNjUuOTMgMTUzLjYxNSAyNjEuOThDMTU0LjEwMSAyNjAuMDggMTU1LjMyMiAyNTguNDUgMTU3LjAwOSAyNTcuNDVDMTU4LjY5NiAyNTYuNDUgMTYwLjcxMSAyNTYuMTYyIDE2Mi42MTEgMjU2LjY0N0MxNjQuNTExIDI1Ny4xMzMgMTY2LjE0IDI1OC4zNTQgMTY3LjE0IDI2MC4wNDFDMTY4LjE0IDI2MS43MjggMTY4LjQyOSAyNjMuNzQzIDE2Ny45NDMgMjY1LjY0M0gxNjcuOTIzWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTUyLjQ2OSAyNzQuMjgxSDE1NC42NTlWMjgyLjgxN0gxNTAuMjk5VjI3Ni40OTJDMTUwLjI5NiAyNzYuMjA0IDE1MC4zNSAyNzUuOTE5IDE1MC40NTggMjc1LjY1MkMxNTAuNTY2IDI3NS4zODUgMTUwLjcyNSAyNzUuMTQyIDE1MC45MjYgMjc0LjkzN0MxNTEuMTI4IDI3NC43MzIgMTUxLjM2OCAyNzQuNTY4IDE1MS42MzIgMjc0LjQ1NkMxNTEuODk3IDI3NC4zNDMgMTUyLjE4MSAyNzQuMjg0IDE1Mi40NjkgMjc0LjI4MVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE2Ni4xMDEgMjczLjg3MkgxNjcuNTU0QzE2OC4zMzYgMjczLjg3MiAxNjkuMDg2IDI3NC4xODIgMTY5LjYzOCAyNzQuNzM1QzE3MC4xOTEgMjc1LjI4OCAxNzAuNTAyIDI3Ni4wMzggMTcwLjUwMiAyNzYuODE5VjI4Mi45NkgxNjYuMTAxVjI3My44NzJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNjQuNDg0IDI3Ny40NTRIMTU2Ljc4OEMxNTIuNDkyIDI3Ny40NTQgMTQ5LjAxIDI4MC45MzYgMTQ5LjAxIDI4NS4yMzJWMzEyLjE0OEMxNDkuMDEgMzE2LjQ0NCAxNTIuNDkyIDMxOS45MjcgMTU2Ljc4OCAzMTkuOTI3SDE2NC40ODRDMTY4Ljc4IDMxOS45MjcgMTcyLjI2MiAzMTYuNDQ0IDE3Mi4yNjIgMzEyLjE0OFYyODUuMjMyQzE3Mi4yNjIgMjgwLjkzNiAxNjguNzggMjc3LjQ1NCAxNjQuNDg0IDI3Ny40NTRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNDkuMDcxIDM2NS4yNjVDMTQ5LjA3MSAzNjUuMjY1IDE0OC4zNzUgMzc0LjI1MSAxNTAuNDIyIDM3NC41NzhDMTUxLjU2OCAzNzQuODAzIDE1NS45MjggMzc1LjE1MSAxNTYuODcgMzc0LjMxMkMxNTcuODExIDM3My40NzMgMTU3LjMyIDM2NC40NjcgMTU3LjMyIDM2NC40NjdMMTQ5LjA3MSAzNjUuMjY1WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNjguODQ0IDM3MS4wMzdDMTY3LjMwOSAzNzEuMDM3IDE2Ni4wNiAzNzAuMDE0IDE2NS43MzMgMzY3LjU3OEwxNjQuNzUgMzYxLjk0OUMxNjQuNjM0IDM2MS4yNzkgMTY0LjcwOCAzNjAuNTg5IDE2NC45NjUgMzU5Ljk1OUMxNjUuMjIyIDM1OS4zMjkgMTY1LjY1MSAzNTguNzg1IDE2Ni4yMDMgMzU4LjM4N0MxNjYuOSAzNTcuODk2IDE2Ny43NSAzNTcuNjcxIDE2OC41OTggMzU3Ljc1M0MxNjkuMDc4IDM1Ny43OTQgMTY5LjU0NSAzNTcuOTMgMTY5Ljk3MyAzNTguMTUxQzE3MC40IDM1OC4zNzMgMTcwLjc4IDM1OC42NzggMTcxLjA5IDM1OS4wNDZDMTcxLjQgMzU5LjQxNSAxNzEuNjM0IDM1OS44NDIgMTcxLjc3OSAzNjAuMzAxQzE3MS45MjQgMzYwLjc2IDE3MS45NzcgMzYxLjI0NCAxNzEuOTM1IDM2MS43MjRMMTcxLjQ4NCAzNjYuOTQzQzE3MS4zNjIgMzY4Ljk3IDE3MC4zMzggMzcwLjkzNSAxNjguODQ0IDM3MS4wMzdaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE2MC42NTYgMjY5Ljc3OEMxNTguOTMxIDI2OS42OTkgMTU3LjI1MiAyNjkuMTk2IDE1NS43NjcgMjY4LjMxNUMxNTQuMjgyIDI2Ny40MzMgMTUzLjAzNyAyNjYuMTk5IDE1Mi4xNDEgMjY0LjcyMkMxNTEuNDYgMjYzLjM1NyAxNTAuODUyIDI2MS45NTYgMTUwLjMyIDI2MC41MjZDMTUxLjg1OCAyNjAuMjE3IDE1My4zMzYgMjU5LjY2NCAxNTQuNyAyNTguODg5QzE1NS4yOTMgMjU4LjEzMSAxNTguNzk0IDI1NC4zODYgMTYzLjIzNSAyNTUuODU5QzE2NC43MTMgMjU2LjM0MiAxNjYuMDAxIDI1Ny4yNzggMTY2LjkxNyAyNTguNTM1QzE2Ny44MzIgMjU5Ljc5MiAxNjguMzI3IDI2MS4zMDUgMTY4LjMzMiAyNjIuODZDMTY4LjMxMiAyNjQuMDQ3IDE2OC44NDQgMjY5LjQ3MSAxNjAuNjU2IDI2OS43NzhaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0zMTguODggMjc1LjUzQzMxMC4xOCAyNzkuMDUgMzA5LjE1NyAyOTUuOTk5IDMwNS4wNDMgMzAwLjIxNUMzMDAuOTI5IDMwNC40MzIgMzA5LjEzNyAzMjAuODI3IDMwMS4wNzIgMzM0LjE3M0MyOTMuMDA3IDM0Ny41MTggMjg1LjkwNSAzNDQuMjg0IDI3OC43MiAzMzcuMUMyNzEuNTM1IDMyOS45MTUgMjc0LjYyNiAzMTAuNzk3IDI3OC41NTYgMzAyLjEzOUMyODIuNDg2IDI5My40ODEgMjkzLjk0OSAyODYuODA4IDI5Mi44ODQgMjgwLjk1NEMyODkuNzUzIDI2My42MzcgMzAwLjc4NSAyNTYuNjk5IDMwOC42ODYgMjU2LjY5OUMzMTYuNTg3IDI1Ni42OTkgMzI3LjM5NSAyNTcuOTQ3IDMyMy4xOTkgMjY4LjY1MkMzMTkuNTM1IDI2Ni4yMTcgMzA5LjExNiAyNjYuMTU1IDMwNS41MzQgMjcxLjc0M0MzMDMuNDg3IDI3NS4wMTggMzA0LjQ0OSAyODIuODU4IDMwNC40NDkgMjgyLjg1OCIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNMzI0LjEyIDI5Ni4zMjZMMzM5LjM2OSAzMzUuNjg4TDMzOS41NzQgMzM2LjE5OUMzMzkuNzk3IDMzNi44MTUgMzM5Ljg5NSAzMzcuNDY5IDMzOS44NiAzMzguMTIzTDMzOC4wNTkgMzY0LjgzNUMzMzguMDI5IDM2Ni4wMjQgMzM3LjUyOCAzNjcuMTUyIDMzNi42NjYgMzY3Ljk3MkMzMzUuODA1IDM2OC43OTEgMzM0LjY1MyAzNjkuMjM1IDMzMy40NjQgMzY5LjIwNUMzMzIuMjc1IDM2OS4xNzUgMzMxLjE0NyAzNjguNjc0IDMzMC4zMjcgMzY3LjgxM0MzMjkuNTA4IDM2Ni45NTEgMzI5LjA2NCAzNjUuNzk5IDMyOS4wOTQgMzY0LjYxTDMyOC42NDMgMzM3Ljg1N0wzMjkuMTM1IDM0MC4yOTNMMzA5Ljc5MiAzMDIuNjkyQzMwOS4zMTkgMzAxLjc3NCAzMDkuMDMxIDMwMC43NzIgMzA4Ljk0NSAyOTkuNzQzQzMwOC44NTkgMjk4LjcxNCAzMDguOTc3IDI5Ny42NzggMzA5LjI5MiAyOTYuNjk0QzMwOS42MDYgMjk1LjcxIDMxMC4xMTEgMjk0Ljc5OCAzMTAuNzc4IDI5NC4wMUMzMTEuNDQ2IDI5My4yMjIgMzEyLjI2MSAyOTIuNTcyIDMxMy4xNzkgMjkyLjA5OUMzMTQuMDk3IDI5MS42MjYgMzE1LjA5OSAyOTEuMzM5IDMxNi4xMjggMjkxLjI1M0MzMTcuMTU4IDI5MS4xNjcgMzE4LjE5NCAyOTEuMjg1IDMxOS4xNzcgMjkxLjU5OUMzMjAuMTYxIDI5MS45MTQgMzIxLjA3MyAyOTIuNDE5IDMyMS44NjEgMjkzLjA4NkMzMjIuNjUgMjkzLjc1MyAzMjMuMjk5IDI5NC41NjkgMzIzLjc3MiAyOTUuNDg3QzMyMy44OTUgMjk1LjgxNCAzMjQuMDE3IDI5Ni4wOCAzMjQuMTIgMjk2LjMyNloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTMxOC41NzMgMzYzLjNWNDA5Ljg4N0MzMTguNTY1IDQxMC42MjUgMzE4LjQ0MSA0MTEuMzU3IDMxOC4yMDQgNDEyLjA1NkMzMTYuOTgzIDQxNS45MTYgMzE1LjQ5MiA0MTkuNjg0IDMxMy43NDIgNDIzLjMzNUMzMTEuNDkxIDQyNy42NzQgMzAxLjQ2MSA0NDEuNzU3IDMwMS40NjEgNDQxLjc1N0wyOTguNjE2IDQ0OS40NTNDMjk3LjM4OCA0NTIuOTczIDI5Ni45MTcgNDYwLjA3NiAyOTMuNDE3IDQ1OC44NDhDMjg5LjkxNyA0NTcuNjIgMjg4LjI1OSA0NTguMDcgMjg5LjA3NyA0NTQuNzU0TDMwMC42MDEgNDA4Ljg2M0wyOTYuMjYyIDM2NC45NThDMjk1LjkzIDM2Mi4xMjIgMjk2LjY2IDM1OS4yNjQgMjk4LjMxMiAzNTYuOTM1QzI5OS45NjQgMzU0LjYwNiAzMDIuNDIgMzUyLjk3MyAzMDUuMjA3IDM1Mi4zNDlDMzA2Ljc0MyAzNTIuMDQ1IDMwOC4zMjcgMzUyLjA2NSAzMDkuODU2IDM1Mi40MDhDMzExLjM4NCAzNTIuNzUyIDMxMi44MjQgMzUzLjQxMSAzMTQuMDgyIDM1NC4zNDRDMzE1LjM0MSAzNTUuMjc3IDMxNi4zOTEgMzU2LjQ2MyAzMTcuMTY0IDM1Ny44MjVDMzE3LjkzNyAzNTkuMTg4IDMxOC40MTcgMzYwLjY5NyAzMTguNTczIDM2Mi4yNTZDMzE4LjU5MSAzNjIuNjA0IDMxOC41OTEgMzYyLjk1MiAzMTguNTczIDM2My4zVjM2My4zWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzM4LjczNCAzNTYuNjY4TDM0MC43ODEgNDA5LjZWNDEwLjM3OEMzNDAuNzgxIDQxMC41MDEgMzQwLjc4MSA0MTAuNjI0IDM0MC43ODEgNDEwLjc0NkwzNDAuMTI2IDQxNS44MjNDMzM4Ljg1NyA0MjQuOTI5IDMzNi42NzYgNDMzLjg4NSAzMzMuNjE3IDQ0Mi41NTVDMzMzLjI5IDQ0My42MTkgMzMxLjU3IDQ0Ny4wMTcgMzMxLjI2MyA0NDguMDgxVjQ1My4xNThDMzMwLjg3NCA0NTYuODQyIDMzMi4yNjYgNDYzLjM5MiAzMjguNTYxIDQ2My4wMDNDMzI2Ljg5NyA0NjIuODI2IDMyNS4zNTggNDYyLjAzNiAzMjQuMjQyIDQ2MC43ODhDMzIzLjEyNiA0NTkuNTQgMzIyLjUxNCA0NTcuOTIyIDMyMi41MjMgNDU2LjI0OEwzMjIuOTEyIDQxMC44OUwzMTYuOTc2IDM1OS43MThDMzE2LjYwMyAzNTYuODk0IDMxNy4yODcgMzU0LjAzMSAzMTguODk2IDM1MS42ODFDMzIwLjUwNiAzNDkuMzMxIDMyMi45MjggMzQ3LjY1OSAzMjUuNjk2IDM0Ni45ODZDMzMyLjI2NiAzNDUuNTc0IDMzNy44NTQgMzQ5LjAzMyAzMzguNjEyIDM1NS41ODNDMzM4LjczNCAzNTYuMDEzIDMzOC43MzQgMzU2LjM0IDMzOC43MzQgMzU2LjY2OFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTMyNS40OTEgMzAwLjU0M0MzMjguMTcyIDMyMC4zMTUgMzU1LjYgMzY4LjgwNiAzMjIuODMgMzc3LjIxOUMyODEuMzE5IDM4NS4yNjMgMjk3LjU1MSAzMjUuNzYgMjk2LjQ4NyAzMDMuNzM2QzI5Ni43NzMgMjg3LjI1OCAzMjEuNzI1IDI4NC43NjEgMzI1LjQ5MSAzMDAuNTQzWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzE1LjYyNSAyODQuNjE4TDMxNC43NDUgMjkwLjM0OUMzMTQuNDk5IDI5My40NiAzMTUuNDYxIDI5Ni40OSAzMTIuMzUgMjk2LjIwM0MzMDkuMjM5IDI5NS45MTcgMzA0LjM4OCAyOTIuNzY1IDMwNC42MTMgMjg5LjY1M0MzMDQuNjEzIDI4OS4zMjYgMzA0LjMyNiAyODguMzY0IDMwNC40MDggMjg4LjAzNkwzMDYuNzYyIDI4My4xMjRDMzA3LjA3MSAyODIuMDU3IDMwNy43NiAyODEuMTQxIDMwOC43IDI4MC41NUMzMDkuNjQgMjc5Ljk1OSAzMTAuNzY1IDI3OS43MzUgMzExLjg2IDI3OS45MTlDMzEyLjk1NSAyODAuMTA0IDMxMy45NDMgMjgwLjY4NSAzMTQuNjM4IDI4MS41NTFDMzE1LjMzMiAyODIuNDE4IDMxNS42ODQgMjgzLjUwOSAzMTUuNjI1IDI4NC42MThWMjg0LjYxOFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTMyMi4zNTkgMjY3LjA3NkMzMjUuNzE2IDI3Mi44ODkgMzI2LjM1MSAyODMuNjU2IDMyMC41MzggMjg3LjAxM0MzMTQuNzI0IDI5MC4zNyAzMDQuNjk1IDI4NC45NjYgMzAxLjMzOCAyNzkuMjE0QzMwMC41MTcgMjc3LjgzMyAyOTkuOTc5IDI3Ni4zMDIgMjk5Ljc1NCAyNzQuNzEyQzI5OS41MyAyNzMuMTIxIDI5OS42MjMgMjcxLjUwMSAzMDAuMDI5IDI2OS45NDZDMzAwLjQzNSAyNjguMzkyIDMwMS4xNDYgMjY2LjkzMyAzMDIuMTIgMjY1LjY1NkMzMDMuMDk0IDI2NC4zNzggMzA0LjMxMiAyNjMuMzA2IDMwNS43MDQgMjYyLjUwM0MzMDcuMDk1IDI2MS42OTkgMzA4LjYzMiAyNjEuMTggMzEwLjIyNiAyNjAuOTc1QzMxMS44MTkgMjYwLjc3MSAzMTMuNDM4IDI2MC44ODQgMzE0Ljk4NyAyNjEuMzFDMzE2LjUzNiAyNjEuNzM1IDMxNy45ODYgMjYyLjQ2NCAzMTkuMjUxIDI2My40NTRDMzIwLjUxNyAyNjQuNDQ0IDMyMS41NzMgMjY1LjY3NSAzMjIuMzU5IDI2Ny4wNzZaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zMTMuMDY3IDM1Ni42NjhIMjgzLjIwM1YzNzkuOTQxSDMxMy4wNjdWMzU2LjY2OFoiIGZpbGw9IiMzQjMzQjAiLz4KPHBhdGggZD0iTTI5NS4xOTcgMzc5Ljc1N0MyOTUuMDEzIDM3OS4xMDIgMjk0Ljg3IDM3OC40MjYgMjk0LjcyNiAzNzcuNzFDMjk0Ljk5MiAzNzguMjQyIDI5NS4yNzkgMzc4Ljc5NSAyOTUuNjA3IDM3OS4zNDdDMjk1LjkzNCAzNzkuOSAyOTYuNDY2IDM4MC40OTQgMjk2Ljg3NiAzODEuMDY3TDI5OC4xMjQgMzgyLjc2NkMyOTguMjQ0IDM4Mi45NTYgMjk4LjQzNCAzODMuMDkgMjk4LjY1MiAzODMuMTRDMjk4Ljg3MSAzODMuMTkgMjk5LjEwMSAzODMuMTUxIDI5OS4yOTEgMzgzLjAzMkMyOTkuNDgxIDM4Mi45MTIgMjk5LjYxNiAzODIuNzIyIDI5OS42NjYgMzgyLjUwM0MyOTkuNzE2IDM4Mi4yODUgMjk5LjY3NiAzODIuMDU1IDI5OS41NTcgMzgxLjg2NVYzODEuODY1TDI5OC41NzUgMzgwLjA2NEMyOTguMzA4IDM3OS41NzMgMjk4LjAyMiAzNzkuMDYxIDI5Ny43NzYgMzc4LjU3TDI5OC4xMjQgMzc5LjEyMkwzMDAuNjQyIDM4Mi41NjFDMzAwLjc2NSAzODIuNzI5IDMwMC45NDUgMzgyLjg0NiAzMDEuMTQ4IDM4Mi44OTFDMzAxLjM1MiAzODIuOTM3IDMwMS41NjQgMzgyLjkwNiAzMDEuNzQ3IDM4Mi44MDdDMzAxLjg0NCAzODIuNzUzIDMwMS45MyAzODIuNjgxIDMwMS45OTkgMzgyLjU5NEMzMDIuMDY4IDM4Mi41MDggMzAyLjExOSAzODIuNDA4IDMwMi4xNSAzODIuMzAyQzMwMi4xOCAzODIuMTk1IDMwMi4xODkgMzgyLjA4NCAzMDIuMTc2IDM4MS45NzRDMzAyLjE2NCAzODEuODYzIDMwMi4xMjkgMzgxLjc1NyAzMDIuMDc1IDM4MS42NkwzMDAuMDI4IDM3Ny44NTNDMzAwLjAyOCAzNzcuNzUxIDI5OS45MjUgMzc3LjYwOCAyOTkuODY0IDM3Ny41MDVDMjk5LjgwMyAzNzcuNDAzIDI5OS44NjQgMzc3LjUwNSAyOTkuODY0IDM3Ny41MDVMMzAyLjQ4NCAzODEuNTk5QzMwMi41OTEgMzgxLjc3OSAzMDIuNzYyIDM4MS45MTMgMzAyLjk2MyAzODEuOTczQzMwMy4xNjQgMzgyLjAzNCAzMDMuMzggMzgyLjAxNyAzMDMuNTY5IDM4MS45MjZDMzAzLjc3IDM4MS44MjkgMzAzLjkyNiAzODEuNjU3IDMwNC4wMDIgMzgxLjQ0N0MzMDQuMDc4IDM4MS4yMzYgMzA0LjA3IDM4MS4wMDUgMzAzLjk3OCAzODAuODAxTDMwMC45MDggMzc0LjA0NkMzMDAuOTA4IDM3NC4wNDYgMzAwLjkwOCAzNzQuMDQ2IDMwMC45MDggMzczLjk0NEwzMDAuNTE5IDM3Mi4xNjNMMzAxLjcwNiAzNzMuMDYzTDMwMi45NzUgMzc1LjMzNUMzMDMuMDcgMzc1LjQ5MiAzMDMuMjEzIDM3NS42MTQgMzAzLjM4MiAzNzUuNjg0QzMwMy41NTIgMzc1Ljc1NCAzMDMuNzM5IDM3NS43NjggMzAzLjkxNyAzNzUuNzI0QzMwNC4xMjcgMzc1LjY2MiAzMDQuMzA1IDM3NS41MjEgMzA0LjQxMiAzNzUuMzI5QzMwNC41MTkgMzc1LjEzOCAzMDQuNTQ3IDM3NC45MTMgMzA0LjQ5IDM3NC43MDFMMzAzLjY5MiAzNzEuODM1QzMwMy42NjUgMzcxLjc0MyAzMDMuNjE1IDM3MS42NTkgMzAzLjU0OCAzNzEuNTlMMzAzLjQwNSAzNzEuNDI2QzMwMy40MDUgMzcxLjQyNiAyOTkuNTE2IDM2Ny4zMzIgMjk5LjQzNCAzNjcuMzMyTDI5OC42MTUgMzYzLjY4OUMyOTguNDE4IDM2Mi43OTIgMjk3Ljg4MiAzNjIuMDA2IDI5Ny4xMTkgMzYxLjQ5NUMyOTYuMzU3IDM2MC45ODQgMjk1LjQyNiAzNjAuNzg3IDI5NC41MjIgMzYwLjk0NkMyOTIuNTc3IDM2MS4yNzMgMjkxLjQzMSAzNjEuMzE0IDI5MS43NTggMzYzLjIzOEwyOTIuMzkzIDM2OS45MTFDMjkyLjI1IDM3MC41NjYgMjkyLjEwNiAzNzEuMjAxIDI5Mi4wMjUgMzcxLjk1OEMyOTEuODcgMzcyLjk3MyAyOTEuOTEyIDM3NC4wMDkgMjkyLjE0NyAzNzUuMDA4QzI5Mi41NjcgMzc2LjgyMSAyOTMuMTIxIDM3OC42IDI5My44MDUgMzgwLjMzQzI5My44ODEgMzgwLjQ4NCAyOTQuMDA5IDM4MC42MDcgMjk0LjE2NyAzODAuNjc1QzI5NC4zMjUgMzgwLjc0MiAyOTQuNTAzIDM4MC43NTEgMjk0LjY2NiAzODAuNjk5QzI5NC44MyAzODAuNjQ3IDI5NC45NyAzODAuNTM3IDI5NS4wNiAzODAuMzlDMjk1LjE1IDM4MC4yNDQgMjk1LjE4NCAzODAuMDcgMjk1LjE1NiAzNzkuOUwyOTUuMTk3IDM3OS43NTdaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zMDYuNjE5IDMxMS44NDFMMjk2LjQ4NyAzMzUuNjg4TDI5OS40MTQgMzY1LjU5MkMyOTkuNDgyIDM2Ni43MjggMjk5LjExOCAzNjcuODQ4IDI5OC4zOTUgMzY4LjcyNkMyOTcuNjcxIDM2OS42MDUgMjk2LjY0MiAzNzAuMTc3IDI5NS41MTQgMzcwLjMyN0MyOTQuMzg2IDM3MC40NzcgMjkzLjI0MyAzNzAuMTk1IDI5Mi4zMTUgMzY5LjUzN0MyOTEuMzg2IDM2OC44NzkgMjkwLjc0MiAzNjcuODk0IDI5MC41MSAzNjYuNzhMMjg1LjIwOSAzMzUuNTY1QzI4NS4wOTUgMzM0Ljg4MiAyODUuMTM3IDMzNC4xODIgMjg1LjMzMiAzMzMuNTE4TDI4NS40OTUgMzMyLjk0NUwyOTUuNzMgMjk3LjY3NyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTMwNi42MTkgMzExLjg0MUwyOTYuNDg3IDMzNS42ODhMMjk5LjQxNCAzNjUuNTkyQzI5OS40ODIgMzY2LjcyOCAyOTkuMTE4IDM2Ny44NDggMjk4LjM5NSAzNjguNzI2QzI5Ny42NzEgMzY5LjYwNSAyOTYuNjQyIDM3MC4xNzcgMjk1LjUxNCAzNzAuMzI3QzI5NC4zODYgMzcwLjQ3NyAyOTMuMjQzIDM3MC4xOTUgMjkyLjMxNSAzNjkuNTM3QzI5MS4zODYgMzY4Ljg3OSAyOTAuNzQyIDM2Ny44OTQgMjkwLjUxIDM2Ni43OEwyODUuMjA5IDMzNS41NjVDMjg1LjA5NSAzMzQuODgyIDI4NS4xMzcgMzM0LjE4MiAyODUuMzMyIDMzMy41MThMMjg1LjQ5NSAzMzIuOTQ1TDI5NS43MyAyOTcuNjc3IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMyMS41MiAyNjYuNDgzQzMxNS45MzIgMjY2LjE5NiAzMTQuMTcyIDI3Mi4wOTEgMzExLjI4NiAyNzMuNTQ0QzMwOC40IDI3NC45OTggMzA2LjcyMSAyNzYuMzI4IDMwNy4xOTIgMjc5LjY4NUMzMDcuNDU1IDI4Mi44MjQgMzA3LjI5NiAyODUuOTgzIDMwNi43MjEgMjg5LjA4QzMwNi4yMyAyOTMuODcgMjk4Ljg0MSAzMDIuNDI2IDI5NC40NCAzMDYuODI3QzI5MC4wMzkgMzExLjIyNyAyNzkuODI1IDMxNC4xMTMgMjc5LjgyNSAzMTQuMTEzTDI5OS44NDQgMjY0LjgyNUMyOTkuODQ0IDI2NC44MjUgMzEwLjA3OCAyNTkuNjY3IDMxNC41NjEgMjYwLjEzN0MzMTkuMDQzIDI2MC42MDggMzIxLjUyIDI2Ni40ODMgMzIxLjUyIDI2Ni40ODNaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0zMTEuMDM2IDI3OC42ODlDMzEyLjQwNyAyNzguMDk5IDMxMi44NTEgMjc2LjA3MiAzMTIuMDI5IDI3NC4xNjFDMzExLjIwNiAyNzIuMjUxIDMwOS40MjkgMjcxLjE4IDMwOC4wNTggMjcxLjc3QzMwNi42ODcgMjcyLjM2IDMwNi4yNDMgMjc0LjM4NyAzMDcuMDY1IDI3Ni4yOThDMzA3Ljg4OCAyNzguMjA4IDMwOS42NjYgMjc5LjI3OSAzMTEuMDM2IDI3OC42ODlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzIxLjE5MiA0NTYuNDUzQzMxOS43OCA0NTguMjU0IDMyMS41NjEgNDU3LjMxMyAzMjIuMTk1IDQ2MC41NDdDMzIxLjkxNSA0NjEuMDgxIDMyMS44MjEgNDYxLjY5MyAzMjEuOTI5IDQ2Mi4yODdDMzIxLjYzMSA0NjIuNTE1IDMyMS40MDkgNDYyLjgyOSAzMjEuMjk1IDQ2My4xODdDMzIxLjI5NSA0NjMuNjM4IDMyMS4yOTUgNDY1LjM3OCAzMjEuNzQ1IDQ2NS43MjVDMzIyLjE5NSA0NjYuMDczIDM0MS4yNTIgNDY2LjE3NiAzNDIuNTIxIDQ2Ni4xMzVDMzQ0LjY1OCA0NjYuMDI3IDM0Ni43NzIgNDY1LjYzNSAzNDguODA1IDQ2NC45NjhDMzUwLjIzOCA0NjQuMzk1IDM1MS4wMzYgNDYzLjU1NiAzNTAuOTU0IDQ2Mi42NzZDMzUwLjg5OSA0NjIuMjg2IDM1MC43MzMgNDYxLjkyIDM1MC40NzUgNDYxLjYyMkMzNTAuMjE3IDQ2MS4zMjUgMzQ5Ljg3OSA0NjEuMTA4IDM0OS41MDEgNDYwLjk5N0MzNDguNzIzIDQ2MC42NyAzNDMuOTMzIDQ1OS41MjMgMzQzLjM2IDQ1OS4xMzVDMzQyLjc4NyA0NTguNzQ2IDMzNy41ODggNDU1LjUxMiAzMzYuOTk0IDQ1NS4wNDFDMzM1LjY3NSA0NTQuMjc4IDMzNC40MzQgNDUzLjM4NyAzMzMuMjkgNDUyLjM4QzMzMy4wODcgNDUyLjA5NyAzMzIuNzkyIDQ1MS44OTQgMzMyLjQ1NSA0NTEuODA4QzMzMi4xMTcgNDUxLjcyMiAzMzEuNzYxIDQ1MS43NTcgMzMxLjQ0NyA0NTEuOTA5QzMzMS40NDcgNDUxLjkwOSAzMzAuNjQ5IDQ1Mi4zMzkgMzMxLjQ0NyA0NTMuMzAxQzMzMC43MjcgNDUzLjY2NyAzMzAuMDQyIDQ1NC4wOTkgMzI5LjQgNDU0LjU5MUMzMjcuNzcyIDQ1NS43NTcgMzI1LjgxNSA0NTYuMzczIDMyMy44MTIgNDU2LjM1MUMzMjIuMTM0IDQ1NS44MzkgMzIxLjg2OCA0NTUuNTczIDMyMS4xOTIgNDU2LjQ1M1oiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjU1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI4Ny44NDkgNDQ5LjI2OUMyODUuOTI1IDQ1MC41MzggMjg3Ljg0OSA0NTAuMjEgMjg3LjUyMSA0NTMuMzYyQzI4Ny4wOTEgNDUzLjc4NyAyODYuODExIDQ1NC4zNCAyODYuNzIzIDQ1NC45MzhDMjg2LjM3NCA0NTUuMDYgMjg2LjA2OSA0NTUuMjgxIDI4NS44NDMgNDU1LjU3M0MyODUuNjM4IDQ1NS45ODIgMjg1LjEwNiA0NTcuNjIgMjg1LjQ3NSA0NTguMTMyQzI4NS44NDMgNDU4LjY0MyAzMDMuODk2IDQ2NC43NDMgMzA1LjA0MyA0NjUuMTExQzMwNy4xMDUgNDY1LjY3MiAzMDkuMjMxIDQ2NS45NjEgMzExLjM2OCA0NjUuOTcxQzMxMi45MDMgNDY1Ljk3MSAzMTMuOTI2IDQ2NS4zMzcgMzE0LjEzMSA0NjQuNDk3QzMxNC4yIDQ2NC4xMSAzMTQuMTU1IDQ2My43MSAzMTQuMDAzIDQ2My4zNDdDMzEzLjg1IDQ2Mi45ODQgMzEzLjU5NiA0NjIuNjczIDMxMy4yNzEgNDYyLjQ1QzMxMi42MzcgNDYxLjg5OCAzMDguNDgxIDQ1OS4yNzggMzA3Ljk3IDQ1OC42ODRDMzA3LjQ1OCA0NTguMDkxIDMwMy42NTEgNDUzLjQyNCAzMDMuMjQxIDQ1Mi44MUMzMDIuMjMgNDUxLjY2NCAzMDEuMzMyIDQ1MC40MjQgMzAwLjU2IDQ0OS4xMDVDMzAwLjQ2NCA0NDguNzY5IDMwMC4yNDkgNDQ4LjQ4IDI5OS45NTUgNDQ4LjI5MUMyOTkuNjYxIDQ0OC4xMDMgMjk5LjMwOSA0NDguMDI4IDI5OC45NjQgNDQ4LjA4MUMyOTguOTY0IDQ0OC4wODEgMjk4LjA4MyA0NDguMjI1IDI5OC41NTQgNDQ5LjM5MUMyOTcuNzQzIDQ0OS41MTMgMjk2Ljk0MiA0NDkuNjk4IDI5Ni4xNTkgNDQ5Ljk0NEMyOTQuMjU4IDQ1MC41NzIgMjkyLjIwNiA0NTAuNTcyIDI5MC4zMDUgNDQ5Ljk0NEMyODguOTM0IDQ0OS4wNDMgMjg4Ljc3IDQ0OC42NzUgMjg3Ljg0OSA0NDkuMjY5WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzA0LjQwNiA0MzkuMTE5TDI5Mi4xMDkgNDM1LjkwMkwyOTAuNjEyIDQ0MS42MjVMMzAyLjkwOSA0NDQuODQyTDMwNC40MDYgNDM5LjExOVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTMzNC43ODQgNDQyLjE2NkgzMjEuNTYxVjQ0OC4wODFIMzM0Ljc4NFY0NDIuMTY2WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzExLjM4OCAyOTUuNzczTDMxNS4yMTYgMjk4LjU1N0wzMTkuNzE5IDI5Mi4yNTNMMzE0Ljc0NSAyOTAuMzQ5TDMxMS4zODggMjk1Ljc3M1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMwNi4wNzcgMjkwLjgxTDMwMy4zMjQgMjk1LjZMMzA5Ljg0MiAyOTkuMzQ2TDMxMi41OTUgMjk0LjU1NUwzMDYuMDc3IDI5MC44MVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41MDE3MjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzkyLjgxMyAzNTkuMzQ5TDM4Ni44MTUgNDEwLjg5VjQwOS43NDNMMzg1Ljk5NyA0NTYuNDUzQzM4NS45OTcgNDYwLjE3OCAzODQuMjM2IDQ2My4wMjQgMzgwLjUxMSA0NjMuMDY1QzM3Ni43ODYgNDYzLjEwNSAzNzQuNDczIDQ1Ni40OTQgMzc0LjEwNCA0NTMuMDk2TDM2OC45MDUgNDEwLjc2N0MzNjguOTA1IDQxMC42NDQgMzY4LjkwNSA0MTAuNTQyIDM2OC45MDUgNDEwLjQxOVY0MDkuNjIxTDM3MC4zOTkgMzU3Ljc1M0MzNzAuNDQyIDM1Ni4yNzQgMzcwLjc3NiAzNTQuODE5IDM3MS4zODIgMzUzLjQ3QzM3MS45ODcgMzUyLjEyIDM3Mi44NTMgMzUwLjkwMyAzNzMuOTI4IDM0OS44ODhDMzc1LjAwNCAzNDguODczIDM3Ni4yNjkgMzQ4LjA4IDM3Ny42NTIgMzQ3LjU1NEMzNzkuMDM0IDM0Ny4wMjggMzgwLjUwNiAzNDYuNzggMzgxLjk4NSAzNDYuODIzQzM4My40NjMgMzQ2Ljg2NiAzODQuOTE5IDM0Ny4xOTkgMzg2LjI2OCAzNDcuODA1QzM4Ny42MTcgMzQ4LjQxIDM4OC44MzQgMzQ5LjI3NiAzODkuODQ5IDM1MC4zNTFDMzkwLjg2NCAzNTEuNDI3IDM5MS42NTcgMzUyLjY5MiAzOTIuMTgzIDM1NC4wNzVDMzkyLjcwOSAzNTUuNDU3IDM5Mi45NTggMzU2LjkyOSAzOTIuOTE1IDM1OC40MDhMMzkyLjgxMyAzNTkuMzQ5WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNDEyLjY2NyAzNTYuOTE0QzQxMS45MzEgMzY2LjM1IDQwNy45MzkgNDEwLjgyOCA0MDcuNTUgNDE5LjMyM0M0MDcuMTgyIDQyNy4yODUgNDA0Ljk3MSA0NDIuNDMyIDQwNC41ODIgNDUwLjY0QzQwNC4xOTMgNDU4Ljg0OCAzOTMuNzc1IDQ1OS40NjIgMzkzLjUwOSA0NTEuMTcyQzM5MC45ODggNDE5LjQ5OSAzOTAuMjUgMzg3LjcwOCAzOTEuMjk4IDM1NS45NTJDMzkxLjM1OSAzNDEuNDggNDE0LjczNSAzNDEuNjAzIDQxMi42NjcgMzU2LjkxNFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM4My45MDkgMjk5LjkwOEwzNzAuOTExIDMzNC43MDVMMzcwLjQ4MSAzMzUuODUxQzM3MC4xMTMgMzM2Ljg2MSAzNjkuNDQzIDMzNy43MzMgMzY4LjU2MyAzMzguMzQ5QzM2Ny42ODIgMzM4Ljk2NSAzNjYuNjMzIDMzOS4yOTYgMzY1LjU1OSAzMzkuMjk2QzM2NC40ODQgMzM5LjI5NiAzNjMuNDM1IDMzOC45NjUgMzYyLjU1NCAzMzguMzQ5QzM2MS42NzQgMzM3LjczMyAzNjEuMDA0IDMzNi44NjEgMzYwLjYzNiAzMzUuODUxTDM1OC4zMjMgMzI5LjMwMUMzNTcuOTIzIDMyOC4xNjcgMzU3Ljk4OSAzMjYuOTIgMzU4LjUwNyAzMjUuODM0QzM1OS4wMjUgMzI0Ljc0OCAzNTkuOTUyIDMyMy45MTIgMzYxLjA4NiAzMjMuNTA5QzM2MS40MzggMzIzLjM5IDM2MS44MDIgMzIzLjMwOCAzNjIuMTcxIDMyMy4yNjNDMzYyLjk0MyAzMjMuMTc3IDM2My43MjUgMzIzLjI5IDM2NC40NDEgMzIzLjU5MUMzNjUuMTU3IDMyMy44OTIgMzY1Ljc4NSAzMjQuMzcxIDM2Ni4yNjUgMzI0Ljk4MkwzNzAuNTQzIDMzMC40NDdMMzYyLjM1NSAzMjIuNzkyQzM2Mi4zNTUgMzIyLjc5MiAzNjcuMzkgMjk4LjQ5NiAzNjkuNDM3IDI5NC41MDRDMzcxLjQ4NCAyOTAuNTEzIDM3Ny40NjEgMjg3LjIxNyAzODEuNzE5IDI4OC4yNDFDMzg1Ljk3NiAyODkuMjY0IDM4NS4zMjEgMjk0Ljc5MSAzODQuMjk4IDI5OS4wMDdDMzg0LjExMyAyOTkuMjk0IDM4NC4wMTEgMjk5LjY0MiAzODMuOTA5IDI5OS45MDhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zOTkuNTQ3IDI5Ni4yMDNMNDEyLjkzNCAzNTIuNDkyQzQxMy43MjIgMzU1LjQyIDQxMy45MTQgMzU4LjQ3NiA0MTMuNDk5IDM2MS40NzlDNDEzLjA4NSAzNjQuNDgyIDQxMi4wNzIgMzY3LjM3MiA0MTAuNTIgMzY5Ljk3NkM0MDguOTY5IDM3Mi41ODEgNDA2LjkxMSAzNzQuODQ4IDQwNC40NjcgMzc2LjY0M0M0MDIuMDI0IDM3OC40MzcgMzk5LjI0NSAzNzkuNzI0IDM5Ni4yOTYgMzgwLjQyNUMzOTMuMzQ2IDM4MS4xMjYgMzkwLjI4NiAzODEuMjI5IDM4Ny4yOTYgMzgwLjcyNkMzODQuMzA2IDM4MC4yMjMgMzgxLjQ0OCAzNzkuMTI2IDM3OC44OSAzNzcuNDk4QzM3Ni4zMzIgMzc1Ljg3MSAzNzQuMTI3IDM3My43NDcgMzcyLjQwNSAzNzEuMjUyQzM3MC42ODMgMzY4Ljc1NyAzNjkuNDc5IDM2NS45NDEgMzY4Ljg2NCAzNjIuOTcyQzM2OC40MDMgMzYwLjk2IDM2OC4yMDMgMzU4Ljg5NiAzNjguMjcxIDM1Ni44MzJMMzcwLjUwMiAyOTkuMDA3QzM3MC42MjMgMjk1LjQzOSAzNzIuMDM4IDI5Mi4wMzYgMzc0LjQ4MiAyODkuNDM0QzM3Ni45MjUgMjg2LjgzMSAzODAuMjMyIDI4NS4yMDUgMzgzLjc4NiAyODQuODU5QzM4Ny4zNCAyODQuNTE0IDM5MC44OTggMjg1LjQ3MiAzOTMuNzk3IDI4Ny41NTVDMzk2LjY5NyAyODkuNjM4IDM5OC43NDEgMjkyLjcwNSAzOTkuNTQ3IDI5Ni4xODNWMjk2LjIwM1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM4MS45MDMgMjczLjA5NEwzODcuMTQzIDI4NS4xNzFDMzg4LjM5MiAyODguMDE2IDM4NS4zODMgMjkwLjk2MyAzODEuNDczIDI5MS4zMTFDMzc4LjM4MiAyOTEuNjM5IDM3Ny42NDYgMjkwLjg2MSAzNzYuMzk3IDI4Ny45OTVDMzc2LjI3NCAyODcuNzA5IDM3My40MDkgMjc1Ljg5OCAzNzMuNDA5IDI3NS44OThDMzczLjE1NCAyNzQuODA4IDM3My4zMTUgMjczLjY2MiAzNzMuODU5IDI3Mi42ODRDMzc0LjQwNCAyNzEuNzA1IDM3NS4yOTMgMjcwLjk2NSAzNzYuMzU0IDI3MC42MDdDMzc3LjQxNSAyNzAuMjQ5IDM3OC41NzEgMjcwLjI5OSAzNzkuNTk3IDI3MC43NDhDMzgwLjYyMyAyNzEuMTk2IDM4MS40NDUgMjcyLjAxMSAzODEuOTAzIDI3My4wMzNWMjczLjA5NFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM4Ny4yMDQgMjczLjM2QzM4NS40NjQgMjc5LjgyOCAzNzguMyAyODcuODkzIDM3MS44MzIgMjg2LjE3NEMzNjUuMzY0IDI4NC40NTQgMzYyLjAyOCAyNzMuNTY1IDM2My43NjggMjY3LjA3NkMzNjQuNjc4IDI2NC4wNTYgMzY2LjcyOCAyNjEuNTA4IDM2OS40ODQgMjU5Ljk3M0MzNzIuMjQgMjU4LjQzOCAzNzUuNDg2IDI1OC4wMzcgMzc4LjUzMyAyNTguODU0QzM4MS41OCAyNTkuNjcxIDM4NC4xODkgMjYxLjY0MiAzODUuODA4IDI2NC4zNUMzODcuNDI3IDI2Ny4wNTggMzg3LjkyOCAyNzAuMjg5IDM4Ny4yMDQgMjczLjM2WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzk4LjI1NyAyOTIuODA1TDQxNy41OCAzMzEuMzY5TDQxNy44NDYgMzMxLjkwMUM0MTguMzIxIDMzMi44ODggNDE4LjQ5IDMzMy45OTYgNDE4LjMzIDMzNS4wOEM0MTguMTcgMzM2LjE2NCA0MTcuNjg5IDMzNy4xNzYgNDE2Ljk0OSAzMzcuOTg0QzQxNi4yMDkgMzM4Ljc5MiA0MTUuMjQ0IDMzOS4zNiA0MTQuMTc4IDMzOS42MTVDNDEzLjExMiAzMzkuODcgNDExLjk5NCAzMzkuNzk5IDQxMC45NjggMzM5LjQxM0wzOTEuNzI4IDMzMi4wODVDMzkwLjY2OCAzMzEuNjYzIDM4OS44MDkgMzMwLjg1NCAzODkuMzIyIDMyOS44MjNDMzg4LjgzNSAzMjguNzkxIDM4OC43NTkgMzI3LjYxMyAzODkuMTA3IDMyNi41MjdDMzg5LjQ1NSAzMjUuNDQxIDM5MC4yMDIgMzI0LjUyNyAzOTEuMTk4IDMyMy45NzFDMzkyLjE5MyAzMjMuNDE1IDM5My4zNjMgMzIzLjI1NyAzOTQuNDcxIDMyMy41MjlMNDAwLjYxMSAzMjUuMTQ2TDM4Ny41NzMgMzAyLjAzNyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTM5OC4yNTcgMjkyLjgwNUw0MTcuNTggMzMxLjM2OUw0MTcuODQ2IDMzMS45MDFDNDE4LjMyMSAzMzIuODg4IDQxOC40OSAzMzMuOTk2IDQxOC4zMyAzMzUuMDhDNDE4LjE3IDMzNi4xNjQgNDE3LjY4OSAzMzcuMTc2IDQxNi45NDkgMzM3Ljk4NEM0MTYuMjA5IDMzOC43OTIgNDE1LjI0NCAzMzkuMzYgNDE0LjE3OCAzMzkuNjE1QzQxMy4xMTIgMzM5Ljg3IDQxMS45OTQgMzM5Ljc5OSA0MTAuOTY4IDMzOS40MTNMMzkxLjcyOCAzMzIuMDg1QzM5MC42NjggMzMxLjY2MyAzODkuODA5IDMzMC44NTQgMzg5LjMyMiAzMjkuODIzQzM4OC44MzUgMzI4Ljc5MSAzODguNzU5IDMyNy42MTMgMzg5LjEwNyAzMjYuNTI3QzM4OS40NTUgMzI1LjQ0MSAzOTAuMjAyIDMyNC41MjcgMzkxLjE5OCAzMjMuOTcxQzM5Mi4xOTMgMzIzLjQxNSAzOTMuMzYzIDMyMy4yNTcgMzk0LjQ3MSAzMjMuNTI5TDQwMC42MTEgMzI1LjE0NkwzODcuNTczIDMwMi4wMzciIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzgyLjEwOCAzMjUuMjY5TDM2Ny43OCAzMTIuODQ0TDM4NS40NDQgMzA1LjE2OUw0MDIuMDI0IDMxNS44OTRMMzgyLjEwOCAzMjUuMjY5WiIgZmlsbD0iIzNCMzNCMCIvPgo8cGF0aCBkPSJNMzU5LjcxNSAzMjguOTUzTDM0NC4zNjMgMzE2LjU3TDM2NS44OTYgMzE1LjA5NkwzNzkuODk3IDMyNy44MDdMMzU5LjcxNSAzMjguOTUzWiIgZmlsbD0iIzNCMzNCMCIvPgo8cGF0aCBkPSJNMzY3Ljc3MiAzMTIuODYxTDM2NS41NiAzMTUuNDEzTDM3OS44ODQgMzI3LjgyNUwzODIuMDk2IDMyNS4yNzNMMzY3Ljc3MiAzMTIuODYxWiIgZmlsbD0iIzJDMjY4NyIvPgo8cGF0aCBkPSJNMzc0LjE0NSAyNzUuMTYxQzM3NC4xNDUgMjc1LjE2MSAzNzIuMjQyIDI3NC45OTggMzcyLjA5OSAyNzIuMzU3QzM3MS45NTUgMjY5LjcxNyAzNzIuMjIxIDI3MC4xNjcgMzcwLjU4NCAyNjkuNDFDMzY4Ljk0NiAyNjguNjUyIDM2OC44NjQgMjY4Ljc3NSAzNjguMTY5IDI2Ni43NDlDMzY3Ljg2MiAyNjUuODQ4IDM2NS4wMzcgMjY3Ljc1MiAzNjIuODY3IDI2Ny4wOTdDMzYwLjY5NyAyNjYuNDQyIDM2MC4xODYgMjYwLjY0OSAzNjEuNTM3IDI1OS4wMzJDMzYyLjg4OCAyNTcuNDE1IDM2Ni4wMTkgMjU3LjkyNyAzNjYuNzU2IDI1Ni44NjJDMzY3LjQ5MyAyNTUuNzk4IDM2Ny44NjIgMjU0LjgxNSAzNjguOTA1IDI1NC41MjlDMzY5Ljk0OSAyNTQuMjQyIDM3MC43NDggMjU0Ljk1OSAzNzEuOTM1IDI1NC41MjlDMzczLjEyMiAyNTQuMDk5IDM3Mi44NzYgMjUyLjQ4MiAzNzQuNzM5IDI1MS45N0MzNzYuOTcgMjUxLjQzOCAzNzYuOTcgMjUyLjg1IDM3OC4yMzkgMjUyLjk1M0MzNzkuNTA4IDI1My4wNTUgMzgwLjI4NiAyNTIuMTM0IDM4MS44ODMgMjUyLjk1M0MzODIuODI0IDI1My40MjQgMzgyLjM5NCAyNTUgMzgzLjIzNCAyNTQuNzk1QzM4My44ODEgMjU0LjYzOCAzODQuNTU5IDI1NC42NTggMzg1LjE5NiAyNTQuODUzQzM4NS44MzMgMjU1LjA0NyAzODYuNDA3IDI1NS40MDkgMzg2Ljg1NiAyNTUuOUMzODcuNTExIDI1Ni45MDMgMzg3LjY1NSAyNTguMTcyIDM4OC4yNjkgMjU4LjU2MUMzODkuMzEzIDI1OS4yMzcgMzg5LjM3NCAyNjAuODk1IDM4OS4zOTUgMjYxLjc3NUMzODkuMzk1IDI2My44MjIgMzkwLjE1MiAyNjQuMzc0IDM5MC4yNzUgMjY2LjE3NkMzOTAuNjIzIDI3MS42IDM4OC45NDQgMjc1LjkzOSAzODYuODM2IDI3Ny42NTlDMzg1Ljc5MSAyNzguNzEzIDM4NC40MjEgMjc5LjM4NCAzODIuOTQ3IDI3OS41NjJDMzgyLjEyOCAyNzkuNTYyIDM3OS40MjYgMjc2LjM5IDM3Ny45MTIgMjczLjE3NkMzNzYuMzk3IDI2OS45NjIgMzc3LjA1MiAyNzEuOTA3IDM3NS44NjUgMjcyLjMzN0MzNzQuNjc4IDI3Mi43NjcgMzc0LjE0NSAyNzUuMTYxIDM3NC4xNDUgMjc1LjE2MVoiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjU1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM3OS4zNTUgMjc1LjA0NUMzNzkuNzU5IDI3My4wMDUgMzc4Ljg5OSAyNzEuMTE2IDM3Ny40MzYgMjcwLjgyN0MzNzUuOTcyIDI3MC41MzcgMzc0LjQ1OCAyNzEuOTU2IDM3NC4wNTQgMjczLjk5N0MzNzMuNjUgMjc2LjAzNyAzNzQuNTEgMjc3LjkyNiAzNzUuOTc0IDI3OC4yMTZDMzc3LjQzOCAyNzguNTA1IDM3OC45NTEgMjc3LjA4NiAzNzkuMzU1IDI3NS4wNDVaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzc2LjU4MSAzMjUuODYyQzM3Ny4yMzYgMzI2LjEyOSAzNzcuOTExIDMyNi4zNzQgMzc4LjYyOCAzMjYuNTk5QzM3OC4xMTYgMzI2LjI1MSAzNzcuNjA0IDMyNS44ODMgMzc3LjA3MiAzMjUuNDc0QzM3Ni41NCAzMjUuMDY0IDM3NS45ODcgMzI0LjQ3MSAzNzUuNDU1IDMyMy45NzlMMzczLjg1OSAzMjIuNDg1QzM3My43MjIgMzIyLjMyNiAzNzMuNjQ2IDMyMi4xMjIgMzczLjY0NiAzMjEuOTEyQzM3My42NDYgMzIxLjcwMiAzNzMuNzIyIDMyMS40OTggMzczLjg1OSAzMjEuMzM5QzM3My45MjIgMzIxLjI0MyAzNzQuMDA0IDMyMS4xNjEgMzc0LjEwMSAzMjEuMDk5QzM3NC4xOTcgMzIxLjAzNiAzNzQuMzA1IDMyMC45OTQgMzc0LjQxOCAzMjAuOTc1QzM3NC41MzEgMzIwLjk1NiAzNzQuNjQ3IDMyMC45NiAzNzQuNzU5IDMyMC45ODdDMzc0Ljg3IDMyMS4wMTUgMzc0Ljk3NSAzMjEuMDY1IDM3NS4wNjYgMzIxLjEzNEwzNzYuNzg2IDMyMi4zNjJMMzc4LjIxOCAzMjMuMzY1QzM3OC4wNTUgMzIzLjIyMiAzNzcuODcxIDMyMy4wOTkgMzc3LjcwNyAzMjIuOTM1TDM3NC40OTMgMzE5LjkyN0MzNzQuMzU2IDMxOS43NjcgMzc0LjI4MSAzMTkuNTY0IDM3NC4yODEgMzE5LjM1M0MzNzQuMjgxIDMxOS4xNDMgMzc0LjM1NiAzMTguOTQgMzc0LjQ5MyAzMTguNzhDMzc0LjU1OCAzMTguNjg3IDM3NC42NDIgMzE4LjYwNyAzNzQuNzM4IDMxOC41NDZDMzc0LjgzNCAzMTguNDg1IDM3NC45NDIgMzE4LjQ0NCAzNzUuMDU0IDMxOC40MjVDMzc1LjE2NyAzMTguNDA2IDM3NS4yODIgMzE4LjQxIDM3NS4zOTMgMzE4LjQzNUMzNzUuNTA0IDMxOC40NjEgMzc1LjYwOCAzMTguNTA5IDM3NS43MDEgMzE4LjU3NkwzNzkuMzQ0IDMyMS4xOTZMMzc5LjY3MiAzMjEuNEwzNzUuNTc4IDMxOC4xNDZDMzc1LjQxNyAzMTguMDA3IDM3NS4zMSAzMTcuODE2IDM3NS4yNzcgMzE3LjYwNkMzNzUuMjQzIDMxNy4zOTcgMzc1LjI4NCAzMTcuMTgyIDM3NS4zOTQgMzE3QzM3NS40NTMgMzE2LjkgMzc1LjUzMSAzMTYuODEzIDM3NS42MjQgMzE2Ljc0NEMzNzUuNzE3IDMxNi42NzUgMzc1LjgyNCAzMTYuNjI1IDM3NS45MzcgMzE2LjU5OUMzNzYuMDQ5IDMxNi41NzIgMzc2LjE2NiAzMTYuNTY4IDM3Ni4yODEgMzE2LjU4OEMzNzYuMzk1IDMxNi42MDcgMzc2LjUwNCAzMTYuNjUgMzc2LjYwMSAzMTYuNzEzTDM4My4xMzEgMzIwLjgwN0gzODMuMjMzTDM4NS4wMTQgMzIxLjQ0MUwzODQuMjM2IDMyMC4wOUwzODIuMDY3IDMxOC41MTRDMzgxLjkxMyAzMTguNDA0IDM4MS44MDMgMzE4LjI0MyAzODEuNzU0IDMxOC4wNkMzODEuNzA2IDMxNy44NzcgMzgxLjcyMiAzMTcuNjgzIDM4MS44MDEgMzE3LjUxMUMzODEuODg3IDMxNy4zMDQgMzgyLjA1MSAzMTcuMTM5IDM4Mi4yNTcgMzE3LjA1MUMzODIuNDY0IDMxNi45NjMgMzgyLjY5NyAzMTYuOTU5IDM4Mi45MDYgMzE3LjA0TDM4NS43NTEgMzE4LjIyOEMzODUuODM4IDMxOC4yNjMgMzg1LjkxNiAzMTguMzE5IDM4NS45NzYgMzE4LjM5MUwzODYuMTQgMzE4LjU3NkMzODYuMTQgMzE4LjU3NiAzODkuODY1IDMyMy4wNTggMzg5Ljg4NiAzMjMuMTYxTDM5My41MjkgMzI0LjQ1QzM5NS4zNTEgMzI1LjA4NSAzOTYuNzQzIDMyNi4wMDYgMzk2Ljc0MyAzMjguMjE2QzM5Ni43NDMgMzMwLjQyNyAzOTUuMDg1IDMzMi4wNDQgMzkzLjE0IDMzMS40NzFMMzg2LjM4NiAzMjkuOTk3QzM4NS43MDcgMzMwLjA4NSAzODUuMDIzIDMzMC4xMzMgMzg0LjMzOSAzMzAuMTRDMzgzLjI3OCAzMzAuMTgxIDM4Mi4yMiAzMzAuMDA3IDM4MS4yMjcgMzI5LjYyOUMzNzkuNDE2IDMyOC45NzEgMzc3LjY1OCAzMjguMTc3IDM3NS45NjcgMzI3LjI1NEMzNzUuODExIDMyNy4xNzEgMzc1LjY5MSAzMjcuMDMzIDM3NS42MyAzMjYuODY3QzM3NS41NyAzMjYuNzAxIDM3NS41NzMgMzI2LjUxOCAzNzUuNjM5IDMyNi4zNTRDMzc1LjY2MiAzMjYuMjU1IDM3NS43MDUgMzI2LjE2MyAzNzUuNzY3IDMyNi4wODNDMzc1LjgyOCAzMjYuMDAyIDM3NS45MDcgMzI1LjkzNyAzNzUuOTk2IDMyNS44OUMzNzYuMDg2IDMyNS44NDMgMzc2LjE4NSAzMjUuODE3IDM3Ni4yODYgMzI1LjgxMkMzNzYuMzg3IDMyNS44MDcgMzc2LjQ4NyAzMjUuODI0IDM3Ni41ODEgMzI1Ljg2MlYzMjUuODYyWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzY5LjQzNyA0NjUuMjc1SDM4MC4xODRDMzgxLjkwNiA0NjUuMjcgMzgzLjU1NyA0NjQuNTgyIDM4NC43NzMgNDYzLjM2MUMzODUuOTg5IDQ2Mi4xNDEgMzg2LjY3MiA0NjAuNDg5IDM4Ni42NzIgNDU4Ljc2NkwzODYuMTYgNDUyLjAzMkgzNzQuMzI5QzM3NC4zMjkgNDUyLjAzMiAzNjAuMDAxIDQ1NS4zNjggMzYwLjAwMSA0NjAuMjE5QzM1OS44NTggNDYzLjk0NSAzNjUuNzc0IDQ2NS4yNzUgMzY5LjQzNyA0NjUuMjc1WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0zOTUuMzcyIDQ2NS41MjFDNDAxLjM0OCA0NjUuNzY2IDQwNi4yNCA0NjIuNDEgNDA2LjI0IDQ1OC43NjZDNDA2LjA5NSA0NTUuOTcgNDA1LjUzNiA0NTMuMjExIDQwNC41ODMgNDUwLjU3OUwzOTMuNTA5IDQ1MS4xMTFDMzkzLjUwOSA0NTEuMTExIDM5Mi40NjUgNDU0LjA5OSAzOTEuNzkgNDU1LjczN0MzOTAuMjk1IDQ1OS41NDQgMzg5LjUzOCA0NjUuMjc1IDM5NS4zNzIgNDY1LjUyMVoiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDcxLjI1NCA0NTJMNDc5IDQ0MS4wMjlMNDY5LjM2NCA0NDYuOTc4TDQ3NC40NjYgNDM0LjA5MUw0NjMuODk1IDQ0My40NDlMNDU5LjgyOSA0MjhMNDU3LjAwMyA0NDMuMzI4TDQ0Ni41MzQgNDM0LjA5MUw0NTEuNjM2IDQ0Ni45NzhMNDQyIDQ0MS4wMjlMNDQ5Ljc0NiA0NTIiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00NzEuMjU0IDQ1Mkw0NzkgNDQxLjAyOUw0NjkuMzY0IDQ0Ni45NzhMNDc0LjQ2NiA0MzQuMDkxTDQ2My44OTUgNDQzLjQ0OUw0NTkuODI5IDQyOEw0NTcuMDAzIDQ0My4zMjhMNDQ2LjUzNCA0MzQuMDkxTDQ1MS42MzYgNDQ2Ljk3OEw0NDIgNDQxLjAyOUw0NDkuNzQ2IDQ1MiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik02NS4yMTA0IDM1OS44NjFMNjcuNzA3NiAzNTUuNjA0TDYyLjUyOSAzNTguNjk0TDYwLjU0MzUgMzUzLjU5OEw1OS4xNzIxIDM1OC42NTNMNTQuMDU0OSAzNTUuNjA0TDU2LjU1MjEgMzU5Ljg2MSIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTY1LjIxMDQgMzU5Ljg2MUw2Ny43MDc2IDM1NS42MDRMNjIuNTI5IDM1OC42OTRMNjAuNTQzNSAzNTMuNTk4TDU5LjE3MjEgMzU4LjY1M0w1NC4wNTQ5IDM1NS42MDRMNTYuNTUyMSAzNTkuODYxIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTIxOC40NiA0MDYuMTJMMjIxLjY3NCA0MDAuNjU1TDIxNS4wMjEgNDA0LjYyNkwyMTIuNDYzIDM5OC4wNzZMMjEwLjY4MiA0MDQuNTY1TDIwNC4wOTEgNDAwLjY1NUwyMDcuMzA1IDQwNi4xMiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTIxOC40NiA0MDYuMTJMMjIxLjY3NCA0MDAuNjU1TDIxNS4wMjEgNDA0LjYyNkwyMTIuNDYzIDM5OC4wNzZMMjEwLjY4MiA0MDQuNTY1TDIwNC4wOTEgNDAwLjY1NUwyMDcuMzA1IDQwNi4xMiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNDMuNzA4IDEwOS4xNkMxNDMuOTYxIDEwOC4xMjggMTQ0LjA5MSAxMDcuMDcgMTQ0LjA5NyAxMDYuMDA4QzE0NC4wOTcgOTYuMzQ2NCAxMzMuODYzIDg4LjUwNjkgMTIxLjM5NyA4OC41MDY5QzExNS43MDMgODguNDE5NSAxMTAuMTMzIDkwLjE3MSAxMDUuNTEzIDkzLjUwMTJDMTAzLjE1MSA4OS4xNDI3IDk5LjYxODUgODUuNTMwOCA5NS4zMTM0IDgzLjA3MjZDOTEuMDA4NCA4MC42MTQ0IDg2LjEwMjIgNzkuNDA3OCA4MS4xNDggNzkuNTg4NkM3Ni4xOTM5IDc5Ljc2OTUgNzEuMzg4OCA4MS4zMzA4IDY3LjI3NDUgODQuMDk2NEM2My4xNjAxIDg2Ljg2MiA1OS45MDAyIDkwLjcyMTkgNTcuODYyMiA5NS4yNDExVjk1LjI0MTFDNDguMjgyOCA5NS4yNDExIDQwLjUyNTEgMTAxLjM4MiA0MC4zODE4IDEwOS4xNkgxNDMuNzA4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDY2LjUyMSAxMDIuMzQ0QzQ2Ni4xMzIgOTguNDk1NiA0NjEuNTA2IDk1LjQ2NjIgNDU1LjgzNiA5NS40NjYyQzQ1NS4yNjIgOTUuNDY4NSA0NTQuNjg4IDk1LjUwMjYgNDU0LjExNyA5NS41Njg2QzQ1Mi43OTggOTIuNTkyNSA0NTAuNjk2IDkwLjAzMSA0NDguMDMzIDg4LjE1ODFDNDQ1LjM3MSA4Ni4yODUyIDQ0Mi4yNSA4NS4xNzE0IDQzOS4wMDMgODQuOTM1OUM0MzUuNzU3IDg0LjcwMDQgNDMyLjUwNyA4NS4zNTIgNDI5LjYwMyA4Ni44MjExQzQyNi42OTggODguMjkwMiA0MjQuMjQ3IDkwLjUyMTUgNDIyLjUxMyA5My4yNzYxQzQyMC40NjQgOTIuNTA5OCA0MTguMjk0IDkyLjExNDcgNDE2LjEwNiA5Mi4xMDk0QzQwOC40MSA5Mi4xMDk0IDQwMi4xNjcgOTYuNjUzNCA0MDEuNzc4IDEwMi4zNDRINDY2LjUyMVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTIyNS41MDEgNjUuMTcyNUMyMjYuNTQ2IDU0Ljg1MDcgMjU1LjYxOCA0Ni43MjQ5IDI2Mi40MDYgNTcuNDk2N0MyNjguNTU1IDU1LjE5MzkgMjc5LjI3MyA1Ny4xNDgyIDI3OS43ODQgNjUuMDkwNkwyMjUuNTAxIDY1LjE3MjVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=\"","import * as React from 'react';\n\nimport { observer } from 'mobx-react-lite';\nimport { OrganizerPage } from '../Organizer';\n\nexport const VoterPage = observer(() => {\n  return <OrganizerPage />;\n});\n","import * as React from 'react';\nimport { IProject, PROJECT_STATUS } from 'interfaces/apiEntities';\nimport { Box, BoxProps } from 'grommet';\nimport styled from 'styled-components';\n\nconst STATUS_UI_TEXT: Partial<Record<IProject['status'], string>> = {\n  [PROJECT_STATUS.DRAFT]: 'Черновик',\n  [PROJECT_STATUS.APPROVED]: 'Принят',\n  [PROJECT_STATUS.DECLINED]: 'Отклонен',\n  [PROJECT_STATUS.CANCELED]: 'Отозван',\n  [PROJECT_STATUS.REWORK_REQUIRED]: 'Отправлен на доработку',\n  [PROJECT_STATUS.REWORK_COMPLETED]: 'Доработан',\n  [PROJECT_STATUS.IN_REVIEW]: 'На рассмотрении',\n  [PROJECT_STATUS.IN_PROGRESS]: 'В реализации',\n  [PROJECT_STATUS.DONE]: 'Реализован',\n  [PROJECT_STATUS.ARCHIVED]: 'В архиве',\n  [PROJECT_STATUS.DELETED]: 'Удален'\n};\n\ntype VotingStatusProps = BoxProps &\n  JSX.IntrinsicElements['div'] & { status: PROJECT_STATUS };\n\nfunction mapColor({\n  status,\n  theme\n}: BoxProps & { status: PROJECT_STATUS; theme: any }): string {\n  if (\n    [\n      PROJECT_STATUS.IN_REVIEW,\n      PROJECT_STATUS.REWORK_REQUIRED,\n      PROJECT_STATUS.REWORK_COMPLETED\n    ].includes(status)\n  ) {\n    return theme.palette.Orange;\n  }\n\n  if ([PROJECT_STATUS.APPROVED, PROJECT_STATUS.DONE].includes(status)) {\n    return theme.palette.Green;\n  }\n\n  if (status === PROJECT_STATUS.IN_PROGRESS) {\n    return theme.palette.Purple;\n  }\n\n  if (status === PROJECT_STATUS.DECLINED) {\n    return theme.palette.White;\n  }\n\n  return theme.palette.GreyText;\n}\n\nfunction mapBgColor({\n  status,\n  theme\n}: BoxProps & { status: PROJECT_STATUS; theme: any }): string {\n  if (status === PROJECT_STATUS.DECLINED) {\n    return theme.palette.Red;\n  }\n\n  return theme.palette.LightGrey50;\n}\n\n//TODO copy past from VotingStatusStyled\nexport const ProjectStatusStyled: React.FC<VotingStatusProps> = styled(Box)`\n  font-size: ${props => props.theme.sizes.text.xxsmall};\n  font-weight: 500;\n  padding: 0 4px;\n  height: 16px;\n  line-height: 16px;\n  border-radius: 2px;\n  text-align: center;\n  white-space: nowrap;\n  flex: 0 0 auto;\n\n  background-color: ${mapBgColor};\n  color: ${mapColor};\n`;\n\nexport const ProjectStatus: React.FC<BoxProps & { status: PROJECT_STATUS }> = ({\n  status,\n  ...props\n}) => {\n  return (\n    <ProjectStatusStyled {...props} status={status}>\n      {STATUS_UI_TEXT[status] || STATUS_UI_TEXT[PROJECT_STATUS.DRAFT]}\n    </ProjectStatusStyled>\n  );\n};\n","import * as React from 'react';\nimport { BoxProps, Box } from 'grommet';\nimport { useTheme } from 'utils/hooks';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\nimport { Text } from '@we-ui-components/base';\n\nexport const ProjectInfoBox: React.FC<BoxProps & {\n  title: string;\n  text: string;\n  style?: React.CSSProperties;\n  noWrap?: boolean;\n}> = ({ title, text, noWrap, ...props }) => {\n  const theme = useTheme();\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  if (noWrap) {\n    return (\n      <Box {...props}>\n        <Text\n          size={isTabletOrWider ? '11px' : '14px'}\n          color={theme.palette.Basic700}\n        >\n          {title}\n        </Text>\n        <pre style={{ margin: 0 }}>\n          <Text\n            size={isTabletOrWider ? '13px' : '16px'}\n            margin={{ top: '8px' }}\n            style={{ whiteSpace: 'normal', wordWrap: 'break-word' }}\n          >\n            {text}\n          </Text>\n        </pre>\n      </Box>\n    );\n  }\n\n  return (\n    <Box {...props}>\n      <Text\n        size={isTabletOrWider ? '11px' : '14px'}\n        color={theme.palette.Basic700}\n      >\n        {title}\n      </Text>\n      <Text size={isTabletOrWider ? '13px' : '16px'} margin={{ top: '8px' }}>\n        {text}\n      </Text>\n    </Box>\n  );\n};\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { breakpoints } from 'ui/Responsive';\n\ninterface ArrowType {\n  handleClick: (string) => void;\n  direction: 'left' | 'right';\n}\n\nexport const Arrow = ({ direction, handleClick }: ArrowType) => {\n  return (\n    <ArrowStyle\n      data-direct={direction}\n      onClick={() => handleClick(direction)}\n    />\n  );\n};\n\nconst ArrowStyle = styled.span`\n  position: absolute;\n  z-index: 50;\n  margin: 0 20px;\n  border: solid blue;\n  border-width: 0 4px 4px 0;\n  padding: 10px;\n  cursor: pointer;\n  top: 40%;\n  @media (max-width: ${breakpoints.laptop}) {\n    margin: 0 10px;\n    padding: 8px;\n  }\n  &[data-direct='left'] {\n    left: 0;\n    transform: rotate(135deg);\n    &:hover {\n      border: solid lightblue;\n      border-width: 0 4px 4px 0;\n      transition: 0.5s ease-out;\n    }\n  }\n  &[data-direct='right'] {\n    right: 0;\n    transform: rotate(-45deg);\n    &:hover {\n      border: solid lightblue;\n      border-width: 0 4px 4px 0;\n      transition: 0.5s ease-out;\n    }\n  }\n`;\n\nexport const MobileArrow = ({ direction, handleClick }: ArrowType) => {\n  return (\n    <MobileArrowStyle\n      data-direct={direction}\n      onClick={() => handleClick(direction)}\n    />\n  );\n};\n\nconst MobileArrowStyle = styled.span`\n  margin: 0 40px;\n  border: solid #262626;\n  border-width: 0 4px 4px 0;\n  padding: 8px;\n  cursor: pointer;\n  &:hover {\n    border: solid lightblue;\n    border-width: 0 4px 4px 0;\n    transition: 0.5s ease-out;\n  }\n  &[data-direct='left'] {\n    left: 0;\n    transform: rotate(135deg);\n  }\n  &[data-direct='right'] {\n    right: 0;\n    transform: rotate(-45deg);\n  }\n`;\n","export const rotateBase64Image = (src: string, degrees: number, callback: (str: string) => void) =>{\n  // create an off-screen canvas\n  const offScreenCanvas = document.createElement('canvas');\n  const offScreenCanvasCtx = offScreenCanvas.getContext('2d');\n  const img = new Image();\n  img.onload = function() {\n    offScreenCanvas.height = img.width;\n    offScreenCanvas.width = img.height;\n    offScreenCanvasCtx.rotate(degrees * Math.PI / 180);\n    if (degrees > 0) {\n      offScreenCanvasCtx.translate(0, -offScreenCanvas.width);\n    } else {\n      offScreenCanvasCtx.translate(-offScreenCanvas.height, 0);\n    }\n    offScreenCanvasCtx.drawImage(img, 0, 0);\n    const b64 = offScreenCanvas.toDataURL(\"image/jpeg\", 100)\n    callback(b64)\n  };\n  img.src = src;\n}\n","import * as React from 'react';\nimport { useState, useRef, useMemo, useEffect } from 'react';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { Arrow, MobileArrow } from 'ui/Slider/Arrow';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\nimport { Text } from '@we-ui-components/base';\nimport { RotateIcon } from \"ui/Icons\";\nimport { SliderFile } from \"interfaces/uiTypes\";\nimport { getProjectFile } from \"services/projectService\";\nimport { rotateBase64Image } from \"utils/rotateBase64Image\";\n\ninterface SliderType {\n  slideImages: SliderFile[];\n  onChange: (files: SliderFile) => void;\n  activeIndex: number;\n  width?: string;\n  height?: string;\n  size?: string;\n  style?: {};\n  arrow?: boolean;\n  accessType?: 'public' | 'authorized';\n}\n\ninterface SlideProps {\n  isActive: boolean;\n  isLaptopOrWider: boolean;\n  img: SliderFile,\n  accessType?: 'public' | 'authorized';\n  onChange: (file: SliderFile) => void,\n}\n\ninterface ThumbnailProps {\n  isActive: boolean;\n  img: SliderFile,\n  accessType?: 'public' | 'authorized';\n  onClick: () => void;\n}\n\nconst Slide = (props: SlideProps) => {\n  const { img, isActive, isLaptopOrWider, accessType, onChange } = props\n\n  const imgEndpoint = accessType === 'authorized'\n    ? ENDPOINTS.getProjectFile\n    : ENDPOINTS.getPublicProjectFile;\n\n  const [image, setImage] = useState(('base64' in img) ? img.base64 : imgEndpoint(img.id))\n\n  return (\n    <Box\n      style={{\n        display: isActive ? 'block' : 'none',\n        padding: isLaptopOrWider ? '0 25px' : '0',\n        position: 'relative',\n        height: isLaptopOrWider ? '30vw' : '60vw',\n        width: isLaptopOrWider ? '45vw' : '100%',\n        textAlign: 'center',\n      }}\n    >\n      <Card\n        style={{\n          height: '100%',\n          width: '100%',\n          objectFit: 'contain',\n          maxHeight: isLaptopOrWider ? '30vw' : '60vw',\n          maxWidth: isLaptopOrWider ? '45vw' : '100%',\n        }}\n        src={image}\n      />\n      <RotateContainer\n        onClick={() => {\n          rotateBase64Image(image, -90, (base64)=>{\n            onChange({\n              ...img,\n              base64,\n            })\n            setImage(base64)\n          })\n        }}\n      >\n        <RotateIcon fill={'#FFF'} width={32} height={32}/>\n      </RotateContainer>\n    </Box>\n  )\n}\n\nconst MobileSlide = (props: SlideProps) => {\n  const { img, isActive, accessType, onChange } = props\n\n  const imgEndpoint = accessType === 'authorized'\n    ? ENDPOINTS.getProjectFile\n    : ENDPOINTS.getPublicProjectFile;\n\n  const [image, setImage] = useState(('base64' in img) ? img.base64 : imgEndpoint(img.id))\n\n  return (\n    <Box\n      align=\"center\"\n      justify=\"center\"\n      style={{\n        display: isActive ? 'flex' : 'none',\n        position: 'relative',\n        height: '70vh',\n      }}\n    >\n      <Card\n        style={{\n          width: '100vw',\n          maxHeight: '70vh',\n          objectFit: 'contain',\n        }}\n        src={image}\n      />\n      <RotateContainer\n        onClick={() => {\n          rotateBase64Image(image, -90, (base64)=>{\n            onChange({\n              ...img,\n              base64,\n            })\n            setImage(base64)\n          })\n        }}\n      >\n        <RotateIcon fill={'#FFF'} width={32} height={32}/>\n      </RotateContainer>\n    </Box>\n  );\n}\n\nconst Thumbnail = (props: ThumbnailProps) => {\n  const { img, accessType, isActive, onClick } = props\n  const imgEndpoint = accessType === 'authorized'\n    ? ENDPOINTS.getProjectFile\n    : ENDPOINTS.getPublicProjectFile;\n\n  const src = ('base64' in img) ? img.base64 : imgEndpoint(img.id)\n  return (\n    <InactiveImg\n      src={src}\n      onClick={() => onClick()}\n      style={{\n        background: isActive ? 'blue' : 'transparent',\n        border:\n          isActive\n            ? '2px solid blue'\n            : '2px solid transparent'\n      }}\n    />\n  )\n}\n\nexport const Slider = (props: SliderType) => {\n  const {\n    activeIndex,\n    slideImages,\n    arrow,\n    onChange,\n    accessType = 'authorized'\n  } = props\n  const [activeImg, setActiveImg] = useState(slideImages[activeIndex]);\n\n  let currentIndex = useRef(activeIndex)\n\n  const handleClick = (newIndex: number) => {\n    currentIndex.current = newIndex\n    setActiveImg(slideImages[currentIndex.current]);\n  };\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n  const isMobile = useMediaQuery({\n    maxDeviceWidth: breakpoints.mobile\n  });\n\n  let countImages = slideImages.length;\n\n  const nextSlide = () => {\n    if (currentIndex.current >= countImages - 1) {\n      currentIndex.current = 0;\n    } else {\n      currentIndex.current+= 1\n    }\n    setActiveImg(slideImages[currentIndex.current]);\n  };\n\n  const prevSlide = () => {\n    if (currentIndex.current === 0) {\n      currentIndex.current = countImages-1;\n    }else{\n      currentIndex.current-= 1\n    }\n    setActiveImg(slideImages[currentIndex.current]);\n  };\n\n  if (isMobile) {\n    return (\n      <Box justify=\"center\">\n        {slideImages.map((img, key) => {\n          return <MobileSlide\n            key={key}\n            isActive={currentIndex.current === key}\n            accessType={accessType}\n            isLaptopOrWider={false}\n            img={img}\n            onChange={(updatedFile) => {\n              onChange(updatedFile)\n            }}\n          />\n        })}\n        {arrow && slideImages.length !== 1 && (\n          <MobArrowBox margin=\"xlarge\" direction=\"row\" justify=\"center\">\n            <MobileArrow handleClick={prevSlide} direction=\"left\"/>\n            <Text size=\"large\" style={{ width: '20px' }}>\n              {currentIndex.current + 1}/{countImages}\n            </Text>\n            <MobileArrow handleClick={nextSlide} direction=\"right\"/>\n          </MobArrowBox>\n        )}\n      </Box>\n    );\n  }\n\n  return (\n    <>\n      {arrow && slideImages.length !== 1 && (\n        <>\n          <Arrow handleClick={nextSlide} direction=\"right\"/>\n          <Arrow handleClick={prevSlide} direction=\"left\"/>\n        </>\n      )}\n\n      {slideImages.map((img, key) => {\n        return (\n          <Slide\n            key={key}\n            isActive={currentIndex.current === key}\n            isLaptopOrWider={isLaptopOrWider}\n            img={img}\n            accessType={accessType}\n            onChange={(updatedFile) => {\n              onChange(updatedFile)\n            }}\n          />\n        );\n      })}\n\n      <Box margin=\"medium\" direction=\"row\" justify=\"center\">\n        {slideImages.map((img, key) => {\n          return (\n            <Thumbnail\n              key={key}\n              isActive={currentIndex.current === key}\n              img={img}\n              accessType={accessType}\n              onClick={() => handleClick(key)}\n            />\n          );\n        })}\n      </Box>\n    </>\n  );\n};\n\nconst RotateContainer = styled.div`\n  position: absolute;\n  background-color: rgba(0, 0, 0, .5);\n  width: 48px;\n  height: 48px;\n  bottom: 0;\n  left: calc(50% - 24px);\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #FFF;\n  user-select: none;\n`\n\nconst Card = styled.img`\n  object-fit: contain;\n  cursor: pointer;\n`;\n\nconst InactiveImg = styled.img`\n  border-radius: 4px;\n  cursor: pointer;\n  object-fit: cover;\n  width: 80px;\n  height: 80px;\n  margin: 0 5px;\n`;\n\nconst MobArrowBox = styled(Box)`\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  right: 0;\n`;\n","import * as React from 'react';\nimport { useStores } from 'stores/index';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { breakpoints } from 'ui/Responsive';\nimport { useMediaQuery } from 'react-responsive';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { Slider } from 'ui/Slider/Slider';\nimport { IFile } from 'interfaces/apiEntities';\nimport { Icon, Text } from '@we-ui-components/base';\nimport { SliderFile } from \"interfaces/uiTypes\";\n\nfunction isImage(fileName: string) {\n  const IMAGE_TYPES = ['.jpg', '.png', 'gif', '.svg', '.ttf'];\n  const fileExt = fileName.split('.').slice(-1)[0];\n  return IMAGE_TYPES.includes(`.${fileExt.toLowerCase()}`);\n}\n\ninterface ImageType {\n  slideFiles: SliderFile[];\n  width?: string;\n  height?: string;\n  size?: string;\n  style?: {};\n  onChange?: (files: SliderFile[]) => void;\n  editMode?: boolean;\n  arrow?: boolean;\n  accessType?: 'public' | 'authorized';\n}\n\nexport function SliderComponent({\n  slideFiles,\n  size = '130px',\n  width,\n  height,\n  style,\n  arrow,\n  onChange,\n  editMode,\n  accessType = 'authorized',\n  ...props\n}: ImageType) {\n  const { actionModals } = useStores();\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n\n  const isMobile = useMediaQuery({\n    maxDeviceWidth: breakpoints.mobile\n  });\n\n  const activeSlider = (activeName: string): void => {\n    const onlyImages = slideFiles.filter(i => isImage(i.name))\n    actionModals.open(\n      () => (\n        <Slider\n          accessType={accessType}\n          arrow={arrow}\n          slideImages={onlyImages}\n          activeIndex={onlyImages.findIndex(({ name }) => name === activeName)}\n          onChange={(file) => {\n            if (onChange) {\n              const index = slideFiles.findIndex(({ name }) => name === file.name)\n              slideFiles.splice(index, 1, file)\n              onChange(slideFiles)\n            }\n          }}\n        />\n      ),\n\n      {\n        isOverlayClose: true,\n        width: isLaptopOrWider ? 'auto' : isMobile ? '100vw' : '95vw',\n        overlayStyle: {\n          alignItems: 'center'\n        },\n        modalStyle: {\n          top: 'auto',\n          right: 'auto',\n          margin: 'auto',\n          background: isMobile ? '#efefef' : '#fffff',\n          height: isMobile ? '100vh' : 'auto',\n          marginTop: isLaptopOrWider ? 'auto' : isMobile ? '0' : '32px'\n        }\n      }\n    );\n  };\n\n  const imgEndpoint = accessType === 'authorized'\n    ? ENDPOINTS.getProjectFile\n    : ENDPOINTS.getPublicProjectFile;\n\n  const openFileInNewWindow = (src: string) => {\n    window.open(src, '_blank');\n  };\n\n  return (\n    <CardImageContainer style={style}>\n      {slideFiles.map((img, key) => {\n        const fileExt = img.name.split('.').slice(-1)[0];\n        const _isImage = isImage(img.name);\n        const RenderComponent = _isImage ? CardImage : CardDoc;\n        const src = ('base64' in img) ? img.base64 : imgEndpoint(img.id)\n\n        return (\n          <RenderComponent\n            key={key}\n            src={src}\n            type={fileExt.toUpperCase()}\n            name={img.name}\n            onRemoveClick={() =>{\n              if (editMode) {\n                slideFiles.splice(key, 1)\n                onChange(slideFiles)\n              }\n            }}\n            editMode={editMode}\n            onClick={() => {\n              return _isImage\n                ? activeSlider(img.name)\n                : openFileInNewWindow(src);\n            }}\n          />\n        );\n      })}\n    </CardImageContainer>\n  );\n}\n\nconst RemoveIcon = (props: { onClick: () => void }) => {\n  return (\n    <Icon\n      glyph=\"Trash\"\n      size=\"xsmall\"\n      color=\"Basic500\"\n      hoverColor=\"Red500\"\n      onClick={props.onClick}\n      style={{ zIndex: 1, position: 'absolute', right: '8px', top: '8px' }}\n    />\n  );\n};\n\nconst PreviewImageWrap = styled.div`\n  border-radius: 4px;\n  overflow: hidden;\n  object-fit: cover;\n  width: 130px;\n  height: 130px;\n  position: relative;\n`;\n\nconst PreviewImage = styled.img`\n  cursor: pointer;\n  object-fit: cover;\n  width: 100%;\n  height: 100%;\n  position: relative;\n`;\n\nconst CardImage = (props: {\n  type: string;\n  src: string;\n  name?: string;\n  onClick: () => void;\n  onRemoveClick: () => void;\n  editMode?: boolean;\n}) => {\n  const { src, name, onClick, onRemoveClick, editMode } = props;\n\n  return (\n    <PreviewImageWrap>\n      <PreviewImage src={src} alt={name} onClick={onClick} />\n      {editMode && <RemoveIcon onClick={onRemoveClick} />}\n    </PreviewImageWrap>\n  );\n};\n\nconst CardDoc = (props: {\n  type: string;\n  src: string;\n  name?: string;\n  onClick: () => void;\n  onRemoveClick: () => void;\n  editMode?: boolean;\n}) => {\n  return (\n    <Box style={{ position: 'relative' }}>\n      <PreviewDoc\n        justify=\"center\"\n        align=\"center\"\n        gap=\"xsmall\"\n        onClick={props.onClick}\n      >\n        <Icon glyph=\"Document2\" size=\"46\" />\n        {props.type}\n      </PreviewDoc>\n      {props.editMode && <RemoveIcon onClick={props.onRemoveClick} />}\n      <Text\n        size=\"small\"\n        margin={{ top: 'xxsmall' }}\n        style={{\n          width: '130px',\n          overflow: 'hidden',\n          whiteSpace: 'nowrap',\n          textOverflow: 'ellipsis'\n        }}\n      >\n        {props.name}\n      </Text>\n    </Box>\n  );\n};\n\nconst PreviewDoc = styled(Box)`\n  position: relative;\n  overflow: hidden;\n  width: 130px;\n  height: 130px;\n  border: 1px solid #8d8d8d;\n  border-radius: 4px;\n`;\n\nconst CardImageContainer = styled(Box)`\n  display: grid;\n  grid-gap: 14px;\n  grid-template-columns: repeat(2, 1fr);\n  margin-top: 20px;\n  @media (min-width: ${breakpoints.tablet}) {\n    grid-template-columns: repeat(auto-fill, 130px);\n  }\n`;\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { IProject } from 'interfaces';\nimport { Title } from '@we-ui-components/base';\nimport { ProjectInfoBox } from './ProjectInfoBox';\nimport { SliderComponent } from 'ui/Slider/SliderComponent';\nimport styled from 'styled-components';\nimport { breakpoints } from 'ui';\nimport { useMediaQuery } from 'react-responsive';\n\ninterface ImplementationDetailsProps extends BoxProps {\n  project: IProject;\n}\n\nexport const ImplementationDetails = ({\n  project,\n  ...props\n}: ImplementationDetailsProps) => {\n  const isTabletOrWider = useMediaQuery({\n    minWidth: breakpoints.tablet\n  });\n\n  return (\n    <Container {...props}>\n      <Title bold size=\"xsmall\" margin={{ top: '12px', bottom: '8px' }}>\n        Результаты реализации проекта\n      </Title>\n\n      <ProjectInfoBox\n        margin={{ top: 'xsmall' }}\n        title=\"Описание результатов реализации\"\n        text={project.implDescription}\n        noWrap\n      />\n\n      <Title\n        bold\n        size={isTabletOrWider ? '13px' : '18px'}\n        margin={{ top: '21px' }}\n      >\n        Файлы, подтверждающие результаты реализации\n      </Title>\n      <SliderComponent\n        accessType=\"public\"\n        slideFiles={project.implFiles}\n        arrow\n      />\n    </Container>\n  );\n};\n\nconst Container = styled(Box)`\n  border-top: 1px solid ${props => props.theme.palette.LightGrey};\n`;\n\ntype BoxProps = React.ComponentProps<typeof Box>;\n","import * as React from 'react';\nimport { SVG, SvgProps } from '../pages/Poll/icons';\nimport styled from 'styled-components';\nimport { useTheme } from 'utils/hooks';\n\ntype StarItemProps = JSX.IntrinsicElements['path'] &\n  PathProps & { ref?: any } & {\n    num: number;\n    isHalf: boolean;\n  };\n\ntype PathProps = {\n  active: boolean;\n  hover: boolean;\n  readonly: boolean;\n  fill?: string;\n};\n\nconst Path = styled.path<PathProps>`\n  fill: ${({ theme, active, hover, fill }) =>\n    fill ?? (active || hover ? theme.palette.Purple : theme.palette.Grey)};\n\n  cursor: ${props => (props.readonly ? 'normal' : 'pointer')};\n`;\n\nconst GAP = -1;\n\nconst Star = ({ num, isHalf, ...props }: StarItemProps) => {\n  const tX = (num - 1) * 18 + GAP;\n\n  const theme = useTheme();\n\n  return (\n    <>\n      <Path\n        transform={`translate(${tX}, -1)`}\n        d=\"M8 11.5L3.875 14L4.96875 9.3125L1.34375 6.15625L6.125 5.75L8 1.34375L9.875 5.75L14.6562 6.15625L11.0312 9.3125L12.125 14L8 11.5Z\"\n        {...props}\n      />\n\n      {isHalf && (\n        <Path\n          transform={`translate(${tX}, -1)`}\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M8 11.5L12.125 14L11.0312 9.3125L14.6562 6.15625L9.875 5.75L8 1.34375V11.5Z\"\n          fill={theme.palette.Grey}\n          {...props}\n        />\n      )}\n    </>\n  );\n};\n\nexport type StarRatingProps = {\n  value: number; // 0..5\n  onChangeValue?: (value: number) => void;\n  readonly?: boolean;\n};\n\nexport const StarRating: React.FC<StarRatingProps &\n  SvgProps> = React.forwardRef(\n  ({ onChangeValue, readonly = false, value: valueInitial, ...props }, ref) => {\n    const [value, setValue] = React.useState(valueInitial);\n    const [hover, setHover] = React.useState<number | null>(null);\n\n    const emitClick = (nextValue: number) => {\n      setValue(nextValue);\n\n      onChangeValue(nextValue);\n    };\n\n    const pathProps = (num: number): StarItemProps => {\n      const currentValue = Math.max(0, value);\n      const isHalf = currentValue < num && currentValue > num - 1;\n\n      return {\n        active: isHalf || num <= currentValue,\n        hover: !readonly && num <= hover,\n        onClick: () => !readonly && emitClick(num),\n        onMouseEnter: () => !readonly && setHover(num),\n        onMouseOut: () => !readonly && setHover(null),\n        readonly: readonly,\n        num: num,\n        isHalf: isHalf\n      };\n    };\n\n    return (\n      <SVG\n        viewBox=\"0 0 85 13\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n        ref={ref}\n      >\n        <Star {...pathProps(1)} />\n        <Star {...pathProps(2)} />\n        <Star {...pathProps(3)} />\n        <Star {...pathProps(4)} />\n        <Star {...pathProps(5)} />\n      </SVG>\n    );\n  }\n);\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { Text, Title } from '@we-ui-components/base';\nimport { IProject, PROJECT_STATUS } from 'interfaces';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { Routes } from '../../constants';\nimport styled from 'styled-components';\nimport { ProjectStatus } from '../Poll/ProjectStatus';\nimport { formatWithTwoDecimalsRub } from 'utils/formatNumber';\nimport { useStores } from 'stores/index';\nimport { ImplementationDetails } from 'pages/Poll/components/ImplementationDetails';\nimport { StarRating } from 'components/StarRatings';\nimport { PollingType } from '../Organizer/tabs';\n\nexport function triplets(str) {\n  return str.toString().replace(/(\\d)(?=(\\d\\d\\d)+([^\\d]|$))/g, '$1\\u202f');\n}\n\nexport function changeTime(time) {\n  return time\n    .slice(0, 10)\n    .split('-')\n    .reverse()\n    .join('.');\n}\n\nconst StyledBox = styled(Box)`\n  &:hover {\n    box-shadow: 0 4px 8px rgba(10, 6, 6, 0.06);\n  }\n`;\n\nexport function ProjectListItem({ params }: { params: IProject }) {\n  const { routing } = useStores();\n\n  return (\n    <StyledBox\n      width=\"100%\"\n      pad=\"small\"\n      margin=\"16px 0\"\n      style={{\n        backgroundColor: 'white',\n        boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04))',\n        borderRadius: '1px'\n      }}\n      onClick={() => routing.push(`/${Routes.projectPage}/${params.id}`)}\n    >\n      <Box direction=\"row-responsive\">\n        <CardImage src={ENDPOINTS.getProjectFile(params.logoFileId)} alt=\"\" />\n        <Box\n          justify=\"between\"\n          direction=\"row\"\n          width=\"100%\"\n          style={{ position: 'relative' }}\n        >\n          <Box style={{ marginLeft: '16px' }}>\n            <Text size=\"xsmall\" color=\"#172b4d\">\n              Голосование по{' '}\n              {params.subject.type === PollingType.schoolGroup\n                ? 'школьной группе '\n                : ''}\n              {params.subject.name || '--'}, {params.subject.year || '--'}\n            </Text>\n            <Title margin=\"10px 0\" size=\"xsmall\" bold>\n              {params.name}\n            </Title>\n            <Text margin=\"2px 0 8px\" size=\"xsmall\" color=\"#172b4d\">\n              Срок реализации проекта:{' '}\n              {params.startDate ? changeTime(params.startDate) : 'не указан'}{' '}\n              &mdash;{' '}\n              {params.endDate ? changeTime(params.endDate) : 'не указан'}\n            </Text>\n            <Text size=\"xsmall\" color=\"#172b4d\">\n              Объем требуемых средств:{' '}\n              {formatWithTwoDecimalsRub(params.budgetSummary || 0)}\n            </Text>\n          </Box>\n          <ProjectStatus status={params.status} />\n        </Box>\n      </Box>\n\n      {params.status === PROJECT_STATUS.DONE && (\n        <ImplementationDetails margin={{ top: '16px' }} project={params} />\n      )}\n\n      {params.score && (\n        <Box pad={{ top: 'medium' }} align=\"end\">\n          <Box direction=\"row\" flex=\"grow\">\n            <Box width=\"85px\" align=\"center\">\n              <StarRating value={params.score?.average || 0} readonly />\n            </Box>\n\n            <Text\n              margin={{ left: 'xsmall', bottom: 'xxsmall' }}\n              size=\"xsmall\"\n              color=\"Grey\"\n            >\n              {params.score?.average || 0} ({params.score?.totalCount || 0})\n            </Text>\n          </Box>\n        </Box>\n      )}\n    </StyledBox>\n  );\n}\n\nconst CardImage = styled.img`\n  border-radius: 4px;\n  object-fit: cover;\n  width: 130px;\n  height: 130px;\n`;\n","import * as React from 'react';\nimport { Title } from '@we-ui-components/base';\nimport { FilterSearch, FilterTabs, CommonTable } from 'components';\nimport { getTabs } from './getTabs';\nimport { PROJECT_STATUS } from 'interfaces/apiEntities';\nimport { inject, observer } from 'mobx-react';\nimport { IStores } from 'stores/index';\nimport { Box } from 'grommet';\nimport { IconButton } from 'ui/IconButton';\nimport { ProjectListItem } from './applicantColumns';\nimport { Routes } from '../../constants';\n\nconst PlusSVG = () => (\n  <svg\n    width=\"10\"\n    height=\"10\"\n    viewBox=\"0 0 10 10\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M9 5.56376H5.56376V9H4.43624V5.56376H1V4.43624H4.43624V1H5.56376V4.43624H9V5.56376Z\"\n      fill=\"currentColor\"\n      stroke=\"currentColor\"\n    />\n  </svg>\n);\n\ntype DocumentsPageProps = Pick<IStores, 'projectList' | 'user' | 'routing'>;\n\n@inject('projectList', 'user', 'routing')\n@observer\nclass ApplicantPage extends React.Component<DocumentsPageProps> {\n  goToCreateProject = () => {\n    this.props.routing.push(`${Routes.createProject}`);\n  };\n\n  componentDidMount() {\n    this.props.projectList.fetch();\n  }\n\n  render() {\n    const { projectList } = this.props;\n\n    return (\n      <Box\n        direction=\"column\"\n        background=\"transparent\"\n        margin=\"0 auto\"\n        pad={{ vertical: 'medium', horizontal: 'small' }}\n        width=\"872px\"\n      >\n        <Box direction=\"row\" align=\"center\" margin={{ vertical: 'medium' }}>\n          <Title size=\"small\" bold>\n            Мои проекты ({projectList.paginationData.totalElements})\n          </Title>\n          <IconButton\n            onClick={this.goToCreateProject}\n            renderIcon={() => <PlusSVG />}\n            margin={{ left: '16px' }}\n          >\n            Создать проект\n          </IconButton>\n        </Box>\n        <FilterSearch store={projectList} filterField=\"search\" width=\"100%\" />\n\n        <FilterTabs\n          store={projectList}\n          tabs={getTabs()}\n          filterField=\"status\"\n          initialValue={PROJECT_STATUS.ALL}\n          margin={{ vertical: 'small' }}\n        />\n        <CommonTable\n          store={projectList}\n          columns={[]}\n          emptyListText=\"Не найдено проектов\"\n          customItem={{ render: ProjectListItem }}\n          suppressInitialFetch\n        />\n      </Box>\n    );\n  }\n}\n\nexport { ApplicantPage };\n","import { PROJECT_STATUS, TTabITabOptionsEx } from 'interfaces';\n\nexport const getTabs = (): TTabITabOptionsEx<PROJECT_STATUS> => [\n  {\n    id: PROJECT_STATUS.ALL,\n    text: 'Все'\n  },\n  {\n    id: PROJECT_STATUS.IN_REVIEW,\n    text: 'На рассмотрении'\n  },\n  {\n    id: PROJECT_STATUS.REWORK_REQUIRED,\n    text: 'На доработке'\n  },\n  {\n    id: PROJECT_STATUS.REWORK_COMPLETED,\n    text: 'Доработано'\n  },\n  {\n    id: PROJECT_STATUS.APPROVED,\n    text: 'Принято'\n  },\n  {\n    id: PROJECT_STATUS.IN_PROGRESS,\n    text: 'На реализации'\n  },\n  {\n    id: PROJECT_STATUS.DECLINED,\n    text: 'Отклонено'\n  },\n  {\n    id: PROJECT_STATUS.CANCELED,\n    text: 'Отозвано'\n  }\n];\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { FileInput as BaseFileInput } from 'components';\nimport { Button, Text } from '@we-ui-components/base';\nimport fileIcon from './file-icon.svg';\nimport { Box } from 'grommet';\nimport { ViolationFileInputProps } from './';\n\ninterface UploaderProps extends ViolationFileInputProps {\n  formats: string[];\n  limits?: IFileLimits;\n  additionalText?: string;\n}\n\nexport interface IFileLimits {\n  maxFiles?: number;\n  maxFileSize?: number;\n}\n\nexport function ViolationFileUploader(props: UploaderProps) {\n  const {\n    value,\n    onChange,\n    limits,\n    formats,\n    additionalText\n  } = props\n  const inputRef = React.useRef<HTMLInputElement>(null);\n  const { maxFiles = 0, maxFileSize = 0 } = limits || {};\n\n  const addFiles = (files: File[]) => {\n    const newFiles = files.filter(file => {\n      let fileExt = file.name.split('.').slice(-1)[0]?.toLowerCase();\n      if (fileExt === 'jpeg') {\n        fileExt = 'jpg'\n      }\n      return formats.includes(`.${fileExt}`);\n    });\n\n    if (!!maxFileSize) {\n      onChange(newFiles.filter(file => file.size <= maxFileSize));\n    } else {\n      onChange(newFiles);\n    }\n  };\n\n  return (\n    <StyledFileInput\n      ref={inputRef}\n      value={value}\n      onChange={addFiles}\n      inputProps={{ accept: formats.join(','), multiple: true }}\n    >\n      <img src={fileIcon}/>\n\n      <Box direction=\"row\" margin={{ top: '12px' }} align=\"baseline\">\n        <Text>Перетащите или </Text>\n\n        <LinkButton onClick={() => inputRef.current.click()}>\n          загрузите\n        </LinkButton>\n\n        {!!maxFiles ? (\n          <Text>\n            не более {maxFiles % 10 === 1 ? ' 1 файла' : `${maxFiles} файлов`}\n          </Text>\n        ) : (\n          <Text>файлы</Text>\n        )}\n      </Box>\n\n      <Text>в формате {formats.join(', ')}</Text>\n      {additionalText && (\n        <Text\n          size=\"small\"\n          margin={{ top: 'xsmall' }}\n          style={{ maxWidth: '450px', textAlign: 'center' }}\n        >\n          {additionalText}\n        </Text>\n      )}\n    </StyledFileInput>\n  );\n}\n\nconst StyledFileInput = styled(BaseFileInput)`\n  border: 1px dashed ${props => props.theme.palette.Primary};\n\n  padding: 24px;\n\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n`;\n\nconst LinkButton = styled(Button).attrs({\n  transparent: true,\n  color: 'Blue700'\n})`\n  display: inline;\n  padding: 0;\n\n  margin: 0 5px;\n\n  button {\n    padding: 0;\n    font-size: 15px;\n  }\n`;\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzEiIGhlaWdodD0iNjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTI3LjM0OCAyLjIxN0g3LjY5NmE0IDQgMCAwMC00IDRWNTkuMTMiIHN0cm9rZT0iIzIwNDA4MCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtZGFzaGFycmF5PSI3IDciIC8+CiAgPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSIgZmlsbD0iIzIwNDA4MCI+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTYyLjM5OCA5LjAxMkgyMC42MTVhMy4yODYgMy4yODYgMCAwMC0zLjI3NyAzLjI3N3Y1Mi40MzRBMy4yODYgMy4yODYgMCAwMDIwLjYxNSA2OEg0OC40N2MxLjgwMSAwIDQuMzUtMS4wMSA1LjY2My0yLjI0Nmw5LjE1NC04LjYxN2MxLjMxMy0xLjIzNCAyLjM4Ny0zLjcyIDIuMzg3LTUuNTIybC4wMDEtMzkuMzI2YTMuMjg3IDMuMjg3IDAgMDAtMy4yNzctMy4yNzd6bS05Ljk1IDU0Ljk1Mmw5LjE1NC04LjYxNmMuMTMyLS4xMjUuMjYzLS4yODQuMzktLjQ1NmgtOC4xOTdjLS41NjMgMC0xLjA3LjIyNy0xLjQ0Ny42MDJhMi4wMzggMi4wMzggMCAwMC0uNjAyIDEuNDQ2djcuNTM4Yy4yNy0uMTY1LjUxNC0uMzM3LjcwMi0uNTE0em0xMC42NTYtMTEuNTNhMy44MiAzLjgyIDAgMDAuMTExLS44MmwuMDAyLTM5LjMyNWEuODMuODMgMCAwMC0uODItLjgxOUgyMC42MTZhLjgzLjgzIDAgMDAtLjgyLjgydjUyLjQzM2MwIC40NDQuMzc1LjgxOS44Mi44MTloMjcuODU0Yy4yNDUgMCAuNTI3LS4wNC44Mi0uMVY1Ni45NGE0LjUxNSA0LjUxNSAwIDAxNC41MDYtNC41MDZoOS4zMXoiIC8+CiAgICA8cGF0aCBkPSJNNTMuMzg2IDIwLjQ4MkgyOS42MjdhMS4yMjggMS4yMjggMCAxMDAgMi40NTdoMjMuNzZhMS4yMjkgMS4yMjkgMCAxMDAtMi40NTd6TTUzLjM4NiAzNi44NjdIMjkuNjI3YTEuMjI4IDEuMjI4IDAgMTAwIDIuNDU4aDIzLjc2YTEuMjI5IDEuMjI5IDAgMTAwLTIuNDU4ek00Mi43MzYgNDUuMDZIMjkuNjI4YTEuMjI4IDEuMjI4IDAgMTAwIDIuNDU4aDEzLjEwOGExLjIyOCAxLjIyOCAwIDEwMC0yLjQ1OHpNNTMuMzg2IDI4LjY3NUgyOS42MjdhMS4yMjggMS4yMjggMCAxMDAgMi40NTdoMjMuNzZhMS4yMjkgMS4yMjkgMCAxMDAtMi40NTd6IiAvPgogIDwvZz4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcDAiPgogICAgICA8cGF0aCBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzKSIgZD0iTTAgMGg2OHY2OEgweiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgo8L3N2Zz4K\"","import * as React from 'react';\nimport { Text, Icon } from '@we-ui-components/base';\nimport { ViolationFileInputProps } from './';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\n\ninterface ViolationFileInputListProps extends ViolationFileInputProps {}\n\nconst IMAGE_TYPES = ['.jpg', '.jpeg', '.png', '.svg'];\n\nexport function ViolationFileInputList({\n  value,\n  onChange,\n  withPreview\n}: ViolationFileInputListProps) {\n  if (value.length === 0) return null;\n\n  const RenderedComponent = withPreview ? PreviewItem : TextItem;\n\n  return (\n    <Box\n      direction={withPreview ? 'row' : 'column'}\n      wrap={withPreview}\n      margin={{ top: '12px' }}\n      gap={withPreview ? 'small' : '0'}\n    >\n      {value.map((file, index) => (\n        <RenderedComponent\n          key={file.name + index}\n          index={index}\n          name={file.name}\n          onChange={onChange}\n          value={file}\n          values={value}\n        />\n      ))}\n    </Box>\n  );\n}\n\ninterface ITextItem {\n  index: number;\n  name: string;\n  value: File;\n  values: File[];\n  onChange: (value: any) => void;\n}\n\nconst TextItem = (props: ITextItem) => {\n  const { index, name, values, onChange } = props;\n\n  return (\n    <Box\n      key={name + index}\n      direction=\"row\"\n      justify=\"between\"\n      align=\"start\"\n      width=\"100%\"\n    >\n      <Text size=\"small\">{name}</Text>\n\n      <Icon\n        glyph=\"Trash\"\n        size=\"xsmall\"\n        color=\"Basic500\"\n        hoverColor=\"Red500\"\n        onClick={() => {\n          onChange(values.filter((_, index2) => index !== index2));\n        }}\n      />\n    </Box>\n  );\n};\n\nconst PreviewItem = (props: ITextItem) => {\n  const { index, name, value, values, onChange } = props;\n  const fileExt = name.split('.').slice(-1)[0];\n  const isDocument = !IMAGE_TYPES.includes(`.${fileExt.toLowerCase()}`);\n\n  return (\n    <PreviewBox direction=\"column\" justify=\"start\" align=\"start\">\n      {isDocument ? (\n        <PreviewDoc justify=\"center\" align=\"center\" gap=\"xsmall\">\n          <Icon glyph=\"Document2\" size=\"46\" />\n          {fileExt.toUpperCase()}\n        </PreviewDoc>\n      ) : (\n        <PreviewImg src={fileToBase64(value)} alt={name} />\n      )}\n      <Icon\n        glyph=\"Trash\"\n        size=\"xsmall\"\n        color=\"Basic500\"\n        hoverColor=\"Red500\"\n        onClick={() => {\n          onChange(values.filter((_, index2) => index !== index2));\n        }}\n        style={{ zIndex: 1, position: 'absolute', right: '8px', top: '8px' }}\n      />\n      <Text\n        size=\"small\"\n        margin={{ top: 'xsmall', bottom: 'small' }}\n        style={{\n          bottom: '8px',\n          left: '8px',\n          width: '130px',\n          overflow: 'hidden',\n          textOverflow: 'ellipsis'\n        }}\n      >\n        {name}\n      </Text>\n    </PreviewBox>\n  );\n};\n\nfunction fileToBase64(file: File) {\n  return URL.createObjectURL(file); // convert to base64 string\n}\n\nconst PreviewDoc = styled(Box)`\n  position: relative;\n  overflow: hidden;\n  width: 130px;\n  height: 130px;\n  border: 1px solid #8d8d8d;\n  border-radius: 4px;\n`;\n\nconst PreviewBox = styled(Box)`\n  position: relative;\n  overflow: hidden;\n`;\n\nconst PreviewImg = styled.img`\n  width: 130px;\n  height: 130px;\n  background-size: cover;\n  background-repeat: no-repeat;\n  border-radius: 4px;\n`;\n","import { FieldWrapper } from '@we-ui-components/base';\nimport { createField } from '@we-ui-components/form';\nimport * as React from 'react';\n\nimport { ViolationFileUploader, IFileLimits } from './uploader';\nimport { ViolationFileInputList } from './file-list';\n\nexport interface ViolationFileInputProps {\n  value: File[];\n  onChange: (fileIds: File[]) => void;\n  formats: string[];\n  limits?: IFileLimits;\n  withPreview?: boolean;\n}\n\nexport const FilesIdInput = createField<any>({\n  component: props => <FileInputWrap {...props} />,\n  wrapper: FieldWrapper\n});\n\nclass FileInputWrap extends React.Component<ViolationFileInputProps> {\n  onChange = (files: File[]) => {\n    const { limits } = this.props;\n    const { maxFiles = 0 } = limits || {};\n    if (!!maxFiles) {\n      this.props.onChange(files.slice(0, maxFiles));\n    } else {\n      this.props.onChange(files);\n    }\n  };\n\n  render() {\n    return (\n      <>\n        <ViolationFileUploader {...this.props} onChange={this.onChange} />\n        <ViolationFileInputList {...this.props} onChange={this.onChange} />\n      </>\n    );\n  }\n}\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTMiIHZpZXdCb3g9IjAgMCAxNiAxMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcuOTA2MjUgNEg4QzguNTQxNjcgNCA5LjAxMDQyIDQuMTk3OTIgOS40MDYyNSA0LjU5Mzc1QzkuODAyMDggNC45ODk1OCAxMCA1LjQ1ODMzIDEwIDZWNi4xMjVMNy45MDYyNSA0Wk01LjAzMTI1IDQuNTMxMjVDNC43ODEyNSA1LjAzMTI1IDQuNjU2MjUgNS41MjA4MyA0LjY1NjI1IDZDNC42NTYyNSA2LjkxNjY3IDQuOTc5MTcgNy43MDgzMyA1LjYyNSA4LjM3NUM2LjI5MTY3IDkuMDIwODMgNy4wODMzMyA5LjM0Mzc1IDggOS4zNDM3NUM4LjQ3OTE3IDkuMzQzNzUgOC45Njg3NSA5LjIxODc1IDkuNDY4NzUgOC45Njg3NUw4LjQzNzUgNy45Mzc1QzguMjcwODMgNy45NzkxNyA4LjEyNSA4IDggOEM3LjQ1ODMzIDggNi45ODk1OCA3LjgwMjA4IDYuNTkzNzUgNy40MDYyNUM2LjE5NzkyIDcuMDEwNDIgNiA2LjU0MTY3IDYgNkM2IDUuODc1IDYuMDIwODMgNS43MjkxNyA2LjA2MjUgNS41NjI1TDUuMDMxMjUgNC41MzEyNVpNMS4zNDM3NSAwLjg0Mzc1TDIuMTg3NSAwTDE0IDExLjgxMjVMMTMuMTU2MiAxMi42NTYyQzEzLjA1MjEgMTIuNTUyMSAxMi43MTg4IDEyLjIyOTIgMTIuMTU2MiAxMS42ODc1QzExLjYxNDYgMTEuMTQ1OCAxMS4xOTc5IDEwLjcyOTIgMTAuOTA2MiAxMC40Mzc1QzEwLjAxMDQgMTAuODEyNSA5LjA0MTY3IDExIDggMTFDNi4zNTQxNyAxMSA0Ljg2NDU4IDEwLjU0MTcgMy41MzEyNSA5LjYyNUMyLjE5NzkyIDguNzA4MzMgMS4yMzk1OCA3LjUgMC42NTYyNSA2QzEuMTc3MDggNC43MDgzMyAyLjAxMDQyIDMuNjA0MTcgMy4xNTYyNSAyLjY4NzVDMi45MDYyNSAyLjQzNzUgMi41NTIwOCAyLjA4MzMzIDIuMDkzNzUgMS42MjVDMS42NTYyNSAxLjE2NjY3IDEuNDA2MjUgMC45MDYyNSAxLjM0Mzc1IDAuODQzNzVaTTggMi42NTYyNUM3LjU4MzMzIDIuNjU2MjUgNy4xNzcwOCAyLjczOTU4IDYuNzgxMjUgMi45MDYyNUw1LjM0Mzc1IDEuNDY4NzVDNi4xNTYyNSAxLjE1NjI1IDcuMDQxNjcgMSA4IDFDOS42NDU4MyAxIDExLjEyNSAxLjQ1ODMzIDEyLjQzNzUgMi4zNzVDMTMuNzcwOCAzLjI5MTY3IDE0LjcyOTIgNC41IDE1LjMxMjUgNkMxNC44MTI1IDcuMjI5MTcgMTQuMDUyMSA4LjI4MTI1IDEzLjAzMTIgOS4xNTYyNUwxMS4wOTM4IDcuMjE4NzVDMTEuMjYwNCA2LjgyMjkyIDExLjM0MzggNi40MTY2NyAxMS4zNDM4IDZDMTEuMzQzOCA1LjA4MzMzIDExLjAxMDQgNC4zMDIwOCAxMC4zNDM4IDMuNjU2MjVDOS42OTc5MiAyLjk4OTU4IDguOTE2NjcgMi42NTYyNSA4IDIuNjU2MjVaIiBmaWxsPSIjNjY2NjY2Ii8+Cjwvc3ZnPgo=\"","import * as React from 'react';\nimport { BackButton, PageContainer } from 'components';\nimport { Button, Text, Title } from '@we-ui-components/base';\nimport { computed, observable } from 'mobx';\nimport * as moment from 'moment';\nimport { inject, observer } from 'mobx-react';\nimport { Box } from 'grommet';\nimport { Routes } from 'constants/routes';\nimport {\n  Calendar,\n  Form,\n  Input,\n  MobxForm,\n  NumberInput,\n  RadioGroup,\n  Select,\n  TextArea\n} from '@we-ui-components/form';\nimport {\n  isCorrectUrl,\n  isPositive,\n  isRequired,\n  lessThan,\n  maxLength\n} from 'utils/validators';\nimport styled from 'styled-components';\nimport { formatWithTwoDecimalsRub } from 'utils';\nimport {\n  getDistricts,\n  getDistrictsWithVotes,\n  getSchools\n} from 'services/voteService';\nimport { FilesIdInput } from './FileInput';\nimport { IStores } from 'stores';\nimport { createProject, uploadFile } from 'services';\nimport visibilitySVG from './visibility_off.svg';\n\ninterface IRawProject {\n  name: string;\n  pollId: string;\n  schoolId?: string;\n  type: 'REGION' | 'SCHOOL_PARTY';\n  beneficiaries: number | string;\n  description: string;\n  startDate: Date;\n  endDate: Date;\n  district: string | number;\n  sphere: string;\n  place: string;\n  administrationLink: string;\n  budgetRegion: number | string;\n  budgetPeople: number | string;\n  budgetDistrict: number | string;\n  noBudgetFunds: number | string;\n  files: File[];\n  privateFiles: File[];\n}\n\ninterface ISubjectOption {\n  text: string;\n  value: string | number;\n  pollId?: string | number;\n  personCount?: number;\n}\n\n@inject('routing')\n@observer\nexport class CreateProject extends React.Component<Pick<IStores, 'routing'>> {\n  formRef: MobxForm;\n\n  @observable isLoading: boolean;\n  @observable error: string;\n\n  @observable\n  data: IRawProject = {\n    name: '',\n    pollId: '',\n    schoolId: '',\n    type: 'REGION',\n    description: '',\n    files: [],\n    privateFiles: [],\n    startDate: moment()\n      .add(1, 'day')\n      .toDate(),\n    endDate: moment()\n      .add(3, 'day')\n      .toDate(),\n    district: '',\n    sphere: 'OTHER',\n    place: '',\n    administrationLink: '',\n    beneficiaries: '',\n    budgetRegion: '',\n    budgetPeople: '',\n    budgetDistrict: '',\n    noBudgetFunds: ''\n  };\n\n  @observable\n  districts: ISubjectOption[] = [];\n\n  @observable\n  districtsWithVotes: ISubjectOption[] = [];\n\n  @observable\n  schools: ISubjectOption[] = [];\n\n  @computed\n  get totalCost() {\n    const {\n      budgetRegion,\n      budgetPeople,\n      budgetDistrict,\n      noBudgetFunds\n    } = this.data;\n    return (\n      Number(budgetRegion) +\n      Number(budgetPeople) +\n      Number(budgetDistrict) +\n      Number(noBudgetFunds)\n    );\n  }\n\n  goBack = () => {\n    const { routing } = this.props;\n    routing.push(`/${Routes.projects}`);\n  };\n\n  createProject = () => {\n    this.formRef.validateFields().then(res => {\n      if (!this.totalCost) {\n        this.error = 'Общий объём требуемых средств должен быть больше 0';\n        return;\n      }\n      this.isLoading = true;\n      this.error = '';\n      return processData(this.data, this.pollId)\n        .then(formData => {\n          return createProject(formData)\n            .then(() => this.goBack())\n            .catch(error => {\n              this.error = error.detail || error.title;\n            })\n            .finally(() => (this.isLoading = false));\n        })\n        .catch(err => {\n          this.error = err.message;\n          this.isLoading = false;\n        });\n    });\n  };\n\n  onChangeDistrict = (value: string | number, actualType?: string) => {\n    const { type } = this.data;\n    const region = this.actualDistricts.find(i => value === i.value);\n    this.data.schoolId = '';\n    if (\n      (type === 'SCHOOL_PARTY' || actualType === 'SCHOOL_PARTY') &&\n      !!region\n    ) {\n      this.data.beneficiaries = '';\n      getSchools({\n        pollStatus: 'APPLICATIONS_RECEIVING',\n        hasPoll: 'true',\n        districtId: region.value,\n        size: 1000\n      }).then(res => {\n        this.schools = res.content\n          .filter(i => !!i.pollId)\n          .map(i => ({\n            text: i.name,\n            value: i.id,\n            pollId: i.pollId,\n            personCount: i.personCount\n          }));\n      });\n    }\n  };\n\n  onChangeSchool = (id: string | number) => {\n    const school = this.schools.find(i => i.value == id);\n\n    if (school?.personCount != null) {\n      this.data.beneficiaries = school.personCount;\n    }\n  };\n\n  get actualDistricts() {\n    const { type } = this.data;\n\n    return type === 'REGION' ? this.districts : this.districtsWithVotes;\n  }\n\n  @computed\n  get pollId() {\n    const { type, schoolId, district } = this.data;\n\n    const region = this.actualDistricts.find(i => district === i.value);\n    const school = this.schools.find(i => schoolId === i.value);\n\n    return type === 'REGION' ? region.pollId : school.pollId;\n  }\n\n  componentDidMount(): void {\n    getDistricts().then(res => {\n      this.districts = res.content\n        .filter(i => !!i.pollId && i.status === 'APPLICATIONS_RECEIVING')\n        .map(i => ({\n          text: i.name,\n          value: i.id,\n          pollId: i.pollId\n        }));\n    });\n\n    getDistrictsWithVotes().then(res => {\n      this.districtsWithVotes = res.content\n        .map(i => ({\n          text: i.name,\n          value: i.id\n        }));\n    });\n  }\n\n  render() {\n    const { type } = this.data;\n\n    return (\n      <PageContainer>\n        <Box pad={{ vertical: '32px', horizontal: '64px' }}>\n          <Box direction=\"row\" margin={{ bottom: 'medium' }}>\n            <BackButton url={`/${Routes.homeApplicant}`}/>\n          </Box>\n          <Box align=\"center\" style={{ flex: '1 1 100%' }}>\n            <Box\n              pad=\"xlarge\"\n              background=\"white\"\n              width=\"736px\"\n              style={{ border: '1px solid #D1D1D1' }}\n            >\n              <Title bold margin={{ bottom: 'medium' }}>\n                Создание проекта\n              </Title>\n              <Form\n                ref={(formRef: MobxForm) => (this.formRef = formRef)}\n                data={this.data}\n              >\n                <Box gap=\"small\">\n                  <Input\n                    name=\"name\"\n                    size=\"full\"\n                    placeholder=\"Название проекта *\"\n                    rules={[isRequired(), maxLength(120)]}\n                  />\n                  <RadioGroup\n                    name=\"type\"\n                    label=\"Тип проекта\"\n                    size=\"auto\"\n                    direction=\"row\"\n                    displayMode=\"stickers\"\n                    options={typeOptions}\n                    onChange={() => {\n                      this.data.district = '';\n                      this.data.beneficiaries = '';\n                      this.forceUpdate();\n                    }}\n                    rules={[isRequired()]}\n                  />\n                  {this.data.type === 'REGION' && (\n                    <Select\n                      name=\"district\"\n                      label=\"Муниципальное образование *\"\n                      size=\"full\"\n                      options={this.districts}\n                      onChange={this.onChangeDistrict}\n                      rules={[isRequired()]}\n                    />\n                  )}\n                  {this.data.type === 'SCHOOL_PARTY' && (\n                    <Select\n                      name=\"district\"\n                      label=\"Муниципальное образование *\"\n                      size=\"full\"\n                      options={this.districtsWithVotes}\n                      onChange={this.onChangeDistrict}\n                      rules={[isRequired()]}\n                    />\n                  )}\n                  {type === 'SCHOOL_PARTY' && (\n                    <Select\n                      name=\"schoolId\"\n                      label=\"Школа *\"\n                      size=\"full\"\n                      options={this.schools}\n                      onChange={this.onChangeSchool}\n                      rules={[isRequired()]}\n                    />\n                  )}\n                  <Text size=\"large\" bold>\n                    Описание проекта\n                  </Text>\n                  {type === 'REGION' && (\n                    <Select\n                      name=\"sphere\"\n                      label=\"Сфера проекта *\"\n                      size=\"full\"\n                      options={sphereOptions.filter(op => !['CULTURE', 'EDUCATION'].includes(op.value))}\n                      rules={[isRequired()]}\n                    />\n                  )}\n\n                  <NumberInput\n                    key={type === 'SCHOOL_PARTY' ? this.data.schoolId : 'region'}\n                    type=\"integer\"\n                    name=\"beneficiaries\"\n                    placeholder=\"Количество благополучателей, чел *\"\n                    size=\"full\"\n                    rules={[isRequired(), isPositive(), lessThan(1e8)]}\n                    disabled={type === 'SCHOOL_PARTY'}\n                  />\n\n                  <TextArea\n                    {...({} as any)}\n                    name=\"description\"\n                    label=\"Описание проекта *\"\n                    rules={[isRequired(), maxLength(1500)]}\n                    style={{ height: '128px' }}\n                  />\n                  <Box direction=\"row\" gap=\"small\">\n                    <Calendar\n                      name=\"startDate\"\n                      size=\"xlarge\"\n                      placeholderText=\"Начало реализации *\"\n                      minDate={moment().add(1, 'day').toDate()}\n                      rules={[isRequired()]}\n                    />\n                    <Calendar\n                      name=\"endDate\"\n                      size=\"xlarge\"\n                      placeholderText=\"Окончание реализации *\"\n                      rules={[isRequired()]}\n                    />\n                  </Box>\n                  <Input\n                    name=\"place\"\n                    placeholder=\"Место реализации проекта *\"\n                    size=\"full\"\n                    rules={[isRequired()]}\n                  />\n                  <Input\n                    name=\"administrationLink\"\n                    placeholder=\"Ссылка на сайт администрации *\"\n                    size=\"full\"\n                    rules={[isRequired(), isCorrectUrl()]}\n                  />\n                  <Line/>\n                  <Text bold>\n                    Объем требуемых средств{' '}\n                    {formatWithTwoDecimalsRub(this.totalCost)}\n                  </Text>\n                  <Box>\n                    <Box direction=\"row\" gap=\"small\">\n                      <NumberInput\n                        type=\"decimal\"\n                        name=\"budgetRegion\"\n                        placeholder=\"Областной бюджет, ₽\"\n                        size=\"xlarge\"\n                      />\n                      <NumberInput\n                        type=\"decimal\"\n                        name=\"budgetPeople\"\n                        placeholder=\"Средства населения, ₽\"\n                        size=\"xlarge\"\n                      />\n                    </Box>\n                    <Box direction=\"row\" gap=\"small\">\n                      <NumberInput\n                        type=\"decimal\"\n                        name=\"budgetDistrict\"\n                        placeholder=\"Бюджет муниципального образования, ₽\"\n                        size=\"xlarge\"\n                      />\n                      <NumberInput\n                        type=\"decimal\"\n                        name=\"noBudgetFunds\"\n                        placeholder=\"Внебюджетные средства, ₽\"\n                        size=\"xlarge\"\n                      />\n                    </Box>\n                  </Box>\n                  <Text bold>Материалы (до и после реализации проекта)*</Text>\n                  <Text>\n                    Эти материалы будут доступны всем пользователям системы.\n                  </Text>\n                  <FilesIdInput\n                    name=\"files\"\n                    withPreview\n                    additionalText={\n                      'Первый выбранный и загруженный файл будет установлен как превью-фото проекта'\n                    }\n                    limits={{ maxFiles: 3 }}\n                    formats={['.jpg', '.png']}\n                    rules={[isRequired()]}\n                  />\n                  <Box direction=\"row\" align=\"center\">\n                    <Img src={visibilitySVG} alt=\"\"/>\n                    <Text bold>Приватные материалы</Text>\n                  </Box>\n                  <Text>\n                    Эти материалы будут доступны только вам и организатору.\n                  </Text>\n                  <FilesIdInput\n                    name=\"privateFiles\"\n                    withPreview\n                    limits={{\n                      maxFiles: 7,\n                      maxFileSize: 10.48e6\n                    }}\n                    additionalText={\n                      'Размер каждого файла не должен превышать 10 Мб'\n                    }\n                    formats={['.jpg', '.png', '.pdf']}\n                  />\n                </Box>\n              </Form>\n              {!!this.error && (\n                <Text color=\"Red\" size=\"small\" margin={{ top: 'small' }}>\n                  {this.error}\n                </Text>\n              )}\n            </Box>\n            <Box\n              direction=\"row\"\n              justify=\"end\"\n              gap=\"medium\"\n              pad={{ vertical: 'xlarge' }}\n              width=\"736px\"\n            >\n              <Button transparent bordered size=\"large\" onClick={this.goBack}>\n                Отмена\n              </Button>\n              <Button\n                size=\"auto\"\n                onClick={this.createProject}\n                disabled={this.isLoading}\n              >\n                Отправить на рассмотрение\n              </Button>\n            </Box>\n          </Box>\n        </Box>\n      </PageContainer>\n    );\n  }\n}\n\nasync function processData(data: IRawProject, pollId: string | number) {\n  try {\n    const fileIds = await uploadFiles(data.files, 'PUBLIC');\n    const privateFileIds = await uploadFiles(data.privateFiles, 'PRIVATE');\n\n    const res = {\n      ...data,\n      pollId,\n      startDate: data.startDate.toISOString(),\n      endDate: data.endDate.toISOString(),\n      files: fileIds.concat(privateFileIds)\n    };\n\n    if (data.type === 'SCHOOL_PARTY') {\n      delete res.sphere;\n    }\n\n    delete res.type;\n    delete res.district;\n    delete res.privateFiles;\n\n    return res;\n  } catch (err) {\n    throw new Error(err.detail || err.title);\n  }\n}\n\nexport async function uploadFiles(\n  files: File[],\n  type: 'PUBLIC' | 'PRIVATE'\n): Promise<string[]> {\n  if (!files.length) {\n    return [];\n  }\n  const previewFile = await uploadFile(files[0], type);\n  const loadedFiles = await Promise.all(\n    files.slice(1).map(file => uploadFile(file, type))\n  );\n  return [previewFile, ...loadedFiles].map(i => i.id);\n}\n\nconst typeOptions = [\n  {\n    text: 'Муниципальное образование',\n    value: 'REGION'\n  },\n  {\n    text: 'Школьная группа',\n    value: 'SCHOOL_PARTY'\n  }\n];\n\nexport const sphereOptions = [\n  {\n    text: 'Водоснабжение, водоотведение',\n    value: 'SEWERAGE'\n  },\n  {\n    text: 'Автомобильные дороги, тротуары, пешеходные переходы, остановки',\n    value: 'ROADS'\n  },\n  {\n    text: 'Уличное освещение',\n    value: 'LIGHTNING'\n  },\n  {\n    text: 'Пожарная безопасность',\n    value: 'FIRE_SAFETY'\n  },\n  {\n    text: 'Проекты в сфере бытового обслуживания населения',\n    value: 'SERVICE_SECTOR'\n  },\n  {\n    text: 'Культурное наследие (памятники, музеи)',\n    value: 'CULTURE'\n  },\n  {\n    text: 'Проекты в сфере образования',\n    value: 'EDUCATION'\n  },\n  {\n    text: 'Проекты в сфере культуры, библиотечного дела, ремонт домов культуры',\n    value: 'CULTURE_REPAIR'\n  },\n  {\n    text: 'Физическая культура и массовый спорт',\n    value: 'SPORT'\n  },\n  {\n    text: 'Комплексное благоустройство дворов',\n    value: 'LANDSCAPING'\n  },\n  {\n    text: 'Детские игровые площадки',\n    value: 'PLAYGROUNDS'\n  },\n  {\n    text: 'Места массового отдыха и объекты организации благоустройства',\n    value: 'MASS_RECREATION_PLACES'\n  },\n  {\n    text: 'Благоустройство мест захоронений',\n    value: 'GRAVEYARDS'\n  },\n  {\n    text: 'Организация сбора твердых коммунальных отходов и мусора',\n    value: 'TRASH'\n  },\n  {\n    text: 'Проекты ЖКХ',\n    value: 'RENOVATION'\n  },\n  {\n    text: 'Крупные инфраструктурные проекты (мосты, плотины, водоёмы)',\n    value: 'BRIDGES'\n  },\n  {\n    text: 'Приобретение оборудования, техники, транспорта',\n    value: 'EQUIPMENT_PURCHASE'\n  },\n  {\n    text:\n      'Проекты, направленные на уязвимые социальные группы и граждан с ограниченными возможностями',\n    value: 'DISABILITIES_CITIZENS'\n  },\n  {\n    text: 'Молодежная политика',\n    value: 'YOUTH_POLICY'\n  },\n  {\n    text: 'Объекты охраны окружающей среды, находящиеся в компетенции органов местного самоуправления',\n    value: 'ENVIRONMENTAL_PROTECTION'\n  },\n  {\n    text: 'Другое',\n    value: 'OTHER'\n  }\n];\n\nexport const getSphere = value => {\n  const sphere = sphereOptions.find(s => s.value === value);\n\n  return sphere ? sphere.text : value;\n};\n\nexport const Img = styled.img`\n  width: 16px;\n  height: 16px;\n  margin-right: 12px;\n`;\n\nconst Line = styled.div`\n  width: 100%;\n  height: 1px;\n  background-color: #d1d1d1;\n  margin-bottom: 16px;\n  margin-top: 4px;\n`;\n","import * as React from 'react';\nimport { Form, MobxForm, TextArea } from '@we-ui-components/form';\nimport { Text } from '@we-ui-components/base';\nimport { maxLength, isRequired } from 'utils';\nimport { Box } from 'grommet';\nimport { observer } from 'mobx-react';\nimport { TActionModalProps } from 'components/ActionModals';\nimport { observable } from 'mobx';\n\n@observer\nexport class DeclineModal extends React.Component<TActionModalProps> {\n  formRef: MobxForm;\n\n  @observable\n  data = { reason: '' };\n\n  componentDidMount(): void {\n    this.props.onValidate.callback = () => this.onValidate();\n  }\n\n  onValidate = async () => {\n    const data = await this.formRef.validateFields();\n\n    return data;\n  };\n\n  render() {\n    return (\n      <Box style={this.props.style}>\n        <Form ref={(ref: any) => (this.formRef = ref)} data={this.data}>\n          <TextArea\n            {...({} as any)}\n            name=\"reason\"\n            placeholder=\"Введите причину отклонения\"\n            rules={[isRequired(), maxLength(255)]}\n            style={{ height: '128px' }}\n          />\n        </Form>\n      </Box>\n    );\n  }\n}\n","import * as React from 'react';\nimport { Form, MobxForm, TextArea } from '@we-ui-components/form';\nimport { maxLength, isRequired } from 'utils';\nimport { Box } from 'grommet';\nimport { observer } from 'mobx-react';\nimport { TActionModalProps } from 'components/ActionModals';\nimport { observable } from 'mobx';\n\n@observer\nexport class RevisionModal extends React.Component<TActionModalProps> {\n  formRef: MobxForm;\n\n  @observable\n  data = { reason: '' };\n\n  componentDidMount(): void {\n    this.props.onValidate.callback = () => this.onValidate();\n  }\n\n  onValidate = async () => {\n    const data = await this.formRef.validateFields();\n\n    return data;\n  };\n\n  render() {\n    return (\n      <Box style={this.props.style}>\n        <Form ref={(ref: any) => (this.formRef = ref)} data={this.data}>\n          <TextArea\n            {...({} as any)}\n            name=\"reason\"\n            placeholder=\"Введите причины возврата проекта на доработку\"\n            rules={[isRequired(), maxLength(1500)]}\n            style={{ height: '128px' }}\n          />\n        </Form>\n      </Box>\n    );\n  }\n}\n","import React, { useState, useRef, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { Box } from 'grommet';\nimport { Routes } from '../../../constants';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores/index';\nimport { Button } from '@we-ui-components/base';\n\nconst size = {\n  mobMenu: '768px'\n};\n\nconst HeaderMenuIcon = styled.div`\n  @media (max-width: ${size.mobMenu}) {\n    display: block;\n    position: fixed;\n    top: 15px;\n    left: 15px;\n    width: 30px;\n    height: 18px;\n    cursor: pointer;\n    z-index: 100;\n    span {\n      top: 8px;\n      left: 0;\n      position: absolute;\n      width: 100%;\n      height: 2px;\n      background: #000;\n      &:first-child {\n        top: 0;\n      }\n      &:last-child {\n        top: auto;\n        bottom: 0;\n      }\n    }\n    &.active span {\n      &:nth-of-type(1) {\n        transform: rotate(45deg) translate(4px, 7px);\n      }\n      &:nth-of-type(2) {\n        display: none;\n      }\n      &:nth-of-type(3) {\n        transform: rotate(-45deg) translate(4px, -7px);\n      }\n    }\n    &:hover span {\n      transition: 0.2s linear;\n    }\n  }\n`;\n\nconst BoxOpenClose = styled.div`\n  .open_menu,\n  .close_menu {\n    position: fixed;\n    top: 0;\n    z-index: 99;\n    display: flex;\n    width: 260px;\n    height: 100%;\n    padding: 45px 0;\n    transform: translateX(-100%);\n    transition: 0.5s ease;\n    box-sizing: border-box;\n    background-color: #f2f2f2;\n    text-align: center;\n\n    a {\n      display: none;\n    }\n  }\n\n  @media (max-width: ${size.mobMenu}) {\n    .open_menu {\n      transform: translateX(0);\n      transition: 1s ease;\n      flex-direction: column;\n\n      a {\n        display: block;\n        padding: 16px 0;\n        margin: 0 10px;\n        font-size: 14px;\n        text-transform: uppercase;\n        border-bottom: 0.7px solid grey;\n\n        &:hover {\n          color: #0728a4;\n          cursor: pointer;\n        }\n      }\n    }\n  }\n`;\n\nconst BoxBgMob = styled.div`\n  .btn_vote {\n    display: none;\n  }\n  @media (max-width: ${size.mobMenu}) {\n    position: fixed;\n    width: 100%;\n    z-index: 80;\n    background-color: white;\n    box-shadow: 0 3px 9px 0 rgb(0 0 0 / 10%);\n    .btn_vote {\n      display: block;\n    }\n  }\n`;\n\nexport const MenuButton = ({ handleClick, isMenuOpen }) => {\n  const handle = () => {\n    return isMenuOpen;\n  };\n  return (\n    <HeaderMenuIcon\n      className={isMenuOpen ? 'active' : ''}\n      onClick={() => {\n        handleClick(handle());\n      }}\n    >\n      <span />\n      <span />\n      <span />\n    </HeaderMenuIcon>\n  );\n};\n\nexport const useOnClickOutside = (ref, handler) => {\n  useEffect(() => {\n    const listener = event => {\n      if (!ref.current || ref.current.contains(event.target)) {\n        return null;\n      }\n      handler();\n    };\n    document.addEventListener('mousedown', listener);\n  }, [ref, handler]);\n};\n\nexport const MenuMobile = observer(() => {\n  const [isMenuBlock, toggleBlock] = useState(false);\n  const node = useRef();\n\n  const { routing } = useStores();\n\n  const toggleMenu = value => {\n    toggleBlock(!value);\n  };\n\n  useOnClickOutside(node, () => {\n    if (isMenuBlock) {\n      toggleMenu(true);\n    }\n  });\n\n  return (\n    <BoxBgMob ref={node}>\n      <Box direction=\"row\" justify=\"end\">\n        <MenuButton handleClick={toggleMenu} isMenuOpen={isMenuBlock} />\n        <Button\n          fontWeight=\"800\"\n          className=\"btn_vote\"\n          onClick={() => routing.push(`/${Routes.loginVoter}`)}\n        >\n          Проголосовать\n        </Button>\n      </Box>\n      <BoxOpenClose>\n        <Box className={isMenuBlock ? 'open_menu' : 'close_menu'}>\n          <a onClick={() => routing.push(`/${Routes.loginOrganizer}`)}>\n            Войти как организатор\n          </a>\n          <a onClick={() => routing.push(`/${Routes.loginApplicant}`)}>\n            Войти как заявитель\n          </a>\n          <a>Посмотреть проекты</a>\n        </Box>\n      </BoxOpenClose>\n    </BoxBgMob>\n  );\n});\n","import * as React from 'react';\nimport { Form, MobxForm, TextArea } from '@we-ui-components/form';\nimport { maxLength, isRequired, limitFileSize } from 'utils';\nimport { Box } from 'grommet';\nimport { observer } from 'mobx-react';\nimport { TActionModalProps } from 'components/ActionModals';\nimport { observable } from 'mobx';\nimport { Title, Text } from '@we-ui-components/base';\nimport { FilesIdInput } from 'pages/Applicant/FileInput';\n\nexport type FormData = {\n  description: string;\n  files: File[];\n};\n\n@observer\nexport class ConfirmFinishModal extends React.Component<TActionModalProps> {\n  formRef: MobxForm;\n\n  private MAX_FILE_SIZE = 10 * 1024 * 1024;\n\n  @observable\n  data: FormData = { description: '', files: [] };\n\n  componentDidMount(): void {\n    this.props.onValidate.callback = () => this.onValidate();\n  }\n\n  onValidate = async () => {\n    const data = await this.formRef.validateFields();\n\n    return data;\n  };\n\n  render() {\n    return (\n      <Box style={this.props.style}>\n        <Title\n          margin={{ top: '-30px', bottom: '24px' }}\n          style={{ maxWidth: '450px' }}\n          bold\n          size=\"small\"\n        >\n          Результаты реализации проекта\n        </Title>\n\n        <Form ref={(ref: any) => (this.formRef = ref)} data={this.data}>\n          <TextArea\n            {...({} as any)}\n            name=\"description\"\n            placeholder=\"Описание результатов реализации*\"\n            rules={[isRequired(), maxLength(1500)]}\n            style={{ height: '119px' }}\n          />\n\n          <Text size=\"xsmall\" fontWeight=\"600\" margin={{ bottom: '22px' }}>\n            Файлы, подтверждающие результаты реализации*\n          </Text>\n\n          <FilesIdInput\n            name=\"files\"\n            withPreview\n            formats={['.jpg', '.png', '.pdf']}\n            limits={{ maxFiles: 3, maxFileSize: this.MAX_FILE_SIZE }}\n            rules={[\n              isRequired(),\n              limitFileSize(\n                this.MAX_FILE_SIZE,\n                'Размер файла не должен превышать 10 MB'\n              )\n            ]}\n          />\n        </Form>\n      </Box>\n    );\n  }\n}\n","export const convertBase64ToFile = (base64Image: string, name) => {\n  // Split into two parts\n  const parts = base64Image.split(';base64,');\n\n  // Hold the content type\n  const imageType = parts[0].split(':')[1];\n\n  // Decode Base64 string\n  const decodedData = window.atob(parts[1]);\n\n  // Create UNIT8ARRAY of size same as row data length\n  const uInt8Array = new Uint8Array(decodedData.length);\n\n  // Insert all character code into uInt8Array\n  for (let i = 0; i < decodedData.length; ++i) {\n    uInt8Array[i] = decodedData.charCodeAt(i);\n  }\n\n  // Return BLOB image after conversion\n  return new File([uInt8Array], name);\n}\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { IProject } from 'interfaces/apiEntities';\nimport { Button, Text, Title } from '@we-ui-components/base';\nimport {\n  Calendar,\n  Form,\n  Input,\n  MobxForm,\n  NumberInput,\n  Select,\n  TextArea\n} from '@we-ui-components/form';\nimport { computed, observable } from 'mobx';\nimport {\n  conditiallyRequired,\n  isCorrectUrl,\n  isPositive,\n  isRequired,\n  lessThan,\n  maxLength\n} from 'utils/validators';\nimport { Img, sphereOptions, uploadFiles } from '../CreateProject';\nimport { formatWithTwoDecimalsRub } from 'utils/formatNumber';\nimport { FilesIdInput } from '../FileInput';\nimport visibilitySVG from '../visibility_off.svg';\nimport { inject, observer } from 'mobx-react';\nimport { reworkProject } from 'services';\nimport { SliderComponent } from 'ui/Slider/SliderComponent';\nimport { IStores } from 'stores/index';\nimport { Routes } from '../../../constants';\nimport { SliderFile } from \"interfaces/uiTypes\";\nimport { convertBase64ToFile } from \"utils/base64toFile\";\nimport * as moment from \"moment\";\n\ninterface IProps {\n  project: IProject;\n}\n\n@inject('routing')\n@observer\nexport class ReworkForm extends React.Component<\n  IProps & Pick<IStores, 'routing'>\n> {\n  formRef: MobxForm;\n  @observable data = {\n    ...this.props.project,\n    startDate: new Date(this.props.project.startDate),\n    endDate: new Date(this.props.project.endDate),\n    sliderPublicFiles: [],\n    sliderPrivateFiles: [],\n    files_new: [],\n    privateFiles_new: []\n  } as any;\n\n  @observable isLoading: boolean;\n  @observable error: string;\n\n  @computed\n  get totalCost() {\n    const {\n      budgetRegion,\n      budgetPeople,\n      budgetDistrict,\n      noBudgetFunds\n    } = this.data;\n    return (\n      Number(budgetRegion) +\n      Number(budgetPeople) +\n      Number(budgetDistrict) +\n      Number(noBudgetFunds)\n    );\n  }\n\n  goBack = () => {\n    const { routing } = this.props;\n    routing.push(`/${Routes.homeApplicant}`);\n  };\n\n  reworkProject = () => {\n    this.formRef.validateFields().then(res => {\n      if (!this.totalCost) {\n        this.error = 'Общий объём требуемых средств должен быть больше 0';\n        return;\n      }\n      this.isLoading = true;\n      this.error = '';\n      return processData(this.data, this.props.project)\n        .then(formData => {\n          return reworkProject(formData)\n            .then(() => this.goBack())\n            .catch(error => {\n              this.error = error.detail || error.title;\n            })\n            .finally(() => (this.isLoading = false));\n        })\n        .catch(err => {\n          this.error = err.message;\n          this.isLoading = false;\n        });\n    });\n  };\n\n  componentDidMount(): void {\n    this.data.sliderPublicFiles = this.data.files.map(({ id, name}) => ({ id, name }))\n    this.data.sliderPrivateFiles = this.data.privateFiles.map(({ id, name}) => ({ id, name }))\n  }\n\n  render() {\n    const isSchoolProject = !!this.data.school;\n\n    return (\n      <Box margin={{ top: 'small' }}>\n        <Form\n          ref={(formRef: MobxForm) => (this.formRef = formRef)}\n          data={this.data}\n        >\n          <Box gap=\"xsmall\">\n            <Input\n              name=\"name\"\n              size=\"full\"\n              placeholder=\"Название проекта *\"\n              rules={[isRequired(), maxLength(120)]}\n            />\n            <DataItem\n              label=\"Тип проекта\"\n              text={\n                isSchoolProject\n                  ? 'Школьный проект'\n                  : 'Муниципальное образование'\n              }\n            />\n            <DataItem\n              label=\"Муниципальный район\"\n              text={\n                isSchoolProject\n                  ? this.data.school.districtName\n                  : this.data.subject.name\n              }\n            />\n            {isSchoolProject && (\n              <DataItem label=\"Школа\" text={this.data.school.name} />\n            )}\n            <Title size=\"xsmall\" bold margin={{ vertical: 'xsmall' }}>\n              Описание проекта\n            </Title>\n            {!isSchoolProject && (\n              <Select\n                name=\"sphere\"\n                label=\"Сфера проекта *\"\n                size=\"full\"\n                options={sphereOptions}\n                rules={[isRequired()]}\n              />\n            )}\n\n            <NumberInput\n              type=\"integer\"\n              name=\"beneficiaries\"\n              placeholder=\"Количество благополучателей, чел *\"\n              size=\"full\"\n              rules={[isRequired(), isPositive(), lessThan(1e8)]}\n              disabled={isSchoolProject}\n            />\n\n            <TextArea\n              {...({} as any)}\n              name=\"description\"\n              label=\"Описание проекта *\"\n              rules={[isRequired(), maxLength(1500)]}\n              style={{ height: '128px' }}\n            />\n            <Box direction=\"row\" gap=\"small\" justify=\"between\">\n              <Calendar\n                name=\"startDate\"\n                size=\"xlarge\"\n                placeholderText=\"Начало реализации *\"\n                rules={[isRequired()]}\n                minDate={moment().add(1, 'day').toDate()}\n              />\n              <Calendar\n                name=\"endDate\"\n                size=\"xlarge\"\n                placeholderText=\"Окончание реализации *\"\n                rules={[isRequired()]}\n              />\n            </Box>\n            <Input\n              name=\"place\"\n              placeholder=\"Место реализации проекта *\"\n              size=\"full\"\n              rules={[isRequired()]}\n            />\n            <Input\n              name=\"administrationLink\"\n              placeholder=\"Ссылка на сайт администрации *\"\n              size=\"full\"\n              rules={[isRequired(), isCorrectUrl()]}\n            />\n          </Box>\n          <Text bold margin={{ bottom: 'xsmall' }}>\n            Объем требуемых средств {formatWithTwoDecimalsRub(this.totalCost)}\n          </Text>\n          <Box>\n            <Box direction=\"row\" gap=\"small\">\n              <NumberInput\n                type=\"decimal\"\n                name=\"budgetRegion\"\n                placeholder=\"Областной бюджет, ₽\"\n                size=\"xlarge\"\n              />\n              <NumberInput\n                type=\"decimal\"\n                name=\"budgetPeople\"\n                placeholder=\"Средства населения, ₽\"\n                size=\"xlarge\"\n              />\n            </Box>\n            <Box direction=\"row\" gap=\"small\">\n              <NumberInput\n                type=\"decimal\"\n                name=\"budgetDistrict\"\n                placeholder=\"Бюджет муниципального образования, ₽\"\n                size=\"xlarge\"\n              />\n              <NumberInput\n                type=\"decimal\"\n                name=\"noBudgetFunds\"\n                placeholder=\"Внебюджетные средства, ₽\"\n                size=\"xlarge\"\n              />\n            </Box>\n          </Box>\n          <Box gap=\"xsmall\">\n            <Text bold>Материалы (до и после реализации проекта)*</Text>\n            <Text>\n              Эти материалы будут доступны всем пользователям системы.\n            </Text>\n            <Text size=\"small\">Уже загруженные файлы</Text>\n            {this.data.sliderPublicFiles.length !== 0 ? (\n              <SliderComponent\n                slideFiles={this.data.sliderPublicFiles}\n                arrow\n                editMode\n                onChange={files => {\n                  this.data.sliderPublicFiles = files;\n                }}\n                style={{ margin: 0 }}\n              />\n            ) : (\n              <Text size=\"small\" color=\"Basic500\">\n                [отсутствуют]\n              </Text>\n            )}\n            {this.data.sliderPublicFiles.length < 3 && (\n              <>\n                <Text size=\"small\" margin={{ bottom: 'xsmall' }}>\n                  Новые файлы\n                </Text>\n\n                <FilesIdInput\n                  name=\"files_new\"\n                  withPreview\n                  rules={[\n                    conditiallyRequired(() => this.data.sliderPublicFiles.length === 0)\n                  ]}\n                  limits={{ maxFiles: 3 - this.data.sliderPublicFiles.length }}\n                  formats={['.jpg', '.png']}\n                />\n              </>\n            )}\n          </Box>\n          <Box gap=\"xsmall\">\n            <Box direction=\"row\" align=\"center\">\n              <Img src={visibilitySVG} alt=\"\" />\n              <Text bold>Приватные материалы</Text>\n            </Box>\n            <Text>Эти материалы будут доступны только вам и организатору.</Text>\n            <Text size=\"small\">Уже загруженные файлы</Text>\n            {this.data.sliderPrivateFiles.length !== 0 ? (\n              <SliderComponent\n                slideFiles={this.data.sliderPrivateFiles}\n                arrow\n                editMode\n                onChange={files => {\n                  this.data.sliderPrivateFiles = files;\n                }}\n                style={{ margin: 0 }}\n              />\n            ) : (\n              <Text size=\"small\" color=\"Basic500\">\n                [отсутствуют]\n              </Text>\n            )}\n            {this.data.sliderPrivateFiles.length < 7 && (\n              <FilesIdInput\n                name=\"privateFiles_new\"\n                withPreview\n                limits={{\n                  maxFiles: 7 - this.data.sliderPrivateFiles.length,\n                  maxFileSize: 10e6\n                }}\n                additionalText={\n                  'Размер каждого файла не должен превышать 10 Мб'\n                }\n                formats={['.png', '.pdf']}\n              />\n            )}\n          </Box>\n        </Form>\n        {!!this.error && (\n          <Text color=\"Red\" size=\"small\" margin={{ top: 'small' }}>\n            {this.error}\n          </Text>\n        )}\n        <Box\n          direction=\"row\"\n          style={{ flex: '1 1 100%' }}\n          justify=\"end\"\n          gap=\"small\"\n        >\n          <Button\n            transparent\n            bordered\n            onClick={this.goBack}\n            disabled={this.isLoading}\n          >\n            Отмена\n          </Button>\n          <Button onClick={this.reworkProject} disabled={this.isLoading}>\n            Отправить на рассмотрение\n          </Button>\n        </Box>\n      </Box>\n    );\n  }\n}\n\nconst DataItem = (props: { label: string; text: string }) => {\n  return (\n    <Box>\n      <Text color=\"Grey\" size=\"small\">\n        {props.label}\n      </Text>\n      <Text>{props.text}</Text>\n    </Box>\n  );\n};\n\nexport async function processData(\n  data: IProject & {\n    files_new: File[];\n    privateFiles_new: File[];\n    sliderPublicFiles: SliderFile[];\n    sliderPrivateFiles: SliderFile[];\n    startDate: Date;\n    endDate: Date;\n  },\n  project: IProject\n) {\n  try {\n    const file_newIds = await uploadFiles(data.files_new, 'PUBLIC');\n    const privateFiles_newIds = await uploadFiles(\n      data.privateFiles_new,\n      'PRIVATE'\n    );\n\n    const updatedPublicFiles = await Promise.all(data.sliderPublicFiles.map( async (file) => {\n      if('base64' in file){\n        const [id] = await uploadFiles([convertBase64ToFile(file.base64, file.name) as File], 'PUBLIC')\n        return id\n      }\n      return file.id\n    }))\n\n    const updatedPrivateFiles = await Promise.all(data.sliderPrivateFiles.map( async (file) => {\n      if('base64' in file){\n        const [id] = await uploadFiles([convertBase64ToFile(file.base64, file.name) as File], 'PRIVATE')\n        return id\n      }\n      return file.id\n    }))\n\n    const publicIds = updatedPublicFiles.concat(file_newIds);\n    const privateIds = updatedPrivateFiles.concat(privateFiles_newIds);\n\n    const res = {\n      ...project,\n      ...data,\n      startDate: data.startDate.toISOString(),\n      endDate: data.endDate.toISOString(),\n      files: publicIds.concat(privateIds)\n    };\n\n    delete res.files_new;\n    delete res.privateFiles;\n    delete res.privateFiles_new;\n    delete res.sliderPublicFiles;\n    delete res.sliderPrivateFiles;\n\n    return res;\n  } catch (err) {\n    throw new Error(err.detail || err.title);\n  }\n}\n","import * as React from 'react';\nimport {\n  Calendar,\n  Form,\n  Input,\n  MobxForm,\n  NumberInput,\n  Select,\n  TextArea\n} from '@we-ui-components/form';\nimport { Text, Title } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport { observer } from 'mobx-react';\nimport { TActionModalProps } from 'components/ActionModals';\nimport { computed, observable } from 'mobx';\nimport {\n  conditiallyRequired,\n  isCorrectUrl,\n  isPositive,\n  isRequired,\n  lessThan,\n  maxLength\n} from 'utils/validators';\nimport { Img, sphereOptions } from 'pages/Applicant/CreateProject';\nimport { formatWithTwoDecimalsRub } from 'utils';\nimport { SliderComponent } from 'ui/Slider/SliderComponent';\nimport { FilesIdInput } from 'pages/Applicant/FileInput';\nimport visibilitySVG from 'pages/Applicant/visibility_off.svg';\nimport { SliderFile, IProject } from 'interfaces';\nimport { processData } from 'pages/Applicant/ActiveProject/ReworkForm';\nimport { useEffect, useMemo } from \"react\";\nimport * as moment from \"moment\";\n\nexport type FormData = IProject & {\n  files_new: File[];\n  privateFiles_new: File[];\n  sliderPublicFiles: SliderFile[];\n  sliderPrivateFiles: SliderFile[];\n  startDate: Date;\n  endDate: Date;\n};\n\n@observer\nexport class ReworkProjectModal extends React.Component<\n  TActionModalProps<IProject>\n> {\n  formRef: MobxForm;\n\n  @observable\n  data: FormData = {\n    ...this.props.actionData.data,\n    startDate: new Date(this.props.actionData.data.startDate),\n    endDate: new Date(this.props.actionData.data.endDate),\n    files_new: [],\n    sliderPublicFiles: [],\n    sliderPrivateFiles: [],\n    privateFiles_new: []\n  } as FormData;\n\n  componentDidMount(): void {\n    this.props.onValidate.callback = () => this.onValidate();\n    this.data.sliderPublicFiles = this.data.files.map(({ id, name}) => ({ id, name }))\n    this.data.sliderPrivateFiles = this.data.privateFiles.map(({ id, name}) => ({ id, name }))\n  }\n\n  onValidate = async () => {\n    const data = await this.formRef.validateFields();\n\n    if (!this.totalCost) {\n      throw new Error('Общий объём требуемых средств должен быть больше 0');\n    }\n\n    return processData(data, this.props.actionData.data);\n  };\n\n  @computed\n  get totalCost() {\n    const {\n      budgetRegion,\n      budgetPeople,\n      budgetDistrict,\n      noBudgetFunds\n    } = this.data;\n    return (\n      Number(budgetRegion) +\n      Number(budgetPeople) +\n      Number(budgetDistrict) +\n      Number(noBudgetFunds)\n    );\n  }\n\n  render() {\n    const isSchoolProject = !!this.data.school;\n\n    return (\n      <Box style={this.props.style}>\n        <Title\n          margin={{ top: '-30px', bottom: '24px' }}\n          style={{ maxWidth: '450px' }}\n          bold\n          size=\"small\"\n        >\n          Доработка проекта\n        </Title>\n\n        <Form\n          ref={(formRef: MobxForm) => (this.formRef = formRef)}\n          data={this.data}\n        >\n          <Box gap=\"xsmall\">\n            <Input\n              name=\"name\"\n              size=\"full\"\n              placeholder=\"Название проекта *\"\n              rules={[isRequired(), maxLength(120)]}\n            />\n            <DataItem\n              label=\"Тип проекта\"\n              text={\n                isSchoolProject\n                  ? 'Школьный проект'\n                  : 'Муниципальное образование'\n              }\n            />\n            <DataItem\n              label=\"Муниципальный район\"\n              text={\n                isSchoolProject\n                  ? this.data.school.districtName\n                  : this.data.subject.name\n              }\n            />\n            {isSchoolProject && (\n              <DataItem label=\"Школа\" text={this.data.school.name} />\n            )}\n            <Title size=\"xxxsmall\" bold margin={{ vertical: 'xsmall' }}>\n              Описание проекта\n            </Title>\n            {!isSchoolProject && (\n              <Select\n                name=\"sphere\"\n                label=\"Сфера проекта *\"\n                size=\"full\"\n                options={sphereOptions.filter(op => !['CULTURE', 'EDUCATION'].includes(op.value))}\n                rules={[isRequired()]}\n              />\n            )}\n\n            <NumberInput\n              type=\"integer\"\n              name=\"beneficiaries\"\n              placeholder=\"Количество благополучателей, чел *\"\n              size=\"full\"\n              rules={[isRequired(), isPositive(), lessThan(1e8)]}\n              disabled={isSchoolProject}\n            />\n\n            <TextArea\n              {...({} as any)}\n              name=\"description\"\n              label=\"Описание проекта *\"\n              rules={[isRequired(), maxLength(1500)]}\n              style={{ height: '128px' }}\n            />\n            <Box direction=\"row\" gap=\"small\" justify=\"between\">\n              <Calendar\n                name=\"startDate\"\n                size=\"xlarge\"\n                placeholderText=\"Начало реализации *\"\n                rules={[isRequired()]}\n                minDate={moment().add(1, 'day').toDate()}\n              />\n              <Calendar\n                name=\"endDate\"\n                size=\"xlarge\"\n                placeholderText=\"Окончание реализации *\"\n                rules={[isRequired()]}\n              />\n            </Box>\n            <Input\n              name=\"place\"\n              placeholder=\"Место реализации проекта *\"\n              size=\"full\"\n              rules={[isRequired()]}\n            />\n            <Input\n              name=\"administrationLink\"\n              placeholder=\"Ссылка на сайт администрации *\"\n              size=\"full\"\n              rules={[isRequired(), isCorrectUrl()]}\n            />\n          </Box>\n          <Text bold margin={{ bottom: 'xsmall' }}>\n            Объем требуемых средств {formatWithTwoDecimalsRub(this.totalCost)}\n          </Text>\n          <Box>\n            <Box direction=\"row\" gap=\"small\">\n              <NumberInput\n                type=\"decimal\"\n                name=\"budgetRegion\"\n                placeholder=\"Областной бюджет, ₽\"\n                size=\"xlarge\"\n              />\n              <NumberInput\n                type=\"decimal\"\n                name=\"budgetPeople\"\n                placeholder=\"Средства населения, ₽\"\n                size=\"xlarge\"\n              />\n            </Box>\n            <Box direction=\"row\" gap=\"small\">\n              <NumberInput\n                type=\"decimal\"\n                name=\"budgetDistrict\"\n                placeholder=\"Бюджет муниципального образования, ₽\"\n                size=\"xlarge\"\n              />\n              <NumberInput\n                type=\"decimal\"\n                name=\"noBudgetFunds\"\n                placeholder=\"Внебюджетные средства, ₽\"\n                size=\"xlarge\"\n              />\n            </Box>\n          </Box>\n\n          <Box gap=\"xsmall\">\n            <Text bold>Материалы (до и после реализации проекта)*</Text>\n            <Text>\n              Эти материалы будут доступны всем пользователям системы.\n            </Text>\n            <Text size=\"small\">Уже загруженные файлы</Text>\n\n            {this.data.sliderPublicFiles.length !== 0 ? (\n              <SliderComponent\n                slideFiles={this.data.sliderPublicFiles}\n                arrow\n                editMode\n                onChange={files => {\n                  this.data.sliderPublicFiles = files;\n                }}\n                style={{ margin: 0 }}\n              />\n            ) : (\n              <Text size=\"small\" color=\"Basic500\">\n                [отсутствуют]\n              </Text>\n            )}\n\n            {this.data.sliderPublicFiles.length < 3 && (\n              <>\n                <Text size=\"small\" margin={{ bottom: 'xsmall' }}>\n                  Новые файлы\n                </Text>\n\n                <FilesIdInput\n                  name=\"files_new\"\n                  withPreview\n                  rules={[\n                    conditiallyRequired(() => this.data.sliderPublicFiles.length === 0)\n                  ]}\n                  limits={{ maxFiles: 3 - this.data.sliderPublicFiles.length }}\n                  formats={['.jpg', '.png']}\n                />\n              </>\n            )}\n          </Box>\n\n          <Box gap=\"xsmall\">\n            <Box direction=\"row\" align=\"center\">\n              <Img src={visibilitySVG} alt=\"\" />\n              <Text bold>Приватные материалы</Text>\n            </Box>\n            <Text>Эти материалы будут доступны только вам и организатору.</Text>\n            <Text size=\"small\">Уже загруженные файлы</Text>\n            {this.data.sliderPrivateFiles.length !== 0 ? (\n              <SliderComponent\n                slideFiles={this.data.sliderPrivateFiles}\n                arrow\n                editMode\n                onChange={files => {\n                  this.data.sliderPrivateFiles = files;\n                }}\n                style={{ margin: 0 }}\n              />\n            ) : (\n              <Text size=\"small\" color=\"Basic500\">\n                [отсутствуют]\n              </Text>\n            )}\n            {this.data.sliderPrivateFiles.length < 7 && (\n              <FilesIdInput\n                name=\"privateFiles_new\"\n                withPreview\n                limits={{\n                  maxFiles: 7 - this.data.sliderPrivateFiles.length,\n                  maxFileSize: 10e6\n                }}\n                additionalText={\n                  'Размер каждого файла не должен превышать 10 Мб'\n                }\n                formats={['.png', '.pdf']}\n              />\n            )}\n          </Box>\n        </Form>\n      </Box>\n    );\n  }\n}\n\nconst DataItem = (props: { label: string; text: string }) => {\n  return (\n    <Box>\n      <Text color=\"Grey\" size=\"xxsmall\">\n        {props.label}\n      </Text>\n      <Text size=\"xsmall\">{props.text}</Text>\n    </Box>\n  );\n};\n","import { IUserInfo } from 'interfaces/apiEntities';\nimport { encryptMsg } from 'utils';\nimport { getMainKeyById, getSignKeyById, sendBulletin } from 'services/poll';\nimport { encode } from '@msgpack/msgpack'\n\nexport const encryptBulletin = async (mainKey: string, dimension: Array<[number, number, number]>, bulletin: number[][]) => {\n  if ('BigInt' in window) {\n    const { makeEncryptedBulletin } = await import('@wavesenterprise/voting-crypto/browser')\n    return makeEncryptedBulletin({\n      mainKey,\n      weight: 1,\n      bulletin,\n      dimension,\n    }, true)\n  } else {\n    const { makeEncryptedBulletin } = await import('@wavesenterprise/voting-crypto/browser-old')\n    return makeEncryptedBulletin({\n      mainKey,\n      weight: 1,\n      bulletin,\n      dimension,\n    }, true)\n  }\n}\n\nexport const convertUint8ArrayToBase64 = (bytes: Uint8Array) => {\n  const output = []\n  for (let i = 0, length = bytes.length; i < length; i++) {\n    output.push(String.fromCharCode(bytes[i]))\n  }\n  return btoa(output.join(''))\n}\n\nexport const vote = async (params: {\n  pollId: string;\n  contractId: string;\n  selectedProjectNumber: number;\n  projectsLength: number;\n  userInfo: IUserInfo;\n  password?: string;\n}) => {\n  const {\n    pollId,\n    contractId,\n    selectedProjectNumber,\n    projectsLength,\n    userInfo,\n    password\n  } = params;\n\n  if (selectedProjectNumber < 0) {\n    throw new Error('Проект не выбран');\n  }\n\n  if (Number(projectsLength) === 0) {\n    throw new Error('Нет активных проектов');\n  }\n\n  let response;\n  let encryptedUserBulletin = '';\n\n  const bulletinPart = [...new Array(projectsLength)].map(() => 0);\n\n  bulletinPart[selectedProjectNumber] = 1;\n\n  const bulletin = [bulletinPart];\n\n  if (password) {\n    encryptedUserBulletin = encryptMsg(JSON.stringify(bulletin), password);\n  }\n\n  // Извлекаем важные параметры для крипто библиотеки из голосования в переменные\n  //\n  const dimension = [[1, 1, projectsLength] as any];\n\n  response = await getMainKeyById(pollId);\n\n  const mainKey = response.mainKey;\n\n  response = await getSignKeyById(pollId);\n\n  const { regSign, publicKey } = response;\n\n  const encryptedBulletin = await encryptBulletin(mainKey, dimension, bulletin);\n  const serializedBulletin = convertUint8ArrayToBase64(encode(encryptedBulletin))\n\n  // Формируем транзакцию\n  const tx = {\n    sender: userInfo.participantAddress, // реквизиты подписанта берем из токена\n    senderPublicKey: userInfo.participantPublicKey,\n    contractId,\n    fee: 0, // хардкод, так и оставляем\n    timestamp: Date.now(), // текущая дата\n    contractVersion: 1, // хардкод, так и оставляем\n    params: [\n      {\n        type: 'string',\n        key: 'operation',\n        value: 'vote' // что далем - голосуем\n      },\n      {\n        type: 'string',\n        key: 'vote',\n        value: serializedBulletin // как - как зашифровали\n      },\n      {\n        type: 'string',\n        key: 'participant',\n        value: JSON.stringify([userInfo.participantPublicKey, '1'])\n      },\n      {\n        type: 'integer',\n        key: 'weight',\n        value: 1,\n      },\n      {\n        type: 'string',\n        key: 'regSign',\n        value: regSign\n      }\n    ],\n    version: 3, // хардкод, так и оставляем\n    type: 104 // хардкод, так и оставляем\n  };\n\n  response = await sendBulletin(pollId, {\n    encryptedBulletin: encryptedUserBulletin,\n    signRequest: tx\n  });\n\n  return response;\n};\n","import * as React from 'react';\nimport { useStores } from 'stores/index';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\nimport { Box } from 'grommet';\nimport { OkIcon, ShareIcon, VkIcon } from '../icons';\nimport { Button } from '@we-ui-components/base';\nimport { IProject } from 'interfaces/apiEntities';\nimport { baseUrl, ENDPOINTS } from 'services/endpoints';\n\nexport type ShareType = 'vk' | 'ok';\n\nexport type UrlParams = {\n  url: string;\n  title: string;\n  image?: string;\n  imageUrl?: string;\n  description?: string;\n  noParse?: number;\n  noVkLinks?: number;\n}\n\nconst vkParams = (project: IProject): UrlParams => ({\n  url: baseUrl + location.pathname,\n  title: project.name,\n  image: ENDPOINTS.projectLogo(project.id),\n  noParse: 1\n})\n\n\nconst okParams = (project: IProject): UrlParams => ({\n  url: baseUrl + location.pathname,\n  title: project.name,\n  imageUrl: ENDPOINTS.projectLogo(project.id)\n})\n\n\nexport const SHARE_LINKS: Record<ShareType, string> = {\n  vk: 'https://vk.com/share.php',\n  ok: 'https://connect.ok.ru/offer'\n}\n\nconst SHARE_PARAMS: Record<ShareType, (p: any) => UrlParams> = {\n  vk: vkParams,\n  ok: okParams\n}\n\nexport function objectToGetParams(object: UrlParams) {\n  const params = Object.entries(object)\n    .filter(([, value]) => value !== undefined && value !== null)\n    .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n\n  return params.length > 0 ? `?${params.join('&')}` : '';\n}\n\nexport const windowOpen = (\n  url: string,\n  { height = 460, width = 660, ...configRest }: { height?: number; width?: number; [key: string]: any },\n) => {\n  const config: { [key: string]: string | number } = {\n    height,\n    width,\n    location: 'no',\n    toolbar: 'no',\n    status: 'no',\n    directories: 'no',\n    menubar: 'no',\n    scrollbars: 'yes',\n    resizable: 'no',\n    centerscreen: 'yes',\n    chrome: 'yes',\n    ...configRest,\n  };\n\n  return window.open(\n    url,\n    '',\n    Object.keys(config)\n      .map(key => `${key}=${config[key]}`)\n      .join(', '),\n  );\n}\n\nexport const ShareLinks = ({ onShare }: { onShare: (type: ShareType) => void }) => {\n  return (\n    <Box direction=\"row\">\n      <VkIcon cursor=\"pointer\" onClick={() => onShare('vk')} />\n\n      <Box margin={{ left: 'xsmall' }}>\n        <OkIcon cursor=\"pointer\" onClick={() => onShare('ok')} />\n      </Box>\n    </Box>\n  );\n}\n\n\nexport const ShareButton: React.FC<{ project: IProject }> = ({ project }) => {\n  const { actionModals } = useStores();\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n  const isTabletOrWider = useMediaQuery({ minDeviceWidth: breakpoints.tablet });\n\n  const handleClickShare = () => {\n    actionModals.open(\n      () => (\n        <Box pad={{ bottom: 'large' }}>\n          <Box direction=\"row\">\n            <ShareLinks\n              onShare={type => {\n                const provideParams = SHARE_PARAMS[type];\n                const url = SHARE_LINKS[type]\n\n                windowOpen(url + objectToGetParams(provideParams(project)), {})\n              }}\n            />\n          </Box>\n\n          <Box align=\"end\" style={{ flex: '1 1 100%' }}>\n            <Button\n              onClick={() => actionModals.closeLastModal()}\n              margin={{ left: 'auto' }}>Закрыть</Button>\n          </Box>\n        </Box>\n      ),\n      {\n        title: 'Поделиться проектом в соц.сетях',\n        width: isLaptopOrWider ? '545px' : 'auto',\n        modalStyle: {\n          maxWidth: isTabletOrWider ? '545px' : '100vw'\n        }\n      }\n    );\n  }\n\n\n  return (\n    <Button\n      onClick={handleClickShare}\n      color={isTabletOrWider ? 'Purple' : 'White'}\n      transparent>\n      <ShareIcon /> <Box margin={{ left: 'xxsmall' }}>Поделиться</Box>\n\n    </Button>\n  )\n}\n","import { Button, Text } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores/index';\nimport { vote } from './voting';\nimport { EncryptPasswordModal } from 'components/Head/components/EncryptPasswordModal';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\nimport { useTheme } from 'utils';\nimport { IPoll, PROJECT_STATUS } from 'interfaces/apiEntities';\nimport { objectToGetParams, SHARE_LINKS, ShareLinks, ShareType, UrlParams, windowOpen } from './components/ShareButton';\nimport { getPollTitle } from './index';\nimport { baseUrl } from 'services/endpoints';\n\nconst vkPollParams = (poll: IPoll): UrlParams => ({\n  url: baseUrl + location.pathname,\n  title: getPollTitle(poll.subject),\n  image: '',\n  noParse: 1\n})\n\nconst okPollParams = (poll: IPoll): UrlParams => ({\n  url: baseUrl + location.pathname,\n  title: getPollTitle(poll.subject),\n  image: '',\n})\n\nexport const SHARE_PARAMS: Record<ShareType, (p: any) => UrlParams> = {\n  vk: vkPollParams,\n  ok: okPollParams\n}\n\nexport const VotingActionsPanel = observer(() => {\n  const { user, actionModals, activePoll } = useStores();\n  const theme = useTheme();\n\n  const isVoter = user.isContainRoles(['VOTER']);\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n\n  const modalSuccessfulEncrypt = (): void => {\n    actionModals.open(\n      () => (\n        <Text size=\"xlarge\" bold style={{ marginBottom: '15px' }}>\n          История вашего голосования доступна для отображения\n        </Text>\n      ),\n      {\n        isOverlayClose: true,\n        setTimeCloseModal: 15000\n      }\n    );\n  };\n\n  const displayEncryptPassModal = () => {\n    actionModals.open(EncryptPasswordModal, {\n      width: isLaptopOrWider ? '384px' : '100%',\n      applyText: () =>\n        !user.encryptedContent ? <>Создать</> : <>Подтвердить</>,\n      closeText: () => <>Отмена</>,\n      noValidation: true,\n      onApply: async data => {\n        await user.saveEncryptPassword(data.password);\n        modalSuccessfulEncrypt();\n      },\n      overlayStyle: {\n        background: isLaptopOrWider ? 'transparent' : 'rgba(10, 6, 6, 0.5)',\n        alignItems: isLaptopOrWider ? 'flex-end' : 'center',\n        padding: '32px 16px'\n      },\n      modalStyle: {\n        boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04)',\n        position: isLaptopOrWider ? 'absolute' : 'relative',\n        top: isLaptopOrWider ? 72 : 'auto',\n        right: isLaptopOrWider ? 72 : 'auto',\n        maxWidth: '482px',\n        margin: 'auto',\n        marginTop: isLaptopOrWider ? 'auto' : '32px'\n      },\n      isOverlayClose: true\n    });\n  };\n\n  const isVoteWithPassword = !!activePoll.encryptedBulletin;\n\n  if (activePoll.hasVote && !isVoteWithPassword) {\n    return null;\n  }\n\n  if (activePoll.hasVote && isVoteWithPassword) {\n    return (\n      <Box direction=\"column\" gap=\"20px\">\n        {isVoter && !user.encryptPassword ? (\n          <Box direction=\"column\" gap=\"10px\">\n            <Text size=\"xsmall\" style={{ fontWeight: 600 }}>\n              Посмотреть историю голосования\n            </Text>\n            <Button\n              transparent={true}\n              style={{\n                borderRadius: 2,\n                border: '1px solid rgba(59, 51, 176, 0.2)',\n                color: theme.palette.Purple,\n                marginTop: 10\n              }}\n              onClick={() => {\n                displayEncryptPassModal();\n              }}\n            >\n              Введите пароль\n            </Button>\n          </Box>\n        ) : null}\n      </Box>\n    );\n  }\n\n  return (\n    <Box direction=\"column\" gap=\"8px\">\n      {isVoter && !user.encryptPassword ? (\n        <Box direction=\"column\" gap=\"10px\">\n          <Text size=\"xsmall\" style={{ fontWeight: 600 }}>\n            Задайте пароль\n          </Text>\n          <Text size=\"xsmall\" style={{ lineHeight: '19px', fontWeight: 400 }}>\n            Мы обеспечиваем анонимность голосования. Ваш голос будет зашифрован.\n            Создание пароля позволит просмотреть историю вашего голосования.\n          </Text>\n          <Button\n            transparent={true}\n            style={{\n              borderRadius: 2,\n              border: '1px solid rgba(59, 51, 176, 0.2)',\n              color: theme.palette.Purple,\n              marginTop: 10\n            }}\n            onClick={() => {\n              displayEncryptPassModal();\n            }}\n          >\n            Создать пароль\n          </Button>\n        </Box>\n      ) : null}\n    </Box>\n  );\n});\n","import { Button, Text } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport * as React from 'react';\nimport { useCallback, useRef, useState } from 'react';\nimport { useTheme } from 'utils/hooks';\nimport { observer } from 'mobx-react-lite';\nimport { IProject, PROJECT_STATUS } from 'interfaces/apiEntities';\nimport { useStores } from 'stores/index';\nimport { ActionModalConfig } from 'stores/ActionModalsStore';\nimport { DeclineModal } from './DeclineModal';\nimport styled from 'styled-components';\nimport { breakpoints, KebabIcon } from 'ui';\nimport { RevisionModal } from './RevisionModal';\nimport { useOnClickOutside } from '../Landing/HeaderMenu/MenuMob';\nimport {\n  ConfirmFinishModal,\n  FormData as ConfirmFinishModalFormData\n} from './ConfirmFinishModal';\nimport { ReworkProjectModal } from './ReworkProjectModal';\nimport { TProjectAction } from \"services/projectService\";\nimport { vote } from \"./voting\";\nimport {\n  objectToGetParams,\n  SHARE_LINKS,\n  ShareLinks,\n  windowOpen\n} from \"./components/ShareButton\";\nimport { SHARE_PARAMS } from \"./VotingActionsPanel\";\nimport { useMediaQuery } from \"react-responsive\";\n\nexport const ProjectActionsPanel = observer<{ project: IProject }>(\n  ({ project }) => {\n    const theme = useTheme();\n    const {\n      user,\n      activePoll,\n      projectList,\n      activeProject,\n      actionModals,\n      votings,\n    } = useStores();\n\n    const [revisionStatus, setRevisionStatus] = useState(false);\n    const node = useRef();\n    useOnClickOutside(node, () => {\n      if (revisionStatus) {\n        setRevisionStatus(false);\n      }\n    });\n\n    const isVoter = user.isContainRoles(['VOTER']);\n    const isOrganizer = user.isContainRoles(['REGULATOR']);\n\n\n    const isLaptopOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.laptop\n    });\n    const isTabletOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.tablet\n    });\n\n    const isPollActive = [\n      'APPLICATIONS_RECEIVING',\n      'WAITING_FOR_VOTING'\n    ].includes(activePoll.poll.status);\n\n    const isPollCompleted = ['FINISHED'].includes(activePoll.poll.status);\n\n    const displayActionButton =\n      [PROJECT_STATUS.IN_REVIEW, PROJECT_STATUS.REWORK_COMPLETED].includes(\n        project.status\n      ) &&\n      isOrganizer &&\n      isPollActive;\n\n    const displayPostActionButton =\n      [PROJECT_STATUS.APPROVED].includes(project.status) &&\n      isOrganizer &&\n      isPollCompleted;\n\n    const displayConfirmFinishActionButton =\n      project.status === PROJECT_STATUS.IN_PROGRESS &&\n      isOrganizer &&\n      isPollCompleted;\n\n    const makeProjectAction = useCallback((action: TProjectAction, data?: { reason: string } | IProject) => {\n      activeProject.callProjectAction(project.id, action, data).then(() => {\n        projectList.init({ filters: { pollId: activePoll.pollId } });\n        projectList.getProjectTabCount(activePoll.pollId)\n      })\n    }, [projectList, activeProject, activePoll, project])\n\n    const approveProject = () => {\n      actionModals.open(\n        ({ config }: { config: ActionModalConfig }) => (\n          <Text size=\"medium\"></Text>\n        ),\n        {\n          title: `Вы уверены, что хотите принять проект?`,\n          applyText: () => <>Принять</>,\n          closeText: () => <>Отменить</>,\n          noValidation: true,\n          onApply: async () => makeProjectAction('approve')\n        }\n      );\n    };\n\n    const revisionProject = () => {\n      setRevisionStatus(false);\n      actionModals.open(RevisionModal, {\n        title: `Возврат на доработку`,\n        applyText: () => <>Вернуть на доработку</>,\n\n        closeText: () => <>Отмена</>,\n        noValidation: true,\n        onApply: async (data: { reason: string }) => makeProjectAction('requireRework', data),\n        modalStyle: { padding: '10px' }\n      });\n    };\n\n    const declineProject = () => {\n      setRevisionStatus(false);\n      actionModals.open(DeclineModal, {\n        title: `Введите причину отклонения`,\n        applyText: () => <>Отклонить проект</>,\n        applyButtonProps: {\n          bgColor: 'Red',\n          padding: '8xp 16px'\n        },\n        closeText: () => <>Отмена</>,\n        noValidation: true,\n        onApply: async (data: { reason: string }) => makeProjectAction('decline', data),\n        modalStyle: { padding: '10px' }\n      });\n    };\n\n    const archiveProject = () => {\n      actionModals.open(\n        ({ config }: { config: ActionModalConfig }) => <Text size=\"medium\"/>,\n        {\n          title: `Вы уверены, что хотите перевести проект в архив?`,\n          applyText: () => <>Перевести в архив</>,\n          closeText: () => <>Отмена</>,\n          noValidation: true,\n          onApply: async () => makeProjectAction('archive'),\n        }\n      );\n    };\n    const implementationProject = () => {\n      actionModals.open(\n        ({ config }: { config: ActionModalConfig }) => <Text size=\"medium\"/>,\n        {\n          title: `Вы уверены, что хотите перевести проект в реализацию?`,\n          applyText: () => <>Перевести в реализацию</>,\n          closeText: () => <>Отмена</>,\n          noValidation: true,\n          onApply: async () => makeProjectAction('start'),\n        }\n      );\n    };\n\n    const openConfirmFinishModal = () => {\n      actionModals.open(ConfirmFinishModal, {\n        width: '545px',\n        applyText: () => <span>Подтвердить</span>,\n        onApply: async (data: ConfirmFinishModalFormData) =>\n          activeProject\n            .confirmFinish(project.id, data.description, data.files)\n            .then(() => {\n              projectList.init({ filters: { pollId: activePoll.pollId } });\n              projectList.getProjectTabCount(activePoll.pollId)\n            }),\n        closeText: () => <span>Отменить</span>,\n        noValidation: true\n      });\n    };\n\n    const voteForProject = async () => {\n      try {\n        activePoll.hasVote = true;\n        await vote({\n          pollId: activePoll.poll.id,\n          contractId: activePoll.poll.contractId,\n          selectedProjectNumber: activePoll.bulletinOrder,\n          projectsLength:\n            activePoll.poll.bulletinProjectsCount ||\n            projectList.data.filter(\n              p =>\n                p.status === PROJECT_STATUS.APPROVED &&\n                p.bulletinOrder !== null\n            ).length,\n          userInfo: user.userInfo,\n          password: user.encryptPassword\n        });\n        actionModals.open(\n          () => (\n            <Box>\n              <Text size=\"medium\">Ожидайте результатов голосования</Text>\n\n              <Text size=\"medium\" margin={{ top: 'small', bottom: 'xsmall' }}>Поделитесь\n                голосованием в\n                соц.сетях:</Text>\n\n              <ShareLinks\n                onShare={type => {\n                  const provideParams = SHARE_PARAMS[type];\n                  const url = SHARE_LINKS[type]\n\n                  windowOpen(url + objectToGetParams(provideParams(activePoll.poll)), {})\n                }}\n              />\n\n              <Box align=\"end\" style={{ flex: '1 1 100%' }}\n                   margin={{ bottom: 'small' }}>\n                <Button\n                  onClick={() => actionModals.closeLastModal()}\n                  margin={{ left: 'auto' }}>Закрыть</Button>\n              </Box>\n            </Box>\n          ),\n          {\n            title: `Спасибо. Ваш голос учтен`,\n            noValidation: true,\n            overlayStyle: {\n              padding: '32px 16px'\n            },\n            width: isLaptopOrWider ? '545px' : 'auto',\n            modalStyle: {\n              maxWidth: isTabletOrWider ? '545px' : '100vw'\n            }\n          }\n        );\n      } catch (e) {\n        activePoll.hasVote = false;\n        throw e\n      }\n      await votings.fetch();\n    };\n\n    const openEditProjectModal = () => {\n      actionModals.open(ReworkProjectModal, {\n        initData: project,\n        width: '736px',\n        applyText: () => <span>Подтвердить</span>,\n        onApply: async (formData: IProject) => makeProjectAction('completeRework', formData),\n        closeText: () => <span>Отменить</span>,\n        noValidation: true,\n        modalStyle: {\n          margin: '96px auto 74px'\n        }\n      });\n    };\n\n    const deleteProject = () => {\n      actionModals.open(\n        ({ config }: { config: ActionModalConfig }) => (\n          <Text size=\"medium\"></Text>\n        ),\n        {\n          title: `Вы уверены, что хотите удалить проект? Восстановить проект будет невозможно.`,\n          applyText: () => <>Удалить</>,\n          closeText: () => <>Отменить</>,\n          noValidation: true,\n          onApply: async () => makeProjectAction('delete'),\n        }\n      );\n    };\n\n    if (isOrganizer) {\n      return (\n        <Box\n          align=\"center\"\n          direction=\"row\"\n          margin={{ left: 'auto' }}\n          style={{ position: 'relative' }}\n          gap=\"small\"\n        >\n          {displayActionButton && (\n            <Box ref={node}>\n              <Button onClick={() => setRevisionStatus(!revisionStatus)}>\n                <KebabIcon color=\"white\" width=\"1em\"/>\n              </Button>\n              {revisionStatus && (\n                <BoxRevisionStyle pad=\"small\" gap=\"xxsmall\">\n                  <Button\n                    bordered\n                    transparent\n                    onClick={() => {\n                      revisionProject();\n                    }}\n                    color=\"#483fc7\"\n                    style={{ border: '1px solid #483fc7' }}\n                  >\n                    Отправить на доработку\n                  </Button>\n\n                  <Button\n                    bordered\n                    transparent\n                    color=\"#483fc7\"\n                    size=\"full\"\n                    style={{ border: '1px solid #483fc7' }}\n                    onClick={() => {\n                      setRevisionStatus(false);\n                      openEditProjectModal();\n                    }}\n                  >\n                    Доработать\n                  </Button>\n                  <Button\n                    bordered\n                    transparent\n                    color=\"Red\"\n                    size=\"full\"\n                    style={{ border: '1px solid #F0222B' }}\n                    onClick={() => {\n                      deleteProject();\n                    }}\n                  >\n                    Удалить\n                  </Button>\n                </BoxRevisionStyle>\n              )}\n            </Box>\n          )}\n          {displayActionButton && (\n            <Button\n              bordered\n              transparent\n              color=\"Red\"\n              onClick={() => {\n                declineProject();\n              }}\n              style={{ border: '1px solid #F0222B' }}\n            >\n              Отклонить\n            </Button>\n          )}\n          {displayActionButton && (\n            <Button\n              onClick={() => {\n                approveProject();\n              }}\n            >\n              Принять\n            </Button>\n          )}\n          {displayPostActionButton && (\n            <Button\n              bordered\n              transparent\n              color=\"Blue\"\n              onClick={() => {\n                archiveProject();\n              }}\n              style={{ border: '1px solid #204080' }}\n            >\n              В архив\n            </Button>\n          )}\n          {displayPostActionButton && (\n            <Button\n              onClick={() => {\n                implementationProject();\n              }}\n            >\n              В реализацию\n            </Button>\n          )}\n          {displayConfirmFinishActionButton && (\n            <Button onClick={openConfirmFinishModal}>\n              Внести данные о реализации\n            </Button>\n          )}\n        </Box>\n      );\n    }\n\n    if (\n      isVoter &&\n      project.status === PROJECT_STATUS.APPROVED &&\n      !activePoll.hasVote &&\n      activePoll.poll.status === 'VOTING'\n    ) {\n      return (\n        <StyledBox direction=\"row\">\n          {activePoll.bulletinOrder === project.bulletinOrder ? (\n            <StyledButton\n              style={{\n                background: 'white',\n                color: theme.palette.Purple,\n                border: `1px solid ${theme.palette.Purple}`\n              }}\n              onClick={() => {\n                activePoll.clearProject();\n              }}\n            >\n              Отменить голос\n            </StyledButton>\n          ) : (\n            <StyledButton\n              disabled={\n                activePoll.isProjectSelected || project.bulletinOrder === null || activePoll.hasVote\n              }\n              onClick={() => {\n                activePoll.selectProject(project.bulletinOrder);\n                voteForProject()\n              }}\n            >\n              Проголосовать\n            </StyledButton>\n          )}\n        </StyledBox>\n      );\n    }\n\n    if (\n      activePoll.bulletinOrder === project.bulletinOrder &&\n      activePoll.hasVote\n    ) {\n      return (\n        <Button\n          style={{\n            background: 'inherit',\n            color: theme.palette.Purple,\n            border: `1px solid #d4d2eb`,\n            padding: '10px 16px',\n            cursor: 'auto'\n          }}\n          size=\"medium\"\n        >\n          <LabelStyle>\n            <input type=\"checkbox\" checked disabled/>\n            <span/>\n          </LabelStyle>\n          Голос отдан\n        </Button>\n      );\n    }\n\n    return null;\n  }\n);\n\nconst StyledBox = styled(Box)`\n  width: 100%;\n\n  @media (min-width: ${breakpoints.tablet}) {\n    width: auto;\n  }\n`;\n\nconst StyledButton = styled(Button)`\n  width: 100%;\n\n  button {\n    width: 100%;\n  }\n`;\n\nconst LabelStyle = styled.label`\n  display: inline-flex;\n  position: relative;\n  margin-right: 10px;\n\n  input {\n    height: 22px;\n    width: 22px;\n    appearance: none;\n  }\n\n  input:checked {\n    border: 2px solid #3b33b0;\n    background-color: inherit;\n  }\n\n  input:checked + span::before {\n    content: '\\\\2713';\n    color: #3b33b0;\n    position: absolute;\n    left: 0.7rem;\n    top: 0.35rem;\n  }\n`;\n\nconst BoxRevisionStyle = styled(Box)`\n  position: absolute;\n  background: white;\n  z-index: 100;\n  border-radius: 5px;\n  box-shadow: 0 4px 12px rgba(59, 51, 176, 0.4);\n  top: 55px;\n`;\n","import * as React from 'react';\nimport { Box, BoxProps } from 'grommet';\nimport { Text } from '@we-ui-components/base';\nimport styled from 'styled-components';\n\ntype Props = BoxProps & { votes: number; percentage: number };\n\nexport const ProgressStyled = styled(Box)`\n  height: 5px;\n  width: 100%;\n  position: relative;\n  background-color: ${props => props.theme.palette.Background};\n  overflow: hidden;\n`;\n\nexport const ProgressBarStyled = styled(ProgressStyled)<{ value: number }>`\n  background-color: ${props => props.theme.palette.Purple};\n  position: absolute;\n  top: 0;\n  left: -${props => 100 - props.value}%;\n`;\n\nexport const ProgressBar: React.FC<BoxProps & { value: number }> = ({\n  value,\n  ...props\n}) => {\n  return (\n    <ProgressStyled {...props}>\n      <ProgressBarStyled value={value} />\n    </ProgressStyled>\n  );\n};\n\nexport const PollResultProgress: React.FC<Props> = ({\n  percentage,\n  votes,\n  ...props\n}) => {\n  const percentageFixed = percentage.toFixed(2);\n\n  return (\n    <Box {...props}>\n      <Text bold size=\"large\">\n        Голосов за: {votes} ({percentageFixed}%)\n      </Text>\n\n      <ProgressBar value={percentage} margin={{ top: 'small' }} />\n    </Box>\n  );\n};\n","import { Box } from 'grommet';\nimport { StarRating } from 'components/StarRatings';\nimport * as React from 'react';\nimport { Button, Text } from '@we-ui-components/base';\nimport { useStores } from 'stores/index';\n\nexport type RateReworkProps = {\n  onRate: (val: number) => void;\n  error: string;\n};\n\nexport const RateReworkModal: React.FC<RateReworkProps> = ({\n  onRate,\n  error\n}) => {\n  const { actionModals } = useStores();\n\n  const [value, setValue] = React.useState<number>(null);\n\n  const handleRate = () => {\n    onRate(value);\n  };\n\n  return (\n    <Box>\n      <Box align=\"center\" margin={{ top: 'small', bottom: 'small' }}>\n        <StarRating value={0} width=\"240px\" onChangeValue={setValue} />\n      </Box>\n\n      <Text pad={{ vertical: 'small' }} color=\"Red\">\n        {error}\n      </Text>\n\n      <Box direction=\"row\" justify=\"end\" margin=\"16px 0\">\n        <Button\n          bordered\n          transparent\n          color=\"Blue\"\n          style={{ border: '1px solid #204080' }}\n          onClick={actionModals.closeLastModal}\n        >\n          Отменить\n        </Button>\n\n        <Button\n          margin={{ left: '16px' }}\n          disabled={value === null}\n          onClick={handleRate}\n        >\n          Поставить оценку\n        </Button>\n      </Box>\n    </Box>\n  );\n};\n","import { Box } from 'grommet';\nimport * as React from 'react';\nimport { Button, Loader, Text } from '@we-ui-components/base';\nimport { useStores } from 'stores/index';\nimport { getProjectHistory } from 'services/projectService';\nimport { IHistoryItem, IProject, PROJECT_STATUS } from 'interfaces/apiEntities';\nimport { ProjectInfoBox } from './components/ProjectInfoBox';\nimport { useTheme } from 'utils/hooks';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\nimport { dateTimeFormat } from 'utils/formatDates';\nimport { ProjectStatus } from './ProjectStatus';\nimport { SpeakerNotesIcon } from 'ui/Icons';\n\nexport type RateReworkProps = {\n  onRate: () => void;\n  error: string;\n  project: IProject;\n};\n\nexport const ProjectHistoryModal: React.FC<RateReworkProps> = ({\n  onRate,\n  error,\n  project\n}) => {\n  const theme = useTheme();\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  const [history, setHistory] = React.useState<IHistoryItem[]>([]);\n  const [errorMess, setErrorMess] = React.useState('');\n  const [loading, setLoading] = React.useState(true);\n\n  const handleRate = () => {\n    onRate();\n  };\n\n  React.useEffect(() => {\n    setLoading(true);\n\n    getProjectHistory(project.id)\n      .then((result: any) => setHistory(result))\n      .catch(e => setErrorMess(e.detail || e.title || 'Неизвестная ошибка'))\n      .finally(() => setLoading(false))\n  }, []);\n\n  return (\n    <Box>\n      {loading && <Loader />}\n\n      <Box align=\"start\" margin={{ top: 'small', bottom: 'small' }}>\n        {\n          !loading && !history.length && <Box\n            direction='row'\n            pad=\"12px\"\n            align='center'\n            justify='center'\n            gap=\"10px\"\n            fill=\"horizontal\"\n            style={{\n              backgroundColor: '#FAFAFA',\n              marginTop: '12px'\n            }}\n          >\n            <Text size={isTabletOrWider ? '13px' : '16px'}>\n              Нет данных\n            </Text>\n          </Box>\n        }\n\n        {\n          history.map((item, idx) => {\n            const isLast = idx === history.length - 1;\n\n            return <Box\n              direction='column'\n              pad={{ bottom: 'medium', left: 'small' }}\n              style={{\n                position: 'relative',\n                borderLeft: isLast ?\n                  '' : `2px solid ${theme.palette.Basic700}`\n              }}\n              fill=\"horizontal\"\n            >\n              <Box style={{ marginTop: -1 }}>\n                <Text\n                  size={isTabletOrWider ? '11px' : '14px'}\n                  color={theme.palette.Basic700}\n                >\n                  {dateTimeFormat(item.createdDate)}\n                </Text>\n                <Box direction='row' align='baseline' gap=\"10px\">\n                  <Text size={isTabletOrWider ? '13px' : '16px'} margin={{ top: '8px' }}>\n                    Проект переведен в статус\n                  </Text>\n                  <ProjectStatus status={item.status} />\n                </Box>\n              </Box>\n\n              {item.comment &&\n                <Box\n                  direction='row'\n                  pad=\"12px\"\n                  align='center'\n                  gap=\"10px\"\n                  fill=\"horizontal\"\n                  style={{\n                    backgroundColor: '#FAFAFA',\n                    marginTop: '12px'\n                  }}\n                >\n                  <SpeakerNotesIcon\n                    style={{\n                      minWidth: 24\n                    }}\n                  />\n                  <Text size={isTabletOrWider ? '13px' : '16px'}>\n                    {item.comment}\n                  </Text>\n                </Box>\n              }\n\n              <Box\n                style={{\n                  width: '10px',\n                  height: '10px',\n                  background: theme.palette.Basic700,\n                  position: 'absolute',\n                  left: isLast ? -4 : -6,\n                  borderRadius: '50%'\n                }}\n              >\n\n              </Box>\n            </Box>\n          })\n        }\n      </Box>\n\n      {errorMess && <Text pad={{ vertical: 'small' }} color=\"Red\">\n        {errorMess}\n      </Text>}\n\n      <Box direction=\"row\" justify=\"end\" margin=\"16px 0\">\n        <Button\n          onClick={handleRate}\n        >\n          Закрыть\n        </Button>\n      </Box>\n    </Box>\n  );\n};\n","import * as React from 'react';\nimport { Anchor, Box, BoxProps } from 'grommet';\nimport { useTheme } from 'utils/hooks';\nimport styled from 'styled-components';\nimport { Button, Text } from '@we-ui-components/base';\nimport { CollapseArrow, ExternalLink, PrivateIcon } from './icons';\nimport { IProject, PROJECT_STATUS } from 'interfaces/apiEntities';\nimport { formatWithTwoDecimalsRub, showPeople } from 'utils/formatNumber';\nimport { dateFormat } from 'utils/formatDates';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { getSphere } from '../Applicant/CreateProject';\nimport { ProjectActionsPanel } from './ProjectActionsPanel';\nimport { PollResultProgress } from './PollResultProgress';\nimport { ProjectStatus as ProjectStatusStyled } from './ProjectStatus';\nimport { useStores } from 'stores/index';\nimport { observer } from 'mobx-react-lite';\nimport { breakpoints } from 'ui';\nimport { useMediaQuery } from 'react-responsive';\nimport { SliderComponent } from 'ui/Slider/SliderComponent';\nimport { ShareButton } from './components/ShareButton';\nimport { ProjectInfoBox } from './components/ProjectInfoBox';\nimport { ImplementationDetails } from './components/ImplementationDetails';\nimport { StarRating } from 'components/StarRatings';\nimport { RateReworkModal } from './RateReworkModal';\nimport { rateProject } from 'services/projectService';\nimport { useLocalStore } from 'mobx-react';\nimport { ProjectHistoryModal } from './ProjectHistoryModal';\nimport { HistoryIcon } from 'ui/Icons';\n\nconst ProjectStatus = styled(ProjectStatusStyled)`\n  position: absolute;\n  top: ${props => props.theme.global.edgeSize.small};\n  right: ${props => props.theme.global.edgeSize.small};\n`;\n\nexport const ProjectCard: React.FC<BoxProps & {\n  project: IProject;\n}> = React.memo(\n  observer(({ project, ...props }) => {\n    const [expanded, setExpanded] = React.useState(false);\n\n    const theme = useTheme();\n    const {\n      user,\n      activePollResults,\n      activePoll,\n      actionModals,\n      projectList\n    } = useStores();\n\n    const poll = activePoll.poll;\n    const creator = project.creator;\n\n    const isOrganizer = user.isContainOneOfRoles(['REGULATOR']);\n    const isVoter = user.isContainOneOfRoles(['VOTER']);\n    const isTabletOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.tablet\n    });\n\n    const rate = useLocalStore(() => ({\n      setError: (err: string) => {\n        rate.error = err;\n      },\n      error: null\n    }));\n\n    const rateRework = () => {\n      actionModals.open(\n        () => (\n          <RateReworkModal\n            error={rate.error}\n            onRate={(value: number) => {\n              rate.setError(null);\n\n              rateProject(project.id, value)\n                .then(() => {\n                  actionModals.closeLastModal();\n                  projectList.fetchProjectList();\n                })\n                .catch(err => rate.setError(err.detail));\n            }}\n          />\n        ),\n        {\n          title: 'Оцените реализацию проекта'\n        }\n      );\n    };\n\n    const openHistoryModal = () => {\n      actionModals.open(\n        () => (\n          <ProjectHistoryModal\n            error={rate.error}\n            project={project}\n            onRate={() => actionModals.closeLastModal()}\n          />\n        ),\n        {\n          title: 'История проекта'\n        }\n      );\n    };\n\n    return (\n      <CardContainer\n        {...props}\n        background={\n          activePoll.bulletinOrder === project.bulletinOrder\n            ? '#dedcea'\n            : theme.palette.White\n        }\n        margin={{ top: 'medium' }}\n      >\n        <Box pad=\"small\" style={{ position: 'relative' }}>\n          <ProjectStatus status={project.status} />\n\n          {isVoter && (\n            <Box style={{ position: 'absolute', top: 25, right: 0 }}>\n              <ShareButton project={project} />\n            </Box>\n          )}\n\n          {isOrganizer && (\n            <Box\n              style={{\n                position: 'absolute',\n                top: 40,\n                right: theme.global.edgeSize.small,\n                cursor: 'pointer'\n              }}\n              direction='row'\n              align='center'\n              gap=\"5px\"\n              onClick={() => openHistoryModal()}\n            >\n              <HistoryIcon />\n              <Text size={isTabletOrWider ? '13px' : '16px'} color={theme.palette.Basic700}>\n                История проекта\n              </Text>\n            </Box>\n          )}\n\n          <Box direction={isTabletOrWider ? 'row' : 'column'}>\n            <CardImage src={ENDPOINTS.getProjectFile(project.logoFileId)} />\n\n            <Box\n              style={{ lineHeight: 1.5, flex: '1 1 auto' }}\n              pad={{ horizontal: 'small' }}\n            >\n              {project.school ? (\n                <Text\n                  margin={{ top: 'xxsmall' }}\n                  size=\"xsmall\"\n                  style={{ maxWidth: '70%' }}\n                >\n                  {project.school.name} ({project.school.districtName})\n                </Text>\n              ) : null}\n              <Text\n                margin={{\n                  top: 'xsmall',\n                  right: isTabletOrWider && isVoter && '100px',\n                }}\n                style={{\n                  maxWidth: \"calc(100% - 130px)\"\n                }}\n                size=\"large\"\n                bold\n              >\n                {project.name}\n              </Text>\n\n              {isTabletOrWider ? (\n                <>\n                  <Text margin={{ top: 'xsmall' }} size=\"xsmall\">\n                    Срок реализации проекта: {dateFormat(project.startDate)} –{' '}\n                    {dateFormat(project.endDate)}\n                  </Text>\n                  <Text margin={{ top: 'xsmall' }} size=\"xsmall\">\n                    Объем требуемых средств:{' '}\n                    {formatWithTwoDecimalsRub(project.budgetSummary)}\n                  </Text>\n                </>\n              ) : (\n                <Box margin={{ top: '40px' }} gap=\"15px\">\n                  <ProjectInfoBox\n                    title=\"Срок реализации проекта\"\n                    text={`${dateFormat(project.startDate)} – ${dateFormat(\n                      project.endDate\n                    )}`}\n                  />\n\n                  <ProjectInfoBox\n                    title=\"Объем требуемых средств\"\n                    text={formatWithTwoDecimalsRub(project.budgetSummary)}\n                  />\n                </Box>\n              )}\n\n              {expanded && (\n                <>\n                  {project.declineReason &&\n                  project.status === PROJECT_STATUS.DECLINED ? (\n                    <Box margin={{ top: 'xsmall' }}>\n                      <ProjectInfoBox\n                        title=\"Причина отклонения\"\n                        text={project.declineReason || ''}\n                        noWrap\n                      />\n                    </Box>\n                  ) : null}\n                  <Box\n                    direction={isTabletOrWider ? 'row' : 'column'}\n                    flex=\"grow\"\n                    margin={{ top: '15px' }}\n                    gap=\"15px\"\n                  >\n                    <Box basis=\"50%\" gap=\"15px\">\n                      <ProjectInfoBox\n                        title=\"Областной бюджет\"\n                        text={formatWithTwoDecimalsRub(project.budgetRegion)}\n                      />\n                      <ProjectInfoBox\n                        margin={{ top: 'xsmall' }}\n                        title=\"Средства населения\"\n                        text={formatWithTwoDecimalsRub(project.budgetPeople)}\n                      />\n                    </Box>\n\n                    <Box basis=\"50%\" gap=\"15px\">\n                      <ProjectInfoBox\n                        title=\"Бюджет муниципального образования\"\n                        text={formatWithTwoDecimalsRub(project.budgetDistrict)}\n                      />\n                      <ProjectInfoBox\n                        margin={{ top: 'xsmall' }}\n                        title=\"Внебюджетные средства\"\n                        text={formatWithTwoDecimalsRub(project.noBudgetFunds)}\n                      />\n                    </Box>\n                  </Box>\n                </>\n              )}\n            </Box>\n          </Box>\n          {expanded && (\n            <>\n              <Box\n                flex=\"grow\"\n                margin={{ top: 'small' }}\n                pad={!isTabletOrWider && '0 6px'}\n                gap={!isTabletOrWider && '15px'}\n              >\n                <Text\n                  bold\n                  size={isTabletOrWider ? '13px' : '18px'}\n                  margin={{ vertical: '16px' }}\n                >\n                  Описание проекта\n                </Text>\n\n                <Box direction={isTabletOrWider ? 'row' : 'column'}>\n                  {project.sphere ? (\n                    <ProjectInfoBox\n                      margin={{\n                        top: 'xsmall',\n                        bottom: !isTabletOrWider && '15px'\n                      }}\n                      style={{ flexBasis: '50%' }}\n                      title=\"Сфера деятельности\"\n                      text={getSphere(project.sphere)}\n                    />\n                  ) : null}\n                  <ProjectInfoBox\n                    margin={{ top: 'xsmall' }}\n                    title=\"Благополучателей\"\n                    text={showPeople(project.beneficiaries)}\n                  />\n                </Box>\n\n                <ProjectInfoBox\n                  margin={{ top: 'xsmall' }}\n                  title=\"Описание проекта\"\n                  text={project.description}\n                  noWrap\n                />\n                <ProjectInfoBox\n                  margin={{ top: 'xsmall' }}\n                  title=\"Место реализации проекта\"\n                  text={project.place}\n                />\n              </Box>\n\n              {project.files.length !== 0 && (\n                <Box\n                  flex=\"grow\"\n                  margin={{ top: isTabletOrWider ? 'small' : '16px' }}\n                  pad={!isTabletOrWider && '0 6px'}\n                  gap=\"small\"\n                >\n                  <Text bold size={isTabletOrWider ? 'xsmall' : '18px'}>\n                    Материалы (до и после реализации прокта)\n                  </Text>\n\n                  <SliderComponent slideFiles={project.files} arrow />\n                </Box>\n              )}\n\n              {!!project.privateFiles && project.privateFiles.length !== 0 && (\n                <Box\n                  flex=\"grow\"\n                  margin={{ top: 'small' }}\n                  gap=\"small\"\n                  pad={!isTabletOrWider && '0 6px'}\n                >\n                  <Text bold size=\"xsmall\">\n                    <PrivateIcon /> Приватные материалы\n                  </Text>\n\n                  <SliderComponent slideFiles={project.privateFiles} arrow />\n                </Box>\n              )}\n\n              <Anchor\n                href={project.administrationLink}\n                margin={{ top: 'medium' }}\n                color={theme.palette.Purple}\n                size=\"xsmall\"\n                target='_blank'\n              >\n                Ссылка на сайт администрации <ExternalLink />\n              </Anchor>\n\n              {isOrganizer && (\n                <Box\n                  direction=\"row\"\n                  margin={{ top: isTabletOrWider ? 'small' : '16px' }}\n                  pad={!isTabletOrWider && '6px 0'}\n                >\n                  <Text size={isTabletOrWider ? '13px' : '16px'}>\n                    Заявитель:{' '}\n                    {creator.patronymic ||\n                    creator.firstName ||\n                    creator.lastName ||\n                    creator.phoneNumber ? (\n                      <>\n                        {creator.patronymic ||\n                        creator.firstName ||\n                        creator.lastName ? (\n                          <>\n                            {creator.lastName} {creator.firstName}{' '}\n                            {creator.patronymic}{' '}\n                          </>\n                        ) : (\n                          <>&ndash; </>\n                        )}\n                        {creator.phoneNumber ? (\n                          <span style={{ whiteSpace: 'nowrap' }}>\n                            ({' '}\n                            <span style={{ color: '#3B33B0' }}>\n                              {creator.phoneNumber}\n                            </span>{' '}\n                            )\n                          </span>\n                        ) : (\n                          <>( &ndash; )</>\n                        )}\n                      </>\n                    ) : (\n                      <>&ndash;</>\n                    )}\n                  </Text>\n                </Box>\n              )}\n            </>\n          )}\n        </Box>\n\n        {activePollResults.isPollResultsAvailable(poll) && (\n          <PollResultProgress\n            percentage={activePollResults.getProjectVotesPercentage(project.id)}\n            votes={activePollResults.getProjectVotesCount(project.id)}\n            pad=\"small\"\n            margin={{ bottom: !isTabletOrWider && '10px' }}\n          />\n        )}\n\n        {project.status === PROJECT_STATUS.DONE && (\n          <ImplementationDetails\n            pad={{ vertical: 'small' }}\n            margin={{ horizontal: 'small', bottom: '10px' }}\n            project={project}\n          />\n        )}\n\n        <CardFooter\n          direction={isTabletOrWider ? 'row' : 'column'}\n          justify=\"between\"\n          align=\"center\"\n        >\n          <Button\n            transparent\n            color=\"Purple\"\n            onClick={() => setExpanded(p => !p)}\n          >\n            <CollapseArrow\n              style={{\n                transform: expanded && 'rotate(180deg)',\n                marginRight: '8px'\n              }}\n            />{' '}\n            {expanded ? 'Свернуть' : 'Развернуть'}\n          </Button>\n\n          {!activePoll.poll.techWindowStarted && (\n            <ProjectActionsPanel project={project} />\n          )}\n\n          {project.score &&\n            (project.score.currentUser || !isVoter ? (\n              <Box>\n                <Box direction=\"row\" flex=\"grow\">\n                  <Box width=\"85px\" align=\"center\">\n                    <StarRating value={project.score?.average || 0} readonly />\n                  </Box>\n\n                  <Text\n                    margin={{ left: 'xsmall', bottom: 'xxsmall' }}\n                    size=\"xsmall\"\n                    color=\"Grey\"\n                  >\n                    {project.score?.average || 0} (\n                    {project.score?.totalCount || 0})\n                  </Text>\n                </Box>\n\n                {project.score.currentUser && (\n                  <Text\n                    margin={{ left: 'xsmall' }}\n                    size=\"xsmall\"\n                    color=\"Grey\"\n                    style={{ textAlign: 'end' }}\n                  >\n                    Ваша оценка: {project.score?.currentUser || 0}\n                  </Text>\n                )}\n              </Box>\n            ) : (\n              isVoter && (\n                <Button onClick={rateRework}>Оценить реализацию проекта</Button>\n              )\n            ))}\n        </CardFooter>\n      </CardContainer>\n    );\n  })\n);\n\nconst CardContainer = styled(Box)`\n  box-shadow: 0 4px 8px rgba(10, 6, 6, 0.04);\n  border-radius: 1px;\n  width: 100%;\n`;\n\nconst CardFooter = styled(Box)`\n  min-height: 66px;\n  background: #fafafa;\n  width: 100%;\n  padding: 9px 16px;\n`;\n\nconst CardImage = styled.img`\n  border-radius: 4px;\n  width: 100%;\n  height: auto;\n\n  object-fit: cover;\n\n  @media (min-width: ${breakpoints.tablet}) {\n    min-width: 130px;\n    width: 130px;\n    height: 130px;\n  }\n`;\n","import * as moment from 'moment';\n\nexport const dateFormatDescription = (date: string) => {\n  return moment(date).format('DD MMMM, HH:mm');\n};\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { useTheme } from 'utils';\nimport { Button, Text } from '@we-ui-components/base';\nimport { dateFormatDescription } from '../utils';\nimport { useStores } from 'stores';\nimport { PollSubjectShort } from 'interfaces';\nimport { VotesIcon } from 'pages/Organizer/icons';\nimport { CollapseArrow } from '../icons';\nimport { observer } from 'mobx-react';\nimport { PollingType } from '../../Organizer/tabs';\nimport styled from 'styled-components';\n\nexport const AboutVote = observer(function AboutVote() {\n  const theme = useTheme();\n  const { activePoll, activePollResults, user } = useStores();\n\n  const isVoter = user.isContainOneOfRoles(['VOTER']);\n  const isResultsAvailable = activePollResults.isPollResultsAvailable(\n    activePoll.poll\n  );\n  const isResultsReady = activePoll.poll.systemStatus === 'RESULTS_READY';\n  const pollResult = isResultsReady\n    ? activePoll.poll.votesCount\n    : activePoll.poll.dynamicVoteCount;\n\n  const isAboutVotingHide =\n    isVoter &&\n    (activePoll.poll.status === 'FINISHED' ||\n      activePoll.poll.status === 'VOTING');\n\n  if (!isResultsAvailable && isAboutVotingHide) {\n    return;\n  }\n\n  return (\n    <Box background={theme.palette.White} pad=\"large\">\n      {!isAboutVotingHide && (\n        <>\n          <Text bold size=\"xsmall\" margin={{ bottom: 'small' }}>\n            О голосовании\n          </Text>\n\n          <Text fontWeight=\"400\" size=\"xsmall\" margin={{ bottom: 'small' }}>\n            Голосование:{' '}\n            {dateFormatDescription(activePoll.poll.votingStartDate)} →{' '}\n            {dateFormatDescription(activePoll.poll.votingEndDate)}\n          </Text>\n          <Text fontWeight=\"400\" size=\"xsmall\" margin={{ bottom: 'small' }}>\n            Прием заявок:{' '}\n            {dateFormatDescription(activePoll.poll.applicationStartDate)} →{' '}\n            {dateFormatDescription(activePoll.poll.applicationEndDate)}\n          </Text>\n          <Text fontWeight=\"400\" size=\"xsmall\" margin={{ bottom: 'small' }}>\n            Тип: {POLL_TYPE_UI_TEXT[activePoll.poll.subject.type]}\n          </Text>\n          <Text fontWeight=\"400\" size=\"xsmall\" margin={{ bottom: 'small' }}>\n            Минимальное кол-во голосов:{' '}\n            {activePoll.poll.votingThreshold === null\n              ? 'Любое'\n              : activePoll.poll.votingThreshold}\n          </Text>\n        </>\n      )}\n\n      {isResultsAvailable && (\n        <>\n          {!isVoter && <Divider />}\n\n          <Text bold size=\"xsmall\" margin={{ bottom: 'small' }}>\n            Ход голосования:{' '}\n            {\n              activePoll.poll.systemStatus === 'ERROR' ?\n                'ошибка подсчета' :\n                isResultsReady ? 'подсчет завершен' : 'подсчет голосов'\n            }\n          </Text>\n\n          <Text\n            fontWeight=\"400\"\n            size=\"xsmall\"\n            margin={{ bottom: 'small' }}\n            color={\n              isResultsReady ? theme.palette.BlackText : theme.palette.GreyText\n            }\n          >\n            Голосов: <VotesIcon /> {pollResult}\n          </Text>\n        </>\n      )}\n    </Box>\n  );\n});\n\nexport const AboutVoteCollapse: typeof Box = observer(\n  function AboutVoteCollapse(props) {\n    const theme = useTheme();\n    const [expanded, setExpanded] = React.useState(false);\n    const { activePoll, activePollResults, user } = useStores();\n\n    const isVoter = user.isContainOneOfRoles(['VOTER']);\n    const isResultsAvailable = activePollResults.isPollResultsAvailable(\n      activePoll.poll\n    );\n    const isResultsReady = activePoll.poll.systemStatus === 'RESULTS_READY';\n    const pollResult = isResultsReady\n      ? activePoll.poll.votesCount\n      : activePoll.poll.dynamicVoteCount;\n\n    const isAboutVotingHide =\n      isVoter &&\n      (activePoll.poll.status === 'FINISHED' ||\n        activePoll.poll.status === 'VOTING');\n\n    if (!isResultsAvailable && isAboutVotingHide) {\n      return;\n    }\n\n    return (\n      <Box background=\"white\" pad=\"14px 26px\" {...props}>\n        <Box\n          direction=\"row\"\n          justify=\"start\"\n          align=\"center\"\n          onClick={() => setExpanded(p => !p)}\n        >\n          <CollapseArrow\n            style={{\n              transform: expanded && 'rotate(180deg)',\n              marginRight: '8px'\n            }}\n          />\n\n          <Text bold size=\"xsmall\">\n            О голосовании\n          </Text>\n        </Box>\n\n        {expanded && (\n          <>\n            {!isAboutVotingHide && (\n              <>\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ vertical: 'small' }}\n                >\n                  Голосование:\n                </Text>\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ bottom: 'small' }}\n                >\n                  {dateFormatDescription(activePoll.poll.votingStartDate)} →{' '}\n                  {dateFormatDescription(activePoll.poll.votingEndDate)}\n                </Text>\n\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ bottom: 'small' }}\n                >\n                  Прием заявок:\n                </Text>\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ bottom: 'small' }}\n                >\n                  {dateFormatDescription(activePoll.poll.applicationStartDate)}{' '}\n                  → {dateFormatDescription(activePoll.poll.applicationEndDate)}\n                </Text>\n\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ bottom: 'small' }}\n                >\n                  Тип: {POLL_TYPE_UI_TEXT[activePoll.poll.subject.type]}\n                </Text>\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ bottom: 'small' }}\n                >\n                  Минимальное кол-во голосов:{' '}\n                </Text>\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ bottom: 'small' }}\n                >\n                  {activePoll.poll.votingThreshold === null\n                    ? 'Любое'\n                    : activePoll.poll.votingThreshold}\n                </Text>\n              </>\n            )}\n\n            {isResultsAvailable && (\n              <>\n                {!isAboutVotingHide && <Divider />}\n\n                <Text\n                  bold\n                  size=\"xsmall\"\n                  margin={{\n                    bottom: 'small',\n                    top: isAboutVotingHide ? 'medium' : 'xxsmall'\n                  }}\n                >\n                  Ход голосования:{' '}\n                  {\n                    activePoll.poll.systemStatus === 'ERROR' ?\n                      'ошибка подсчета' :\n                      isResultsReady ? 'подсчет завершен' : 'подсчет голосов'\n                  }\n                </Text>\n\n                <Text\n                  fontWeight=\"400\"\n                  size=\"xsmall\"\n                  margin={{ bottom: 'small' }}\n                  color={\n                    isResultsReady\n                      ? theme.palette.BlackText\n                      : theme.palette.GreyText\n                  }\n                >\n                  Голосов: <VotesIcon /> {pollResult}\n                </Text>\n              </>\n            )}\n          </>\n        )}\n      </Box>\n    );\n  }\n);\n\nexport const AboutVoteModal = function AboutVoteModal() {\n  return <Button>О голосовании</Button>;\n};\n\nconst POLL_TYPE_UI_TEXT: Record<PollSubjectShort['type'], string> = {\n  [PollingType.district]: 'Муниципальное образование',\n  [PollingType.schoolGroup]: 'Школьная группа'\n};\n\nconst Divider = styled.hr`\n  width: 100%;\n  border: ${props => props.theme.palette.Grey} 0.5px solid;\n  background-color: ${props => props.theme.palette.Grey};\n  opacity: 0.3;\n`;\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { SearchInput } from 'ui/SearchInput';\nimport { SearchIcon } from 'ui/Icons/CustomizedIcons';\nimport { Text } from '@we-ui-components/base';\nimport OutsideClickHandler from 'react-outside-click-handler';\nimport { getDistrictsWithVotes } from 'services/voteService';\nimport { PollSubject } from 'interfaces/apiEntities';\nimport Scrollbar from 'react-scrollbars-custom';\nimport { useStores } from 'stores/index';\n\nconst Arrow = () => (\n  <svg width=\"32px\" height=\"32px\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path fillRule=\"evenodd\" clipRule=\"evenodd\"\n      d=\"M15.2929 20.7071L8.29289 13.7071C7.90237 13.3166 7.90237 12.6834 8.29289 12.2929C8.68342 11.9024 9.31658 11.9024 9.70711 12.2929L16 18.5858L22.2929 12.2929C22.6834 11.9024 23.3166 11.9024 23.7071 12.2929C24.0976 12.6834 24.0976 13.3166 23.7071 13.7071L16.7071 20.7071C16.3166 21.0976 15.6834 21.0976 15.2929 20.7071Z\"\n      fill=\"currentColor\" />\n  </svg>\n)\n\nconst ControlContainer = styled(Box)`\n  cursor: pointer;\n  color: ${props => props.theme.palette.Purple};\n  font-size: ${props => props.theme.sizes.text.xsmall};\n  position: relative;\n`\n\nconst FilterPanel = styled(Box)`\n  position: absolute;\n  z-index: 1000;\n  width: 258px;\n  border: 1px solid #EFEFEF;\n  background: #FFFFFF;\n  height: 300px;\n`\n\nconst FilterOption = styled(Text) <{ onClick: (ev: MouseEvent) => void }>`\n  cursor: pointer;\n\n  &:hover {\n    background-color: #EFEFEF;\n  }\n`\n\n\ntype DistrictFilterProps = {\n  onChangeFilter: (districtId: string) => void;\n}\n\n\nfunction filterDistricts(list: PollSubject[], search: string) {\n  if (search === '') {\n\n    return list;\n  }\n\n\n  return list.filter(\n    p => p.name.toLowerCase().indexOf(search.toLowerCase()) !== -1\n  )\n}\n\nexport const DistrictFilter = observer(({ onChangeFilter }: DistrictFilterProps) => {\n  const [isPanelOpen, setPanelState] = useState(false)\n\n  const { activePoll } = useStores()\n\n  const filter = useLocalStore(() => {\n    return {\n      search: '',\n      districtId: '',\n      districts: [] as PollSubject[]\n    }\n  })\n\n  React.useEffect(() => {\n    getDistrictsWithVotes({ pollStatus: activePoll.poll.status })\n      .then((resp) => {\n        filter.districts = resp.content\n      })\n  }, []);\n\n  React.useEffect(() => () => onChangeFilter(null), [])\n\n  const districtsList = filterDistricts(filter.districts, filter.search)\n\n  const selectedDistrict = filter.districts.find((d) => d.id === filter.districtId);\n\n  const controlText = selectedDistrict\n    ? selectedDistrict.name\n    : 'Все муниципальные районы';\n\n  const optionList = (\n    districtsList.length > 0\n      ? districtsList.map(\n        (district) =>\n          <FilterOption\n            pad=\"16px 10px\"\n            size=\"xsmall\"\n            key={district.id}\n            onClick={() => {\n              onChangeFilter(district.id)\n              filter.districtId = district.id;\n              closePanel()\n            }}\n          >{district.name}\n          </FilterOption>\n      )\n      : <Box pad='xsmall'>Районов не найдено</Box>\n  );\n\n  const closePanel = () => {\n    setPanelState(false);\n    filter.search = ''\n  }\n\n  return (\n    <Box style={{ position: 'relative' }}>\n      <OutsideClickHandler onOutsideClick={closePanel}>\n        <ControlContainer\n          color=\"Purple\"\n          direction=\"row\"\n          align=\"center\"\n          onClick={(ev: React.MouseEvent) => {\n            ev.preventDefault();\n\n            setPanelState(prev => !prev)\n          }}\n        >\n          {controlText} <Arrow />\n        </ControlContainer>\n\n        {isPanelOpen && (\n          <FilterPanel>\n            <SearchInput\n              style={{ height: '44px' }}\n              bgColor=\"#FFFFFF\"\n              borderBottom=\"1px solid #EFEFEF\"\n              onChange={v => filter.search = v}\n              renderLeft={\n                <Box margin={{ left: '5px', right: '12px' }}>\n                  <SearchIcon size=\"medium\" fill='#8D8D8D' />\n                </Box>\n              }\n            />\n\n            <Scrollbar style={{ top: 0 }} trackYProps={{ style: { top: 0, bottom: 0, height: '100%' } }}>\n              <Box style={{ overflowY: 'auto' }}>\n                <FilterOption\n                  pad=\"16px 10px\"\n                  size=\"xsmall\"\n                  onClick={() => {\n                    onChangeFilter('')\n                    filter.districtId = '';\n                    closePanel()\n                  }}\n                >\n                  Все районы\n                </FilterOption>\n                {optionList}\n              </Box>\n            </Scrollbar>\n          </FilterPanel>\n        )}\n      </OutsideClickHandler>\n    </Box>\n  )\n});","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { RouteComponentProps } from 'react-router';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { Loader, Text, Title } from '@we-ui-components/base';\nimport { Arrow } from './icons';\nimport { SearchInput } from 'ui/SearchInput';\nimport { BackButton, PageError, Tabs } from 'components';\nimport { getTabs } from './tabs';\nimport { ProjectCard } from './ProjectCard';\nimport { useStores } from 'stores/index';\nimport { Routes } from '../../constants';\nimport { PollingType } from '../Organizer/tabs';\nimport { dateFormat } from 'utils/formatDates';\nimport { IProject, PollSubjectShort } from 'interfaces/apiEntities';\nimport { PollStatus as PollStatusStyled } from 'components/PollStatus/PollStatus';\nimport { Table } from '@we-ui-components/rc-table';\nimport { toJS } from 'mobx';\nimport { SHARE_PARAMS, VotingActionsPanel } from './VotingActionsPanel';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints, ScrollToTopButton } from 'ui';\nimport { AboutVote, AboutVoteCollapse } from './components/AboutVote';\nimport { objectToGetParams, SHARE_LINKS, ShareLinks, windowOpen } from './components/ShareButton';\nimport { DistrictFilter } from './DistrictFilter';\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useCallback } from \"react\";\n\nconst isEqual = require('react-fast-compare')\n\nconst PollPageContainer = styled(Box)`\n  padding-bottom: 62px;\n\n  max-width: 1250px;\n  margin: auto;\n  width: 100%;\n`;\n\nconst PollTitle = styled(Title).attrs({ as: 'h1' })`\n  text-align: center;\n  line-height: 1.5;\n  letter-spacing: -1px;\n`;\n\nconst POLL_TITLE_UI_TEXT: Record<PollSubjectShort['type'], string> = {\n  [PollingType.district]: 'Голосование по',\n  [PollingType.schoolGroup]: 'Голосование по школьной группе'\n};\n\nexport const getPollTitle = (subject: PollSubjectShort) => {\n  const pre = POLL_TITLE_UI_TEXT[subject.type];\n\n  return pre + ` «${subject.name}», ${subject.year}`;\n};\n\nconst tabs = getTabs();\n\nconst BoxPollStatus = styled(Box)`\n  display: block;\n  @media (min-width: ${breakpoints.tablet}) {\n    display: inline-flex;\n    position: relative;\n    left: 30px;\n  }\n  @media (min-width: ${breakpoints.laptop}) {\n    top: -15px;\n  }\n`\n\nexport const UserHasVote = styled(Text)`\n  display: block;\n  text-align: center;\n  color: #3B33B0;\n  margin-bottom: 10px;\n  @media (min-width: ${breakpoints.tablet}) {\n    display: inline;\n    white-space: nowrap;\n    line-height: initial;\n  }\n`\n\nconst PollStatus = styled(PollStatusStyled)`\n  display: block;\n  @media (min-width: ${breakpoints.tablet}) {\n    display: inline;\n    position: relative;\n    top: -0.3em;\n  }\n`;\n\n// const MemoizedTable = React.memo(Table, isEqual)\n\n\nconst CustomItem = {\n  render: React.memo(\n    ({ params: project }: { params: IProject, children?: React.ReactNode }) => {\n      return (\n        <ProjectCard\n          key={project.id}\n          project={project}\n        />\n      );\n    },\n    isEqual\n  )\n}\n\nexport const PollPage: React.FC<RouteComponentProps<{ id: string }>> = observer(\n  ({ match }) => {\n    const { activePoll, projectList, activePollResults, user, routing } = useStores();\n    const [isDataStoreInitiated, setIsDataStoreInitiated] = React.useState(false);\n    const [searchString, setSearchString] = React.useState('');\n\n    const isVoter = user.isContainOneOfRoles(['VOTER']);\n    const isRegulator = user.isContainOneOfRoles(['REGULATOR']);\n\n    React.useEffect(() => {\n      const pollId = match.params.id;\n      const params = routing.getSearchParams(['search'])\n      const search = params.search ?? ''\n\n      if (isRegulator) {\n        projectList.getProjectTabCount(pollId);\n      }\n      activePoll.getPoll(pollId);\n      projectList.onChangeDataFlow({\n        filters: {\n          pollId,\n          search,\n        }\n      });\n      setSearchString(search)\n\n      return () => {\n        projectList.clear();\n        activePoll.clear();\n        activePollResults.clear();\n      };\n    }, []);\n\n    // allow `Table` to fetch after store initialization\n    React.useEffect(() => {\n      const shouldAllowFetch = () => {\n        return !activePoll.isPollLoading && !isDataStoreInitiated;\n      };\n\n      if (shouldAllowFetch()) {\n        setIsDataStoreInitiated(true);\n      }\n    }, [activePoll.isPollLoading]);\n\n    const selectedStatus =\n      projectList.filters.status.length === 0\n        ? 'ALL'\n        : projectList.filters.status[0];\n\n    const onChangeDataFlow = (props: any) => {\n      // suppress initial fetch from `Table` components\n      if (isDataStoreInitiated) {\n        projectList.onChangeDataFlow(props);\n      }\n    }\n\n\n    const onSearch = useDebouncedCallback(useCallback((search: string) => {\n      projectList.updateSearch(search);\n      routing.setSearchParams({ search })\n    }, [projectList, routing]), 300);\n\n    const isTabletOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.tablet\n    });\n\n    const isLaptopOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.laptopL\n    });\n\n    const isIpadProOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.laptop\n    });\n\n    const computeHorizontalPadding = () => {\n      if (isLaptopOrWider) return '0';\n      if (isTabletOrWider) return '49px';\n      return '9px';\n    };\n\n    const isSchoolPoll = activePoll.poll?.subject.type === PollingType.schoolGroup\n    let countAllProjects = 0\n    if (projectList.tabCountProject) {\n      countAllProjects = Object.values(projectList.tabCountProject).reduce(\n        (accumulator: number, current: number) => accumulator + current,\n        0\n      );\n    }\n\n    if (activePoll.fetchError && activePoll.hasError)\n      return <PageError error={activePoll.fetchError} />;\n\n    return (\n      <PollPageContainer pad={{ horizontal: computeHorizontalPadding() }}>\n        <ScrollToTopButton bottom=\"66px\" />\n\n        {activePoll.isPollLoading && (\n          <Box justify=\"center\" align=\"center\" height=\"small\">\n            <Loader />\n          </Box>\n        )}\n\n        {!activePoll.isPollLoading && (\n          <>\n            <Box>\n              <Box margin={{ top: '32px' }} align=\"start\">\n                <BackButton\n                  basis=\"auto\"\n                  url={`/${Routes.homeOrganizer}`}\n                  style={{ fontSize: isLaptopOrWider ? '13px' : '16px' }}\n                />\n              </Box>\n\n              <PollTitle\n                style={{\n                  fontSize: isLaptopOrWider ? '32px' : '18px',\n                  lineHeight: isLaptopOrWider ? '48px' : '24px'\n                }}\n                margin={{ top: '32px' }}\n                fontWeight=\"700\"\n              >\n                {getPollTitle(activePoll.poll.subject)}\n\n                {isTabletOrWider && (\n                  <BoxPollStatus>\n                    <PollStatus poll={activePoll.poll as any} />\n                    {activePoll.hasVote ? <UserHasVote size=\"xsmall\">Вы\n                      проголосовали</UserHasVote> : null}\n                  </BoxPollStatus>\n                )}\n              </PollTitle>\n\n              {!isTabletOrWider && (\n                <>\n                  <PollStatus\n                    style={{ alignSelf: 'center' }}\n                    margin={{ bottom: '13px' }}\n                    poll={activePoll.poll as any}\n                  />\n                  {activePoll.hasVote ? <UserHasVote size=\"xsmall\">Вы\n                    проголосовали</UserHasVote> : null}\n                </>\n              )}\n\n              <Box direction=\"row\" justify=\"center\">\n                <Text>{dateFormat(activePoll.poll.votingStartDate, true)}</Text>\n\n                <Box margin=\"0 20px\" justify=\"center\">\n                  <Arrow opacity=\"0.2\" />\n                </Box>\n\n                <Text>{dateFormat(activePoll.poll.votingEndDate, true)}</Text>\n              </Box>\n            </Box>\n\n            <Box basis=\"100%\" margin={{ top: '24px' }} direction=\"row\">\n              <Box basis=\"100%\">\n                {!isIpadProOrWider &&\n                <AboutVoteCollapse\n                    width=\"100vw\"\n                    margin={{ bottom: '24px' }}\n                />\n                }\n\n                <Title size={isTabletOrWider ? '24px' : '18px'} bold>\n                  Проекты {countAllProjects ? <span>({countAllProjects})</span> : null}\n                </Title>\n\n                {!isVoter && (\n                  <>\n                    <Box margin={{ top: 'small' }}>\n                      <SearchInput\n                        placeholder=\"Поиск\"\n                        style={{\n                          height: '56px'\n                        }}\n                        onChange={(search) => {\n                          setSearchString(search);\n                          onSearch(search)\n                        }}\n                        value={searchString}\n                      />\n                    </Box>\n\n                    <Tabs\n                      margin={{ top: 'small' }}\n                      height=\"32px\"\n                      tabs={tabs}\n                      selected={selectedStatus}\n                      onChange={id => projectList.updateListStatus(id)}\n                      projectsCount={projectList.tabCountProject}\n                    />\n                  </>\n                )}\n\n                <Box margin={{ top: 'small' }}>\n                  {isSchoolPoll && (\n                    <DistrictFilter\n                      onChangeFilter={(districtId) => projectList.setDistrictId(districtId)}\n                    />\n                  )}\n\n                  {!projectList.projectList.length ? (\n                    <Box\n                      fill={true}\n                      background=\"white\"\n                      pad=\"medium\"\n                      margin={{ vertical: 'medium' }}\n                      align=\"center\"\n                    >\n                      {'Не найдено проектов по данному голосованию'}\n                    </Box>\n                  ) : (\n                    <Table\n                      columns={[]}\n                      data={toJS(projectList.projectList)}\n                      isPending={projectList.isPending}\n                      onChangeDataFlow={onChangeDataFlow}\n                      dataLayerConfig={toJS(projectList.dataFlow, { recurseEverything: true })}\n                      customItem={CustomItem}\n                    />\n                  )}\n                </Box>\n              </Box>\n\n              {isIpadProOrWider && (\n                <Box flex=\"grow\" basis=\"350px\" margin={{ left: 'large' }}>\n                  <AboutVote />\n\n                  <Box direction=\"column\" margin={{ top: 'large' }}>\n                    <VotingActionsPanel />\n                  </Box>\n\n                  {isVoter && (\n                    <Box margin={{ top: 'xsmall' }}>\n                      <Text bold size=\"xsmall\" margin={{ bottom: 'small' }}>\n                        Поделиться голосованием в соц. сетях\n                      </Text>\n                      <ShareLinks\n                        onShare={type => {\n                          const provideParams = SHARE_PARAMS[type];\n                          const url = SHARE_LINKS[type]\n\n                          windowOpen(url + objectToGetParams(provideParams(activePoll.poll)), {})\n                        }}\n                      />\n\n                    </Box>\n                  )}\n                </Box>\n              )}\n            </Box>\n          </>\n        )}\n      </PollPageContainer>\n    );\n  }\n);\n\n","import { ITabOptions } from 'ui/TabsEx';\n\nexport const getTabs = (): ITabOptions[] => [\n  {\n    id: 'ALL',\n    text: 'Все'\n  },\n  {\n    id: 'IN_REVIEW',\n    text: 'На рассмотрении'\n  },\n  {\n    id: 'REWORK_REQUIRED',\n    text: 'На доработке'\n  },\n\n  {\n    id: 'REWORK_COMPLETED',\n    text: 'Доработан'\n  },\n  {\n    id: 'APPROVED',\n    text: 'Принят'\n  },\n  {\n    id: 'DECLINED',\n    text: 'Отклонен'\n  },\n  {\n    id: 'CANCELED',\n    text: 'Отозван'\n  }\n];\n","import * as React from 'react';\nimport { Button, Loader, Text, Title } from '@we-ui-components/base';\nimport { Box } from 'grommet';\nimport { Routes } from '../../../constants';\nimport { BackButton } from 'components/BackButton';\nimport { changeTime } from '../applicantColumns';\nimport { useStores } from 'stores/index';\nimport { useParams } from 'react-router';\nimport { observer } from 'mobx-react-lite';\nimport { IProject, PROJECT_STATUS } from 'interfaces/apiEntities';\nimport styled from 'styled-components';\nimport { ProjectStatus } from '../../Poll/ProjectStatus';\nimport { formatWithTwoDecimalsRub, showPeople } from 'utils/formatNumber';\nimport { getSphere } from '../CreateProject';\nimport { PageError } from 'components/PageError';\nimport { SliderComponent } from 'ui/Slider/SliderComponent';\nimport { PrivateIcon } from 'pages/Poll/icons';\nimport { ImplementationDetails } from 'pages/Poll/components/ImplementationDetails';\nimport { ReworkForm } from './ReworkForm';\nimport { ActionModalConfig } from 'stores/ActionModalsStore';\nimport { useState } from 'react';\n\nexport const ActiveProject = observer(() => {\n  const { activeProject, actionModals } = useStores();\n  const { id } = useParams();\n  const [error, setError] = useState('');\n\n  React.useEffect(() => {\n    activeProject.getProject(id).then();\n\n    return activeProject.clear();\n  }, []);\n\n  const openCancelModal = () => {\n    actionModals.open(\n      ({ config }: { config: ActionModalConfig }) => (\n        <>\n          <Text size=\"medium\">\n            Проект будет переведен в статус \"Отозван\". Это действие необратимо.\n          </Text>\n          <Text color=\"Red500\" margin={{ top: 'small' }}>\n            {error}\n          </Text>\n        </>\n      ),\n      {\n        title: `Вы уверены, что хотите отозвать проект?`,\n        applyText: () => <>Отозвать проект</>,\n        closeText: () => <>Отмена</>,\n        noValidation: true,\n        onApply: async () => {\n          activeProject\n            .callProjectAction(activeProject.project.id, 'cancel')\n            .then(() => {\n              actionModals.closeLastModal();\n              activeProject.getProject(activeProject.project.id);\n            })\n            .catch(err => {\n              actionModals.open(\n                ({ config }: { config: ActionModalConfig }) => (\n                  <Text size=\"medium\">{err.detail}</Text>\n                ),\n                {\n                  title: `Ошибка отзыва проекта`,\n                  applyText: () => <>Ок</>,\n                  closeText: () => <></>,\n                  noValidation: true,\n                  onApply: async () => actionModals.closeLastModal()\n                }\n              );\n            });\n        }\n      }\n    );\n  };\n\n  const item: IProject = activeProject.project;\n\n  if (activeProject.fetchError)\n    return <PageError error={activeProject.fetchError} />;\n\n  if (!item) {\n    return <Loader />;\n  }\n\n  const isCancelButtonShown = [\n    PROJECT_STATUS.IN_REVIEW,\n    PROJECT_STATUS.APPROVED,\n    PROJECT_STATUS.REWORK_REQUIRED,\n    PROJECT_STATUS.REWORK_COMPLETED\n  ].includes(item.status);\n\n  // TODO button disabled display is wrong for transparent bordered state\n  // TODO get flag for button state\n  const isCancelButtonDisabled = false;\n\n  return (\n    <>\n      <Box pad={{ vertical: '32px', horizontal: '64px' }}>\n        <Box direction=\"row\" justify=\"between\" width=\"734px\">\n          <BackButton url={`/${Routes.homeApplicant}`} />\n          {isCancelButtonShown && (\n            <Button\n              transparent\n              bordered\n              color=\"Blue700\"\n              size=\"medium\"\n              style={{\n                opacity: isCancelButtonDisabled ? 0.2 : 1,\n                cursor: isCancelButtonDisabled ? 'auto' : 'pointer'\n              }}\n              onClick={() => !isCancelButtonDisabled && openCancelModal()}\n            >\n              Отозвать проект\n            </Button>\n          )}\n        </Box>\n        <BoxResponsive\n          pad={{ vertical: 'small' }}\n          direction=\"row-responsive\"\n          justify=\"between\"\n          width=\"100%\"\n        >\n          <Box\n            style={{\n              background: 'white',\n              flex: '2 auto',\n              boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04)',\n              maxWidth: 736,\n              position: 'relative'\n            }}\n            pad=\"large\"\n          >\n            <Box justify=\"between\" direction=\"row\">\n              <Title size=\"small\" bold style={{ lineHeight: '34px' }}>\n                {item.name}\n              </Title>\n              <ProjectStatus status={item.status} />\n            </Box>\n            {!!item.reworkReason && (\n              <>\n                <Text\n                  margin={{ top: 'small', bottom: 'xsmall' }}\n                  size=\"xxsmall\"\n                  color=\"#F8B700\"\n                >\n                  Причина отправки на доработку\n                </Text>\n                <pre style={{ margin: 0 }}>\n                  <Text\n                    size=\"xsmall\"\n                    style={{\n                      whiteSpace: 'normal',\n                      wordWrap: 'break-word'\n                    }}\n                  >\n                    {item.reworkReason}\n                  </Text>\n                </pre>\n              </>\n            )}\n            {!!item.declineReason && (\n              <>\n                <Text\n                  margin={{ top: 'small', bottom: 'xsmall' }}\n                  size=\"xxsmall\"\n                  color=\"Red\"\n                >\n                  Причина отклонения\n                </Text>\n                <pre style={{ margin: 0 }}>\n                  <Text\n                    size=\"xsmall\"\n                    style={{\n                      whiteSpace: 'normal',\n                      wordWrap: 'break-word'\n                    }}\n                  >\n                    {item.declineReason}\n                  </Text>\n                </pre>\n              </>\n            )}\n            {item.status === PROJECT_STATUS.REWORK_REQUIRED && (\n              <ReworkForm project={item} />\n            )}\n            {item.status !== PROJECT_STATUS.REWORK_REQUIRED && (\n              <>\n                <Text\n                  margin={{ vertical: 'small' }}\n                  size=\"xxsmall\"\n                  color=\"Grey\"\n                >\n                  Муниципальное образование\n                </Text>\n                <Text size=\"xsmall\">\n                  {item.school\n                    ? item.school.districtName\n                    : item.subject.name || '--'}\n                </Text>\n\n                {item.school ? (\n                  <>\n                    <Text\n                      margin={{ vertical: 'small' }}\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                    >\n                      Школа\n                    </Text>\n                    <Text size=\"xsmall\">{item.school.name}</Text>\n                  </>\n                ) : null}\n\n                <Text\n                  margin={{ vertical: 'small' }}\n                  size=\"xxsmall\"\n                  color=\"Grey\"\n                >\n                  Голосование по {item.school ? 'школьной группе' : 'району'}\n                </Text>\n                <Text size=\"xsmall\">\n                  {item.school\n                    ? `${item.school.schoolGroupName}`\n                    : `${item.subject.name || '--'}, ${item.subject.year ||\n                        '--'}`}\n                </Text>\n                <Text margin={{ vertical: 'small' }} size=\"xsmall\" bold>\n                  Описание проекта\n                </Text>\n                <Box direction=\"row\" justify=\"start\">\n                  {!item.sphere && item.school ? null : (\n                    <Box style={{ width: '50%' }}>\n                      <Text\n                        size=\"xxsmall\"\n                        color=\"Grey\"\n                        style={{ marginBottom: '10px' }}\n                      >\n                        Сфера деятельности\n                      </Text>\n                      <Text size=\"xsmall\">{getSphere(item.sphere)}</Text>\n                    </Box>\n                  )}\n                  <Box margin={{ bottom: 'small' }}>\n                    <Text\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                      style={{ marginBottom: '10px' }}\n                    >\n                      Благополучателей\n                    </Text>\n                    <Text size=\"xsmall\">\n                      {showPeople(item.beneficiaries ? item.beneficiaries : 0)}\n                    </Text>\n                  </Box>\n                </Box>\n\n                <Text\n                  margin={{\n                    bottom: 'xsmall',\n                    top: item.sphere ? 'small' : 'none'\n                  }}\n                  size=\"xxsmall\"\n                  color=\"Grey\"\n                >\n                  Описание проекта\n                </Text>\n                <pre style={{ margin: 0 }}>\n                  <Text\n                    size=\"xsmall\"\n                    style={{\n                      lineHeight: '19px',\n                      whiteSpace: 'normal',\n                      wordWrap: 'break-word'\n                    }}\n                  >\n                    {item.description}\n                  </Text>\n                </pre>\n                <Box\n                  margin={{ vertical: 'small' }}\n                  direction=\"row-responsive\"\n                  justify=\"between\"\n                  style={{ position: 'relative' }}\n                >\n                  <Box>\n                    <Text\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                      style={{ marginBottom: '10px' }}\n                    >\n                      Начало реализации проекта\n                    </Text>\n                    <Text size=\"xsmall\">\n                      {item.startDate\n                        ? changeTime(item.startDate)\n                        : 'не указан'}\n                    </Text>\n                  </Box>\n                  <Box style={{ position: 'absolute', left: '50%' }}>\n                    <Text\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                      style={{ marginBottom: '10px' }}\n                    >\n                      Окончание реализации проекта\n                    </Text>\n                    <Text size=\"xsmall\">\n                      {item.endDate ? changeTime(item.endDate) : 'не указан'}\n                    </Text>\n                  </Box>\n                </Box>\n                <Text\n                  margin={{ vertical: 'small' }}\n                  size=\"xxsmall\"\n                  color=\"Grey\"\n                >\n                  Место реализации проекта\n                </Text>\n                <Text size=\"xsmall\">{item.place}</Text>\n                <Box\n                  pad={{ vertical: 'large' }}\n                  style={{ borderBottom: '1px solid #e5e5e5' }}\n                >\n                  <LinkA href={item.administrationLink} target=\"_blank\">\n                    Ссылка на сайт администрации\n                  </LinkA>\n                </Box>\n                <Text style={{ marginTop: '16px' }} size=\"xsmall\" bold>\n                  Объем требуемых средств{' '}\n                  {formatWithTwoDecimalsRub(item.budgetSummary || 0)}\n                </Text>\n                <Box\n                  margin={{ vertical: 'small' }}\n                  direction=\"row-responsive\"\n                  justify=\"between\"\n                  style={{ position: 'relative' }}\n                >\n                  <Box>\n                    <Text\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                      style={{ marginBottom: '10px' }}\n                    >\n                      Областной бюджет{' '}\n                    </Text>\n                    <Text size=\"xsmall\">\n                      {formatWithTwoDecimalsRub(item.budgetRegion || 0)}\n                    </Text>\n                  </Box>\n                  <Box style={{ position: 'absolute', left: '50%' }}>\n                    <Text\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                      style={{ marginBottom: '10px' }}\n                    >\n                      Средства населения\n                    </Text>\n                    <Text size=\"xsmall\">\n                      {formatWithTwoDecimalsRub(item.budgetPeople || 0)}\n                    </Text>\n                  </Box>\n                </Box>\n                <Box\n                  margin={{ vertical: 'small' }}\n                  direction=\"row-responsive\"\n                  justify=\"between\"\n                  style={{ position: 'relative' }}\n                >\n                  <Box>\n                    <Text\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                      style={{ marginBottom: '10px' }}\n                    >\n                      Бюджет муниципального образования\n                    </Text>\n                    <Text size=\"xsmall\">\n                      {formatWithTwoDecimalsRub(item.budgetDistrict || 0)}\n                    </Text>\n                  </Box>\n                  <Box style={{ position: 'absolute', left: '50%' }}>\n                    <Text\n                      size=\"xxsmall\"\n                      color=\"Grey\"\n                      style={{ marginBottom: '10px' }}\n                    >\n                      Внебюджетные средства\n                    </Text>\n                    <Text size=\"xsmall\">\n                      {formatWithTwoDecimalsRub(item.noBudgetFunds || 0)}\n                    </Text>\n                  </Box>\n                </Box>\n                <Text size=\"xsmall\" bold>\n                  Материалы (до и после реализации проекта)\n                </Text>\n                <SliderComponent slideFiles={item.files} arrow />\n                {!!item.privateFiles && !!item.privateFiles.length && (\n                  <>\n                    <Text\n                      size=\"xsmall\"\n                      bold\n                      margin={{ top: 'medium' }}\n                      style={{ display: 'flex', alignItems: 'center' }}\n                    >\n                      <PrivateIcon\n                        style={{ marginRight: '8px' }}\n                        {...({} as any)}\n                      />\n                      Приватные материалы\n                    </Text>\n                    <SliderComponent slideFiles={item.privateFiles} arrow />\n                  </>\n                )}\n              </>\n            )}\n\n            {activeProject.project.status === PROJECT_STATUS.DONE && (\n              <ImplementationDetails\n                margin={{ top: '16px' }}\n                project={activeProject?.project}\n              />\n            )}\n          </Box>\n          {/*<Box\n            pad=\"large\"\n            style={{\n              background: 'white',\n              boxShadow: '0px 4px 8px rgba(10, 6, 6, 0.04)',\n              borderRadius: '1px',\n              margin: '10px 0 0 35px',\n              height: 'min-content',\n              flex: '1 auto'\n            }}\n          >\n            <Text size=\"xsmall\" bold>\n              История проекта\n            </Text>\n            <Box direction=\"row\" align=\"center\" margin={{ vertical: 'small' }}>\n              <svg height=\"10\" width=\"10\">\n                <circle cx=\"5\" cy=\"5\" r=\"5\" fill=\"Grey\"/>\n              </svg>\n              <Text\n                size=\"xxsmall\"\n                color=\"Grey\"\n                margin={{ horizontal: 'small' }}\n              >\n                {item.startDate ? getTimeDate(item.startDate) : 'не указан'}\n              </Text>\n            </Box>\n            <Box direction=\"row\">\n              <Text size=\"xsmall\" margin={{ horizontal: 'medium' }}>\n                Проект опубликован. Статус\n              </Text>\n\n              <ProjectStatus status={item.status}></ProjectStatus>\n            </Box>\n          </Box>*/}\n        </BoxResponsive>\n      </Box>\n    </>\n  );\n});\n\nconst LinkA = styled.a`\n  font-size: 13px;\n  line-height: 19px;\n  color: #3b33b0;\n  text-decoration: none;\n  font-weight: 600;\n\n  &:hover {\n    color: #6b698f;\n  }\n`;\n\nconst BoxResponsive = styled(Box)`\n  @media (max-width: 1050px) {\n    flex-direction: column;\n  }\n`;\n","import { observer, useLocalStore } from 'mobx-react';\nimport { Form, Input, isRequired, MobxForm } from '@we-ui-components/form';\nimport { Box } from 'grommet';\nimport { Button } from '@we-ui-components/base';\nimport * as React from 'react';\nimport { useStores } from 'stores/index';\nimport { isTheSameAs } from 'utils/validators';\nimport { changePassword } from 'services/usersService';\nimport { encryptPassword } from 'utils/decode';\nimport { passwordValidators } from 'pages/Users/modals/userPasswordValidators';\n\nconst isPasswordConfirm = (\n  form: MobxForm,\n  fieldName: string,\n  fieldNameEqual: string\n) => {\n  return {\n    validateType: 'isPasswordConfirmValidator',\n    validator(\n      rule: any[],\n      value: any,\n      callback: (errors: any[]) => void,\n      storeData?: any\n    ) {\n      const errors = [];\n\n      if (\n        form.getFieldValue(fieldName) !== form.getFieldValue(fieldNameEqual)\n      ) {\n        errors.push('Пароли должны совпадать!');\n      }\n\n      callback(errors);\n    }\n  };\n};\n\nexport const UpdatePassword = observer(() => {\n  const { user, actionModals } = useStores();\n  const { userInfo } = user;\n\n  const formRef = React.useRef<MobxForm>(null);\n\n  const data = useLocalStore(() => ({\n    password: '',\n    password_confirm: ''\n  }));\n\n  const handleCancel = () => {\n    actionModals.closeLastModal();\n  };\n\n  const handleSave = async () => {\n    formRef.current\n      .validateFields()\n      .then(() =>\n        changePassword(userInfo.personId, {\n          password: encryptPassword(data.password)\n        }).then(() => actionModals.closeLastModal())\n      )\n      .then(() =>\n        actionModals.open(\n          () => (\n            <Box\n              align=\"end\"\n              style={{ flex: '1 1 100%' }}\n              pad={{ bottom: 'xlarge' }}\n            >\n              <Button onClick={() => actionModals.closeLastModal()}>\n                Закрыть\n              </Button>\n            </Box>\n          ),\n          {\n            title: 'Пароль изменен',\n            width: '545px'\n          }\n        )\n      );\n  };\n\n  return (\n    <Box pad={{ bottom: 'large' }}>\n      <Form ref={(ref: MobxForm) => (formRef.current = ref)} data={data}>\n        <Input\n          placeholder=\"Новый пароль\"\n          name=\"password\"\n          style={{ marginTop: 18 }}\n          type=\"password\"\n          rules={passwordValidators}\n        />\n\n        <Input\n          placeholder=\"Повторите новый пароль\"\n          name=\"password_confirm\"\n          style={{ marginTop: 18 }}\n          type=\"password\"\n          rules={[\n            isRequired,\n            isTheSameAs('password', 'Пароли должны совпадать!')\n          ]}\n        />\n      </Form>\n\n      <Box direction=\"row\" justify=\"end\">\n        <Button\n          bordered\n          transparent\n          color=\"Blue\"\n          onClick={handleCancel}\n          style={{ border: '1px solid #204080' }}\n        >\n          Отменить\n        </Button>\n        <Button onClick={handleSave} margin={{ left: 'small' }}>\n          Сохранить изменения\n        </Button>\n      </Box>\n    </Box>\n  );\n});\n","import { Box } from 'grommet';\nimport { Text } from '@we-ui-components/base';\nimport * as React from 'react';\n\nexport const DataPiece: typeof Box = props => <Box gap=\"5px\" {...props} />;\n\nexport const Label = (props: TextProps) => (\n  <Text size=\"11px\" color=\"Gray\" {...props} />\n);\n\nexport const Value = (props: TextProps) => <Text size=\"13px\" {...props} />;\n\ntype BoxProps = React.ComponentProps<typeof Box>;\ntype TextProps = React.PropsWithChildren<React.ComponentProps<typeof Text>>;\n","import { observer, useLocalStore } from 'mobx-react';\nimport {\n  Form,\n  Input,\n  isEmail,\n  isRequired,\n  MobxForm\n} from '@we-ui-components/form';\nimport { EmptyString } from '../../constants';\nimport { Box } from 'grommet';\nimport { Button } from '@we-ui-components/base';\nimport * as React from 'react';\nimport { DataPiece, Label, Value } from './components/DataPiece';\nimport { useStores } from 'stores/index';\nimport { oneOfLengths } from 'utils/validators';\nimport { PhoneInput } from '../Registration/PhoneInput';\nimport { updatePersonFull, updatePersonPartial } from 'services/userService';\nimport { UpdatePersonRequest } from 'interfaces/apiEntities';\nimport { getFullName } from 'utils/textUtils';\nimport { action } from 'mobx';\nimport { phoneValidators } from '../Users/modals/userPasswordValidators';\nimport { FixedWidthUserInput } from '../Users/components/styled';\n\nconst preparePhone = (phone: string) =>\n  phone.startsWith('8') ? phone.replace('8', '+7') : phone;\n\nexport const UpdateProfileModal = observer(() => {\n  const { user, actionModals } = useStores();\n  const { userInfo } = user;\n\n  const formRef = React.useRef<MobxForm>(null);\n\n  const isApplicant = user.isContainOneOfRoles(['APPLICANT']);\n  const isRegulator = user.isContainOneOfRoles(['REGULATOR']);\n\n  const emailError = useLocalStore(() => ({\n    error: null,\n    setError: error => {\n      emailError.error = error;\n    }\n  }));\n\n  const data = useLocalStore(\n    () =>\n      ({\n        firstName: userInfo.firstName,\n        lastName: userInfo.lastName,\n        patronymic: userInfo.meta?.patronymic,\n        email: userInfo.email,\n        phone: preparePhone(userInfo.phone || '')\n      } as UpdatePersonRequest)\n  );\n\n  const handleCancel = () => {\n    actionModals.closeLastModal();\n  };\n\n  const handleSave = action(async () => {\n    const pickApplicant = ({ email, phone }) => ({ email, phone });\n\n    const req: Partial<UpdatePersonRequest> = isApplicant\n      ? pickApplicant(data)\n      : { ...data };\n\n    const updateFn = isApplicant ? updatePersonPartial : updatePersonFull;\n\n    formRef.current.validateFields().then(() =>\n      updateFn(userInfo.personId, req)\n        .then(() => {\n          actionModals.closeLastModal();\n          user.updateUserInfo();\n        })\n        .then(() =>\n          actionModals.open(\n            () => (\n              <Box\n                align=\"end\"\n                style={{ flex: '1 1 100%' }}\n                pad={{ bottom: 'xlarge' }}\n              >\n                <Button onClick={() => actionModals.closeLastModal()}>\n                  Закрыть\n                </Button>\n              </Box>\n            ),\n            {\n              title: 'Информация изменена',\n              width: '545px'\n            }\n          )\n        )\n        .catch(error => {\n          console.log(error);\n\n          if (error.meta.field === 'email') {\n            const errorEmail = {\n              message: error.detail || 'Что-то пошло не так',\n              field: error.meta.field\n            };\n\n            formRef.current.errors.set(error.meta.field, [errorEmail]);\n\n            emailError.setError(errorEmail);\n          }\n        })\n    );\n  });\n\n  return (\n    <Box pad={{ bottom: 'large' }}>\n      <Form ref={(ref: MobxForm) => (formRef.current = ref)} data={data}>\n        {isApplicant && (\n          <DataPiece margin={{ bottom: 'small' }}>\n            <Label>ФИО</Label>\n\n            <Value>\n              {userInfo.firstName || userInfo.firstName\n                ? getFullName({\n                    firstName: userInfo.firstName || '',\n                    lastName: userInfo.lastName || '',\n                    middleName: userInfo.meta\n                      ? userInfo.meta.patronymic || ''\n                      : ''\n                  })\n                : EmptyString}\n            </Value>\n          </DataPiece>\n        )}\n\n        {isApplicant && (\n          <DataPiece margin={{ bottom: 'small' }}>\n            <Label>Район</Label>\n            {/*TODO район в модели профиля пользрвателя*/}\n            <Value>{userInfo.phone || EmptyString}</Value>\n          </DataPiece>\n        )}\n\n        {isApplicant && (\n          <DataPiece>\n            <Label>Организация пользователя</Label>\n            <Value>\n              {userInfo.meta?.company || userInfo.companyName || EmptyString}\n            </Value>\n          </DataPiece>\n        )}\n\n        {isRegulator && (\n          <>\n            <Input placeholder=\"Фамилия\" name=\"lastName\" type=\"text\" />\n\n            <Input placeholder=\"Имя\" name=\"firstName\" type=\"text\" />\n\n            <Input placeholder=\"Отчество\" name=\"patronymic\" type=\"text\" />\n          </>\n        )}\n\n        <Input\n          placeholder=\"Email\"\n          name=\"email\"\n          style={{ marginTop: isApplicant ? 18 : 0 }}\n          type=\"text\"\n          help={emailError.error?.message || ''}\n          required\n          rules={[isEmail, isRequired]}\n        />\n\n        <Input placeholder=\"Телефон\" name=\"phone\" rules={phoneValidators} />\n      </Form>\n\n      <Box direction=\"row\" justify=\"end\">\n        <Button\n          bordered\n          transparent\n          color=\"Blue\"\n          onClick={handleCancel}\n          style={{ border: '1px solid #204080' }}\n        >\n          Отменить\n        </Button>\n\n        <Button onClick={handleSave} margin={{ left: 'small' }}>\n          Сохранить изменения\n        </Button>\n      </Box>\n    </Box>\n  );\n});\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { breakpoints, Panel } from 'ui/index';\nimport { Text, Title } from '@we-ui-components/base';\nimport { useStores } from 'stores/index';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { EmptyString } from '../../constants';\nimport styled from 'styled-components';\nimport { IconButton } from 'ui/IconButton';\nimport { useMediaQuery } from 'react-responsive';\nimport { UpdatePassword } from './UpdatePasswordModal';\nimport { DataPiece, Label, Value } from './components/DataPiece';\nimport { UpdateProfileModal } from './UpdateProfileModal';\nimport { getFullName } from 'utils/textUtils';\nimport { getDistricts } from 'services/voteService';\n\nconst EditIcon = () => (\n  <svg\n    width=\"12\"\n    height=\"12\"\n    viewBox=\"0 0 12 12\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M11.8125 2.6875L10.5938 3.90625L8.09375 1.40625L9.3125 0.1875C9.4375 0.0625 9.59375 0 9.78125 0C9.96875 0 10.125 0.0625 10.25 0.1875L11.8125 1.75C11.9375 1.875 12 2.03125 12 2.21875C12 2.40625 11.9375 2.5625 11.8125 2.6875ZM0 9.5L7.375 2.125L9.875 4.625L2.5 12H0V9.5Z\"\n      fill=\"#3B33B0\"\n    />\n  </svg>\n);\n\nexport const ProfilePersonalData: React.FC<React.ComponentProps<\n  typeof Box\n>> = observer(function ProfilePersonalData(props) {\n  const { user, projectList, actionModals } = useStores();\n  const { userInfo } = user;\n  const [districtName, setDistrictName] = React.useState('');\n\n  React.useEffect(() => {\n    if (userInfo.meta?.district) {\n      getDistricts().then(res => {\n        const district = res.content.find(\n          i => +i.id === +userInfo.meta.district\n        );\n        setDistrictName(district?.name || userInfo.meta?.district);\n      });\n    }\n  }, []);\n\n  const isApplicant = user.isContainOneOfRoles(['APPLICANT']);\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n  const isTabletOrWider = useMediaQuery({ minDeviceWidth: breakpoints.tablet });\n  const editPasswordFormRef = React.useRef(null);\n\n  const data = useLocalStore(() => ({\n    password: '',\n    password_confirm: '',\n    old_password: ''\n  }));\n\n  const showEditPasswordModal = () => {\n    actionModals.open(UpdatePassword, {\n      title: 'Изменение пароля',\n      width: isLaptopOrWider ? '545px' : 'auto',\n      modalStyle: {\n        maxWidth: isTabletOrWider ? '545px' : '100vw'\n      }\n    });\n  };\n\n  const showEditProfileModal = () => {\n    actionModals.open(UpdateProfileModal, {\n      title: 'Редактирование профиля',\n      width: isLaptopOrWider ? '545px' : 'auto',\n      modalStyle: {\n        maxWidth: isTabletOrWider ? '545px' : '100vw'\n      }\n    });\n  };\n\n  return (\n    <Box direction=\"column\" align=\"stretch\" gap=\"32px\" {...props}>\n      <Title size=\"medium\" bold>\n        Профиль\n        <IconButton\n          margin={{ left: 'small' }}\n          renderIcon={() => <EditIcon />}\n          onClick={showEditProfileModal}\n          children=\"Редактировать профиль\"\n        />\n      </Title>\n\n      <Panel pad=\"24px\" style={{ flex: 1 }} gap=\"20px\">\n        <DataPiece>\n          <Label>Email</Label>\n          <Value>{userInfo.email}</Value>\n        </DataPiece>\n\n        <DataPiece>\n          <Label>ФИО</Label>\n          <Value>\n            {userInfo.firstName || userInfo.firstName\n              ? getFullName({\n                  firstName: userInfo.firstName || '',\n                  lastName: userInfo.lastName || '',\n                  middleName: userInfo.meta\n                    ? userInfo.meta.patronymic || ''\n                    : ''\n                })\n              : EmptyString}\n          </Value>\n        </DataPiece>\n\n        <DataPiece>\n          <Label>Телефон</Label>\n          <Value>{userInfo.phone || EmptyString}</Value>\n        </DataPiece>\n\n        {isApplicant && (\n          <DataPiece>\n            <Label>Район</Label>\n            <Value>{districtName || EmptyString}</Value>\n          </DataPiece>\n        )}\n\n        {isApplicant && (\n          <DataPiece>\n            <Label>Организация пользователя</Label>\n            <Value>\n              {userInfo.meta?.company || userInfo.companyName || EmptyString}\n            </Value>\n          </DataPiece>\n        )}\n\n        <Box onClick={showEditPasswordModal} alignSelf=\"start\">\n          <StyledText style={{ fontSize: '13px' }} color=\"Purple\">\n            Изменить пароль\n          </StyledText>\n        </Box>\n\n        <Box\n          alignSelf=\"start\"\n          onClick={() => {\n            projectList.filters = { status: [] }; //TODO WTF?\n            // projectList.clear(); //NOT WORK\n            user.logoutEx();\n          }}\n        >\n          <StyledText style={{ fontSize: '13px' }} color=\"Red\">\n            Выйти из системы\n          </StyledText>\n        </Box>\n      </Panel>\n    </Box>\n  );\n});\n\nconst StyledText = styled(Text)`\n  cursor: pointer;\n`;\n","import * as React from 'react';\nimport { ProfilePersonalData } from './ProfilePersonalData';\nimport { Box } from 'grommet';\nimport { observer } from 'mobx-react';\n\ninterface ProfilePageProps {}\n\nexport const ProfilePage = observer(function(props: ProfilePageProps) {\n  return (\n    <Box width=\"544px\" margin={{ top: '40px' }} style={{ alignSelf: 'center' }}>\n      <ProfilePersonalData margin={{ top: '24px' }} />\n    </Box>\n  );\n});\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { Box } from 'grommet';\nimport { breakpoints } from 'ui';\n\nexport function ArchivePageContainer(props: BoxProps) {\n  return <PageContainer {...props} />;\n}\n\nconst PageContainer = styled(Box)`\n  margin: 0 auto;\n  width: 100%;\n  max-width: 872px;\n  padding: 0 9px;\n\n  @media (min-width: ${breakpoints.laptopL}) {\n    padding: 0;\n  }\n`;\n\ntype BoxProps = React.ComponentProps<typeof Box>;\n","import * as React from 'react';\nimport { ArchivePollApiDTO } from 'interfaces';\nimport { Box } from 'grommet';\nimport styled from 'styled-components';\nimport { Text, Title } from '@we-ui-components/base';\nimport { PollingType } from 'pages/Organizer/tabs';\nimport { PollStatus } from 'components/PollStatus/PollStatus';\nimport { ListItemCounter } from 'pages/Organizer/ListItemCounter';\nimport { ProjectIcon, VotesIcon } from 'pages/Organizer/icons';\nimport { useHistory } from 'react-router';\nimport { Routes } from 'constants/routes';\nimport { dateTimeFormat } from 'utils';\nimport { breakpoints } from 'ui';\n\ninterface ArchivePollTableItemProps {\n  params: ArchivePollApiDTO;\n}\n\nexport function ArchivePollTableItem({\n  params: poll\n}: ArchivePollTableItemProps) {\n  const history = useHistory();\n\n  const navigate = () => {\n    history.push(`/${Routes.archive}/${poll.id}`);\n  };\n\n  const formatPollName = () => {\n    const PREFIX =\n      poll.subject.type === PollingType.schoolGroup ? 'школьной группе ' : '';\n\n    const name = poll.subject.name || '--';\n    const year = poll.subject.year || '--';\n\n    return `${PREFIX}${name}, ${year}`;\n  };\n\n  const formatVotingDates = () => {\n    const formatDate = (date: string) =>\n      date ? dateTimeFormat(date) : 'не указан';\n\n    const startDate = formatDate(poll.votingStartDate);\n    const endDate = formatDate(poll.votingEndDate);\n\n    return (\n      <>\n        {startDate} &mdash; {endDate}\n      </>\n    );\n  };\n\n  return (\n    <ArchivePollTableItemContainer onClick={navigate}>\n      <Box gap=\"8px\">\n        <Title size=\"xsmall\" bold color=\"#172b4d\">\n          Голосование по {formatPollName()}\n        </Title>\n\n        <Text margin=\"2px 0 8px\" size=\"xsmall\" color=\"#172b4d\">\n          {formatVotingDates()}\n        </Text>\n      </Box>\n\n      <Box gap=\"4px\">\n        <PollStatus style={{ marginRight: 'auto' }} poll={poll as any} />\n\n        <CounterContainer>\n          <ListItemCounter\n            count={poll.voteCount}\n            icon={<VotesIcon />}\n            margin=\"0\"\n          />\n\n          {!!poll.bulletinProjectsCount && (\n            <ListItemCounter\n              count={poll.bulletinProjectsCount}\n              icon={<ProjectIcon />}\n              margin={{ left: '16px' }}\n            />\n          )}\n        </CounterContainer>\n      </Box>\n    </ArchivePollTableItemContainer>\n  );\n}\n\nconst ArchivePollTableItemContainer = styled(Box)`\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n\n  width: 100%;\n  cursor: pointer;\n\n  margin-top: 24px;\n  padding: 16px;\n  background: ${props => props.theme.palette.White};\n  box-shadow: -2px 0px 0px #f2f7f5, -10px 0px 20px rgba(0, 0, 0, 0.03);\n\n  &:hover {\n    box-shadow: 0 4px 8px rgba(10, 6, 6, 0.06);\n  }\n\n  @media (min-width: ${breakpoints.laptop}) {\n    flex-direction: row;\n  }\n`;\n\nconst CounterContainer = styled(Box)`\n  display: flex;\n  flex-flow: row nowrap;\n  justify-content: flex-start;\n  align-items: center;\n  margin-top: 8px;\n\n  @media (min-width: ${breakpoints.laptop}) {\n    justify-content: flex-end;\n    margin-top: 0;\n  }\n`;\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport { Title, Icon, Text } from '@we-ui-components/base';\nimport { breakpoints } from 'ui';\nimport { Box } from 'grommet';\nimport { useStores } from 'stores';\nimport { useTheme } from 'utils';\n\nexport const PageTitle = styled(Title).attrs({\n  bold: true\n})`\n  font-size: 18px;\n  text-align: center;\n\n  @media (min-width: ${breakpoints.laptopL}) {\n    font-size: 24px;\n    text-align: start;\n  }\n`;\n\nexport const BackButton: typeof Box = props => {\n  const { routing } = useStores();\n  const theme = useTheme();\n\n  return (\n    <BackButtonContainer\n      fill={true}\n      width={{ max: '70px' }}\n      margin={{ top: 'xlarge' }}\n      onClick={() => {\n        routing.goBack();\n      }}\n      {...props}\n    >\n      <Icon glyph=\"Left\" height=\"1em\" color={theme.palette.Purple} />\n      <Text size=\"inherit\">Назад</Text>\n    </BackButtonContainer>\n  );\n};\n\nconst BackButtonContainer = styled(Box)`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-items: center;\n  max-width: 70px;\n  margin-top: 10px;\n  font-size: 16px;\n\n  @media (min-width: ${breakpoints.laptopL}) {\n    margin-top: 32px;\n    font-size: 13px;\n  }\n`;\n","import * as React from 'react';\nimport { Box } from 'grommet';\nimport { FilterSearch, SlimTabs } from 'components';\nimport { observer } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport styled from 'styled-components';\nimport { Select, Text } from '@we-ui-components/base';\n\nexport const WideFilter: typeof Box = observer(function WideFilter(props) {\n  const { archivePolls } = useStores();\n\n  return (\n    <Box direction=\"row\" gap=\"medium\" justify=\"between\">\n      <Box\n        direction=\"row\"\n        background=\"#EFEFEF\"\n        style={{ borderRadius: '2px' }}\n        flex=\"grow\"\n        {...props}\n      >\n        <FilterSearch\n          flex=\"grow\"\n          store={archivePolls}\n          filterField=\"search\"\n        />\n        <Divider />\n      </Box>\n\n      <Select\n        size=\"medium\"\n        value={archivePolls.yearFilter}\n        options={archivePolls.yearOptions}\n        onChange={archivePolls.changeYearFilter}\n      />\n    </Box>\n  );\n});\n\nexport const CompactFilter: typeof Box = observer(function CompactFilter() {\n  const { archivePolls } = useStores();\n\n  return (\n    <Box gap=\"medium\">\n      <FilterSearch\n        flex=\"grow\"\n        store={archivePolls}\n        filterField=\"search.text\"\n      />\n\n      <Select\n        size=\"full\"\n        value={archivePolls.yearFilter}\n        options={archivePolls.yearOptions}\n        onChange={archivePolls.changeYearFilter}\n      />\n    </Box>\n  );\n});\n\nconst Divider = styled(Box)`\n  width: 1px;\n  max-width: 1px;\n\n  height: 40px;\n  margin: auto 0;\n  background-color: #d1d1d1;\n`;\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport {\n  FilterTabs,\n  CommonTable,\n  ExportProjectsButton,\n  SlimTabs\n} from 'components';\nimport { Box } from 'grommet';\nimport { useStores } from 'stores';\nimport { ArchivePageContainer } from './components/ArchivePageContainer';\nimport { ArchivePollTableItem } from './components/ArchivePollTableItem';\nimport { PollingType } from 'pages/Organizer/tabs';\nimport { PageTitle, BackButton } from './components/styled';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\nimport { WideFilter, CompactFilter } from './components/Filters';\nimport styled from 'styled-components';\n\ninterface ArchivePollsPageProps {}\n\nexport const ArchivePollsPage = observer<ArchivePollsPageProps>(\n  function ArchivePollsPage() {\n    const { archivePolls, user } = useStores();\n\n    const isLapropOrWider = useMediaQuery({\n      minWidth: breakpoints.laptop\n    });\n\n    const isTabletOrWider = useMediaQuery({\n      minWidth: breakpoints.tablet\n    });\n\n    const isOrganizer = user.isContainRoles(['REGULATOR']);\n\n    const isBystander = !user.isContainOneOfRoles([\n      'APPLICANT',\n      'REGULATOR',\n      'VOTER'\n    ]);\n\n    return (\n      <ArchivePageContainer>\n        {(isBystander || !isLapropOrWider) && <BackButton />}\n\n        <Box\n          direction=\"row\"\n          justify=\"between\"\n          margin={{\n            top: isTabletOrWider ? 'xlarge' : 'medium',\n            bottom: 'medium'\n          }}\n        >\n          <PageTitle>Архив проектов</PageTitle>\n\n          {isOrganizer && <ExportProjectsButton />}\n        </Box>\n\n        <FiltersContainer gap=\"medium\">\n          {isTabletOrWider ? <WideFilter /> : <CompactFilter />}\n\n          <FilterTabs\n            style={{ margin: '6px 0' }}\n            store={archivePolls}\n            filterField=\"subjectType\"\n            component={SlimTabs as any}\n            tabs={[\n              { id: PollingType.district, text: 'Муниципальные районы' },\n              { id: PollingType.schoolGroup, text: 'Школьные группы' }\n            ]}\n          />\n        </FiltersContainer>\n\n        <CommonTable\n          store={archivePolls}\n          columns={[]}\n          customItem={{ render: ArchivePollTableItem }}\n        />\n      </ArchivePageContainer>\n    );\n  }\n);\n\nconst FiltersContainer = styled(Box)`\n  flex-direction: column-reverse;\n\n  @media (min-width: ${breakpoints.tablet}) {\n    flex-direction: column;\n  }\n`;\n","import * as React from 'react';\nimport { observer, useLocalStore } from 'mobx-react-lite';\nimport { useStores } from 'stores';\nimport { Box } from 'grommet';\nimport { PROJECT_STATUS, IProject, ArchivePollApiDTO } from 'interfaces';\nimport { Button, Text } from '@we-ui-components/base';\nimport {\n  ConfirmFinishModal,\n  FormData as ConfirmFinishModalFormData\n} from 'pages/Poll/ConfirmFinishModal';\nimport { useTheme } from 'utils';\nimport styled from 'styled-components';\n\ninterface ProjectActionsProps {\n  project: IProject;\n  poll: ArchivePollApiDTO;\n  voted: boolean;\n}\n\nexport const ProjectActions = observer<ProjectActionsProps>(\n  function ProjectActions({ project, poll, voted }) {\n    const { user, actionModals, archiveProjects, activeProject } = useStores();\n    const theme = useTheme();\n\n    const isPollCompleted = ['FINISHED'].includes(poll.status);\n\n    const isOrganizer = user.isContainRoles(['REGULATOR']);\n    const isVoter = user.isContainOneOfRoles(['VOTER']);\n\n    const displayPostActionButton =\n      [PROJECT_STATUS.APPROVED].includes(project.status) &&\n      isOrganizer &&\n      isPollCompleted;\n\n    const displayConfirmFinishActionButton =\n      project.status === PROJECT_STATUS.IN_PROGRESS &&\n      isOrganizer &&\n      isPollCompleted;\n\n    const archiveProject = () => {\n      actionModals.open(() => <Text size=\"medium\" />, {\n        title: `Вы уверены, что хотите перевести проект в архив?`,\n        applyText: () => <>Перевести в архив</>,\n        closeText: () => <>Отмена</>,\n        noValidation: true,\n        onApply: async () =>\n          activeProject.callProjectAction(project.id, 'archive').then(() => {\n            archiveProjects.init({ filters: { pollId: poll.id } });\n          })\n      });\n    };\n\n    const implementationProject = () => {\n      actionModals.open(() => <Text size=\"medium\" />, {\n        title: `Вы уверены, что хотите перевести проект в реализацию?`,\n        applyText: () => <>Перевести в реализацию</>,\n        closeText: () => <>Отмена</>,\n        noValidation: true,\n        onApply: async () =>\n          activeProject.callProjectAction(project.id, 'start').then(() => {\n            archiveProjects.init({ filters: { pollId: poll.id } });\n          })\n      });\n    };\n\n    const openConfirmFinishModal = () => {\n      actionModals.open(ConfirmFinishModal, {\n        width: '545px',\n        applyText: () => <span>Подтвердить</span>,\n        onApply: async (data: ConfirmFinishModalFormData) =>\n          activeProject\n            .confirmFinish(project.id, data.description, data.files)\n            .then(() => {\n              archiveProjects.init({ filters: { pollId: poll.id } });\n            }),\n        closeText: () => <span>Отменить</span>,\n        noValidation: true\n      });\n    };\n\n    const rate = useLocalStore(() => ({\n      setError: (err: string) => {\n        rate.error = err;\n      },\n      error: null\n    }));\n\n    if (isOrganizer) {\n      return (\n        <Box\n          align=\"center\"\n          direction=\"row\"\n          margin={{ left: 'auto' }}\n          style={{ position: 'relative' }}\n          gap=\"small\"\n        >\n          {displayPostActionButton && (\n            <Button\n              bordered\n              transparent\n              color=\"Blue\"\n              onClick={() => {\n                archiveProject();\n              }}\n              style={{ border: '1px solid #204080' }}\n            >\n              В архив\n            </Button>\n          )}\n          {displayPostActionButton && (\n            <Button\n              onClick={() => {\n                implementationProject();\n              }}\n            >\n              В реализацию\n            </Button>\n          )}\n          {displayConfirmFinishActionButton && (\n            <Button onClick={openConfirmFinishModal}>\n              Внести данные о реализации\n            </Button>\n          )}\n        </Box>\n      );\n    }\n\n    if (isVoter && voted) {\n      return (\n        <Button\n          style={{\n            background: 'inherit',\n            color: theme.palette.Purple,\n            border: `1px solid #d4d2eb`,\n            padding: '10px 16px',\n            cursor: 'auto'\n          }}\n          size=\"medium\"\n        >\n          <LabelStyle>\n            <input type=\"checkbox\" checked disabled />\n            <span />\n          </LabelStyle>\n          Голос отдан\n        </Button>\n      );\n    }\n\n    return null;\n  }\n);\n\nconst LabelStyle = styled.label`\n  display: inline-flex;\n  position: relative;\n  margin-right: 10px;\n  input {\n    height: 22px;\n    width: 22px;\n    appearance: none;\n  }\n\n  input:checked {\n    border: 2px solid #3b33b0;\n    background-color: inherit;\n  }\n\n  input:checked + span::before {\n    content: '\\\\2713';\n    color: #3b33b0;\n    position: absolute;\n    left: 0.7rem;\n    top: 0.35rem;\n  }\n`;\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport { StarRating } from 'components/StarRatings';\nimport { IProject, PROJECT_STATUS } from 'interfaces';\nimport { Text, Button } from '@we-ui-components/base';\nimport { isDefined } from 'utils';\nimport { useStores } from 'stores';\nimport { RateReworkModal } from 'pages/Poll/RateReworkModal';\nimport { useLocalStore } from 'mobx-react';\nimport * as projectService from 'services/projectService';\n\ninterface RealizationRatingProps {\n  project: IProject;\n  pollId: string;\n}\n\nexport const RealizationRating = observer<RealizationRatingProps>(\n  function RealizationRating({ project, pollId }) {\n    const { actionModals, archiveProjects } = useStores();\n\n    const isRatingVisible = () => isDefined(project?.score?.currentUser);\n    const isRateButtonVisible = () =>\n      project.status === PROJECT_STATUS.DONE && !isRatingVisible();\n\n    const rate = useLocalStore(() => ({\n      setError: (err: string) => {\n        rate.error = err;\n      },\n      error: null\n    }));\n\n    const rateRework = () => {\n      actionModals.open(\n        () => (\n          <RateReworkModal\n            error={rate.error}\n            onRate={(value: number) => {\n              rate.setError(null);\n\n              projectService\n                .rateProject(project.id, value)\n                .then(() => {\n                  actionModals.closeLastModal();\n                  archiveProjects.init({ filters: { pollId } });\n                })\n                .catch(err => rate.setError(err.detail));\n            }}\n          />\n        ),\n        {\n          title: 'Оцените реализацию проекта'\n        }\n      );\n    };\n\n    if (isRatingVisible()) {\n      return (\n        <Box>\n          <Box direction=\"row\" flex=\"grow\">\n            <Box width=\"85px\" align=\"center\">\n              <StarRating value={project.score?.average || 0} readonly />\n            </Box>\n\n            <Text\n              margin={{ left: 'xsmall', bottom: 'xxsmall' }}\n              size=\"xsmall\"\n              color=\"Grey\"\n            >\n              {project.score?.average || 0} ({project.score?.totalCount || 0})\n            </Text>\n          </Box>\n\n          {project.score.currentUser && (\n            <Text\n              margin={{ left: 'xsmall' }}\n              size=\"xsmall\"\n              color=\"Grey\"\n              style={{ textAlign: 'end' }}\n            >\n              Ваша оценка: {project.score?.currentUser || 0}\n            </Text>\n          )}\n        </Box>\n      );\n    }\n\n    if (isRateButtonVisible()) {\n      return <Button onClick={rateRework}>Оценить реализацию проекта</Button>;\n    }\n\n    return null;\n  }\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport styled from 'styled-components';\nimport { Box, Anchor } from 'grommet';\nimport { useStores } from 'stores';\nimport { ProjectStatus } from 'pages/Poll/ProjectStatus';\nimport { IProject, PROJECT_STATUS, ArchivePollApiDTO } from 'interfaces';\nimport { ShareButton } from 'pages/Poll/components/ShareButton';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui';\nimport { ENDPOINTS } from 'services';\nimport { Text, Button } from '@we-ui-components/base';\nimport { dateFormat } from 'utils/formatDates';\nimport { formatWithTwoDecimalsRub, showPeople } from 'utils/formatNumber';\nimport { ProjectInfoBox } from 'pages/Poll/components/ProjectInfoBox';\nimport { getSphere } from 'pages/Applicant/CreateProject';\nimport { SliderComponent } from 'ui/Slider/SliderComponent';\nimport { PrivateIcon, ExternalLink, CollapseArrow } from 'pages/Poll/icons';\nimport { useTheme } from 'utils';\nimport { ImplementationDetails } from 'pages/Poll/components/ImplementationDetails';\nimport { ProjectActions } from './ProjectActions';\nimport { RealizationRating } from '../components/RealizationRating';\nimport { ProjectHistoryModal } from 'pages/Poll/ProjectHistoryModal';\nimport { HistoryIcon } from 'ui/Icons';\n\ninterface ArchiveProjectListItemProps {\n  project: IProject;\n  poll: ArchivePollApiDTO;\n  voted: boolean;\n}\n\nexport const ArchiveProjectListItem = observer<ArchiveProjectListItemProps>(\n  function ArchiveProjectListItem({ project, poll, voted }) {\n    const { user, actionModals } = useStores();\n    const [expanded, setExpanded] = React.useState(false);\n    const theme = useTheme();\n\n    const isOrganizer = user.isContainOneOfRoles(['REGULATOR']);\n    const isVoter = user.isContainOneOfRoles(['VOTER']);\n\n    const isTabletOrWider = useMediaQuery({\n      minDeviceWidth: breakpoints.tablet\n    });\n\n    const openHistoryModal = () => {\n      actionModals.open(\n        () => (\n          <ProjectHistoryModal\n            error={''}\n            project={project}\n            onRate={() => actionModals.closeLastModal()}\n          />\n        ),\n        {\n          title: 'История проекта'\n        }\n      );\n    };\n\n    return (\n      <CardContainer\n        background={voted ? '#dedcea' : theme.palette.White}\n        margin={{ bottom: 'small' }}\n      >\n        <Box pad=\"small\" style={{ position: 'relative' }}>\n          <ProjectStatusStyled status={project.status} />\n\n          {!isOrganizer && (\n            <Box style={{ position: 'absolute', top: 25, right: 0 }}>\n              <ShareButton project={project} />\n            </Box>\n          )}\n\n          {isOrganizer && (\n            <Box\n              style={{\n                position: 'absolute',\n                top: 40,\n                right: theme.global.edgeSize.small,\n                cursor: 'pointer'\n              }}\n              direction='row'\n              align='center'\n              gap=\"5px\"\n              onClick={() => openHistoryModal()}\n            >\n              <HistoryIcon />\n              <Text size={isTabletOrWider ? '13px' : '16px'} color={theme.palette.Basic700}>\n                История проекта\n              </Text>\n            </Box>\n          )}\n\n          <Box direction={isTabletOrWider ? 'row' : 'column'}>\n            <CardImage src={ENDPOINTS.projectLogo(project.id)} />\n\n            <Box\n              style={{ lineHeight: 1.5, flex: '1 1 auto' }}\n              pad={{ horizontal: 'small' }}\n            >\n              {project.school ? (\n                <Text\n                  margin={{ top: 'xxsmall' }}\n                  size=\"xsmall\"\n                  style={{ maxWidth: '70%' }}\n                >\n                  {project.school.name} ({project.school.districtName})\n                </Text>\n              ) : null}\n              <Text\n                margin={{ top: 'xsmall' }}\n                size=\"large\"\n                bold\n                style={{\n                  maxWidth: \"calc(100% - 130px)\"\n                }}\n              >\n                {project.name}\n              </Text>\n\n              {isTabletOrWider ? (\n                <>\n                  <Text margin={{ top: 'xsmall' }} size=\"xsmall\">\n                    Срок реализации проекта: {dateFormat(project.startDate)} –{' '}\n                    {dateFormat(project.endDate)}\n                  </Text>\n                  <Text margin={{ top: 'xsmall' }} size=\"xsmall\">\n                    Объем требуемых средств:{' '}\n                    {formatWithTwoDecimalsRub(project.budgetSummary)}\n                  </Text>\n                </>\n              ) : (\n                <Box margin={{ top: '40px' }} gap=\"15px\">\n                  <ProjectInfoBox\n                    title=\"Срок реализации проекта\"\n                    text={`${dateFormat(project.startDate)} – ${dateFormat(\n                      project.endDate\n                    )}`}\n                  />\n\n                  <ProjectInfoBox\n                    title=\"Объем требуемых средств\"\n                    text={formatWithTwoDecimalsRub(project.budgetSummary)}\n                  />\n                </Box>\n              )}\n\n              {expanded && (\n                <>\n                  {project.declineReason &&\n                    project.status === PROJECT_STATUS.DECLINED ? (\n                    <Box margin={{ top: 'xsmall' }}>\n                      <ProjectInfoBox\n                        title=\"Причина отклонения\"\n                        text={project.declineReason || ''}\n                        noWrap\n                      />\n                    </Box>\n                  ) : null}\n                  <Box\n                    direction={isTabletOrWider ? 'row' : 'column'}\n                    flex=\"grow\"\n                    margin={{ top: '15px' }}\n                    gap=\"15px\"\n                  >\n                    <Box basis=\"50%\" gap=\"15px\">\n                      <ProjectInfoBox\n                        title=\"Областной бюджет\"\n                        text={formatWithTwoDecimalsRub(project.budgetRegion)}\n                      />\n                      <ProjectInfoBox\n                        margin={{ top: 'xsmall' }}\n                        title=\"Средства населения\"\n                        text={formatWithTwoDecimalsRub(project.budgetPeople)}\n                      />\n                    </Box>\n\n                    <Box basis=\"50%\" gap=\"15px\">\n                      <ProjectInfoBox\n                        title=\"Бюджет муниципального образования\"\n                        text={formatWithTwoDecimalsRub(project.budgetDistrict)}\n                      />\n                      <ProjectInfoBox\n                        margin={{ top: 'xsmall' }}\n                        title=\"Внебюджетные средства\"\n                        text={formatWithTwoDecimalsRub(project.noBudgetFunds)}\n                      />\n                    </Box>\n                  </Box>\n                </>\n              )}\n            </Box>\n          </Box>\n          {expanded && (\n            <>\n              <Box\n                flex=\"grow\"\n                margin={{ top: 'small' }}\n                pad={!isTabletOrWider && '0 6px'}\n                gap={!isTabletOrWider && '15px'}\n              >\n                <Text\n                  bold\n                  size={isTabletOrWider ? '13px' : '18px'}\n                  margin={{ vertical: '16px' }}\n                >\n                  Описание проекта\n                </Text>\n\n                <Box direction={isTabletOrWider ? 'row' : 'column'}>\n                  {project.sphere ? (\n                    <ProjectInfoBox\n                      margin={{\n                        top: 'xsmall',\n                        bottom: !isTabletOrWider && '15px'\n                      }}\n                      style={{ flexBasis: '50%' }}\n                      title=\"Сфера деятельности\"\n                      text={getSphere(project.sphere)}\n                    />\n                  ) : null}\n                  <ProjectInfoBox\n                    margin={{ top: 'xsmall' }}\n                    title=\"Благополучателей\"\n                    text={showPeople(project.beneficiaries)}\n                  />\n                </Box>\n\n                <ProjectInfoBox\n                  margin={{ top: 'xsmall' }}\n                  title=\"Описание проекта\"\n                  text={project.description}\n                  noWrap\n                />\n                <ProjectInfoBox\n                  margin={{ top: 'xsmall' }}\n                  title=\"Место реализации проекта\"\n                  text={project.place}\n                />\n              </Box>\n\n              {project.files.length !== 0 && (\n                <Box\n                  flex=\"grow\"\n                  margin={{ top: isTabletOrWider ? 'small' : '16px' }}\n                  pad={!isTabletOrWider && '0 6px'}\n                  gap=\"small\"\n                >\n                  <Text bold size={isTabletOrWider ? 'xsmall' : '18px'}>\n                    Материалы (до и после реализации прокта)\n                  </Text>\n\n                  <SliderComponent\n                    accessType=\"public\"\n                    slideFiles={project.files}\n                    arrow\n                  />\n                </Box>\n              )}\n\n              {!!project.privateFiles && project.privateFiles.length !== 0 && (\n                <Box\n                  flex=\"grow\"\n                  margin={{ top: 'small' }}\n                  gap=\"small\"\n                  pad={!isTabletOrWider && '0 6px'}\n                >\n                  <Text bold size=\"xsmall\">\n                    <PrivateIcon /> Приватные материалы\n                  </Text>\n\n                  <SliderComponent slideFiles={project.privateFiles} arrow />\n                </Box>\n              )}\n\n              <Anchor\n                href={project.administrationLink}\n                margin={{ top: 'medium' }}\n                color={theme.palette.Purple}\n                size=\"xsmall\"\n                target='_blank'\n              >\n                Ссылка на сайт администрации <ExternalLink />\n              </Anchor>\n            </>\n          )}\n        </Box>\n\n        {project.status === PROJECT_STATUS.DONE && (\n          <ImplementationDetails\n            pad={{ vertical: 'small' }}\n            margin={{ horizontal: 'small', bottom: '10px' }}\n            project={project}\n          />\n        )}\n\n        <CardFooter\n          direction={isTabletOrWider ? 'row' : 'column'}\n          justify=\"between\"\n          align=\"center\"\n        >\n          <Button\n            transparent\n            color=\"Purple\"\n            onClick={() => setExpanded(p => !p)}\n          >\n            <CollapseArrow\n              style={{\n                transform: expanded && 'rotate(180deg)',\n                marginRight: '8px'\n              }}\n            />{' '}\n            {expanded ? 'Свернуть' : 'Развернуть'}\n          </Button>\n\n          <ProjectActions project={project} poll={poll} voted={voted} />\n\n          {isVoter && <RealizationRating project={project} pollId={poll.id} />}\n        </CardFooter>\n      </CardContainer>\n    );\n  }\n);\n\nconst CardContainer = styled(Box)`\n  box-shadow: 0 4px 8px rgba(10, 6, 6, 0.04);\n  border-radius: 1px;\n  width: 100%;\n`;\n\nconst CardImage = styled.img`\n  border-radius: 4px;\n  width: 100%;\n  height: auto;\n\n  object-fit: cover;\n\n  @media (min-width: ${breakpoints.tablet}) {\n    min-width: 130px;\n    width: 130px;\n    height: 130px;\n  }\n`;\n\nconst CardFooter = styled(Box)`\n  min-height: 66px;\n  background: #fafafa;\n  width: 100%;\n  padding: 9px 16px;\n`;\n\nconst ProjectStatusStyled = styled(ProjectStatus)`\n  position: absolute;\n  top: ${props => props.theme.global.edgeSize.small};\n  right: ${props => props.theme.global.edgeSize.small};\n`;\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport { FilterSearch, FilterTabs, CommonTable, SlimTabs } from 'components';\nimport { PROJECT_STATUS } from 'interfaces';\nimport { ArchiveProjectListItem } from './ArchiveProjectListItem';\nimport { useStores } from 'stores';\nimport { getTabs } from './getTabs';\nimport { useRequest } from 'utils';\nimport { PollingType } from 'pages/Organizer/tabs';\nimport { useParams } from 'react-router-dom';\nimport { Spinner2 } from 'ui';\nimport { PageTitle, BackButton } from '../components/styled';\nimport { ArchivePageContainer } from '../components/ArchivePageContainer';\n\ninterface ArchiveProjectsPageProps {}\n\nexport const ArchiveProjectsPage = observer<ArchiveProjectsPageProps>(\n  function ArchiveProjectsPage(props) {\n    const { archiveProjects, archivePolls } = useStores();\n    const { id: pollId } = useParams<{ id: string }>();\n\n    const pollRequestFn = React.useCallback(() => archivePolls.getOne(pollId), [\n      pollId\n    ]);\n\n    const voteInfoRequestFn = React.useCallback(\n      () => archivePolls.getVoteInfo(pollId),\n      [pollId]\n    );\n\n    const [poll, { status: pollStatus }] = useRequest(pollRequestFn);\n    const [voteInfo, { status: voteInfoStatus }] = useRequest(\n      voteInfoRequestFn\n    );\n\n    const formatPollName = () => {\n      const PREFIX =\n        poll.subject.type === PollingType.schoolGroup ? 'школьной группе ' : '';\n\n      const name = poll.subject.name || '--';\n      const year = poll.subject.year || '--';\n\n      return `${PREFIX}${name}, ${year}`;\n    };\n\n    React.useEffect(() => {\n      archiveProjects.init({ filters: { pollId: pollId } });\n\n      return () => archiveProjects.clear();\n    }, []);\n\n    if (voteInfoStatus !== 'success' || pollStatus !== 'success') {\n      return (\n        <Box margin={{ top: 'xlarge' }}>\n          <Spinner2 color=\"LightGrey\" height=\"2rem\" width=\"auto\" />\n        </Box>\n      );\n    }\n\n    return (\n      <ArchivePageContainer\n        direction=\"column\"\n        background=\"transparent\"\n        margin=\"0 auto\"\n        pad={{ vertical: 'medium', horizontal: 'small' }}\n        width=\"872px\"\n      >\n        <BackButton />\n\n        <Box direction=\"row\" align=\"center\" margin={{ vertical: 'medium' }}>\n          <PageTitle>Голосование по {formatPollName()}</PageTitle>\n        </Box>\n\n        <FilterSearch\n          store={archiveProjects}\n          filterField=\"search\"\n          width=\"100%\"\n        />\n\n        <FilterTabs\n          store={archiveProjects}\n          tabs={getTabs()}\n          filterField=\"status\"\n          initialValue={PROJECT_STATUS.ALL}\n          margin={{ vertical: 'small' }}\n          component={SlimTabs as any}\n        />\n        <CommonTable\n          store={archiveProjects}\n          columns={[]}\n          emptyListText=\"Не найдено проектов\"\n          customItem={{\n            render: ({ params }) => (\n              <ArchiveProjectListItem\n                project={params}\n                poll={poll}\n                voted={params.bulletinOrder === voteInfo.bulletinOrder}\n              />\n            )\n          }}\n          suppressInitialFetch\n          suppressInitialization\n        />\n      </ArchivePageContainer>\n    );\n  }\n);\n","import { PROJECT_STATUS, TTabITabOptionsEx } from 'interfaces';\n\nexport const getTabs = (): TTabITabOptionsEx<PROJECT_STATUS> => [\n  {\n    id: PROJECT_STATUS.ALL,\n    text: 'Все'\n  },\n  {\n    id: PROJECT_STATUS.DONE,\n    text: 'Реализован'\n  },\n  {\n    id: PROJECT_STATUS.IN_PROGRESS,\n    text: 'В реализации'\n  },\n  {\n    id: PROJECT_STATUS.ARCHIVED,\n    text: 'В архиве'\n  },\n  {\n    id: PROJECT_STATUS.APPROVED,\n    text: 'Принят'\n  },\n  {\n    id: PROJECT_STATUS.DECLINED,\n    text: 'Отклонен'\n  }\n];\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst prop = (prop: string, fallback: string = '') => props =>\n  props[prop] || fallback;\n\ntype SvgProps = JSX.IntrinsicElements['svg'] & {\n  opacity?: string;\n  cursor?: string;\n};\n\nconst SVG = styled.svg<SvgProps>`\n  ${prop('opacity')}\n  ${prop('cursor', 'auto')}\n`;\n\nexport const QuestionMarkIcon: React.FC<SvgProps> = React.forwardRef(\n  (props, ref) => {\n    return (\n      <SVG\n        width=\"20\"\n        height=\"21\"\n        viewBox=\"0 0 20 21\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n        ref={ref}\n      >\n        <path\n          d=\"M7.1875 5.67188C7.96875 4.89062 8.90625 4.5 10 4.5C11.0938 4.5 12.0312 4.89062 12.8125 5.67188C13.5938 6.45312 13.9844 7.39062 13.9844 8.48438C13.9844 9.32812 13.4844 10.2031 12.4844 11.1094C11.4844 11.9844 10.9844 12.7812 10.9844 13.5H9.01562C9.01562 12.7812 9.17188 12.1719 9.48438 11.6719C9.79688 11.1406 10.1406 10.7656 10.5156 10.5469C10.8906 10.2969 11.2344 10 11.5469 9.65625C11.8594 9.3125 12.0156 8.92188 12.0156 8.48438C12.0156 7.95312 11.8125 7.5 11.4062 7.125C11 6.71875 10.5312 6.51562 10 6.51562C9.46875 6.51562 9 6.71875 8.59375 7.125C8.1875 7.5 7.98438 7.95312 7.98438 8.48438H6.01562C6.01562 7.39062 6.40625 6.45312 7.1875 5.67188ZM4.32812 16.1719C5.92188 17.7344 7.8125 18.5156 10 18.5156C12.1875 18.5156 14.0625 17.7344 15.625 16.1719C17.2188 14.5781 18.0156 12.6875 18.0156 10.5C18.0156 8.3125 17.2188 6.4375 15.625 4.875C14.0625 3.28125 12.1875 2.48438 10 2.48438C7.8125 2.48438 5.92188 3.28125 4.32812 4.875C2.76562 6.4375 1.98438 8.3125 1.98438 10.5C1.98438 12.6875 2.76562 14.5781 4.32812 16.1719ZM2.92188 3.46875C4.89062 1.5 7.25 0.515625 10 0.515625C12.75 0.515625 15.0938 1.5 17.0312 3.46875C19 5.40625 19.9844 7.75 19.9844 10.5C19.9844 13.25 19 15.6094 17.0312 17.5781C15.0938 19.5156 12.75 20.4844 10 20.4844C7.25 20.4844 4.89062 19.5156 2.92188 17.5781C0.984375 15.6094 0.015625 13.25 0.015625 10.5C0.015625 7.75 0.984375 5.40625 2.92188 3.46875ZM9.01562 16.5V14.4844H10.9844V16.5H9.01562Z\"\n          fill=\"white\"\n        />\n      </SVG>\n    );\n  }\n);\n\nexport const QuestionMarkBlack: React.FC<SvgProps> = React.forwardRef(\n  (props, ref) => {\n    return (\n      <SVG\n        width=\"20\"\n        height=\"21\"\n        viewBox=\"0 0 20 21\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        {...props}\n        ref={ref}\n      >\n        <path\n          d=\"M7.1875 5.67188C7.96875 4.89062 8.90625 4.5 10 4.5C11.0938 4.5 12.0312 4.89062 12.8125 5.67188C13.5938 6.45312 13.9844 7.39062 13.9844 8.48438C13.9844 9.32812 13.4844 10.2031 12.4844 11.1094C11.4844 11.9844 10.9844 12.7812 10.9844 13.5H9.01562C9.01562 12.7812 9.17188 12.1719 9.48438 11.6719C9.79688 11.1406 10.1406 10.7656 10.5156 10.5469C10.8906 10.2969 11.2344 10 11.5469 9.65625C11.8594 9.3125 12.0156 8.92188 12.0156 8.48438C12.0156 7.95312 11.8125 7.5 11.4062 7.125C11 6.71875 10.5312 6.51562 10 6.51562C9.46875 6.51562 9 6.71875 8.59375 7.125C8.1875 7.5 7.98438 7.95312 7.98438 8.48438H6.01562C6.01562 7.39062 6.40625 6.45312 7.1875 5.67188ZM4.32812 16.1719C5.92188 17.7344 7.8125 18.5156 10 18.5156C12.1875 18.5156 14.0625 17.7344 15.625 16.1719C17.2188 14.5781 18.0156 12.6875 18.0156 10.5C18.0156 8.3125 17.2188 6.4375 15.625 4.875C14.0625 3.28125 12.1875 2.48438 10 2.48438C7.8125 2.48438 5.92188 3.28125 4.32812 4.875C2.76562 6.4375 1.98438 8.3125 1.98438 10.5C1.98438 12.6875 2.76562 14.5781 4.32812 16.1719ZM2.92188 3.46875C4.89062 1.5 7.25 0.515625 10 0.515625C12.75 0.515625 15.0938 1.5 17.0312 3.46875C19 5.40625 19.9844 7.75 19.9844 10.5C19.9844 13.25 19 15.6094 17.0312 17.5781C15.0938 19.5156 12.75 20.4844 10 20.4844C7.25 20.4844 4.89062 19.5156 2.92188 17.5781C0.984375 15.6094 0.015625 13.25 0.015625 10.5C0.015625 7.75 0.984375 5.40625 2.92188 3.46875ZM9.01562 16.5V14.4844H10.9844V16.5H9.01562Z\"\n          fill=\"#0A0606\"\n        />\n      </SVG>\n    );\n  }\n);\n\nexport const LetterIcon: React.FC<SvgProps> = React.forwardRef((props, ref) => {\n  return (\n    <SVG\n      width=\"16\"\n      height=\"22\"\n      viewBox=\"0 0 16 22\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n      ref={ref}\n    >\n      <path\n        d=\"M8.98246 7.79503H14.5029L8.98246 1.93588V7.79503ZM11.9766 13.1534V11H4.02339V13.1534H11.9766ZM11.9766 17.4101V15.2567H4.02339V17.4101H11.9766ZM10.0117 0.333374L16 6.74339V19.5634C16 20.131 15.7973 20.6318 15.3918 21.0658C14.9864 21.4664 14.5185 21.6667 13.9883 21.6667H2.0117C1.48148 21.6667 1.01365 21.4664 0.608187 21.0658C0.202729 20.6318 0 20.131 0 19.5634L0.0467836 2.43666C0.0467836 1.86911 0.233918 1.38502 0.608187 0.984391C1.01365 0.55038 1.48148 0.333374 2.0117 0.333374H10.0117Z\"\n        fill=\"#3B33B0\"\n      />\n    </SVG>\n  );\n});\n","import React from 'react';\nimport { Routes } from '../../../constants';\nimport { useStores } from 'stores/index';\nimport { observer } from 'mobx-react-lite';\nimport { Section, Link } from '../index';\nimport { MenuMobile } from './MenuMob';\nimport { Box } from 'grommet';\nimport { Button } from '@we-ui-components/base';\nimport { QuestionMarkIcon, QuestionMarkBlack } from '../icons';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\n\nexport const Header = observer(() => {\n  const { routing } = useStores();\n\n  const questionAnswer = routing.location.pathname === '/question-answer';\n  const infoProgram = routing.location.pathname === '/info-program';\n  const questionOrInfo = questionAnswer || infoProgram;\n\n  const isTabletOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.tablet\n  });\n\n  return (\n    <Section width=\"100%\">\n      <Box direction=\"row\" justify=\"end\" align=\"center\" pad=\"7px 0\">\n        {isTabletOrWider ? (\n          <>\n            <Link\n              onClick={() => routing.push(`/${Routes.loginOrganizer}`)}\n              style={{ color: questionOrInfo ? '#0A0606' : '#ffffff' }}\n            >\n              Войти как организатор\n            </Link>\n            <Link\n              onClick={() => routing.push(`/${Routes.loginApplicant}`)}\n              style={{ color: questionOrInfo ? '#0A0606' : '#ffffff' }}\n            >\n              Войти как заявитель\n            </Link>\n            <Link\n              onClick={() => routing.push(`/${Routes.archive}`)}\n              style={{ color: questionOrInfo ? '#0A0606' : '#ffffff' }}\n            >\n              Архив проектов\n            </Link>\n            <Link\n              onClick={() => routing.push(`/${Routes.questionAnswer}`)}\n              style={{\n                marginRight: '32px',\n                display: 'flex',\n                alignItems: 'center',\n                color: questionOrInfo ? '#0A0606' : '#ffffff'\n              }}\n            >\n              {questionOrInfo ? (\n                <QuestionMarkBlack style={{ marginRight: '5px' }} />\n              ) : (\n                <QuestionMarkIcon style={{ marginRight: '5px' }} />\n              )}\n              Вопросы и ответы\n            </Link>\n\n            <Button\n              fontWeight=\"800\"\n              color={questionOrInfo ? '' : 'Blue700'}\n              bgColor={questionOrInfo ? '' : 'white'}\n              bgHoverColor={questionOrInfo ? '' : 'Basic300'}\n              size=\"medium\"\n              onClick={() => routing.push(`/${Routes.loginVoter}`)}\n            >\n              Проголосовать\n            </Button>\n          </>\n        ) : (\n          <Link\n            onClick={() => routing.push(`/${Routes.questionAnswer}`)}\n            style={{\n              margin: '0',\n              display: 'flex',\n              alignItems: 'center',\n              color: questionOrInfo ? '#0A0606' : '#ffffff'\n            }}\n          >\n            {questionOrInfo ? (\n              <QuestionMarkBlack style={{ marginRight: '5px' }} />\n            ) : (\n              <QuestionMarkIcon style={{ marginRight: '5px' }} />\n            )}\n            Вопросы и ответы\n          </Link>\n        )}\n      </Box>\n    </Section>\n  );\n});\n\n/*\nexport const Header = () => {\n  return (\n    <>\n      <MenuMobile />\n      <MenuGlobal />\n    </>\n  );\n};*/\n","import { useState, useEffect } from 'react';\n\nfunction getTextPoint(windowWidth) {\n  if (windowWidth) {\n    if (windowWidth < 600) {\n      return 'small';\n    } else if (windowWidth < 768) {\n      return 'medium';\n    } else if (windowWidth < 1100) {\n      return 'large';\n    } else {\n      return 'xlarge';\n    }\n  } else {\n    return undefined;\n  }\n}\n\nexport function useWindowSize() {\n  const isWindowClient = typeof window === 'object';\n\n  const [windowSize, setWindowSize] = useState(\n    isWindowClient ? getTextPoint(window.innerWidth) : undefined\n  );\n\n  useEffect(() => {\n    function setSize() {\n      setWindowSize(getTextPoint(window.innerWidth));\n    }\n\n    if (isWindowClient) {\n      window.addEventListener('resize', setSize);\n      return () => window.removeEventListener('resize', setSize);\n    }\n  }, [isWindowClient, setWindowSize]);\n\n  return windowSize;\n}\n","import React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\nimport { Section } from '../index';\nimport { Collapse, Title, Text } from '@we-ui-components/base';\nimport { useWindowSize } from '../windowWidth';\nimport { Box } from 'grommet';\nimport { Routes } from '../../../constants';\nimport { BackButton } from 'components/BackButton';\nimport { useTheme } from 'utils/hooks';\n// @ts-ignore\nimport * as info from './info.json';\nimport styled from 'styled-components';\n\nexport const QuestionsAnswer = observer(() => {\n  const isTabletOrWider = useMediaQuery({ minDeviceWidth: breakpoints.tablet });\n\n  const theme = useTheme();\n  const wSize = useWindowSize();\n\n  return (\n    <Section style={{ margin: isTabletOrWider ? '42px 0' : '20px 0' }}>\n      <BackButton\n        url={`/${Routes.landing}`}\n        textColor={theme.palette.Purple}\n        style={{\n          border: '1px solid #d8d6ef',\n          width: '105px',\n          padding: '15px',\n          color: `${theme.palette.Purple}`\n        }}\n      />\n      <Title\n        size={wSize}\n        bold\n        style={{ letterSpacing: '1px' }}\n        text=\"Вопросы и ответы\"\n        margin={{ vertical: 'xlarge' }}\n      />\n\n      {info.content.map(item => {\n        return (\n          <BoxCollapse key={item.id.toString()}>\n            <Collapse\n              bordered\n              header={item.title}\n              isCollapsed={true}\n              style={{\n                padding: '17px 0',\n                color: `${theme.palette.Purple}`,\n                fontSize: '18px',\n                fontWeight: 'bold'\n              }}\n            >\n              <Box\n                style={{ maxWidth: '750px' }}\n                margin={{ horizontal: isTabletOrWider ? '22px' : 'small' }}\n              >\n                {item.description.map((content, i) => {\n                  return (\n                    <Text\n                      key={i}\n                      size={!isTabletOrWider ? 'xsmall' : 'medium'}\n                      margin={{ vertical: 'xsmall' }}\n                      style={{ lineHeight: '24px' }}\n                    >\n                      {JSONModifyContent(content)}\n                    </Text>\n                  );\n                })}\n              </Box>\n            </Collapse>\n          </BoxCollapse>\n        );\n      })}\n      <Text\n        size={!isTabletOrWider ? 'xsmall' : 'medium'}\n        margin={{ vertical: 'xsmall' }}\n      >\n        Не нашли ответ на свой вопрос? Напишите письмо на email{' '}\n        <b>support@budget4me-34.ru</b>\n      </Text>\n    </Section>\n  );\n});\n\nconst BoxCollapse = styled.div`\n  svg {\n    color: #3b33b0;\n  }\n`;\n\n//function for add html tag in json text, example {{tag=“b” text=“hello”}}\n\nfunction JSONModifyContent(text) {\n  const regExpParams = /“.+?”/g;\n  const regExpTextInBrackets = /(\\{\\{.+?\\}\\})/g;\n  let parts = text.split(regExpTextInBrackets);\n\n  if (parts.length) {\n    for (let i = 1; i < parts.length; i += 2) {\n      let params = parts[i].match(regExpParams);\n      let tagIndex = parts[i].indexOf('tag');\n      let contentIndex = parts[i].indexOf('text');\n\n      if (params.length === 2 && tagIndex < contentIndex && tagIndex !== -1) {\n        let strTag = params[0].slice(1, -1);\n        let strText = params[1].slice(1, -1);\n        parts[i] = React.createElement(`${strTag}`, { key: i }, `${strText}`);\n      } else {\n        return text.replace(regExpTextInBrackets, '');\n      }\n    }\n    return parts;\n  }\n\n  return text;\n}\n","import React, { useEffect } from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useMediaQuery } from 'react-responsive';\nimport { breakpoints } from 'ui/Responsive';\nimport { Section } from '../index';\nimport { Title } from '@we-ui-components/base';\nimport { useWindowSize } from '../windowWidth';\nimport { Routes } from '../../../constants';\nimport { BackButton } from 'components/BackButton';\nimport { useTheme } from 'utils/hooks';\nimport { Anchor, Box } from 'grommet';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { LetterIcon } from '../icons';\nimport styled from 'styled-components';\nimport { getLegalDocuments } from 'services/documentsService';\nimport { useLocalStore } from 'mobx-react';\n\nfunction scrollToTop() {\n  const container = document.querySelector('#grommetRoot');\n\n  container.scrollTo({\n    top: 0,\n    left: 0,\n    behavior: 'smooth'\n  });\n}\n\nconst chunk = (arr, size) =>\n  arr.reduce(\n    (acc, _, i) => (i % size ? acc : [...acc, arr.slice(i, i + size)]),\n    []\n  );\n\nconst DEFAULT_CHUNK_LENGTH = 5;\n\nfunction renderDocument({ id, name }: { id: string; name: string }) {\n  const openFileInNewWindow = (fileId: string) => {\n    window.open(ENDPOINTS.getLegalDocumentsFile(fileId));\n  };\n\n  return (\n    <Box direction=\"row\" align=\"center\" margin={{ vertical: '12px' }}>\n      <Box width=\"16px\" margin={{ right: 'medium' }}>\n        <LetterIcon />\n      </Box>\n\n      <AnchorStyle onClick={() => openFileInNewWindow(id)}>{name}</AnchorStyle>\n    </Box>\n  );\n}\n\nexport const InfoAboutProgram = observer(() => {\n  const isTabletOrWider = useMediaQuery({ minDeviceWidth: breakpoints.tablet });\n\n  const theme = useTheme();\n  const wSize = useWindowSize();\n\n  useEffect(() => {\n    scrollToTop();\n  });\n\n  const documents = useLocalStore(() => ({\n    list: []\n  }));\n\n  React.useEffect(() => {\n    getLegalDocuments().then(list => (documents.list = list));\n  }, []);\n\n  const [leftColumn = [], rightColumn = []] = chunk(\n    documents.list,\n    documents.list.length > 10\n      ? Math.floor(documents.list.length / 2)\n      : DEFAULT_CHUNK_LENGTH\n  );\n\n  return (\n    <Section style={{ margin: isTabletOrWider ? '42px 0' : '20px 0' }}>\n      <BackButton\n        url={`/${Routes.landing}`}\n        textColor={theme.palette.Purple}\n        style={{\n          border: '1px solid #d8d6ef',\n          width: '105px',\n          padding: '15px',\n          color: `${theme.palette.Purple}`\n        }}\n      />\n      <Title\n        size={wSize}\n        bold\n        style={{ letterSpacing: '1px' }}\n        text=\"Информация о программе\"\n        margin={{ vertical: 'xlarge' }}\n      />\n\n      <Box direction=\"row-responsive\">\n        <Box style={{ marginRight: isTabletOrWider ? '130px' : '' }}>\n          {leftColumn.map(renderDocument)}\n        </Box>\n\n        <Box>{rightColumn.map(renderDocument)}</Box>\n      </Box>\n    </Section>\n  );\n});\n\nconst AnchorStyle = styled(Anchor)`\n  color: #0a0606;\n  font-weight: 500;\n  font-size: 13px;\n  line-height: 19px;\n  max-width: 390px;\n  margin-left: 12px;\n`;\n","import { api } from 'services/api';\nimport { ENDPOINTS } from 'services/endpoints';\n\ntype ApiLegalDocument = {\n  id: string;\n  name: string;\n};\n\nexport function getLegalDocuments(): Promise<ApiLegalDocument[]> {\n  return api.get(ENDPOINTS.getLegalDocuments());\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Box } from 'grommet';\nimport { Button, Text, Title } from '@we-ui-components/base';\nimport { useStores } from 'stores/index';\nimport { Routes } from '../../constants';\nimport { Header } from './HeaderMenu';\nimport heroImage from './img/mother.svg';\nimport tech_1 from './img/Tech Life Blockchain.svg';\nimport tech_2 from './img/Tech Life Communication.svg';\nimport tech_3 from './img/Tech Life Life Management.svg';\nimport tech_4 from './img/Tech Life Virtual Reality.svg';\nimport hand from './img/hand.svg';\nimport styled from 'styled-components';\nimport { useWindowSize } from './windowWidth';\nimport { breakpoints, ScrollToTopButton } from 'ui';\nimport { useMediaQuery } from 'react-responsive';\nimport {\n  objectToGetParams,\n  SHARE_LINKS,\n  ShareLinks,\n  windowOpen\n} from '../Poll/components/ShareButton';\nimport { baseUrl } from 'services/endpoints';\nimport { QuestionsAnswer } from './Questions&Answers';\nimport { InfoAboutProgram } from './InfoAboutProgram';\n\nexport const Link = styled.a`\n  font-size: 13px;\n  line-height: 16px;\n  color: #ffffff;\n  margin: 0 25px;\n  font-weight: bold;\n  padding: 15px 0;\n  text-decoration: none;\n\n  &:hover {\n    cursor: pointer;\n    color: #bdbdbf;\n    transition: 0.2s linear;\n  }\n`;\n\nexport const Section = styled(Box)`\n  max-width: 1440px;\n  margin: 0 auto;\n  padding: 0 64px;\n  @media (max-width: ${breakpoints.laptop}) {\n    padding: 0 25px;\n  }\n\n  @media (max-width: ${breakpoints.tablet}) {\n    padding: 0 12px;\n  }\n`;\n\nconst FooterSection = styled(Box)`\n  padding: 0 64px;\n  max-width: 1440px;\n  margin: 0 auto;\n  @media (max-width: ${breakpoints.mobile}) {\n    padding: 0 12px;\n  }\n`;\n\nconst SectionBgColor = styled(Box)`\n  width: 100%;\n  background: linear-gradient(\n    335.36deg,\n    #d2483f 4.36%,\n    #673edc 60.27%,\n    #5a66f2 90.6%\n  );\n`;\n\nconst BoxFriendText = styled(Box)`\n  padding-left: 100px;\n  @media (max-width: ${breakpoints.laptopL}) {\n    padding-left: 0;\n  }\n  @media (max-width: ${breakpoints.tabletM}) {\n    text-align: left;\n    line-height: 20px;\n  }\n`;\n\nconst BoxFriend = styled(Box)`\n  margin: 90px 0;\n\n  .friend_img_hand {\n    margin: 23px 0 0 75px;\n    min-width: 440px;\n  }\n\n  @media (max-width: ${breakpoints.laptopL}) {\n    .friend_img_hand {\n      margin: 23px 0 0 45px;\n      min-width: 300px;\n    }\n  }\n  @media (max-width: ${breakpoints.tabletM}) {\n    flex-direction: column;\n    .btn_friend {\n      margin: 20px auto;\n    }\n\n    .friend_img_hand {\n      margin: 0 auto;\n      width: 260px;\n    }\n  }\n`;\n\nconst MediaText = styled(Text)`\n  @media (max-width: ${breakpoints.tablet}) {\n    font-size: 13px;\n    line-height: 16px;\n  }\n`;\n\nconst BoxInfoContent = styled(Box)`\n  justify-content: start;\n  align-items: center;\n  flex-direction: column;\n  padding-bottom: 40px;\n  height: 364px;\n`;\n\nconst ImgHeader = styled.img`\n  width: 100vw;\n  width: calc(100vw - 30px);\n\n  @media (min-width: ${breakpoints.tablet}) {\n    width: auto;\n    max-width: 258px;\n  }\n\n  @media (min-width: ${breakpoints.laptop}) {\n    max-width: 416px;\n  }\n\n  @media (min-width: ${breakpoints.laptopL}) {\n    max-width: 640px;\n  }\n`;\n\nconst InfoContentContainer = styled(Box)`\n  display: grid;\n\n  grid-template-columns: 1fr;\n\n  @media (min-width: ${breakpoints.tablet}) {\n    grid-template-columns: 1fr 1fr;\n  }\n`;\n\nexport const LandingPage = observer(() => {\n  const { routing } = useStores();\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n  const isTabletOrWider = useMediaQuery({ minDeviceWidth: breakpoints.tablet });\n\n  const isTablet = isTabletOrWider && !isLaptopOrWider;\n\n  const isMobile = useMediaQuery({\n    maxDeviceWidth: breakpoints.mobile\n  });\n\n  const wSize = useWindowSize();\n\n  const location = routing.location.pathname;\n\n  return (\n    <>\n      {location === '/question-answer' || location === '/info-program' ? (\n        <>\n          <Header />\n          <Section>\n            {location === '/question-answer' ? (\n              <QuestionsAnswer />\n            ) : (\n              <InfoAboutProgram />\n            )}\n          </Section>\n        </>\n      ) : (\n        <>\n          <SectionBgColor>\n            <Header />\n\n            <ScrollToTopButton />\n\n            <Section>\n              <Box\n                justify=\"between\"\n                direction={isTabletOrWider ? 'row' : 'column'}\n                style={{\n                  marginBottom: isTabletOrWider ? '47px' : '0',\n                  minHeight: isTabletOrWider ? 'auto' : '100vh'\n                }}\n              >\n                <Box margin={{ top: isTabletOrWider ? '84px' : '20px' }}>\n                  <Title\n                    bold\n                    color=\"white\"\n                    size={isLaptopOrWider ? '42px' : '32px'}\n                    style={{ flex: '1 0' }}\n                  >\n                    Программа поддержки местных инициатив Волгоградской области\n                  </Title>\n\n                  <Button\n                    fontWeight=\"800\"\n                    color=\"Blue700\"\n                    size={isTabletOrWider ? 'medium' : 'full'}\n                    margin={{\n                      top: isTabletOrWider ? '42px' : '72px',\n                      bottom: isTablet ? '0' : '20px'\n                    }}\n                    bgColor=\"white\"\n                    bgHoverColor=\"Basic300\"\n                    style={{\n                      boxShadow: '0px 4px 12px rgba(59, 51, 176, 0.4)'\n                    }}\n                    onClick={() => routing.push(`/${Routes.loginVoter}`)}\n                  >\n                    Проголосовать\n                  </Button>\n                  {!isLaptopOrWider && (\n                    <Button\n                      transparent\n                      color=\"white\"\n                      size={isTabletOrWider ? 'medium' : 'full'}\n                      margin={{\n                        bottom: isTablet ? '0' : '46px'\n                      }}\n                      onClick={() => routing.push(`/${Routes.archive}`)}\n                    >\n                      Архив проектов\n                    </Button>\n                  )}\n                </Box>\n\n                <ImgHeader src={heroImage} alt=\"\" />\n              </Box>\n            </Section>\n          </SectionBgColor>\n\n          <Section>\n            <Title\n              size={wSize}\n              bold\n              style={{ letterSpacing: '1px' }}\n              margin=\"90px auto 60px\"\n              text=\"Это просто\"\n            />\n            <InfoContentContainer>\n              <BoxInfoContent\n                direction=\"row\"\n                justify=\"center\"\n                margin=\"0 0 65px\"\n              >\n                <img width=\"160px\" src={tech_1} alt=\"\" />\n                <Box direction=\"row\">\n                  <Title size=\"xlarge\" bold margin=\"25px 28px 0px 35px\">\n                    1\n                  </Title>\n                  <Box style={{ maxWidth: '225px' }}>\n                    <Text\n                      size=\"medium\"\n                      margin=\"30px 0\"\n                      style={{ lineHeight: '24px' }}\n                    >\n                      Формирование местных инициатив населения\n                    </Text>\n                  </Box>\n                </Box>\n              </BoxInfoContent>\n\n              <BoxInfoContent\n                direction=\"row\"\n                justify=\"center\"\n                margin=\"0 0 65px\"\n              >\n                <img width=\"160px\" src={tech_2} alt=\"\" />\n                <Box direction=\"row\">\n                  <Title size=\"xlarge\" bold margin=\"25px 28px 0px 35px\">\n                    2\n                  </Title>\n                  <Box style={{ maxWidth: '230px' }}>\n                    <Text\n                      size=\"medium\"\n                      margin=\"30px 0\"\n                      style={{ lineHeight: '24px' }}\n                    >\n                      Отбор путём рейтингового голосования\n                    </Text>\n                  </Box>\n                </Box>\n              </BoxInfoContent>\n\n              <BoxInfoContent\n                direction=\"row\"\n                justify=\"center\"\n                margin=\"0 0 65px\"\n              >\n                <img width=\"160px\" src={tech_3} alt=\"\" />\n                <Box direction=\"row\">\n                  <Title size=\"xlarge\" bold margin=\"25px 28px 0px 35px\">\n                    3\n                  </Title>\n                  <Box style={{ maxWidth: '225px' }}>\n                    <Text\n                      size=\"medium\"\n                      margin=\"30px 0\"\n                      style={{ lineHeight: '24px' }}\n                    >\n                      Реализация местных инициатив\n                    </Text>\n                  </Box>\n                </Box>\n              </BoxInfoContent>\n\n              <BoxInfoContent\n                direction=\"row\"\n                justify=\"center\"\n                margin=\"0 0 65px\"\n              >\n                <img width=\"160px\" src={tech_4} alt=\"\" />\n                <Box direction=\"row\">\n                  <Title size=\"xlarge\" bold margin=\"25px 28px 0px 35px\">\n                    4\n                  </Title>\n                  <Box style={{ maxWidth: '225px' }}>\n                    <Text\n                      size=\"medium\"\n                      margin=\"30px 0\"\n                      style={{ lineHeight: '24px' }}\n                    >\n                      Информация о ходе реализации проекта\n                    </Text>\n                  </Box>\n                </Box>\n              </BoxInfoContent>\n            </InfoContentContainer>\n          </Section>\n\n          <Section align={isTabletOrWider ? 'center' : 'stretch'}>\n            <Button\n              fontWeight=\"800\"\n              size={isTabletOrWider ? 'large' : 'full'}\n              style={{\n                boxShadow: '0px 4px 12px rgba(59, 51, 176, 0.4)'\n              }}\n              onClick={() => routing.push(`/${Routes.loginVoter}`)}\n            >\n              Проголосовать\n            </Button>\n          </Section>\n\n          <Section>\n            <BoxFriend direction=\"row-responsive\">\n              <BoxFriendText>\n                <Title\n                  size={wSize}\n                  bold\n                  style={{ letterSpacing: '1px' }}\n                  margin=\"0 0 34px 0\"\n                  text=\"Дорогие друзья!\"\n                />\n                <MediaText size=\"medium\" style={{ lineHeight: '27px' }}>\n                  Инициативное бюджетирование — часть общемирового тренда,\n                  который представляет собой совокупность практик по решению\n                  вопросов местного значения, основанных на гражданской\n                  инициативе. Граждане самостоятельно определяют и выбирают\n                  объекты расходования бюджетных средств, а в последствии\n                  контролируют реализацию отобранных проектов.\n                  <br />\n                  <br />\n                  Проект «Поддержка местных инициатив населения» стартовал в\n                  Волгоградской области в 2019 году и показал высокую\n                  заинтересованность жителей региона. В 2021 году с помощью\n                  проекта жители Волгоградской области также смогут\n                  самостоятельно выбирать приоритетные инициативы, которые будут\n                  реализованы органами местного самоуправления. Инициативы будут\n                  поддержаны средствами из областного бюджета. Это позволит\n                  людям разных возрастов, профессий и уровня образования\n                  участвовать в улучшении общественного пространства своих сёл и\n                  городов.\n                  <br />\n                  <br />\n                  Приглашаем вас принять участие в реализации проекта и сделать\n                  свой выбор!\n                </MediaText>\n                <Button\n                  fontWeight=\"800\"\n                  size=\"large\"\n                  className=\"btn_friend\"\n                  style={{\n                    marginTop: '65px',\n                    boxShadow: '0px 4px 12px rgba(59, 51, 176, 0.4)'\n                  }}\n                  onClick={() => routing.push(`/${Routes.loginVoter}`)}\n                >\n                  Проголосовать\n                </Button>\n              </BoxFriendText>\n              <Box className=\"friend_img_hand\">\n                <img src={hand} alt=\"vector\" />\n              </Box>\n            </BoxFriend>\n          </Section>\n        </>\n      )}\n\n      <SectionBgColor pad=\"90px 0\">\n        <Section>\n          <Box direction=\"row\" style={{ maxWidth: '1000px' }} justify=\"center\">\n            <Title\n              size={wSize}\n              bold\n              color=\"white\"\n              style={{ textAlign: 'center' }}\n              text=\"Принять участие в программе местных инициатив\"\n            />\n          </Box>\n          <Box\n            wrap\n            direction=\"row-responsive\"\n            style={{ margin: '15px auto 0' }}\n            justify=\"center\"\n          >\n            <Button\n              fontWeight=\"800\"\n              color=\"Blue700\"\n              size=\"large\"\n              margin=\"medium\"\n              bgColor=\"white\"\n              bgHoverColor=\"Basic300\"\n              onClick={() => routing.push(`/${Routes.loginVoter}`)}\n              style={{ boxShadow: '0px 4px 12px rgba(59, 51, 176, 0.4)' }}\n            >\n              Проголосовать\n            </Button>\n\n            {isLaptopOrWider && (\n              <Button\n                fontWeight=\"800\"\n                color=\"Blue700\"\n                size=\"large\"\n                margin=\"medium\"\n                bgColor=\"white\"\n                bgHoverColor=\"Basic300\"\n                onClick={() => routing.push(`/${Routes.loginApplicant}`)}\n                style={{ boxShadow: '0px 4px 12px rgba(59, 51, 176, 0.4)' }}\n              >\n                Войти как заявитель\n              </Button>\n            )}\n\n            <Button\n              onClick={() => routing.push(Routes.archive)}\n              fontWeight=\"800\"\n              color=\"Blue700\"\n              size=\"large\"\n              margin=\"medium\"\n              bgColor=\"white\"\n              bgHoverColor=\"Basic300\"\n              style={{ boxShadow: '0px 4px 12px rgba(59, 51, 176, 0.4)' }}\n            >\n              Архив проектов\n            </Button>\n          </Box>\n        </Section>\n      </SectionBgColor>\n\n      <FooterSection direction={isMobile ? 'column' : 'row'}>\n        <Box\n          pad={{ vertical: 'medium' }}\n          flex\n          style={{ maxWidth: '360px' }}\n          margin={isMobile ? '0 auto' : ''}\n        >\n          <Text\n            size=\"14px\"\n            bold\n            style={{ lineHeight: 1.5, textAlign: isMobile ? 'center' : 'left' }}\n          >\n            Программа поддержки местных инициатив Волгоградской области\n          </Text>\n          <Link\n            onClick={() => routing.push(`/${Routes.infoAboutProgram}`)}\n            style={{\n              color: '#3B33B0',\n              margin: '10px 0 0',\n              padding: '0',\n              textAlign: isMobile ? 'center' : 'left'\n            }}\n          >\n            Информация о программе\n          </Link>\n        </Box>\n\n        <Box\n          justify=\"center\"\n          align={isMobile ? 'center' : 'end'}\n          pad={{ vertical: 'medium' }}\n          margin={isMobile ? {} : { left: 'auto' }}\n        >\n          <Text\n            size=\"14px\"\n            bold\n            style={{\n              textAlign: isMobile ? 'center' : 'left',\n              marginBottom: '10px'\n            }}\n          >\n            Поделитесь страницей в соц. сетях\n          </Text>\n          <ShareLinks\n            onShare={type => {\n              const url = SHARE_LINKS[type];\n              const imageField = type === 'vk' ? 'image' : 'imageUrl';\n\n              windowOpen(\n                url +\n                  objectToGetParams({\n                    url: baseUrl,\n                    title:\n                      'Программа местных инициатив населения Волгоградской области. Отбор путем рейтингового голосования. Реализация инициатив. Информация о результатах...',\n                    [imageField]: baseUrl + '/preview.png'\n                  }),\n                {}\n              );\n            }}\n          />\n        </Box>\n      </FooterSection>\n    </>\n  );\n});\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjk5IiBoZWlnaHQ9IjUzNyIgdmlld0JveD0iMCAwIDY5OSA1MzciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgo8ZyBvcGFjaXR5PSIwLjYiIGNsaXAtcGF0aD0idXJsKCNjbGlwMSkiPgo8cGF0aCBkPSJNMzA3LjUgMzQxVjM0MC41SDMwN0gyOTMuNVYyNjguNUgzNDguNVYzMDRIMzI3SDMyNi41VjMwNC41VjUxMi41SDMwNy41VjM0MVoiIHN0cm9rZT0iYmxhY2siLz4KPG1hc2sgaWQ9InBhdGgtMi1pbnNpZGUtMSIgZmlsbD0id2hpdGUiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExNyAyNzhINjdWMzUzSDEwMy41TDEwMy41MjMgMzUySDk3VjM0MkgxMDMuNzVMMTAzLjkwOSAzMzVIOTdWMzI0SDEwOFYzMzFIMTE3VjI3OFpNNzUgMjg4SDg2VjI5OUg3NVYyODhaTTg2IDM0Mkg3NVYzNTJIODZWMzQyWk03NSAzMDZIODZWMzE3SDc1VjMwNlpNODYgMzI0SDc1VjMzNUg4NlYzMjRaTTk3IDI4OEgxMDhWMjk5SDk3VjI4OFpNOTcgMzA2SDEwOFYzMTdIOTdWMzA2WiIvPgo8L21hc2s+CjxwYXRoIGQ9Ik02NyAyNzhWMjc3SDY2VjI3OEg2N1pNMTE3IDI3OEgxMThWMjc3SDExN1YyNzhaTTY3IDM1M0g2NlYzNTRINjdWMzUzWk0xMDMuNSAzNTNWMzU0SDEwNC40NzhMMTA0LjUgMzUzLjAyM0wxMDMuNSAzNTNaTTEwMy41MjMgMzUyTDEwNC41MjIgMzUyLjAyM0wxMDQuNTQ2IDM1MUgxMDMuNTIzVjM1MlpNOTcgMzUySDk2VjM1M0g5N1YzNTJaTTk3IDM0MlYzNDFIOTZWMzQySDk3Wk0xMDMuNzUgMzQyVjM0M0gxMDQuNzI4TDEwNC43NSAzNDIuMDIzTDEwMy43NSAzNDJaTTEwMy45MDkgMzM1TDEwNC45MDkgMzM1LjAyM0wxMDQuOTMyIDMzNEgxMDMuOTA5VjMzNVpNOTcgMzM1SDk2VjMzNkg5N1YzMzVaTTk3IDMyNFYzMjNIOTZWMzI0SDk3Wk0xMDggMzI0SDEwOVYzMjNIMTA4VjMyNFpNMTA4IDMzMUgxMDdWMzMySDEwOFYzMzFaTTExNyAzMzFWMzMySDExOFYzMzFIMTE3Wk04NiAyODhIODdWMjg3SDg2VjI4OFpNNzUgMjg4VjI4N0g3NFYyODhINzVaTTg2IDI5OVYzMDBIODdWMjk5SDg2Wk03NSAyOTlINzRWMzAwSDc1VjI5OVpNNzUgMzQyVjM0MUg3NFYzNDJINzVaTTg2IDM0Mkg4N1YzNDFIODZWMzQyWk03NSAzNTJINzRWMzUzSDc1VjM1MlpNODYgMzUyVjM1M0g4N1YzNTJIODZaTTg2IDMwNkg4N1YzMDVIODZWMzA2Wk03NSAzMDZWMzA1SDc0VjMwNkg3NVpNODYgMzE3VjMxOEg4N1YzMTdIODZaTTc1IDMxN0g3NFYzMThINzVWMzE3Wk03NSAzMjRWMzIzSDc0VjMyNEg3NVpNODYgMzI0SDg3VjMyM0g4NlYzMjRaTTc1IDMzNUg3NFYzMzZINzVWMzM1Wk04NiAzMzVWMzM2SDg3VjMzNUg4NlpNMTA4IDI4OEgxMDlWMjg3SDEwOFYyODhaTTk3IDI4OFYyODdIOTZWMjg4SDk3Wk0xMDggMjk5VjMwMEgxMDlWMjk5SDEwOFpNOTcgMjk5SDk2VjMwMEg5N1YyOTlaTTEwOCAzMDZIMTA5VjMwNUgxMDhWMzA2Wk05NyAzMDZWMzA1SDk2VjMwNkg5N1pNMTA4IDMxN1YzMThIMTA5VjMxN0gxMDhaTTk3IDMxN0g5NlYzMThIOTdWMzE3Wk02NyAyNzlIMTE3VjI3N0g2N1YyNzlaTTY4IDM1M1YyNzhINjZWMzUzSDY4Wk0xMDMuNSAzNTJINjdWMzU0SDEwMy41VjM1MlpNMTAyLjUyMyAzNTEuOTc3TDEwMi41IDM1Mi45NzdMMTA0LjUgMzUzLjAyM0wxMDQuNTIyIDM1Mi4wMjNMMTAyLjUyMyAzNTEuOTc3Wk05NyAzNTNIMTAzLjUyM1YzNTFIOTdWMzUzWk05NiAzNDJWMzUySDk4VjM0Mkg5NlpNMTAzLjc1IDM0MUg5N1YzNDNIMTAzLjc1VjM0MVpNMTAyLjkwOSAzMzQuOTc3TDEwMi43NSAzNDEuOTc3TDEwNC43NSAzNDIuMDIzTDEwNC45MDkgMzM1LjAyM0wxMDIuOTA5IDMzNC45NzdaTTEwMy45MDkgMzM0SDk3VjMzNkgxMDMuOTA5VjMzNFpNOTggMzM1VjMyNEg5NlYzMzVIOThaTTk3IDMyNUgxMDhWMzIzSDk3VjMyNVpNMTA3IDMyNFYzMzFIMTA5VjMyNEgxMDdaTTExNyAzMzBIMTA4VjMzMkgxMTdWMzMwWk0xMTYgMjc4VjMzMUgxMThWMjc4SDExNlpNODYgMjg3SDc1VjI4OUg4NlYyODdaTTg3IDI5OVYyODhIODVWMjk5SDg3Wk03NSAzMDBIODZWMjk4SDc1VjMwMFpNNzQgMjg4VjI5OUg3NlYyODhINzRaTTc1IDM0M0g4NlYzNDFINzVWMzQzWk03NiAzNTJWMzQySDc0VjM1Mkg3NlpNODYgMzUxSDc1VjM1M0g4NlYzNTFaTTg1IDM0MlYzNTJIODdWMzQySDg1Wk04NiAzMDVINzVWMzA3SDg2VjMwNVpNODcgMzE3VjMwNkg4NVYzMTdIODdaTTc1IDMxOEg4NlYzMTZINzVWMzE4Wk03NCAzMDZWMzE3SDc2VjMwNkg3NFpNNzUgMzI1SDg2VjMyM0g3NVYzMjVaTTc2IDMzNVYzMjRINzRWMzM1SDc2Wk04NiAzMzRINzVWMzM2SDg2VjMzNFpNODUgMzI0VjMzNUg4N1YzMjRIODVaTTEwOCAyODdIOTdWMjg5SDEwOFYyODdaTTEwOSAyOTlWMjg4SDEwN1YyOTlIMTA5Wk05NyAzMDBIMTA4VjI5OEg5N1YzMDBaTTk2IDI4OFYyOTlIOThWMjg4SDk2Wk0xMDggMzA1SDk3VjMwN0gxMDhWMzA1Wk0xMDkgMzE3VjMwNkgxMDdWMzE3SDEwOVpNOTcgMzE4SDEwOFYzMTZIOTdWMzE4Wk05NiAzMDZWMzE3SDk4VjMwNkg5NloiIGZpbGw9ImJsYWNrIiBtYXNrPSJ1cmwoI3BhdGgtMi1pbnNpZGUtMSkiLz4KPG1hc2sgaWQ9InBhdGgtNC1pbnNpZGUtMiIgZmlsbD0id2hpdGUiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIzMyAzNTJIMTc5VjQ5M0gyMTguNDJIMjMzVjQwOS4yNFYzNTJaTTE5NSAzNjMuOEgyMTYuNzhWMzc1LjY4SDE5NVYzNjMuOFpNMjE2Ljc4IDQzNS40MzlIMTk1VjQ0Ni4yMzlIMjE2Ljc4VjQzNS40MzlaTTE5NSA0NTguMjM5SDIxNi43OFY0NjkuMDM5SDE5NVY0NTguMjM5Wk0yMTYuNzggNDgxLjAzOUgxOTVWNDkxLjgzOUgyMTYuNzhWNDgxLjAzOVpNMTk1IDM4Ny42OEgyMTYuNzhWMzk5LjU2SDE5NVYzODcuNjhaTTIxNi43OCA0MTEuNTZIMTk1VjQyMy40NEgyMTYuNzhWNDExLjU2WiIvPgo8L21hc2s+CjxwYXRoIGQ9Ik0xNzkgMzUyVjM1MUgxNzhWMzUySDE3OVpNMjMzIDM1MkgyMzRWMzUxSDIzM1YzNTJaTTE3OSA0OTNIMTc4VjQ5NEgxNzlWNDkzWk0yMzMgNDkzVjQ5NEgyMzRWNDkzSDIzM1pNMjE2Ljc4IDM2My44SDIxNy43OFYzNjIuOEgyMTYuNzhWMzYzLjhaTTE5NSAzNjMuOFYzNjIuOEgxOTRWMzYzLjhIMTk1Wk0yMTYuNzggMzc1LjY4VjM3Ni42OEgyMTcuNzhWMzc1LjY4SDIxNi43OFpNMTk1IDM3NS42OEgxOTRWMzc2LjY4SDE5NVYzNzUuNjhaTTE5NSA0MzUuNDM5VjQzNC40MzlIMTk0VjQzNS40MzlIMTk1Wk0yMTYuNzggNDM1LjQzOUgyMTcuNzhWNDM0LjQzOUgyMTYuNzhWNDM1LjQzOVpNMTk1IDQ0Ni4yMzlIMTk0VjQ0Ny4yMzlIMTk1VjQ0Ni4yMzlaTTIxNi43OCA0NDYuMjM5VjQ0Ny4yMzlIMjE3Ljc4VjQ0Ni4yMzlIMjE2Ljc4Wk0yMTYuNzggNDU4LjIzOUgyMTcuNzhWNDU3LjIzOUgyMTYuNzhWNDU4LjIzOVpNMTk1IDQ1OC4yMzlWNDU3LjIzOUgxOTRWNDU4LjIzOUgxOTVaTTIxNi43OCA0NjkuMDM5VjQ3MC4wMzlIMjE3Ljc4VjQ2OS4wMzlIMjE2Ljc4Wk0xOTUgNDY5LjAzOUgxOTRWNDcwLjAzOUgxOTVWNDY5LjAzOVpNMTk1IDQ4MS4wMzlWNDgwLjAzOUgxOTRWNDgxLjAzOUgxOTVaTTIxNi43OCA0ODEuMDM5SDIxNy43OFY0ODAuMDM5SDIxNi43OFY0ODEuMDM5Wk0xOTUgNDkxLjgzOUgxOTRWNDkyLjgzOUgxOTVWNDkxLjgzOVpNMjE2Ljc4IDQ5MS44MzlWNDkyLjgzOUgyMTcuNzhWNDkxLjgzOUgyMTYuNzhaTTIxNi43OCAzODcuNjhIMjE3Ljc4VjM4Ni42OEgyMTYuNzhWMzg3LjY4Wk0xOTUgMzg3LjY4VjM4Ni42OEgxOTRWMzg3LjY4SDE5NVpNMjE2Ljc4IDM5OS41NlY0MDAuNTZIMjE3Ljc4VjM5OS41NkgyMTYuNzhaTTE5NSAzOTkuNTZIMTk0VjQwMC41NkgxOTVWMzk5LjU2Wk0xOTUgNDExLjU2VjQxMC41NkgxOTRWNDExLjU2SDE5NVpNMjE2Ljc4IDQxMS41NkgyMTcuNzhWNDEwLjU2SDIxNi43OFY0MTEuNTZaTTE5NSA0MjMuNDRIMTk0VjQyNC40NEgxOTVWNDIzLjQ0Wk0yMTYuNzggNDIzLjQ0VjQyNC40NEgyMTcuNzhWNDIzLjQ0SDIxNi43OFpNMTc5IDM1M0gyMzNWMzUxSDE3OVYzNTNaTTE4MCA0OTNWMzUySDE3OFY0OTNIMTgwWk0yMTguNDIgNDkySDE3OVY0OTRIMjE4LjQyVjQ5MlpNMjMzIDQ5MkgyMTguNDJWNDk0SDIzM1Y0OTJaTTIzMiA0MDkuMjRWNDkzSDIzNFY0MDkuMjRIMjMyWk0yMzIgMzUyVjQwOS4yNEgyMzRWMzUySDIzMlpNMjE2Ljc4IDM2Mi44SDE5NVYzNjQuOEgyMTYuNzhWMzYyLjhaTTIxNy43OCAzNzUuNjhWMzYzLjhIMjE1Ljc4VjM3NS42OEgyMTcuNzhaTTE5NSAzNzYuNjhIMjE2Ljc4VjM3NC42OEgxOTVWMzc2LjY4Wk0xOTQgMzYzLjhWMzc1LjY4SDE5NlYzNjMuOEgxOTRaTTE5NSA0MzYuNDM5SDIxNi43OFY0MzQuNDM5SDE5NVY0MzYuNDM5Wk0xOTYgNDQ2LjIzOVY0MzUuNDM5SDE5NFY0NDYuMjM5SDE5NlpNMjE2Ljc4IDQ0NS4yMzlIMTk1VjQ0Ny4yMzlIMjE2Ljc4VjQ0NS4yMzlaTTIxNS43OCA0MzUuNDM5VjQ0Ni4yMzlIMjE3Ljc4VjQzNS40MzlIMjE1Ljc4Wk0yMTYuNzggNDU3LjIzOUgxOTVWNDU5LjIzOUgyMTYuNzhWNDU3LjIzOVpNMjE3Ljc4IDQ2OS4wMzlWNDU4LjIzOUgyMTUuNzhWNDY5LjAzOUgyMTcuNzhaTTE5NSA0NzAuMDM5SDIxNi43OFY0NjguMDM5SDE5NVY0NzAuMDM5Wk0xOTQgNDU4LjIzOVY0NjkuMDM5SDE5NlY0NTguMjM5SDE5NFpNMTk1IDQ4Mi4wMzlIMjE2Ljc4VjQ4MC4wMzlIMTk1VjQ4Mi4wMzlaTTE5NiA0OTEuODM5VjQ4MS4wMzlIMTk0VjQ5MS44MzlIMTk2Wk0yMTYuNzggNDkwLjgzOUgxOTVWNDkyLjgzOUgyMTYuNzhWNDkwLjgzOVpNMjE1Ljc4IDQ4MS4wMzlWNDkxLjgzOUgyMTcuNzhWNDgxLjAzOUgyMTUuNzhaTTIxNi43OCAzODYuNjhIMTk1VjM4OC42OEgyMTYuNzhWMzg2LjY4Wk0yMTcuNzggMzk5LjU2VjM4Ny42OEgyMTUuNzhWMzk5LjU2SDIxNy43OFpNMTk1IDQwMC41NkgyMTYuNzhWMzk4LjU2SDE5NVY0MDAuNTZaTTE5NCAzODcuNjhWMzk5LjU2SDE5NlYzODcuNjhIMTk0Wk0xOTUgNDEyLjU2SDIxNi43OFY0MTAuNTZIMTk1VjQxMi41NlpNMTk2IDQyMy40NFY0MTEuNTZIMTk0VjQyMy40NEgxOTZaTTIxNi43OCA0MjIuNDRIMTk1VjQyNC40NEgyMTYuNzhWNDIyLjQ0Wk0yMTUuNzggNDExLjU2VjQyMy40NEgyMTcuNzhWNDExLjU2SDIxNS43OFoiIGZpbGw9ImJsYWNrIiBtYXNrPSJ1cmwoI3BhdGgtNC1pbnNpZGUtMikiLz4KPHBhdGggZD0iTTI0MSAzNDAuNUgyNDAuNVYzNDFWNTEyLjVIMTAzLjVWMzMwLjVIMjU0LjVWMzQwLjVIMjQxWiIgc3Ryb2tlPSIjMEEwNjA2Ii8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMikiPgo8bWFzayBpZD0icGF0aC03LWluc2lkZS0zIiBmaWxsPSJ3aGl0ZSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzA4IDM0MEgyNDBWNTE1LjA0NkgzMDhWMzQwWk0yOTIuODg5IDM1OS44OTFMMjkyLjg4OSA1MTMuMDU3SDI4My44MjJMMjgzLjgyMiAzNTkuODkxSDI5Mi44ODlaTTI2NC4xNzggNTEzLjA1N0wyNjQuMTc4IDM1OS44OTFIMjU1LjExMUwyNTUuMTExIDUxMy4wNTdIMjY0LjE3OFoiLz4KPC9tYXNrPgo8cGF0aCBkPSJNMjQwIDM0MFYzMzlIMjM5VjM0MEgyNDBaTTMwOCAzNDBIMzA5VjMzOUgzMDhWMzQwWk0yNDAgNTE1LjA0NkgyMzlWNTE2LjA0NkgyNDBWNTE1LjA0NlpNMzA4IDUxNS4wNDZWNTE2LjA0NkgzMDlWNTE1LjA0NkgzMDhaTTI5Mi44ODkgNTEzLjA1N1Y1MTQuMDU3SDI5My44ODlWNTEzLjA1N0gyOTIuODg5Wk0yOTIuODg5IDM1OS44OTFIMjkzLjg4OVYzNTguODkxSDI5Mi44ODlWMzU5Ljg5MVpNMjgzLjgyMiA1MTMuMDU3SDI4Mi44MjJWNTE0LjA1N0gyODMuODIyVjUxMy4wNTdaTTI4My44MjIgMzU5Ljg5MVYzNTguODkxSDI4Mi44MjJWMzU5Ljg5MUgyODMuODIyWk0yNjQuMTc4IDM1OS44OTFIMjY1LjE3OFYzNTguODkxSDI2NC4xNzhWMzU5Ljg5MVpNMjY0LjE3OCA1MTMuMDU3VjUxNC4wNTdIMjY1LjE3OFY1MTMuMDU3SDI2NC4xNzhaTTI1NS4xMTEgMzU5Ljg5MVYzNTguODkxSDI1NC4xMTFWMzU5Ljg5MUgyNTUuMTExWk0yNTUuMTExIDUxMy4wNTdIMjU0LjExMVY1MTQuMDU3SDI1NS4xMTFWNTEzLjA1N1pNMjQwIDM0MUgzMDhWMzM5SDI0MFYzNDFaTTI0MSA1MTUuMDQ2VjM0MEgyMzlWNTE1LjA0NkgyNDFaTTMwOCA1MTQuMDQ2SDI0MFY1MTYuMDQ2SDMwOFY1MTQuMDQ2Wk0zMDcgMzQwVjUxNS4wNDZIMzA5VjM0MEgzMDdaTTI5My44ODkgNTEzLjA1N0wyOTMuODg5IDM1OS44OTFIMjkxLjg4OUwyOTEuODg5IDUxMy4wNTdIMjkzLjg4OVpNMjgzLjgyMiA1MTQuMDU3SDI5Mi44ODlWNTEyLjA1N0gyODMuODIyVjUxNC4wNTdaTTI4Mi44MjIgMzU5Ljg5MUwyODIuODIyIDUxMy4wNTdIMjg0LjgyMkwyODQuODIyIDM1OS44OTFIMjgyLjgyMlpNMjkyLjg4OSAzNTguODkxSDI4My44MjJWMzYwLjg5MUgyOTIuODg5VjM1OC44OTFaTTI2My4xNzggMzU5Ljg5MUwyNjMuMTc4IDUxMy4wNTdIMjY1LjE3OEwyNjUuMTc4IDM1OS44OTFIMjYzLjE3OFpNMjU1LjExMSAzNjAuODkxSDI2NC4xNzhWMzU4Ljg5MUgyNTUuMTExVjM2MC44OTFaTTI1Ni4xMTEgNTEzLjA1N0wyNTYuMTExIDM1OS44OTFIMjU0LjExMUwyNTQuMTExIDUxMy4wNTdIMjU2LjExMVpNMjY0LjE3OCA1MTIuMDU3SDI1NS4xMTFWNTE0LjA1N0gyNjQuMTc4VjUxMi4wNTdaIiBmaWxsPSJibGFjayIgbWFzaz0idXJsKCNwYXRoLTctaW5zaWRlLTMpIi8+CjwvZz4KPHBhdGggZD0iTTQwNSAzNDRINDA0LjVWMzQ0LjVWNTEyLjVIMzI2LjVWMzA0LjVINDE0LjVWMzQ0SDQwNVoiIHN0cm9rZT0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNMTg5LjUgMzMwLjVWMjY4LjVIMjQ0LjVWMzMwLjVIMTg5LjVaIiBzdHJva2U9ImJsYWNrIi8+CjxwYXRoIGQ9Ik01NDkuNSAzNDRMNDk1IDM0NEw0OTUgNTEzTDY3MyA1MTNMNjczIDM0NEw2NDcgMzQ0IiBzdHJva2U9IiMwQTA2MDYiLz4KPG1hc2sgaWQ9InBhdGgtMTItaW5zaWRlLTQiIGZpbGw9IndoaXRlIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02NDcgMzA4LjRWNTA1QzY0NyA1MDYuMTA1IDY0Ni4xMDUgNTA3IDY0NSA1MDdINTg5QzU4Ny44OTUgNTA3IDU4NyA1MDYuMTA1IDU4NyA1MDVWMzEwQzU4NyAzMDguODk1IDU4Ny44OTUgMzA4IDU4OSAzMDhINjQ2LjZDNjQ2LjgyMSAzMDggNjQ3IDMwOC4xNzkgNjQ3IDMwOC40Wk02MzggMzIwSDU5NlYzMjdINjM4VjMyMFpNNTk2IDMzOUg2MzhWMzQ2SDU5NlYzMzlaTTYzOCAzNThINTk2VjM2NUg2MzhWMzU4Wk01OTYgMzc3SDYzOFYzODRINTk2VjM3N1pNNjM4IDM5Nkg1OTZWNDAzSDYzOFYzOTZaTTU5NiA0MTVINjM4VjQyMkg1OTZWNDE1Wk02MzggNDM0SDU5NlY0NDFINjM4VjQzNFpNNTk2IDQ1M0g2MzhWNDYwSDU5NlY0NTNaTTYzOCA0NzJINTk2VjQ3OUg2MzhWNDcyWiIvPgo8L21hc2s+CjxwYXRoIGQ9Ik01OTYgMzIwVjMxOUg1OTVWMzIwSDU5NlpNNjM4IDMyMEg2MzlWMzE5SDYzOFYzMjBaTTU5NiAzMjdINTk1VjMyOEg1OTZWMzI3Wk02MzggMzI3VjMyOEg2MzlWMzI3SDYzOFpNNjM4IDMzOUg2MzlWMzM4SDYzOFYzMzlaTTU5NiAzMzlWMzM4SDU5NVYzMzlINTk2Wk02MzggMzQ2VjM0N0g2MzlWMzQ2SDYzOFpNNTk2IDM0Nkg1OTVWMzQ3SDU5NlYzNDZaTTU5NiAzNThWMzU3SDU5NVYzNThINTk2Wk02MzggMzU4SDYzOVYzNTdINjM4VjM1OFpNNTk2IDM2NUg1OTVWMzY2SDU5NlYzNjVaTTYzOCAzNjVWMzY2SDYzOVYzNjVINjM4Wk02MzggMzc3SDYzOVYzNzZINjM4VjM3N1pNNTk2IDM3N1YzNzZINTk1VjM3N0g1OTZaTTYzOCAzODRWMzg1SDYzOVYzODRINjM4Wk01OTYgMzg0SDU5NVYzODVINTk2VjM4NFpNNTk2IDM5NlYzOTVINTk1VjM5Nkg1OTZaTTYzOCAzOTZINjM5VjM5NUg2MzhWMzk2Wk01OTYgNDAzSDU5NVY0MDRINTk2VjQwM1pNNjM4IDQwM1Y0MDRINjM5VjQwM0g2MzhaTTYzOCA0MTVINjM5VjQxNEg2MzhWNDE1Wk01OTYgNDE1VjQxNEg1OTVWNDE1SDU5NlpNNjM4IDQyMlY0MjNINjM5VjQyMkg2MzhaTTU5NiA0MjJINTk1VjQyM0g1OTZWNDIyWk01OTYgNDM0VjQzM0g1OTVWNDM0SDU5NlpNNjM4IDQzNEg2MzlWNDMzSDYzOFY0MzRaTTU5NiA0NDFINTk1VjQ0Mkg1OTZWNDQxWk02MzggNDQxVjQ0Mkg2MzlWNDQxSDYzOFpNNjM4IDQ1M0g2MzlWNDUySDYzOFY0NTNaTTU5NiA0NTNWNDUySDU5NVY0NTNINTk2Wk02MzggNDYwVjQ2MUg2MzlWNDYwSDYzOFpNNTk2IDQ2MEg1OTVWNDYxSDU5NlY0NjBaTTU5NiA0NzJWNDcxSDU5NVY0NzJINTk2Wk02MzggNDcySDYzOVY0NzFINjM4VjQ3MlpNNTk2IDQ3OUg1OTVWNDgwSDU5NlY0NzlaTTYzOCA0NzlWNDgwSDYzOVY0NzlINjM4Wk02NDggNTA1VjMwOC40SDY0NlY1MDVINjQ4Wk02NDUgNTA4QzY0Ni42NTcgNTA4IDY0OCA1MDYuNjU3IDY0OCA1MDVINjQ2QzY0NiA1MDUuNTUyIDY0NS41NTIgNTA2IDY0NSA1MDZWNTA4Wk01ODkgNTA4SDY0NVY1MDZINTg5VjUwOFpNNTg2IDUwNUM1ODYgNTA2LjY1NyA1ODcuMzQzIDUwOCA1ODkgNTA4VjUwNkM1ODguNDQ4IDUwNiA1ODggNTA1LjU1MiA1ODggNTA1SDU4NlpNNTg2IDMxMFY1MDVINTg4VjMxMEg1ODZaTTU4OSAzMDdDNTg3LjM0MyAzMDcgNTg2IDMwOC4zNDMgNTg2IDMxMEg1ODhDNTg4IDMwOS40NDggNTg4LjQ0OCAzMDkgNTg5IDMwOVYzMDdaTTY0Ni42IDMwN0g1ODlWMzA5SDY0Ni42VjMwN1pNNjQ4IDMwOC40QzY0OCAzMDcuNjI3IDY0Ny4zNzMgMzA3IDY0Ni42IDMwN1YzMDlDNjQ2LjI2OSAzMDkgNjQ2IDMwOC43MzEgNjQ2IDMwOC40SDY0OFpNNTk2IDMyMUg2MzhWMzE5SDU5NlYzMjFaTTU5NyAzMjdWMzIwSDU5NVYzMjdINTk3Wk02MzggMzI2SDU5NlYzMjhINjM4VjMyNlpNNjM3IDMyMFYzMjdINjM5VjMyMEg2MzdaTTYzOCAzMzhINTk2VjM0MEg2MzhWMzM4Wk02MzkgMzQ2VjMzOUg2MzdWMzQ2SDYzOVpNNTk2IDM0N0g2MzhWMzQ1SDU5NlYzNDdaTTU5NSAzMzlWMzQ2SDU5N1YzMzlINTk1Wk01OTYgMzU5SDYzOFYzNTdINTk2VjM1OVpNNTk3IDM2NVYzNThINTk1VjM2NUg1OTdaTTYzOCAzNjRINTk2VjM2Nkg2MzhWMzY0Wk02MzcgMzU4VjM2NUg2MzlWMzU4SDYzN1pNNjM4IDM3Nkg1OTZWMzc4SDYzOFYzNzZaTTYzOSAzODRWMzc3SDYzN1YzODRINjM5Wk01OTYgMzg1SDYzOFYzODNINTk2VjM4NVpNNTk1IDM3N1YzODRINTk3VjM3N0g1OTVaTTU5NiAzOTdINjM4VjM5NUg1OTZWMzk3Wk01OTcgNDAzVjM5Nkg1OTVWNDAzSDU5N1pNNjM4IDQwMkg1OTZWNDA0SDYzOFY0MDJaTTYzNyAzOTZWNDAzSDYzOVYzOTZINjM3Wk02MzggNDE0SDU5NlY0MTZINjM4VjQxNFpNNjM5IDQyMlY0MTVINjM3VjQyMkg2MzlaTTU5NiA0MjNINjM4VjQyMUg1OTZWNDIzWk01OTUgNDE1VjQyMkg1OTdWNDE1SDU5NVpNNTk2IDQzNUg2MzhWNDMzSDU5NlY0MzVaTTU5NyA0NDFWNDM0SDU5NVY0NDFINTk3Wk02MzggNDQwSDU5NlY0NDJINjM4VjQ0MFpNNjM3IDQzNFY0NDFINjM5VjQzNEg2MzdaTTYzOCA0NTJINTk2VjQ1NEg2MzhWNDUyWk02MzkgNDYwVjQ1M0g2MzdWNDYwSDYzOVpNNTk2IDQ2MUg2MzhWNDU5SDU5NlY0NjFaTTU5NSA0NTNWNDYwSDU5N1Y0NTNINTk1Wk01OTYgNDczSDYzOFY0NzFINTk2VjQ3M1pNNTk3IDQ3OVY0NzJINTk1VjQ3OUg1OTdaTTYzOCA0NzhINTk2VjQ4MEg2MzhWNDc4Wk02MzcgNDcyVjQ3OUg2MzlWNDcySDYzN1oiIGZpbGw9ImJsYWNrIiBtYXNrPSJ1cmwoI3BhdGgtMTItaW5zaWRlLTQpIi8+CjxtYXNrIGlkPSJwYXRoLTE0LWluc2lkZS01IiBmaWxsPSJ3aGl0ZSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDc2IDM0NEg0MDRWNDg1SDQ2Mi40SDQ3NlY0MzhINDE0VjQyN0g0NzZWNDE1SDQxNFY0MDRINDc2VjQwMS4yNFYzOTJINDE0VjM4MEg0NzZWMzY4SDQxNFYzNTZINDc2VjM0NFpNNDI3LjcwNCA0NTAuMjM5SDQ1OS45N1Y0NjEuMDM5SDQyNy43MDRWNDUwLjIzOVpNNDU5Ljk3IDQ3My4wMzlINDI3LjcwNFY0ODMuODM5SDQ1OS45N1Y0NzMuMDM5WiIvPgo8L21hc2s+CjxwYXRoIGQ9Ik00MDQgMzQ0VjM0M0g0MDNWMzQ0SDQwNFpNNDc2IDM0NEg0NzdWMzQzSDQ3NlYzNDRaTTQwNCA0ODVINDAzVjQ4Nkg0MDRWNDg1Wk00NzYgNDg1VjQ4Nkg0NzdWNDg1SDQ3NlpNNDc2IDQzOEg0NzdWNDM3SDQ3NlY0MzhaTTQxNCA0MzhINDEzVjQzOUg0MTRWNDM4Wk00MTQgNDI3VjQyNkg0MTNWNDI3SDQxNFpNNDc2IDQyN1Y0MjhINDc3VjQyN0g0NzZaTTQ3NiA0MTVINDc3VjQxNEg0NzZWNDE1Wk00MTQgNDE1SDQxM1Y0MTZINDE0VjQxNVpNNDE0IDQwNFY0MDNINDEzVjQwNEg0MTRaTTQ3NiA0MDRWNDA1SDQ3N1Y0MDRINDc2Wk00NzYgMzkySDQ3N1YzOTFINDc2VjM5MlpNNDE0IDM5Mkg0MTNWMzkzSDQxNFYzOTJaTTQxNCAzODBWMzc5SDQxM1YzODBINDE0Wk00NzYgMzgwVjM4MUg0NzdWMzgwSDQ3NlpNNDc2IDM2OEg0NzdWMzY3SDQ3NlYzNjhaTTQxNCAzNjhINDEzVjM2OUg0MTRWMzY4Wk00MTQgMzU2VjM1NUg0MTNWMzU2SDQxNFpNNDc2IDM1NlYzNTdINDc3VjM1Nkg0NzZaTTQ1OS45NyA0NTAuMjM5SDQ2MC45N1Y0NDkuMjM5SDQ1OS45N1Y0NTAuMjM5Wk00MjcuNzA0IDQ1MC4yMzlWNDQ5LjIzOUg0MjYuNzA0VjQ1MC4yMzlINDI3LjcwNFpNNDU5Ljk3IDQ2MS4wMzlWNDYyLjAzOUg0NjAuOTdWNDYxLjAzOUg0NTkuOTdaTTQyNy43MDQgNDYxLjAzOUg0MjYuNzA0VjQ2Mi4wMzlINDI3LjcwNFY0NjEuMDM5Wk00MjcuNzA0IDQ3My4wMzlWNDcyLjAzOUg0MjYuNzA0VjQ3My4wMzlINDI3LjcwNFpNNDU5Ljk3IDQ3My4wMzlINDYwLjk3VjQ3Mi4wMzlINDU5Ljk3VjQ3My4wMzlaTTQyNy43MDQgNDgzLjgzOUg0MjYuNzA0VjQ4NC44MzlINDI3LjcwNFY0ODMuODM5Wk00NTkuOTcgNDgzLjgzOVY0ODQuODM5SDQ2MC45N1Y0ODMuODM5SDQ1OS45N1pNNDA0IDM0NUg0NzZWMzQzSDQwNFYzNDVaTTQwNSA0ODVWMzQ0SDQwM1Y0ODVINDA1Wk00NjIuNCA0ODRINDA0VjQ4Nkg0NjIuNFY0ODRaTTQ3NiA0ODRINDYyLjRWNDg2SDQ3NlY0ODRaTTQ3NSA0MzhWNDg1SDQ3N1Y0MzhINDc1Wk00MTQgNDM5SDQ3NlY0MzdINDE0VjQzOVpNNDEzIDQyN1Y0MzhINDE1VjQyN0g0MTNaTTQ3NiA0MjZINDE0VjQyOEg0NzZWNDI2Wk00NzUgNDE1VjQyN0g0NzdWNDE1SDQ3NVpNNDc2IDQxNEg0MTRWNDE2SDQ3NlY0MTRaTTQxNSA0MTVWNDA0SDQxM1Y0MTVINDE1Wk00MTQgNDA1SDQ3NlY0MDNINDE0VjQwNVpNNDc1IDQwMS4yNFY0MDRINDc3VjQwMS4yNEg0NzVaTTQ3NSAzOTJWNDAxLjI0SDQ3N1YzOTJINDc1Wk00MTQgMzkzSDQ3NlYzOTFINDE0VjM5M1pNNDEzIDM4MFYzOTJINDE1VjM4MEg0MTNaTTQ3NiAzNzlINDE0VjM4MUg0NzZWMzc5Wk00NzUgMzY4VjM4MEg0NzdWMzY4SDQ3NVpNNDE0IDM2OUg0NzZWMzY3SDQxNFYzNjlaTTQxMyAzNTZWMzY4SDQxNVYzNTZINDEzWk00NzYgMzU1SDQxNFYzNTdINDc2VjM1NVpNNDc1IDM0NFYzNTZINDc3VjM0NEg0NzVaTTQ1OS45NyA0NDkuMjM5SDQyNy43MDRWNDUxLjIzOUg0NTkuOTdWNDQ5LjIzOVpNNDYwLjk3IDQ2MS4wMzlWNDUwLjIzOUg0NTguOTdWNDYxLjAzOUg0NjAuOTdaTTQyNy43MDQgNDYyLjAzOUg0NTkuOTdWNDYwLjAzOUg0MjcuNzA0VjQ2Mi4wMzlaTTQyNi43MDQgNDUwLjIzOVY0NjEuMDM5SDQyOC43MDRWNDUwLjIzOUg0MjYuNzA0Wk00MjcuNzA0IDQ3NC4wMzlINDU5Ljk3VjQ3Mi4wMzlINDI3LjcwNFY0NzQuMDM5Wk00MjguNzA0IDQ4My44MzlWNDczLjAzOUg0MjYuNzA0VjQ4My44MzlINDI4LjcwNFpNNDU5Ljk3IDQ4Mi44MzlINDI3LjcwNFY0ODQuODM5SDQ1OS45N1Y0ODIuODM5Wk00NTguOTcgNDczLjAzOVY0ODMuODM5SDQ2MC45N1Y0NzMuMDM5SDQ1OC45N1oiIGZpbGw9ImJsYWNrIiBtYXNrPSJ1cmwoI3BhdGgtMTQtaW5zaWRlLTUpIi8+CjxtYXNrIGlkPSJwYXRoLTE2LWluc2lkZS02IiBmaWxsPSJ3aGl0ZSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNTI5IDI2OEg0NzdDNDc1Ljg5NSAyNjggNDc1IDI2OC44OTUgNDc1IDI3MFY0OTVDNDc1IDQ5Ni4xMDUgNDc1Ljg5NSA0OTcgNDc3IDQ5N0g0OTMuNUM0OTQuNjA1IDQ5NyA0OTUuNSA0OTYuMTA1IDQ5NS41IDQ5NVYzNDYuNUM0OTUuNSAzNDUuMzk1IDQ5Ni4zOTUgMzQ0LjUgNDk3LjUgMzQ0LjVINTI5QzUzMC4xMDUgMzQ0LjUgNTMxIDM0My42MDUgNTMxIDM0Mi41VjI3MEM1MzEgMjY4Ljg5NSA1MzAuMTA1IDI2OCA1MjkgMjY4Wk01MTkgMjc5TDUxOSAzNDRINTExTDUxMSAyNzlINTE5Wk00OTUgNDgzTDQ5NSAyNzlINDg3TDQ4NyA0ODNINDk1WiIvPgo8L21hc2s+CjxwYXRoIGQ9Ik01MTkgMzQ0VjM0NUg1MjBWMzQ0SDUxOVpNNTE5IDI3OUg1MjBWMjc4SDUxOVYyNzlaTTUxMSAzNDRINTEwVjM0NUg1MTFWMzQ0Wk01MTEgMjc5VjI3OEg1MTBWMjc5SDUxMVpNNDk1IDI3OUg0OTZWMjc4SDQ5NVYyNzlaTTQ5NSA0ODNWNDg0SDQ5NlY0ODNINDk1Wk00ODcgMjc5VjI3OEg0ODZWMjc5SDQ4N1pNNDg3IDQ4M0g0ODZWNDg0SDQ4N1Y0ODNaTTQ3NyAyNjlINTI5VjI2N0g0NzdWMjY5Wk00NzYgMjcwQzQ3NiAyNjkuNDQ4IDQ3Ni40NDggMjY5IDQ3NyAyNjlWMjY3QzQ3NS4zNDMgMjY3IDQ3NCAyNjguMzQzIDQ3NCAyNzBINDc2Wk00NzYgNDk1VjI3MEg0NzRWNDk1SDQ3NlpNNDc3IDQ5NkM0NzYuNDQ4IDQ5NiA0NzYgNDk1LjU1MiA0NzYgNDk1SDQ3NEM0NzQgNDk2LjY1NyA0NzUuMzQzIDQ5OCA0NzcgNDk4VjQ5NlpNNDkzLjUgNDk2SDQ3N1Y0OThINDkzLjVWNDk2Wk00OTQuNSA0OTVDNDk0LjUgNDk1LjU1MiA0OTQuMDUyIDQ5NiA0OTMuNSA0OTZWNDk4QzQ5NS4xNTcgNDk4IDQ5Ni41IDQ5Ni42NTcgNDk2LjUgNDk1SDQ5NC41Wk00OTQuNSAzNDYuNVY0OTVINDk2LjVWMzQ2LjVINDk0LjVaTTQ5Ny41IDM0My41QzQ5NS44NDMgMzQzLjUgNDk0LjUgMzQ0Ljg0MyA0OTQuNSAzNDYuNUg0OTYuNUM0OTYuNSAzNDUuOTQ4IDQ5Ni45NDggMzQ1LjUgNDk3LjUgMzQ1LjVWMzQzLjVaTTUyOSAzNDMuNUg0OTcuNVYzNDUuNUg1MjlWMzQzLjVaTTUzMCAzNDIuNUM1MzAgMzQzLjA1MiA1MjkuNTUyIDM0My41IDUyOSAzNDMuNVYzNDUuNUM1MzAuNjU3IDM0NS41IDUzMiAzNDQuMTU3IDUzMiAzNDIuNUg1MzBaTTUzMCAyNzBWMzQyLjVINTMyVjI3MEg1MzBaTTUyOSAyNjlDNTI5LjU1MiAyNjkgNTMwIDI2OS40NDggNTMwIDI3MEg1MzJDNTMyIDI2OC4zNDMgNTMwLjY1NyAyNjcgNTI5IDI2N1YyNjlaTTUyMCAzNDRMNTIwIDI3OUg1MThMNTE4IDM0NEg1MjBaTTUxMSAzNDVINTE5VjM0M0g1MTFWMzQ1Wk01MTAgMjc5TDUxMCAzNDRINTEyTDUxMiAyNzlINTEwWk01MTkgMjc4SDUxMVYyODBINTE5VjI3OFpNNDk0IDI3OUw0OTQgNDgzSDQ5Nkw0OTYgMjc5SDQ5NFpNNDg3IDI4MEg0OTVWMjc4SDQ4N1YyODBaTTQ4OCA0ODNMNDg4IDI3OUg0ODZMNDg2IDQ4M0g0ODhaTTQ5NSA0ODJINDg3VjQ4NEg0OTVWNDgyWiIgZmlsbD0iYmxhY2siIG1hc2s9InVybCgjcGF0aC0xNi1pbnNpZGUtNikiLz4KPG1hc2sgaWQ9InBhdGgtMTgtaW5zaWRlLTciIGZpbGw9IndoaXRlIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01OTMuNjY3IDI0M0g1NDlWNDkwSDU1N1Y0ODIuNDE1SDU2Ni44MjdWNDkwSDU3Ni44MjdWNDgyLjQxNUg1ODYuNjUzVjQ5MEg1ODcuODg5VjMwOUg1OTMuNjY3VjI5MC4zNDdWMjQzWk01NTcgMjUxLjkzNEg1NjYuODI3VjI2MS43Nkg1NTdWMjUxLjkzNFpNNTY2LjgyNyAzMTEuNDE1SDU1N1YzMjAuMzQ4SDU2Ni44MjdWMzExLjQxNVpNNTU3IDMzMC40MTVINTY2LjgyN1YzMzkuMzQ4SDU1N1YzMzAuNDE1Wk01NjYuODI3IDM0OS40MTVINTU3VjM1OC4zNDhINTY2LjgyN1YzNDkuNDE1Wk01NTcgMzY4LjQxNUg1NjYuODI3VjM3Ny4zNDhINTU3VjM2OC40MTVaTTU2Ni44MjcgMzg3LjQxNUg1NTdWMzk2LjM0OEg1NjYuODI3VjM4Ny40MTVaTTU1NyA0MDYuNDE1SDU2Ni44MjdWNDE1LjM0OEg1NTdWNDA2LjQxNVpNNTY2LjgyNyA0MjUuNDE1SDU1N1Y0MzQuMzQ4SDU2Ni44MjdWNDI1LjQxNVpNNTU3IDQ0NC40MTVINTY2LjgyN1Y0NTMuMzQ4SDU1N1Y0NDQuNDE1Wk01NjYuODI3IDQ2My40MTVINTU3VjQ3Mi4zNDhINTY2LjgyN1Y0NjMuNDE1Wk01NjYuODI3IDI3MS43NjFINTU3VjI4MS41ODdINTY2LjgyN1YyNzEuNzYxWk01NTcgMjkxLjU4OEg1NjYuODI3VjMwMS40MTVINTU3VjI5MS41ODhaTTU4Ni42NTMgMjUxLjkzNEg1NzYuODI3VjI2MS43Nkg1ODYuNjUzVjI1MS45MzRaTTU3Ni44MjcgMzExLjQxNUg1ODYuNjUzVjMyMC4zNDhINTc2LjgyN1YzMTEuNDE1Wk01ODYuNjUzIDMzMC40MTVINTc2LjgyN1YzMzkuMzQ4SDU4Ni42NTNWMzMwLjQxNVpNNTc2LjgyNyAzNDkuNDE1SDU4Ni42NTNWMzU4LjM0OEg1NzYuODI3VjM0OS40MTVaTTU4Ni42NTMgMzY4LjQxNUg1NzYuODI3VjM3Ny4zNDhINTg2LjY1M1YzNjguNDE1Wk01NzYuODI3IDM4Ny40MTVINTg2LjY1M1YzOTYuMzQ4SDU3Ni44MjdWMzg3LjQxNVpNNTg2LjY1MyA0MDYuNDE1SDU3Ni44MjdWNDE1LjM0OEg1ODYuNjUzVjQwNi40MTVaTTU3Ni44MjcgNDI1LjQxNUg1ODYuNjUzVjQzNC4zNDhINTc2LjgyN1Y0MjUuNDE1Wk01ODYuNjUzIDQ0NC40MTVINTc2LjgyN1Y0NTMuMzQ4SDU4Ni42NTNWNDQ0LjQxNVpNNTc2LjgyNyA0NjMuNDE1SDU4Ni42NTNWNDcyLjM0OEg1NzYuODI3VjQ2My40MTVaTTU3Ni44MjcgMjcxLjc2MUg1ODYuNjUzVjI4MS41ODdINTc2LjgyN1YyNzEuNzYxWk01ODYuNjUzIDI5MS41ODhINTc2LjgyN1YzMDEuNDE1SDU4Ni42NTNWMjkxLjU4OFoiLz4KPC9tYXNrPgo8cGF0aCBkPSJNNTQ5IDI0M1YyNDJINTQ4VjI0M0g1NDlaTTU5My42NjcgMjQzSDU5NC42NjdWMjQySDU5My42NjdWMjQzWk01NDkgNDkwSDU0OFY0OTFINTQ5VjQ5MFpNNTU3IDQ5MFY0OTFINTU4VjQ5MEg1NTdaTTU1NyA0ODIuNDE1VjQ4MS40MTVINTU2VjQ4Mi40MTVINTU3Wk01NjYuODI3IDQ4Mi40MTVINTY3LjgyN1Y0ODEuNDE1SDU2Ni44MjdWNDgyLjQxNVpNNTY2LjgyNyA0OTBINTY1LjgyN1Y0OTFINTY2LjgyN1Y0OTBaTTU3Ni44MjcgNDkwVjQ5MUg1NzcuODI3VjQ5MEg1NzYuODI3Wk01NzYuODI3IDQ4Mi40MTVWNDgxLjQxNUg1NzUuODI3VjQ4Mi40MTVINTc2LjgyN1pNNTg2LjY1MyA0ODIuNDE1SDU4Ny42NTNWNDgxLjQxNUg1ODYuNjUzVjQ4Mi40MTVaTTU4Ni42NTMgNDkwSDU4NS42NTNWNDkxSDU4Ni42NTNWNDkwWk01ODcuODg5IDQ5MFY0OTFINTg4Ljg4OVY0OTBINTg3Ljg4OVpNNTg3Ljg4OSAzMDlWMzA4SDU4Ni44ODlWMzA5SDU4Ny44ODlaTTU5My42NjcgMzA5VjMxMEg1OTQuNjY3VjMwOUg1OTMuNjY3Wk01NjYuODI3IDI1MS45MzRINTY3LjgyN1YyNTAuOTM0SDU2Ni44MjdWMjUxLjkzNFpNNTU3IDI1MS45MzRWMjUwLjkzNEg1NTZWMjUxLjkzNEg1NTdaTTU2Ni44MjcgMjYxLjc2VjI2Mi43Nkg1NjcuODI3VjI2MS43Nkg1NjYuODI3Wk01NTcgMjYxLjc2SDU1NlYyNjIuNzZINTU3VjI2MS43NlpNNTU3IDMxMS40MTVWMzEwLjQxNUg1NTZWMzExLjQxNUg1NTdaTTU2Ni44MjcgMzExLjQxNUg1NjcuODI3VjMxMC40MTVINTY2LjgyN1YzMTEuNDE1Wk01NTcgMzIwLjM0OEg1NTZWMzIxLjM0OEg1NTdWMzIwLjM0OFpNNTY2LjgyNyAzMjAuMzQ4VjMyMS4zNDhINTY3LjgyN1YzMjAuMzQ4SDU2Ni44MjdaTTU2Ni44MjcgMzMwLjQxNUg1NjcuODI3VjMyOS40MTVINTY2LjgyN1YzMzAuNDE1Wk01NTcgMzMwLjQxNVYzMjkuNDE1SDU1NlYzMzAuNDE1SDU1N1pNNTY2LjgyNyAzMzkuMzQ4VjM0MC4zNDhINTY3LjgyN1YzMzkuMzQ4SDU2Ni44MjdaTTU1NyAzMzkuMzQ4SDU1NlYzNDAuMzQ4SDU1N1YzMzkuMzQ4Wk01NTcgMzQ5LjQxNVYzNDguNDE1SDU1NlYzNDkuNDE1SDU1N1pNNTY2LjgyNyAzNDkuNDE1SDU2Ny44MjdWMzQ4LjQxNUg1NjYuODI3VjM0OS40MTVaTTU1NyAzNTguMzQ4SDU1NlYzNTkuMzQ4SDU1N1YzNTguMzQ4Wk01NjYuODI3IDM1OC4zNDhWMzU5LjM0OEg1NjcuODI3VjM1OC4zNDhINTY2LjgyN1pNNTY2LjgyNyAzNjguNDE1SDU2Ny44MjdWMzY3LjQxNUg1NjYuODI3VjM2OC40MTVaTTU1NyAzNjguNDE1VjM2Ny40MTVINTU2VjM2OC40MTVINTU3Wk01NjYuODI3IDM3Ny4zNDhWMzc4LjM0OEg1NjcuODI3VjM3Ny4zNDhINTY2LjgyN1pNNTU3IDM3Ny4zNDhINTU2VjM3OC4zNDhINTU3VjM3Ny4zNDhaTTU1NyAzODcuNDE1VjM4Ni40MTVINTU2VjM4Ny40MTVINTU3Wk01NjYuODI3IDM4Ny40MTVINTY3LjgyN1YzODYuNDE1SDU2Ni44MjdWMzg3LjQxNVpNNTU3IDM5Ni4zNDhINTU2VjM5Ny4zNDhINTU3VjM5Ni4zNDhaTTU2Ni44MjcgMzk2LjM0OFYzOTcuMzQ4SDU2Ny44MjdWMzk2LjM0OEg1NjYuODI3Wk01NjYuODI3IDQwNi40MTVINTY3LjgyN1Y0MDUuNDE1SDU2Ni44MjdWNDA2LjQxNVpNNTU3IDQwNi40MTVWNDA1LjQxNUg1NTZWNDA2LjQxNUg1NTdaTTU2Ni44MjcgNDE1LjM0OFY0MTYuMzQ4SDU2Ny44MjdWNDE1LjM0OEg1NjYuODI3Wk01NTcgNDE1LjM0OEg1NTZWNDE2LjM0OEg1NTdWNDE1LjM0OFpNNTU3IDQyNS40MTVWNDI0LjQxNUg1NTZWNDI1LjQxNUg1NTdaTTU2Ni44MjcgNDI1LjQxNUg1NjcuODI3VjQyNC40MTVINTY2LjgyN1Y0MjUuNDE1Wk01NTcgNDM0LjM0OEg1NTZWNDM1LjM0OEg1NTdWNDM0LjM0OFpNNTY2LjgyNyA0MzQuMzQ4VjQzNS4zNDhINTY3LjgyN1Y0MzQuMzQ4SDU2Ni44MjdaTTU2Ni44MjcgNDQ0LjQxNUg1NjcuODI3VjQ0My40MTVINTY2LjgyN1Y0NDQuNDE1Wk01NTcgNDQ0LjQxNVY0NDMuNDE1SDU1NlY0NDQuNDE1SDU1N1pNNTY2LjgyNyA0NTMuMzQ4VjQ1NC4zNDhINTY3LjgyN1Y0NTMuMzQ4SDU2Ni44MjdaTTU1NyA0NTMuMzQ4SDU1NlY0NTQuMzQ4SDU1N1Y0NTMuMzQ4Wk01NTcgNDYzLjQxNVY0NjIuNDE1SDU1NlY0NjMuNDE1SDU1N1pNNTY2LjgyNyA0NjMuNDE1SDU2Ny44MjdWNDYyLjQxNUg1NjYuODI3VjQ2My40MTVaTTU1NyA0NzIuMzQ4SDU1NlY0NzMuMzQ4SDU1N1Y0NzIuMzQ4Wk01NjYuODI3IDQ3Mi4zNDhWNDczLjM0OEg1NjcuODI3VjQ3Mi4zNDhINTY2LjgyN1pNNTU3IDI3MS43NjFWMjcwLjc2MUg1NTZWMjcxLjc2MUg1NTdaTTU2Ni44MjcgMjcxLjc2MUg1NjcuODI3VjI3MC43NjFINTY2LjgyN1YyNzEuNzYxWk01NTcgMjgxLjU4N0g1NTZWMjgyLjU4N0g1NTdWMjgxLjU4N1pNNTY2LjgyNyAyODEuNTg3VjI4Mi41ODdINTY3LjgyN1YyODEuNTg3SDU2Ni44MjdaTTU2Ni44MjcgMjkxLjU4OEg1NjcuODI3VjI5MC41ODhINTY2LjgyN1YyOTEuNTg4Wk01NTcgMjkxLjU4OFYyOTAuNTg4SDU1NlYyOTEuNTg4SDU1N1pNNTY2LjgyNyAzMDEuNDE1VjMwMi40MTVINTY3LjgyN1YzMDEuNDE1SDU2Ni44MjdaTTU1NyAzMDEuNDE1SDU1NlYzMDIuNDE1SDU1N1YzMDEuNDE1Wk01NzYuODI3IDI1MS45MzRWMjUwLjkzNEg1NzUuODI3VjI1MS45MzRINTc2LjgyN1pNNTg2LjY1MyAyNTEuOTM0SDU4Ny42NTNWMjUwLjkzNEg1ODYuNjUzVjI1MS45MzRaTTU3Ni44MjcgMjYxLjc2SDU3NS44MjdWMjYyLjc2SDU3Ni44MjdWMjYxLjc2Wk01ODYuNjUzIDI2MS43NlYyNjIuNzZINTg3LjY1M1YyNjEuNzZINTg2LjY1M1pNNTg2LjY1MyAzMTEuNDE1SDU4Ny42NTNWMzEwLjQxNUg1ODYuNjUzVjMxMS40MTVaTTU3Ni44MjcgMzExLjQxNVYzMTAuNDE1SDU3NS44MjdWMzExLjQxNUg1NzYuODI3Wk01ODYuNjUzIDMyMC4zNDhWMzIxLjM0OEg1ODcuNjUzVjMyMC4zNDhINTg2LjY1M1pNNTc2LjgyNyAzMjAuMzQ4SDU3NS44MjdWMzIxLjM0OEg1NzYuODI3VjMyMC4zNDhaTTU3Ni44MjcgMzMwLjQxNVYzMjkuNDE1SDU3NS44MjdWMzMwLjQxNUg1NzYuODI3Wk01ODYuNjUzIDMzMC40MTVINTg3LjY1M1YzMjkuNDE1SDU4Ni42NTNWMzMwLjQxNVpNNTc2LjgyNyAzMzkuMzQ4SDU3NS44MjdWMzQwLjM0OEg1NzYuODI3VjMzOS4zNDhaTTU4Ni42NTMgMzM5LjM0OFYzNDAuMzQ4SDU4Ny42NTNWMzM5LjM0OEg1ODYuNjUzWk01ODYuNjUzIDM0OS40MTVINTg3LjY1M1YzNDguNDE1SDU4Ni42NTNWMzQ5LjQxNVpNNTc2LjgyNyAzNDkuNDE1VjM0OC40MTVINTc1LjgyN1YzNDkuNDE1SDU3Ni44MjdaTTU4Ni42NTMgMzU4LjM0OFYzNTkuMzQ4SDU4Ny42NTNWMzU4LjM0OEg1ODYuNjUzWk01NzYuODI3IDM1OC4zNDhINTc1LjgyN1YzNTkuMzQ4SDU3Ni44MjdWMzU4LjM0OFpNNTc2LjgyNyAzNjguNDE1VjM2Ny40MTVINTc1LjgyN1YzNjguNDE1SDU3Ni44MjdaTTU4Ni42NTMgMzY4LjQxNUg1ODcuNjUzVjM2Ny40MTVINTg2LjY1M1YzNjguNDE1Wk01NzYuODI3IDM3Ny4zNDhINTc1LjgyN1YzNzguMzQ4SDU3Ni44MjdWMzc3LjM0OFpNNTg2LjY1MyAzNzcuMzQ4VjM3OC4zNDhINTg3LjY1M1YzNzcuMzQ4SDU4Ni42NTNaTTU4Ni42NTMgMzg3LjQxNUg1ODcuNjUzVjM4Ni40MTVINTg2LjY1M1YzODcuNDE1Wk01NzYuODI3IDM4Ny40MTVWMzg2LjQxNUg1NzUuODI3VjM4Ny40MTVINTc2LjgyN1pNNTg2LjY1MyAzOTYuMzQ4VjM5Ny4zNDhINTg3LjY1M1YzOTYuMzQ4SDU4Ni42NTNaTTU3Ni44MjcgMzk2LjM0OEg1NzUuODI3VjM5Ny4zNDhINTc2LjgyN1YzOTYuMzQ4Wk01NzYuODI3IDQwNi40MTVWNDA1LjQxNUg1NzUuODI3VjQwNi40MTVINTc2LjgyN1pNNTg2LjY1MyA0MDYuNDE1SDU4Ny42NTNWNDA1LjQxNUg1ODYuNjUzVjQwNi40MTVaTTU3Ni44MjcgNDE1LjM0OEg1NzUuODI3VjQxNi4zNDhINTc2LjgyN1Y0MTUuMzQ4Wk01ODYuNjUzIDQxNS4zNDhWNDE2LjM0OEg1ODcuNjUzVjQxNS4zNDhINTg2LjY1M1pNNTg2LjY1MyA0MjUuNDE1SDU4Ny42NTNWNDI0LjQxNUg1ODYuNjUzVjQyNS40MTVaTTU3Ni44MjcgNDI1LjQxNVY0MjQuNDE1SDU3NS44MjdWNDI1LjQxNUg1NzYuODI3Wk01ODYuNjUzIDQzNC4zNDhWNDM1LjM0OEg1ODcuNjUzVjQzNC4zNDhINTg2LjY1M1pNNTc2LjgyNyA0MzQuMzQ4SDU3NS44MjdWNDM1LjM0OEg1NzYuODI3VjQzNC4zNDhaTTU3Ni44MjcgNDQ0LjQxNVY0NDMuNDE1SDU3NS44MjdWNDQ0LjQxNUg1NzYuODI3Wk01ODYuNjUzIDQ0NC40MTVINTg3LjY1M1Y0NDMuNDE1SDU4Ni42NTNWNDQ0LjQxNVpNNTc2LjgyNyA0NTMuMzQ4SDU3NS44MjdWNDU0LjM0OEg1NzYuODI3VjQ1My4zNDhaTTU4Ni42NTMgNDUzLjM0OFY0NTQuMzQ4SDU4Ny42NTNWNDUzLjM0OEg1ODYuNjUzWk01ODYuNjUzIDQ2My40MTVINTg3LjY1M1Y0NjIuNDE1SDU4Ni42NTNWNDYzLjQxNVpNNTc2LjgyNyA0NjMuNDE1VjQ2Mi40MTVINTc1LjgyN1Y0NjMuNDE1SDU3Ni44MjdaTTU4Ni42NTMgNDcyLjM0OFY0NzMuMzQ4SDU4Ny42NTNWNDcyLjM0OEg1ODYuNjUzWk01NzYuODI3IDQ3Mi4zNDhINTc1LjgyN1Y0NzMuMzQ4SDU3Ni44MjdWNDcyLjM0OFpNNTg2LjY1MyAyNzEuNzYxSDU4Ny42NTNWMjcwLjc2MUg1ODYuNjUzVjI3MS43NjFaTTU3Ni44MjcgMjcxLjc2MVYyNzAuNzYxSDU3NS44MjdWMjcxLjc2MUg1NzYuODI3Wk01ODYuNjUzIDI4MS41ODdWMjgyLjU4N0g1ODcuNjUzVjI4MS41ODdINTg2LjY1M1pNNTc2LjgyNyAyODEuNTg3SDU3NS44MjdWMjgyLjU4N0g1NzYuODI3VjI4MS41ODdaTTU3Ni44MjcgMjkxLjU4OFYyOTAuNTg4SDU3NS44MjdWMjkxLjU4OEg1NzYuODI3Wk01ODYuNjUzIDI5MS41ODhINTg3LjY1M1YyOTAuNTg4SDU4Ni42NTNWMjkxLjU4OFpNNTc2LjgyNyAzMDEuNDE1SDU3NS44MjdWMzAyLjQxNUg1NzYuODI3VjMwMS40MTVaTTU4Ni42NTMgMzAxLjQxNVYzMDIuNDE1SDU4Ny42NTNWMzAxLjQxNUg1ODYuNjUzWk01NDkgMjQ0SDU5My42NjdWMjQySDU0OVYyNDRaTTU1MCA0OTBWMjQzSDU0OFY0OTBINTUwWk01NTcgNDg5SDU0OVY0OTFINTU3VjQ4OVpNNTU2IDQ4Mi40MTVWNDkwSDU1OFY0ODIuNDE1SDU1NlpNNTY2LjgyNyA0ODEuNDE1SDU1N1Y0ODMuNDE1SDU2Ni44MjdWNDgxLjQxNVpNNTY3LjgyNyA0OTBWNDgyLjQxNUg1NjUuODI3VjQ5MEg1NjcuODI3Wk01NzYuODI3IDQ4OUg1NjYuODI3VjQ5MUg1NzYuODI3VjQ4OVpNNTc1LjgyNyA0ODIuNDE1VjQ5MEg1NzcuODI3VjQ4Mi40MTVINTc1LjgyN1pNNTg2LjY1MyA0ODEuNDE1SDU3Ni44MjdWNDgzLjQxNUg1ODYuNjUzVjQ4MS40MTVaTTU4Ny42NTMgNDkwVjQ4Mi40MTVINTg1LjY1M1Y0OTBINTg3LjY1M1pNNTg3Ljg4OSA0ODlINTg2LjY1M1Y0OTFINTg3Ljg4OVY0ODlaTTU4Ni44ODkgMzA5VjQ5MEg1ODguODg5VjMwOUg1ODYuODg5Wk01OTMuNjY3IDMwOEg1ODcuODg5VjMxMEg1OTMuNjY3VjMwOFpNNTkyLjY2NyAyOTAuMzQ3VjMwOUg1OTQuNjY3VjI5MC4zNDdINTkyLjY2N1pNNTkyLjY2NyAyNDNWMjkwLjM0N0g1OTQuNjY3VjI0M0g1OTIuNjY3Wk01NjYuODI3IDI1MC45MzRINTU3VjI1Mi45MzRINTY2LjgyN1YyNTAuOTM0Wk01NjcuODI3IDI2MS43NlYyNTEuOTM0SDU2NS44MjdWMjYxLjc2SDU2Ny44MjdaTTU1NyAyNjIuNzZINTY2LjgyN1YyNjAuNzZINTU3VjI2Mi43NlpNNTU2IDI1MS45MzRWMjYxLjc2SDU1OFYyNTEuOTM0SDU1NlpNNTU3IDMxMi40MTVINTY2LjgyN1YzMTAuNDE1SDU1N1YzMTIuNDE1Wk01NTggMzIwLjM0OFYzMTEuNDE1SDU1NlYzMjAuMzQ4SDU1OFpNNTY2LjgyNyAzMTkuMzQ4SDU1N1YzMjEuMzQ4SDU2Ni44MjdWMzE5LjM0OFpNNTY1LjgyNyAzMTEuNDE1VjMyMC4zNDhINTY3LjgyN1YzMTEuNDE1SDU2NS44MjdaTTU2Ni44MjcgMzI5LjQxNUg1NTdWMzMxLjQxNUg1NjYuODI3VjMyOS40MTVaTTU2Ny44MjcgMzM5LjM0OFYzMzAuNDE1SDU2NS44MjdWMzM5LjM0OEg1NjcuODI3Wk01NTcgMzQwLjM0OEg1NjYuODI3VjMzOC4zNDhINTU3VjM0MC4zNDhaTTU1NiAzMzAuNDE1VjMzOS4zNDhINTU4VjMzMC40MTVINTU2Wk01NTcgMzUwLjQxNUg1NjYuODI3VjM0OC40MTVINTU3VjM1MC40MTVaTTU1OCAzNTguMzQ4VjM0OS40MTVINTU2VjM1OC4zNDhINTU4Wk01NjYuODI3IDM1Ny4zNDhINTU3VjM1OS4zNDhINTY2LjgyN1YzNTcuMzQ4Wk01NjUuODI3IDM0OS40MTVWMzU4LjM0OEg1NjcuODI3VjM0OS40MTVINTY1LjgyN1pNNTY2LjgyNyAzNjcuNDE1SDU1N1YzNjkuNDE1SDU2Ni44MjdWMzY3LjQxNVpNNTY3LjgyNyAzNzcuMzQ4VjM2OC40MTVINTY1LjgyN1YzNzcuMzQ4SDU2Ny44MjdaTTU1NyAzNzguMzQ4SDU2Ni44MjdWMzc2LjM0OEg1NTdWMzc4LjM0OFpNNTU2IDM2OC40MTVWMzc3LjM0OEg1NThWMzY4LjQxNUg1NTZaTTU1NyAzODguNDE1SDU2Ni44MjdWMzg2LjQxNUg1NTdWMzg4LjQxNVpNNTU4IDM5Ni4zNDhWMzg3LjQxNUg1NTZWMzk2LjM0OEg1NThaTTU2Ni44MjcgMzk1LjM0OEg1NTdWMzk3LjM0OEg1NjYuODI3VjM5NS4zNDhaTTU2NS44MjcgMzg3LjQxNVYzOTYuMzQ4SDU2Ny44MjdWMzg3LjQxNUg1NjUuODI3Wk01NjYuODI3IDQwNS40MTVINTU3VjQwNy40MTVINTY2LjgyN1Y0MDUuNDE1Wk01NjcuODI3IDQxNS4zNDhWNDA2LjQxNUg1NjUuODI3VjQxNS4zNDhINTY3LjgyN1pNNTU3IDQxNi4zNDhINTY2LjgyN1Y0MTQuMzQ4SDU1N1Y0MTYuMzQ4Wk01NTYgNDA2LjQxNVY0MTUuMzQ4SDU1OFY0MDYuNDE1SDU1NlpNNTU3IDQyNi40MTVINTY2LjgyN1Y0MjQuNDE1SDU1N1Y0MjYuNDE1Wk01NTggNDM0LjM0OFY0MjUuNDE1SDU1NlY0MzQuMzQ4SDU1OFpNNTY2LjgyNyA0MzMuMzQ4SDU1N1Y0MzUuMzQ4SDU2Ni44MjdWNDMzLjM0OFpNNTY1LjgyNyA0MjUuNDE1VjQzNC4zNDhINTY3LjgyN1Y0MjUuNDE1SDU2NS44MjdaTTU2Ni44MjcgNDQzLjQxNUg1NTdWNDQ1LjQxNUg1NjYuODI3VjQ0My40MTVaTTU2Ny44MjcgNDUzLjM0OFY0NDQuNDE1SDU2NS44MjdWNDUzLjM0OEg1NjcuODI3Wk01NTcgNDU0LjM0OEg1NjYuODI3VjQ1Mi4zNDhINTU3VjQ1NC4zNDhaTTU1NiA0NDQuNDE1VjQ1My4zNDhINTU4VjQ0NC40MTVINTU2Wk01NTcgNDY0LjQxNUg1NjYuODI3VjQ2Mi40MTVINTU3VjQ2NC40MTVaTTU1OCA0NzIuMzQ4VjQ2My40MTVINTU2VjQ3Mi4zNDhINTU4Wk01NjYuODI3IDQ3MS4zNDhINTU3VjQ3My4zNDhINTY2LjgyN1Y0NzEuMzQ4Wk01NjUuODI3IDQ2My40MTVWNDcyLjM0OEg1NjcuODI3VjQ2My40MTVINTY1LjgyN1pNNTU3IDI3Mi43NjFINTY2LjgyN1YyNzAuNzYxSDU1N1YyNzIuNzYxWk01NTggMjgxLjU4N1YyNzEuNzYxSDU1NlYyODEuNTg3SDU1OFpNNTY2LjgyNyAyODAuNTg3SDU1N1YyODIuNTg3SDU2Ni44MjdWMjgwLjU4N1pNNTY1LjgyNyAyNzEuNzYxVjI4MS41ODdINTY3LjgyN1YyNzEuNzYxSDU2NS44MjdaTTU2Ni44MjcgMjkwLjU4OEg1NTdWMjkyLjU4OEg1NjYuODI3VjI5MC41ODhaTTU2Ny44MjcgMzAxLjQxNVYyOTEuNTg4SDU2NS44MjdWMzAxLjQxNUg1NjcuODI3Wk01NTcgMzAyLjQxNUg1NjYuODI3VjMwMC40MTVINTU3VjMwMi40MTVaTTU1NiAyOTEuNTg4VjMwMS40MTVINTU4VjI5MS41ODhINTU2Wk01NzYuODI3IDI1Mi45MzRINTg2LjY1M1YyNTAuOTM0SDU3Ni44MjdWMjUyLjkzNFpNNTc3LjgyNyAyNjEuNzZWMjUxLjkzNEg1NzUuODI3VjI2MS43Nkg1NzcuODI3Wk01ODYuNjUzIDI2MC43Nkg1NzYuODI3VjI2Mi43Nkg1ODYuNjUzVjI2MC43NlpNNTg1LjY1MyAyNTEuOTM0VjI2MS43Nkg1ODcuNjUzVjI1MS45MzRINTg1LjY1M1pNNTg2LjY1MyAzMTAuNDE1SDU3Ni44MjdWMzEyLjQxNUg1ODYuNjUzVjMxMC40MTVaTTU4Ny42NTMgMzIwLjM0OFYzMTEuNDE1SDU4NS42NTNWMzIwLjM0OEg1ODcuNjUzWk01NzYuODI3IDMyMS4zNDhINTg2LjY1M1YzMTkuMzQ4SDU3Ni44MjdWMzIxLjM0OFpNNTc1LjgyNyAzMTEuNDE1VjMyMC4zNDhINTc3LjgyN1YzMTEuNDE1SDU3NS44MjdaTTU3Ni44MjcgMzMxLjQxNUg1ODYuNjUzVjMyOS40MTVINTc2LjgyN1YzMzEuNDE1Wk01NzcuODI3IDMzOS4zNDhWMzMwLjQxNUg1NzUuODI3VjMzOS4zNDhINTc3LjgyN1pNNTg2LjY1MyAzMzguMzQ4SDU3Ni44MjdWMzQwLjM0OEg1ODYuNjUzVjMzOC4zNDhaTTU4NS42NTMgMzMwLjQxNVYzMzkuMzQ4SDU4Ny42NTNWMzMwLjQxNUg1ODUuNjUzWk01ODYuNjUzIDM0OC40MTVINTc2LjgyN1YzNTAuNDE1SDU4Ni42NTNWMzQ4LjQxNVpNNTg3LjY1MyAzNTguMzQ4VjM0OS40MTVINTg1LjY1M1YzNTguMzQ4SDU4Ny42NTNaTTU3Ni44MjcgMzU5LjM0OEg1ODYuNjUzVjM1Ny4zNDhINTc2LjgyN1YzNTkuMzQ4Wk01NzUuODI3IDM0OS40MTVWMzU4LjM0OEg1NzcuODI3VjM0OS40MTVINTc1LjgyN1pNNTc2LjgyNyAzNjkuNDE1SDU4Ni42NTNWMzY3LjQxNUg1NzYuODI3VjM2OS40MTVaTTU3Ny44MjcgMzc3LjM0OFYzNjguNDE1SDU3NS44MjdWMzc3LjM0OEg1NzcuODI3Wk01ODYuNjUzIDM3Ni4zNDhINTc2LjgyN1YzNzguMzQ4SDU4Ni42NTNWMzc2LjM0OFpNNTg1LjY1MyAzNjguNDE1VjM3Ny4zNDhINTg3LjY1M1YzNjguNDE1SDU4NS42NTNaTTU4Ni42NTMgMzg2LjQxNUg1NzYuODI3VjM4OC40MTVINTg2LjY1M1YzODYuNDE1Wk01ODcuNjUzIDM5Ni4zNDhWMzg3LjQxNUg1ODUuNjUzVjM5Ni4zNDhINTg3LjY1M1pNNTc2LjgyNyAzOTcuMzQ4SDU4Ni42NTNWMzk1LjM0OEg1NzYuODI3VjM5Ny4zNDhaTTU3NS44MjcgMzg3LjQxNVYzOTYuMzQ4SDU3Ny44MjdWMzg3LjQxNUg1NzUuODI3Wk01NzYuODI3IDQwNy40MTVINTg2LjY1M1Y0MDUuNDE1SDU3Ni44MjdWNDA3LjQxNVpNNTc3LjgyNyA0MTUuMzQ4VjQwNi40MTVINTc1LjgyN1Y0MTUuMzQ4SDU3Ny44MjdaTTU4Ni42NTMgNDE0LjM0OEg1NzYuODI3VjQxNi4zNDhINTg2LjY1M1Y0MTQuMzQ4Wk01ODUuNjUzIDQwNi40MTVWNDE1LjM0OEg1ODcuNjUzVjQwNi40MTVINTg1LjY1M1pNNTg2LjY1MyA0MjQuNDE1SDU3Ni44MjdWNDI2LjQxNUg1ODYuNjUzVjQyNC40MTVaTTU4Ny42NTMgNDM0LjM0OFY0MjUuNDE1SDU4NS42NTNWNDM0LjM0OEg1ODcuNjUzWk01NzYuODI3IDQzNS4zNDhINTg2LjY1M1Y0MzMuMzQ4SDU3Ni44MjdWNDM1LjM0OFpNNTc1LjgyNyA0MjUuNDE1VjQzNC4zNDhINTc3LjgyN1Y0MjUuNDE1SDU3NS44MjdaTTU3Ni44MjcgNDQ1LjQxNUg1ODYuNjUzVjQ0My40MTVINTc2LjgyN1Y0NDUuNDE1Wk01NzcuODI3IDQ1My4zNDhWNDQ0LjQxNUg1NzUuODI3VjQ1My4zNDhINTc3LjgyN1pNNTg2LjY1MyA0NTIuMzQ4SDU3Ni44MjdWNDU0LjM0OEg1ODYuNjUzVjQ1Mi4zNDhaTTU4NS42NTMgNDQ0LjQxNVY0NTMuMzQ4SDU4Ny42NTNWNDQ0LjQxNUg1ODUuNjUzWk01ODYuNjUzIDQ2Mi40MTVINTc2LjgyN1Y0NjQuNDE1SDU4Ni42NTNWNDYyLjQxNVpNNTg3LjY1MyA0NzIuMzQ4VjQ2My40MTVINTg1LjY1M1Y0NzIuMzQ4SDU4Ny42NTNaTTU3Ni44MjcgNDczLjM0OEg1ODYuNjUzVjQ3MS4zNDhINTc2LjgyN1Y0NzMuMzQ4Wk01NzUuODI3IDQ2My40MTVWNDcyLjM0OEg1NzcuODI3VjQ2My40MTVINTc1LjgyN1pNNTg2LjY1MyAyNzAuNzYxSDU3Ni44MjdWMjcyLjc2MUg1ODYuNjUzVjI3MC43NjFaTTU4Ny42NTMgMjgxLjU4N1YyNzEuNzYxSDU4NS42NTNWMjgxLjU4N0g1ODcuNjUzWk01NzYuODI3IDI4Mi41ODdINTg2LjY1M1YyODAuNTg3SDU3Ni44MjdWMjgyLjU4N1pNNTc1LjgyNyAyNzEuNzYxVjI4MS41ODdINTc3LjgyN1YyNzEuNzYxSDU3NS44MjdaTTU3Ni44MjcgMjkyLjU4OEg1ODYuNjUzVjI5MC41ODhINTc2LjgyN1YyOTIuNTg4Wk01NzcuODI3IDMwMS40MTVWMjkxLjU4OEg1NzUuODI3VjMwMS40MTVINTc3LjgyN1pNNTg2LjY1MyAzMDAuNDE1SDU3Ni44MjdWMzAyLjQxNUg1ODYuNjUzVjMwMC40MTVaTTU4NS42NTMgMjkxLjU4OFYzMDEuNDE1SDU4Ny42NTNWMjkxLjU4OEg1ODUuNjUzWiIgZmlsbD0iYmxhY2siIG1hc2s9InVybCgjcGF0aC0xOC1pbnNpZGUtNykiLz4KPG1hc2sgaWQ9InBhdGgtMjAtaW5zaWRlLTgiIGZpbGw9IndoaXRlIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMDQgMzgzVjM3MUg0MFYzNjRIMTA0VjM1MkgxMDMuNUgyOVY1MTNIMTA0VjQ2Nkg0MFY0NTlIMTA0VjQ0N0g0MFY0NDBIMTA0VjQyOEg0MFY0MjFIMTA0VjQwOUg0MFY0MDJIMTA0VjM5MEg0MFYzODNIMTA0WiIvPgo8L21hc2s+CjxwYXRoIGQ9Ik0xMDQgMzcxSDEwNVYzNzBIMTA0VjM3MVpNMTA0IDM4M1YzODRIMTA1VjM4M0gxMDRaTTQwIDM3MUgzOVYzNzJINDBWMzcxWk00MCAzNjRWMzYzSDM5VjM2NEg0MFpNMTA0IDM2NFYzNjVIMTA1VjM2NEgxMDRaTTEwNCAzNTJIMTA1VjM1MUgxMDRWMzUyWk0yOSAzNTJWMzUxSDI4VjM1MkgyOVpNMjkgNTEzSDI4VjUxNEgyOVY1MTNaTTEwNCA1MTNWNTE0SDEwNVY1MTNIMTA0Wk0xMDQgNDY2SDEwNVY0NjVIMTA0VjQ2NlpNNDAgNDY2SDM5VjQ2N0g0MFY0NjZaTTQwIDQ1OVY0NThIMzlWNDU5SDQwWk0xMDQgNDU5VjQ2MEgxMDVWNDU5SDEwNFpNMTA0IDQ0N0gxMDVWNDQ2SDEwNFY0NDdaTTQwIDQ0N0gzOVY0NDhINDBWNDQ3Wk00MCA0NDBWNDM5SDM5VjQ0MEg0MFpNMTA0IDQ0MFY0NDFIMTA1VjQ0MEgxMDRaTTEwNCA0MjhIMTA1VjQyN0gxMDRWNDI4Wk00MCA0MjhIMzlWNDI5SDQwVjQyOFpNNDAgNDIxVjQyMEgzOVY0MjFINDBaTTEwNCA0MjFWNDIySDEwNVY0MjFIMTA0Wk0xMDQgNDA5SDEwNVY0MDhIMTA0VjQwOVpNNDAgNDA5SDM5VjQxMEg0MFY0MDlaTTQwIDQwMlY0MDFIMzlWNDAySDQwWk0xMDQgNDAyVjQwM0gxMDVWNDAySDEwNFpNMTA0IDM5MEgxMDVWMzg5SDEwNFYzOTBaTTQwIDM5MEgzOVYzOTFINDBWMzkwWk00MCAzODNWMzgySDM5VjM4M0g0MFpNMTAzIDM3MVYzODNIMTA1VjM3MUgxMDNaTTQwIDM3MkgxMDRWMzcwSDQwVjM3MlpNMzkgMzY0VjM3MUg0MVYzNjRIMzlaTTEwNCAzNjNINDBWMzY1SDEwNFYzNjNaTTEwMyAzNTJWMzY0SDEwNVYzNTJIMTAzWk0xMDMuNSAzNTNIMTA0VjM1MUgxMDMuNVYzNTNaTTI5IDM1M0gxMDMuNVYzNTFIMjlWMzUzWk0zMCA1MTNWMzUySDI4VjUxM0gzMFpNMTA0IDUxMkgyOVY1MTRIMTA0VjUxMlpNMTAzIDQ2NlY1MTNIMTA1VjQ2NkgxMDNaTTEwNCA0NjVINDBWNDY3SDEwNFY0NjVaTTQxIDQ2NlY0NTlIMzlWNDY2SDQxWk00MCA0NjBIMTA0VjQ1OEg0MFY0NjBaTTEwMyA0NDdWNDU5SDEwNVY0NDdIMTAzWk00MCA0NDhIMTA0VjQ0Nkg0MFY0NDhaTTM5IDQ0MFY0NDdINDFWNDQwSDM5Wk0xMDQgNDM5SDQwVjQ0MUgxMDRWNDM5Wk0xMDMgNDI4VjQ0MEgxMDVWNDI4SDEwM1pNNDAgNDI5SDEwNFY0MjdINDBWNDI5Wk0zOSA0MjFWNDI4SDQxVjQyMUgzOVpNMTA0IDQyMEg0MFY0MjJIMTA0VjQyMFpNMTAzIDQwOVY0MjFIMTA1VjQwOUgxMDNaTTQwIDQxMEgxMDRWNDA4SDQwVjQxMFpNMzkgNDAyVjQwOUg0MVY0MDJIMzlaTTEwNCA0MDFINDBWNDAzSDEwNFY0MDFaTTEwMyAzOTBWNDAySDEwNVYzOTBIMTAzWk00MCAzOTFIMTA0VjM4OUg0MFYzOTFaTTM5IDM4M1YzOTBINDFWMzgzSDM5Wk0xMDQgMzgySDQwVjM4NEgxMDRWMzgyWiIgZmlsbD0iYmxhY2siIG1hc2s9InVybCgjcGF0aC0yMC1pbnNpZGUtOCkiLz4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAzKSI+CjxtYXNrIGlkPSJwYXRoLTIyLWluc2lkZS05IiBmaWxsPSJ3aGl0ZSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTgxIDI0M0gxMzZWMzQwSDE4MVYyNDNaTTE3MSAyNTQuMDIzTDE3MSAzMzguODk4SDE2NUwxNjUgMjU0LjAyM0gxNzFaTTE1MiAzMzguODk4TDE1MiAyNTQuMDIzSDE0NkwxNDYgMzM4Ljg5OEgxNTJaIi8+CjwvbWFzaz4KPHBhdGggZD0iTTEzNiAyNDNWMjQySDEzNVYyNDNIMTM2Wk0xODEgMjQzSDE4MlYyNDJIMTgxVjI0M1pNMTM2IDM0MEgxMzVWMzQxSDEzNlYzNDBaTTE4MSAzNDBWMzQxSDE4MlYzNDBIMTgxWk0xNzEgMzM4Ljg5OFYzMzkuODk4SDE3MlYzMzguODk4SDE3MVpNMTcxIDI1NC4wMjNIMTcyVjI1My4wMjNIMTcxVjI1NC4wMjNaTTE2NSAzMzguODk4SDE2NFYzMzkuODk4SDE2NVYzMzguODk4Wk0xNjUgMjU0LjAyM1YyNTMuMDIzSDE2NFYyNTQuMDIzSDE2NVpNMTUyIDI1NC4wMjNIMTUzVjI1My4wMjNIMTUyVjI1NC4wMjNaTTE1MiAzMzguODk4VjMzOS44OThIMTUzVjMzOC44OThIMTUyWk0xNDYgMjU0LjAyM1YyNTMuMDIzSDE0NVYyNTQuMDIzSDE0NlpNMTQ2IDMzOC44OThIMTQ1VjMzOS44OThIMTQ2VjMzOC44OThaTTEzNiAyNDRIMTgxVjI0MkgxMzZWMjQ0Wk0xMzcgMzQwVjI0M0gxMzVWMzQwSDEzN1pNMTgxIDMzOUgxMzZWMzQxSDE4MVYzMzlaTTE4MCAyNDNWMzQwSDE4MlYyNDNIMTgwWk0xNzIgMzM4Ljg5OEwxNzIgMjU0LjAyM0gxNzBMMTcwIDMzOC44OThIMTcyWk0xNjUgMzM5Ljg5OEgxNzFWMzM3Ljg5OEgxNjVWMzM5Ljg5OFpNMTY0IDI1NC4wMjNMMTY0IDMzOC44OThIMTY2TDE2NiAyNTQuMDIzSDE2NFpNMTcxIDI1My4wMjNIMTY1VjI1NS4wMjNIMTcxVjI1My4wMjNaTTE1MSAyNTQuMDIzTDE1MSAzMzguODk4SDE1M0wxNTMgMjU0LjAyM0gxNTFaTTE0NiAyNTUuMDIzSDE1MlYyNTMuMDIzSDE0NlYyNTUuMDIzWk0xNDcgMzM4Ljg5OEwxNDcgMjU0LjAyM0gxNDVMMTQ1IDMzOC44OThIMTQ3Wk0xNTIgMzM3Ljg5OEgxNDZWMzM5Ljg5OEgxNTJWMzM3Ljg5OFoiIGZpbGw9ImJsYWNrIiBtYXNrPSJ1cmwoI3BhdGgtMjItaW5zaWRlLTkpIi8+CjwvZz4KPC9nPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE2OS4xOTcgMzg5LjI3OUgxMTAuODAzTDEwOS41MjUgMzkyLjY5OFY0ODVMMTI3Ljg1MyA0ODVWNDYyLjk2MkMxMjcuODUzIDQ1Ni4yNTMgMTMzLjI5MSA0NTAuODE0IDE0MCA0NTAuODE0QzE0Ni43MDkgNDUwLjgxNCAxNTIuMTQ4IDQ1Ni4yNTMgMTUyLjE0OCA0NjIuOTYyVjQ4NUwxNzAuNDc1IDQ4NVYzOTIuNjk4TDE2OS4xOTcgMzg5LjI3OVpNMTMyLjkwMiAzOTYuOTcxQzEzNS4xMzggMzk2Ljk3MSAxMzYuOTUxIDM5OC43ODQgMTM2Ljk1MSA0MDEuMDJWNDE3LjkxSDEyOC44NTNWNDAxLjAyQzEyOC44NTMgMzk4Ljc4NCAxMzAuNjY1IDM5Ni45NzEgMTMyLjkwMiAzOTYuOTcxWk0xMTggMzk5QzExOS42NTcgMzk5IDEyMSA0MDAuMzQzIDEyMSA0MDJWNDE4SDExNVY0MDJDMTE1IDQwMC4zNDMgMTE2LjM0MyAzOTkgMTE4IDM5OVpNMTUxLjE0OCA0MDEuMDJDMTUxLjE0OCAzOTguNzg0IDE0OS4zMzUgMzk2Ljk3MSAxNDcuMDk5IDM5Ni45NzFDMTQ0Ljg2MiAzOTYuOTcxIDE0My4wNDkgMzk4Ljc4NCAxNDMuMDQ5IDQwMS4wMlY0MTcuOTFIMTUxLjE0OFY0MDEuMDJaTTE2MiAzOTlDMTYzLjY1NyAzOTkgMTY1IDQwMC4zNDMgMTY1IDQwMlY0MThIMTU5VjQwMkMxNTkgNDAwLjM0MyAxNjAuMzQzIDM5OSAxNjIgMzk5WiIgZmlsbD0iI0U2RDVFQyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE2My44NjkgMzkwLjU2MUMxNjYuNTMzIDM5MC41NjEgMTY4LjkwNCAzOTEuNjI0IDE3MC40MjUgMzkzLjI3N0MxNjkuNTEgMzc3LjIyNyAxNTYuMjM4IDM2NC40OTQgMTQwIDM2NC40OTRDMTIzLjc2MSAzNjQuNDk0IDExMC40ODkgMzc3LjIyNyAxMDkuNTc1IDM5My4yNzhDMTExLjA5NiAzOTEuNjI0IDExMy40NjcgMzkwLjU2MSAxMTYuMTMxIDM5MC41NjFDMTE5LjgwMSAzOTAuNTYxIDEyMi45MTUgMzkyLjU3OCAxMjQuMDE2IDM5NS4zNzdDMTI1LjExOCAzOTIuNTc4IDEyOC4yMzIgMzkwLjU2MSAxMzEuOTAyIDM5MC41NjFDMTM1LjcwNiAzOTAuNTYxIDEzOC45MTQgMzkyLjcyOSAxMzkuOSAzOTUuNjg5SDE0MC4xQzE0MS4wODYgMzkyLjcyOSAxNDQuMjk0IDM5MC41NjEgMTQ4LjA5OCAzOTAuNTYxQzE1MS43NjggMzkwLjU2MSAxNTQuODgyIDM5Mi41NzggMTU1Ljk4NCAzOTUuMzc3QzE1Ny4wODUgMzkyLjU3OCAxNjAuMTk5IDM5MC41NjEgMTYzLjg2OSAzOTAuNTYxWiIgZmlsbD0iI0U2RDVFQyIvPgo8ZWxsaXBzZSBjeD0iMTM5Ljc4NyIgY3k9IjM2NC40OTQiIHJ4PSIyLjk4MzYxIiByeT0iMi45OTEyOCIgZmlsbD0iI0U2RDVFQyIvPgo8cmVjdCB4PSIxNjQuMDgyIiB5PSI0NTYuNzk3IiB3aWR0aD0iMS43MDQ5MyIgaGVpZ2h0PSIyNy43NzYxIiBmaWxsPSIjRTZENUVDIi8+CjxyZWN0IHg9IjExNC42MzkiIHk9IjQ1Ni43OTciIHdpZHRoPSIxLjcwNDkyIiBoZWlnaHQ9IjI3Ljc3NjEiIGZpbGw9IiNFNkQ1RUMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMDkuMDk4IDQwNy42NTRINzYuNzA1TDc1Ljg1MjUgNDEwLjg1OVY0ODVIMTA5Ljk1MVY0MTAuODU5TDEwOS4wOTggNDA3LjY1NFpNOTIuOTAxNyA0MTQuOTE5Qzk0LjU0OTUgNDE0LjkxOSA5NS44ODUzIDQxNi4yNTUgOTUuODg1MyA0MTcuOTAyVjQyOS44NzVIODkuOTE4MVY0MTcuOTAyQzg5LjkxODEgNDE2LjI1NSA5MS4yNTM5IDQxNC45MTkgOTIuOTAxNyA0MTQuOTE5Wk04My4wOTg0IDQxNy4yNjNDODMuMDk4NCA0MTUuOTY4IDgyLjA0ODkgNDE0LjkxOSA4MC43NTQyIDQxNC45MTlDNzkuNDU5NSA0MTQuOTE5IDc4LjQwOTkgNDE1Ljk2OCA3OC40MDk5IDQxNy4yNjNWNDI5Ljg3NUg4My4wOTg0VjQxNy4yNjNaTTEwNS4wNDkgNDE0LjkxOUMxMDYuMzQ0IDQxNC45MTkgMTA3LjM5MyA0MTUuOTY4IDEwNy4zOTMgNDE3LjI2M1Y0MjkuODc1SDEwMi43MDVWNDE3LjI2M0MxMDIuNzA1IDQxNS45NjggMTAzLjc1NSA0MTQuOTE5IDEwNS4wNDkgNDE0LjkxOVoiIGZpbGw9IiNFNkQ1RUMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05OC42MjcyIDQxMy4wNjZDOTcuODgzMSA0MTAuOTI4IDk1LjUwNiA0MDkuMzYzIDkyLjY4ODYgNDA5LjM2M0M4OS44NzExIDQwOS4zNjMgODcuNDk0IDQxMC45MjggODYuNzQ5OSA0MTMuMDY2SDg2LjY4NDVDODUuOTE0NyA0MTAuOTI4IDgzLjQ1NTcgNDA5LjM2MyA4MC41NDExIDQwOS4zNjNDNzguNzE4MSA0MDkuMzYzIDc3LjA3MzQgNDA5Ljk3NSA3NS45MDg3IDQxMC45NTdDNzYuNjE4IDQwMi4xNzEgODMuOTU1MSAzOTUuMjYyIDkyLjkwMTcgMzk1LjI2MkMxMDEuODY2IDM5NS4yNjIgMTA5LjIxNCA0MDIuMTk4IDEwOS44OTkgNDExLjAwOUMxMDguNjkyIDQwOS45OTcgMTA2Ljk2NiA0MDkuMzYzIDEwNS4wNDkgNDA5LjM2M0MxMDIuMDM3IDQwOS4zNjMgOTkuNDk2NCA0MTAuOTI4IDk4LjcwMSA0MTMuMDY2SDk4LjYyNzJaIiBmaWxsPSIjRTZENUVDIi8+CjxlbGxpcHNlIGN4PSI5Mi43NzY1IiBjeT0iMzk0LjY1OCIgcng9IjEuNzUyNjEiIHJ5PSIxLjc2NTIiIGZpbGw9IiNFNkQ1RUMiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMDMuMjk1IDQwNy42NTRIMTcwLjkwMkwxNzAuMDQ5IDQxMC44NTlWNDg1SDIwNC4xNDhWNDEwLjg1OUwyMDMuMjk1IDQwNy42NTRaTTE4Ny4wOTggNDE0LjkxOUMxODguNzQ2IDQxNC45MTkgMTkwLjA4MiA0MTYuMjU1IDE5MC4wODIgNDE3LjkwMlY0MjkuODc1SDE4NC4xMTVWNDE3LjkwMkMxODQuMTE1IDQxNi4yNTUgMTg1LjQ1MSA0MTQuOTE5IDE4Ny4wOTggNDE0LjkxOVpNMTc3LjI5NSA0MTcuMjYzQzE3Ny4yOTUgNDE1Ljk2OCAxNzYuMjQ2IDQxNC45MTkgMTc0Ljk1MSA0MTQuOTE5QzE3My42NTYgNDE0LjkxOSAxNzIuNjA3IDQxNS45NjggMTcyLjYwNyA0MTcuMjYzVjQyOS44NzVIMTc3LjI5NVY0MTcuMjYzWk0xOTkuMjQ2IDQxNC45MTlDMjAwLjU0MSA0MTQuOTE5IDIwMS41OSA0MTUuOTY4IDIwMS41OSA0MTcuMjYzVjQyOS44NzVIMTk2LjkwMlY0MTcuMjYzQzE5Ni45MDIgNDE1Ljk2OCAxOTcuOTUxIDQxNC45MTkgMTk5LjI0NiA0MTQuOTE5WiIgZmlsbD0iI0U2RDVFQyIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE5Mi44MjQgNDEzLjA2NkMxOTIuMDggNDEwLjkyOCAxODkuNzAzIDQwOS4zNjMgMTg2Ljg4NSA0MDkuMzYzQzE4NC4wNjggNDA5LjM2MyAxODEuNjkxIDQxMC45MjggMTgwLjk0NyA0MTMuMDY2SDE4MC44ODFDMTgwLjExMiA0MTAuOTI4IDE3Ny42NTIgNDA5LjM2MyAxNzQuNzM4IDQwOS4zNjNDMTcyLjkxNSA0MDkuMzYzIDE3MS4yNyA0MDkuOTc1IDE3MC4xMDUgNDEwLjk1N0MxNzAuODE1IDQwMi4xNzEgMTc4LjE1MiAzOTUuMjYyIDE4Ny4wOTggMzk1LjI2MkMxOTYuMDYzIDM5NS4yNjIgMjAzLjQxMSA0MDIuMTk4IDIwNC4wOTYgNDExLjAwOUMyMDIuODg5IDQwOS45OTcgMjAxLjE2MyA0MDkuMzYzIDE5OS4yNDYgNDA5LjM2M0MxOTYuMjM0IDQwOS4zNjMgMTkzLjY5MyA0MTAuOTI4IDE5Mi44OTggNDEzLjA2NkgxOTIuODI0WiIgZmlsbD0iI0U2RDVFQyIvPgo8ZWxsaXBzZSBjeD0iMTg2Ljk3MyIgY3k9IjM5NC42NTgiIHJ4PSIxLjc1MjYxIiByeT0iMS43NjUyIiBmaWxsPSIjRTZENUVDIi8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwNCkiPgo8cGF0aCBkPSJNNjg5LjU1MyA1MzdDNjk1LjQxNyA1MjguMTY3IDY5OSA1MTcuNjY3IDY5OSA1MDYuMTY3QzY5OSA0NzYuMzMzIDY3NS4yMTkgNDUyIDY0Ni4wNjIgNDUyQzYyNi4zNTMgNDUyIDYwOS4yNSA0NjMgNjAwLjEyOCA0NzkuMzMzQzU5MS4zMzIgNDY4LjgzMyA1NzguMzAxIDQ2MiA1NjMuODA0IDQ2MkM1NTQuNTIgNDYyIDU0NS44ODcgNDY0LjgzMyA1MzguNTU3IDQ2OS41QzUzMS4yMjcgNDY0LjgzMyA1MjIuNTk0IDQ2MiA1MTMuMzA5IDQ2MkM0OTkuOTUzIDQ2MiA0ODguMDYyIDQ2Ny42NjcgNDc5LjQyOSA0NzYuNjY3QzQ3Mi45MTMgNDcyLjY2NyA0NjUuMjU4IDQ3MC4zMzMgNDU3LjExMyA0NzAuMzMzQzQzNS40NDkgNDcwLjMzMyA0MTcuNTMyIDQ4Ni42NjcgNDE0LjQzNyA1MDcuODMzQzQwOC4wODUgNTAzLjE2NyA0MDAuNDI5IDUwMC4zMzMgMzkxLjk1OSA1MDAuMzMzQzM4MS44NiA1MDAuMzMzIDM3Mi43MzggNTA0LjMzMyAzNjUuODk3IDUxMC44MzNDMzYwLjg0NyA0OTcuODMzIDM0OC42MzEgNDg4LjY2NyAzMzQuMTM0IDQ4OC42NjdDMzI3LjQ1NiA0ODguNjY3IDMyMS4xMDMgNDkwLjY2NyAzMTUuODkxIDQ5NC4xNjdDMzA5LjA0OSA0ODYuNjY3IDI5OS4yNzYgNDgyIDI4OC41MjYgNDgyQzI3My4wNTIgNDgyIDI1OS42OTUgNDkxLjY2NyAyNTMuOTk0IDUwNS41QzI1My4wMTYgNTA1LjMzMyAyNTIuMDM5IDUwNS4zMzMgMjUxLjA2MiA1MDUuMzMzQzIzNi43MjggNTA1LjMzMyAyMjUgNTE3LjMzMyAyMjUgNTMyQzIyNSA1MzMuNjY3IDIyNS4xNjMgNTM1LjMzMyAyMjUuNDg5IDUzN0g2ODkuNTUzWiIgZmlsbD0iI0U2RDVFQyIvPgo8L2c+CjxwYXRoIGQ9Ik0xMS40NDc0IDUzN0M1LjU4MzUgNTI4LjE2NyAyIDUxNy42NjcgMiA1MDYuMTY3QzIgNDc2LjMzMyAyNS43ODE1IDQ1MiA1NC45MzgxIDQ1MkM3NC42NDc0IDQ1MiA5MS43NTA1IDQ2MyAxMDAuODcyIDQ3OS4zMzNDMTA5LjY2OCA0NjguODMzIDEyMi42OTkgNDYyIDEzNy4xOTYgNDYyQzE0Ni40OCA0NjIgMTU1LjExMyA0NjQuODMzIDE2Mi40NDMgNDY5LjVDMTY5Ljc3MyA0NjQuODMzIDE3OC40MDYgNDYyIDE4Ny42OTEgNDYyQzIwMS4wNDcgNDYyIDIxMi45MzggNDY3LjY2NyAyMjEuNTcxIDQ3Ni42NjdDMjI4LjA4NyA0NzIuNjY3IDIzNS43NDIgNDcwLjMzMyAyNDMuODg3IDQ3MC4zMzNDMjY1LjU1MSA0NzAuMzMzIDI4My40NjggNDg2LjY2NyAyODYuNTYzIDUwNy44MzNDMjkyLjkxNSA1MDMuMTY3IDMwMC41NzEgNTAwLjMzMyAzMDkuMDQxIDUwMC4zMzNDMzE5LjE0IDUwMC4zMzMgMzI4LjI2MiA1MDQuMzMzIDMzNS4xMDMgNTEwLjgzM0MzNDAuMTUzIDQ5Ny44MzMgMzUyLjM2OSA0ODguNjY3IDM2Ni44NjYgNDg4LjY2N0MzNzMuNTQ0IDQ4OC42NjcgMzc5Ljg5NyA0OTAuNjY3IDM4NS4xMDkgNDk0LjE2N0MzOTEuOTUxIDQ4Ni42NjcgNDAxLjcyNCA0ODIgNDEyLjQ3NCA0ODJDNDI3Ljk0OCA0ODIgNDQxLjMwNSA0OTEuNjY3IDQ0Ny4wMDYgNTA1LjVDNDQ3Ljk4NCA1MDUuMzMzIDQ0OC45NjEgNTA1LjMzMyA0NDkuOTM4IDUwNS4zMzNDNDY0LjI3MiA1MDUuMzMzIDQ3NiA1MTcuMzMzIDQ3NiA1MzJDNDc2IDUzMy42NjcgNDc1LjgzNyA1MzUuMzMzIDQ3NS41MTEgNTM3SDExLjQ0NzRaIiBmaWxsPSIjRTZENUVDIi8+CjxwYXRoIGQ9Ik0zNDcuNTc3IDIyNy4xNjZDMzQ3LjU3NyAyMjcuMTY2IDMzNC4zMTEgMjE2LjMzMyAzNDkuMjAyIDIwMS40MzhDMzUwLjU1NiAxOTguNzI5IDM1MS45MDkgMTk1Ljc1IDM1OC42NzggMTk2LjU2M0MzNjEuMzg1IDE5NC4xMjUgMzczLjU2OSAxOTQuNjY3IDM3NC45MjIgMTk2LjAyMUMzNzYuMjc2IDE5Ny4zNzUgMzczLjU2OSAyMDEuOTc5IDM3NC45MjIgMjAzLjA2M0MzNzYuMjc2IDIwNC4xNDYgMzg1Ljc1MiAyMDIuNzkyIDM4NS43NTIgMjAyLjc5MkMzODUuNzUyIDIwMi43OTIgMzg3LjEwNiAyMDQuODIzIDM4NS43NTIgMjA2LjU4M0MzODcuMTA2IDIwNy4yNiAzODkuODEzIDIwOC4yMDggMzg5LjgxMyAyMDkuNTYyQzM4OS44MTMgMjEwLjkxNiAzODUuNzUyIDIxMC4yMzkgMzg2LjQyOSAyMTEuMTg3QzM4Ny4xMDYgMjEyLjI3MSAzODkuODEzIDIxMi4yNzEgMzg4LjQ2IDIxNC45NzlDMzg3LjEwNiAyMTcuNjg3IDM4MS42OTEgMjE5LjA0MSAzNzguOTg0IDIxOS4wNDFDMzc4Ljk4NCAyMjMuMTA0IDM3Ny42MyAyMjUuODEyIDM2OS41MDggMjI3LjE2NiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTM0Ny41NzcgMjI3LjE2NkMzNDcuNTc3IDIyNy4xNjYgMzM0LjMxMSAyMTYuMzMzIDM0OS4yMDIgMjAxLjQzOEMzNTAuNTU2IDE5OC43MjkgMzUxLjkwOSAxOTUuNzUgMzU4LjY3OCAxOTYuNTYzQzM2MS4zODUgMTk0LjEyNSAzNzMuNTY5IDE5NC42NjcgMzc0LjkyMiAxOTYuMDIxQzM3Ni4yNzYgMTk3LjM3NSAzNzMuNTY5IDIwMS45NzkgMzc0LjkyMiAyMDMuMDYzQzM3Ni4yNzYgMjA0LjE0NiAzODUuNzUyIDIwMi43OTIgMzg1Ljc1MiAyMDIuNzkyQzM4NS43NTIgMjAyLjc5MiAzODcuMTA2IDIwNC44MjMgMzg1Ljc1MiAyMDYuNTgzQzM4Ny4xMDYgMjA3LjI2IDM4OS44MTMgMjA4LjIwOCAzODkuODEzIDIwOS41NjJDMzg5LjgxMyAyMTAuOTE2IDM4NS43NTIgMjEwLjIzOSAzODYuNDI5IDIxMS4xODdDMzg3LjEwNiAyMTIuMjcxIDM4OS44MTMgMjEyLjI3MSAzODguNDYgMjE0Ljk3OUMzODcuMTA2IDIxNy42ODcgMzgxLjY5MSAyMTkuMDQxIDM3OC45ODQgMjE5LjA0MUMzNzguOTg0IDIyMy4xMDQgMzc3LjYzIDIyNS44MTIgMzY5LjUwOCAyMjcuMTY2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0zNDguMjU0IDIyOC43OTFWMjM5LjM1M0MzMzYuODgzIDIzNi43OCAzMzYuMzQxIDIyOS4wNjIgMzMxLjYwMyAyMTYuMzMzQzMyNC4xNTggMTk4LjQ1OSAzMTQuNTQ3IDE5MC4wNjMgMzE2LjcxMyAxODMuMTU3QzMxOC4wNjYgMTczLjAwMSAzMDEuODIyIDE3NC4zNTUgMzAwLjQ2OCAxNzkuNzcyQzI5Ny43NiAxODEuMTI2IDI5Ni40MDcgMTg3Ljg5NiAyOTkuMTE0IDE5My4zMTNMMzAzLjE3NSAxOTYuMDIxTDMwOC41OSAxOTguNzI5SDMxMi42NTFDMzEyLjY1MSAxOTguNzI5IDMxNC4wMDUgMjI3LjE2NiAzMjEuNTg2IDIzNC44ODVDMzI4LjA4NCAyNDEuNjU1IDMzOS43MjYgMjU5LjY2NSAzMzkuNzI2IDI1OS42NjVDMzQwLjk0NCAyNzEuNDQ2IDMxOC4yMDIgMjY4LjMzMSAzMzEuNjAzIDI4OC4xMDJDMzMxLjYwMyAyOTIuNTcgMzMxLjg3NCAzMzAuMzUgMzM3LjAxOCAzNDAuOTEzQzMzNS45MzUgMzU4LjM4MSAzNjguNTYgNDY4LjMzNiAzNzMuNTY5IDQ3My42MTdDMzczLjU2OSA0NzMuNjE3IDM3Ni4xNDEgNTAyLjA1MyAzNjQuMDkzIDUwMy40MDhIMzM3LjAxOFY1NDEuMzIzSDQ5MS4wNzFWNTAzLjQwOEg0NjAuMjA2VjQ5Ni42MzdDNDcwLjM1OSA0OTEuODk3IDQ2Ni4yOTggNDc5LjU3NSA0NjIuOTE0IDQ3My42MTdDNDYyLjkxNCA0NzMuNjE3IDQ3My43NDQgNDY4LjIgNDcyLjM5IDQ2Mi43ODRDNDY1Ljc1NyA0NDQuNTAzIDQyNy43MTcgMzg0LjI0NSA0MjIuMzAyIDM3Ni4xMkM0MTYuODg3IDM2Ny45OTUgNDA2LjA1OCAzNTMuMSA0MDYuMDU4IDM1My4xQzQwNi4wNTggMzUzLjEgMzk2LjU4MiAzMzYuODUgMzg5LjgxMyAzMzAuMDhDNDEwLjM5IDMxOS4yNDcgNDA3LjAwNSAzMDUuMDI4IDQwNy40MTEgMjg5LjQ1NkM0MDcuNDExIDI4OS40NTYgNDI3LjcxNyAzMDEuNjQzIDQ0OC4wMjMgMzAyLjk5N0M0NTcuMDkzIDMwMy41MzkgNDU4Ljg1MyAzMTEuMTIyIDQ2NS42MjEgMzA5Ljc2OEM0NzYuMTggMzA3LjQ2NiA0ODUuOTI3IDI5Ni42MzMgNDc2LjQ1MSAyOTAuODFWMjgyLjY4NUM0OTAuOCAyNzcuODEgNDczLjA2NyAyNTguNTgyIDQ0OC4wMjMgMjU4LjMxMUM0NTMuNDM4IDI1NC4yNDkgNDcxLjAzNiAyNDQuNzcgNDc3LjgwNSAyMzcuOTk5QzQ4My4yMiAyMzcuOTk5IDUwOC45NCAyMzkuMzUzIDUwOC45NCAyMzMuOTM3QzUwOS4wNzYgMjI2Ljc2IDQ3Ni40NTEgMjI5Ljg3NCA0ODkuOTg4IDIyMC4zOTVDNDkyLjQyNSAyMTguNjM1IDQ5NS40MDMgMjE3LjY4NyA0OTQuMDQ5IDIxNi4zMzNDNDkyLjE1NCAyMTMuNjI1IDQ3OS44MzUgMjIxLjQ3OSA0NzQuOTYyIDIyNi4zNTRDNDcyLjUyNSAyMjguNzkxIDQ2OS42ODIgMjMwLjU1MSA0NjYuNTY5IDIzMS45MDZDNDYyLjEwMiAyMzMuODAxIDQ1Ni4yODEgMjM1Ljk2OCA0NTAuNzMgMjM2LjY0NUM0MzkuOTAxIDIzNy45OTkgNDMwLjQyNSAyNDAuNzA3IDQyMy42NTYgMjQ0Ljc3QzQwMC42NDMgMjQyLjczOSAzNjguMjg5IDI1Ni4xNDQgMzY5LjUwNyAyMjguMzg1IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzQ4LjI1NCAyMjguNzkxVjIzOS4zNTNDMzM2Ljg4MyAyMzYuNzggMzM2LjM0MSAyMjkuMDYyIDMzMS42MDMgMjE2LjMzM0MzMjQuMTU4IDE5OC40NTkgMzE0LjU0NyAxOTAuMDYzIDMxNi43MTMgMTgzLjE1N0MzMTguMDY2IDE3My4wMDEgMzAxLjgyMiAxNzQuMzU1IDMwMC40NjggMTc5Ljc3MkMyOTcuNzYgMTgxLjEyNiAyOTYuNDA3IDE4Ny44OTYgMjk5LjExNCAxOTMuMzEzTDMwMy4xNzUgMTk2LjAyMUwzMDguNTkgMTk4LjcyOUgzMTIuNjUxQzMxMi42NTEgMTk4LjcyOSAzMTQuMDA1IDIyNy4xNjYgMzIxLjU4NiAyMzQuODg1QzMyOC4wODQgMjQxLjY1NSAzMzkuNzI2IDI1OS42NjUgMzM5LjcyNiAyNTkuNjY1QzM0MC45NDQgMjcxLjQ0NiAzMTguMjAyIDI2OC4zMzEgMzMxLjYwMyAyODguMTAyQzMzMS42MDMgMjkyLjU3IDMzMS44NzQgMzMwLjM1IDMzNy4wMTggMzQwLjkxM0MzMzUuOTM1IDM1OC4zODEgMzY4LjU2IDQ2OC4zMzYgMzczLjU2OSA0NzMuNjE3QzM3My41NjkgNDczLjYxNyAzNzYuMTQxIDUwMi4wNTMgMzY0LjA5MyA1MDMuNDA4SDMzNy4wMThWNTQxLjMyM0g0OTEuMDcxVjUwMy40MDhINDYwLjIwNlY0OTYuNjM3QzQ3MC4zNTkgNDkxLjg5NyA0NjYuMjk4IDQ3OS41NzUgNDYyLjkxNCA0NzMuNjE3QzQ2Mi45MTQgNDczLjYxNyA0NzMuNzQ0IDQ2OC4yIDQ3Mi4zOSA0NjIuNzg0QzQ2NS43NTcgNDQ0LjUwMyA0MjcuNzE3IDM4NC4yNDUgNDIyLjMwMiAzNzYuMTJDNDE2Ljg4NyAzNjcuOTk1IDQwNi4wNTggMzUzLjEgNDA2LjA1OCAzNTMuMUM0MDYuMDU4IDM1My4xIDM5Ni41ODIgMzM2Ljg1IDM4OS44MTMgMzMwLjA4QzQxMC4zOSAzMTkuMjQ3IDQwNy4wMDUgMzA1LjAyOCA0MDcuNDExIDI4OS40NTZDNDA3LjQxMSAyODkuNDU2IDQyNy43MTcgMzAxLjY0MyA0NDguMDIzIDMwMi45OTdDNDU3LjA5MyAzMDMuNTM5IDQ1OC44NTMgMzExLjEyMiA0NjUuNjIxIDMwOS43NjhDNDc2LjE4IDMwNy40NjYgNDg1LjkyNyAyOTYuNjMzIDQ3Ni40NTEgMjkwLjgxVjI4Mi42ODVDNDkwLjggMjc3LjgxIDQ3My4wNjcgMjU4LjU4MiA0NDguMDIzIDI1OC4zMTFDNDUzLjQzOCAyNTQuMjQ5IDQ3MS4wMzYgMjQ0Ljc3IDQ3Ny44MDUgMjM3Ljk5OUM0ODMuMjIgMjM3Ljk5OSA1MDguOTQgMjM5LjM1MyA1MDguOTQgMjMzLjkzN0M1MDkuMDc1IDIyNi43NiA0NzYuNDUxIDIyOS44NzQgNDg5Ljk4OCAyMjAuMzk1QzQ5Mi40MjUgMjE4LjYzNSA0OTUuNDAzIDIxNy42ODcgNDk0LjA0OSAyMTYuMzMzQzQ5Mi4xNTQgMjEzLjYyNSA0NzkuODM1IDIyMS40NzkgNDc0Ljk2MiAyMjYuMzU0QzQ3Mi41MjUgMjI4Ljc5MSA0NjkuNjgyIDIzMC41NTEgNDY2LjU2OSAyMzEuOTA2QzQ2Mi4xMDIgMjMzLjgwMSA0NTYuMjgxIDIzNS45NjggNDUwLjczIDIzNi42NDVDNDM5LjkwMSAyMzcuOTk5IDQzMC40MjUgMjQwLjcwNyA0MjMuNjU2IDI0NC43N0M0MDAuNjQzIDI0Mi43MzkgMzY4LjI4OSAyNTYuMTQ0IDM2OS41MDcgMjI4LjM4NSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzA5LjgwOSAxOTMuNTg0TDMwOC44NjEgMTkzLjMxM0MzMTUuNjMgMTg4LjAzMiAzMjMuMzQ2IDE1My42MzcgMzE3LjM4OSAxNTIuMDEyQzMxMS40MzMgMTUwLjM4NyAzMDEuNjg2IDE4NC4zNzYgMzA1LjIwNiAxOTIuMzY1TDMwMy43MTcgMTkxLjk1OUMzMDIuMDkyIDE5MS41NTMgMzAwLjMzMyAxOTIuNTAxIDI5OS45MjcgMTk0LjEyNkMyOTkuNTIgMTk1Ljc1MSAzMDAuNDY4IDE5Ny41MTEgMzAyLjA5MiAxOTcuOTE3TDMwOC4xODQgMTk5LjU0MkMzMDkuODA5IDE5OS45NDggMzExLjU2OSAxOTkuMDAxIDMxMS45NzUgMTk3LjM3NkMzMTIuMzgxIDE5NS42MTUgMzExLjQzMyAxOTMuOTkgMzA5LjgwOSAxOTMuNTg0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMxOS45NjEgMTYxLjQ5MUwzMTAuODkyIDE1OS4wNTNMMzUwLjY5MSAxMC4zNzA1TDM1OC4xMzYgMC44OTE2MDJMMzU5Ljc2MSAxMi44MDc5TDMxOS45NjEgMTYxLjQ5MVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMjIuNjY5IDE2OS4zNDRMMzA0LjUyOSAxNjQuNDdDMzAyLjc2OSAxNjMuOTI4IDMwMS42ODYgMTYyLjE2OCAzMDIuMDkzIDE2MC4yNzJDMzAyLjYzNCAxNTguNTExIDMwNC4zOTQgMTU3LjQyOCAzMDYuMjg5IDE1Ny44MzRMMzI0LjQyOSAxNjIuNzA5QzMyNi4xODkgMTYzLjI1MSAzMjcuMjcyIDE2NS4wMTEgMzI2Ljg2NiAxNjYuOTA3QzMyNi40NTkgMTY4LjgwMyAzMjQuNTY0IDE2OS44ODYgMzIyLjY2OSAxNjkuMzQ0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM3MS40MDMgMjE5LjA0MUMzNzEuNDAzIDIyMS4zNDMgMzcwLjk5NyAyMjQuMTg3IDM3MC4xODQgMjI3LjAzQzM2OC40MjUgMjMzLjI1OSAzNjQuOTA1IDIzOS4zNTMgMzYwLjAzMSAyMzkuMzUzQzM1NS4xNTggMjM5LjM1MyAzNTAuMjg1IDIzMy4yNTkgMzQ3LjcxMyAyMjcuMDMiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0zNzEuNDAzIDIxOS4wNDFDMzcxLjQwMyAyMjEuMzQzIDM3MC45OTcgMjI0LjE4NyAzNzAuMTg0IDIyNy4wM0MzNjguNDI1IDIzMy4yNTkgMzY0LjkwNSAyMzkuMzUzIDM2MC4wMzEgMjM5LjM1M0MzNTUuMTU4IDIzOS4zNTMgMzUwLjI4NSAyMzMuMjU5IDM0Ny43MTMgMjI3LjAzIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik00NDguMDIzIDI1OC4zMTFDNDQ4LjAyMyAyNTguMzExIDQzNy44NyAyNjMuMDUgNDIyLjMwMyAyNjcuNzg5QzQxMS4yMDIgMjcxLjE3NSAzOTIuNTIxIDI3MS44NTIgMzkyLjUyMSAyNzEuODUyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik00NjAuMjA2IDQ5Ni42MzdDNDM3LjE5MyA0OTYuNjM3IDQzOS45MDEgNDY1LjQ5MiA0MzQuNDg2IDQzOS43NjNDNDMwLjk2NiA0MjMuMTA4IDQyMy41IDM5NyA0MDEuMTE5IDM2OS44OTEiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00NjAuMjA2IDQ5Ni42MzdDNDM3LjE5MyA0OTYuNjM3IDQzOS45MDEgNDY1LjQ5MiA0MzQuNDg2IDQzOS43NjNDNDMwLjk2NiA0MjMuMTA4IDQyMy41IDM5NyA0MDEuMTE5IDM2OS44OTEiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTQxMCA1MDMuNUMzODggNDcxLjUgNDAwLjUgNDI1IDM4MS41MDcgNDA0IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik00NjIuOTE0IDQ3My42MTZDNDYyLjkxNCA0NzMuNjE2IDQ1OC44NTMgNDU2LjAxMyA0NTMuNDM4IDQ0MS4xMTdDNDQ4LjAyMyA0MjYuMjIyIDQyOS40NzcgMzg3LjM1OCA0MjkuNDc3IDM4Ny4zNTgiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00NjIuOTE0IDQ3My42MTZDNDYyLjkxNCA0NzMuNjE2IDQ1OC44NTMgNDU2LjAxMyA0NTMuNDM4IDQ0MS4xMTdDNDQ4LjAyMyA0MjYuMjIyIDQyOS40NzcgMzg3LjM1OCA0MjkuNDc3IDM4Ny4zNTgiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTQ3Ni40NTEgMjkwLjgwOUM0NzYuNDUxIDI5MC44MDkgNDYxLjU2IDI4OS40NTUgNDU0Ljc5MiAyODIuNjg1TDQ3Ni40NTEgMjkwLjgwOVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00NzYuNDUxIDI5MC44MDlDNDc2LjQ1MSAyOTAuODA5IDQ2MS41NiAyODkuNDU1IDQ1NC43OTIgMjgyLjY4NSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDc2LjQ1MSAyODIuNjg1QzQ3Ni40NTEgMjgyLjY4NSA0NzMuNzQ0IDI3Ni44NjIgNDY1LjYyMSAyNzMuNjEyTDQ3Ni40NTEgMjgyLjY4NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00NzYuNDUxIDI4Mi42ODVDNDc2LjQ1MSAyODIuNjg1IDQ3My43NDQgMjc2Ljg2MiA0NjUuNjIxIDI3My42MTIiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM0Mi4xNjIgMzM2LjQ0M0MzNDIuMTYyIDMzNi40NDMgMzYwLjAzMSAzMjcuMzcxIDM3NC45MjIgMzI4LjcyNUMzODkuODEzIDMzMC4wNzkgMzg5LjgxMyAzMzAuMDc5IDM4OS44MTMgMzMwLjA3OSIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTM0Mi4xNjIgMzM2LjQ0M0MzNDIuMTYyIDMzNi40NDMgMzYwLjAzMSAzMjcuMzcxIDM3NC45MjIgMzI4LjcyNUMzODkuODEzIDMzMC4wNzkgMzg5LjgxMyAzMzAuMDc5IDM4OS44MTMgMzMwLjA3OSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNTgwLjUgMjQ5QzU4MC41IDIzMi43MDggNTkzLjcwOCAyMTkuNSA2MTAgMjE5LjVINjI4QzY0My43NCAyMTkuNSA2NTYuNSAyMzIuMjYgNjU2LjUgMjQ4QzY1Ni41IDI2My43NCA2NDMuNzQgMjc2LjUgNjI4IDI3Ni41SDU4MC41VjI0OVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTU5OSAyNDAuNUg2MzgiIHN0cm9rZT0iYmxhY2siLz4KPHBhdGggZD0iTTU5OSAyNTQuNUg2MzgiIHN0cm9rZT0iYmxhY2siLz4KPHBhdGggZD0iTTQ3MS41IDEzOUM0NzEuNSAxMjIuNzA4IDQ4NC43MDggMTA5LjUgNTAxIDEwOS41SDUxMkM1MjMuMzIyIDEwOS41IDUzMi41IDExOC42NzggNTMyLjUgMTMwQzUzMi41IDE0MS4zMjIgNTIzLjMyMiAxNTAuNSA1MTIgMTUwLjVINDcxLjVWMTM5WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIvPgo8Y2lyY2xlIHI9IjIiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDUxMyAxMzApIiBmaWxsPSIjMEEwNjA2Ii8+CjxjaXJjbGUgcj0iMiIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgNTAyIDEzMCkiIGZpbGw9IiMwQTA2MDYiLz4KPGNpcmNsZSByPSIyIiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSA0OTEgMTMwKSIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNMTQ3LjUgMjIyQzE0Ny41IDIwNS43MDggMTM0LjI5MiAxOTIuNSAxMTggMTkyLjVIMTA3Qzk1LjY3ODIgMTkyLjUgODYuNSAyMDEuNjc4IDg2LjUgMjEzQzg2LjUgMjI0LjMyMiA5NS42NzgyIDIzMy41IDEwNyAyMzMuNUgxNDcuNVYyMjJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2Ii8+CjxjaXJjbGUgY3g9IjEwNiIgY3k9IjIxMyIgcj0iMiIgZmlsbD0iIzBBMDYwNiIvPgo8Y2lyY2xlIGN4PSIxMTciIGN5PSIyMTMiIHI9IjIiIGZpbGw9IiMwQTA2MDYiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjEzIiByPSIyIiBmaWxsPSIjMEEwNjA2Ii8+CjxnIG9wYWNpdHk9IjAuNSI+CjxtYXNrIGlkPSJwYXRoLTY5LWluc2lkZS0xMCIgZmlsbD0id2hpdGUiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIyNC42MzggMTgyLjkzM0MyMjQuOTc3IDE4My4zODMgMjI1LjUyNCAxODMuNjE0IDIyNi4wODcgMTgzLjYxNEgyNjcuNDIzQzI2OC4wODMgMTgzLjYxNCAyNjguNzE1IDE4My4yOTUgMjY5LjAyMiAxODIuNzExQzI2OS42NSAxODEuNTE1IDI3MCAxODAuMTg2IDI3MCAxNzguNzg1QzI3MCAxNzQuMDc5IDI2Ni4wNDcgMTcwLjE3NSAyNjAuODY2IDE2OS40MzVDMjYwLjE2NSAxNjkuMzM1IDI1OS41MzggMTY4LjkzMyAyNTkuMTUxIDE2OC4zNEMyNTYuNjgyIDE2NC41NTUgMjUyIDE2MiAyNDYuNjMxIDE2MkMyNDEuMzIzIDE2MiAyMzYuNjg4IDE2NC40OTYgMjM0LjE5NyAxNjguMjA5QzIzNC4wNzcgMTY4LjM4OSAyMzMuODc0IDE2OC40OTcgMjMzLjY1OCAxNjguNDk3QzIyNy43MTQgMTY4LjQ5NyAyMjIuODk2IDE3Mi42NzggMjIyLjg5NiAxNzcuODM3QzIyMi44OTYgMTc5LjcxNyAyMjMuNTM3IDE4MS40NjcgMjI0LjYzOCAxODIuOTMzWiIvPgo8L21hc2s+CjxwYXRoIGQ9Ik0yNjAuODY2IDE2OS40MzVMMjYwLjcyNSAxNzAuNDI1TDI2MC44NjYgMTY5LjQzNVpNMjY5LjAyMiAxODIuNzExTDI2OS45MDggMTgzLjE3NkwyNjkuMDIyIDE4Mi43MTFaTTIyNC42MzggMTgyLjkzM0wyMjMuODM5IDE4My41MzNMMjI0LjYzOCAxODIuOTMzWk0yMjYuMDg3IDE4NC42MTRIMjY3LjQyM1YxODIuNjE0SDIyNi4wODdWMTg0LjYxNFpNMjY5LjkwOCAxODMuMTc2QzI3MC42MDcgMTgxLjg0MyAyNzEgMTgwLjM1NSAyNzEgMTc4Ljc4NUgyNjlDMjY5IDE4MC4wMTYgMjY4LjY5MyAxODEuMTg2IDI2OC4xMzcgMTgyLjI0NkwyNjkuOTA4IDE4My4xNzZaTTI3MSAxNzguNzg1QzI3MSAxNzMuNDcyIDI2Ni41NjUgMTY5LjIzOCAyNjEuMDA3IDE2OC40NDVMMjYwLjcyNSAxNzAuNDI1QzI2NS41MyAxNzEuMTExIDI2OSAxNzQuNjg3IDI2OSAxNzguNzg1SDI3MVpNMjU5Ljk4OSAxNjcuNzk0QzI1Ny4zMiAxNjMuNzAxIDI1Mi4zMDkgMTYxIDI0Ni42MzEgMTYxVjE2M0MyNTEuNjkyIDE2MyAyNTYuMDQ1IDE2NS40MDggMjU4LjMxNCAxNjguODg2TDI1OS45ODkgMTY3Ljc5NFpNMjQ2LjYzMSAxNjFDMjQxLjAxOCAxNjEgMjM2LjA1OCAxNjMuNjM5IDIzMy4zNjcgMTY3LjY1MkwyMzUuMDI4IDE2OC43NjZDMjM3LjMxNyAxNjUuMzUzIDI0MS42MjkgMTYzIDI0Ni42MzEgMTYzVjE2MVpNMjMzLjY1OCAxNjcuNDk3QzIyNy4zIDE2Ny40OTcgMjIxLjg5NiAxNzEuOTk4IDIyMS44OTYgMTc3LjgzN0gyMjMuODk2QzIyMy44OTYgMTczLjM1OSAyMjguMTI5IDE2OS40OTcgMjMzLjY1OCAxNjkuNDk3VjE2Ny40OTdaTTIyMS44OTYgMTc3LjgzN0MyMjEuODk2IDE3OS45NTEgMjIyLjYxOCAxODEuOTA5IDIyMy44MzkgMTgzLjUzM0wyMjUuNDM3IDE4Mi4zMzJDMjI0LjQ1NSAxODEuMDI1IDIyMy44OTYgMTc5LjQ4MyAyMjMuODk2IDE3Ny44MzdIMjIxLjg5NlpNMjYxLjAwNyAxNjguNDQ1QzI2MC41OTQgMTY4LjM4NiAyNjAuMjE5IDE2OC4xNDcgMjU5Ljk4OSAxNjcuNzk0TDI1OC4zMTQgMTY4Ljg4NkMyNTguODU3IDE2OS43MTkgMjU5LjczNyAxNzAuMjg0IDI2MC43MjUgMTcwLjQyNUwyNjEuMDA3IDE2OC40NDVaTTI2Ny40MjMgMTg0LjYxNEMyNjguMzg2IDE4NC42MTQgMjY5LjM5OCAxODQuMTQ2IDI2OS45MDggMTgzLjE3NkwyNjguMTM3IDE4Mi4yNDZDMjY4LjAzMiAxODIuNDQ1IDI2Ny43OCAxODIuNjE0IDI2Ny40MjMgMTgyLjYxNFYxODQuNjE0Wk0yMzMuMzY3IDE2Ny42NTJDMjMzLjQzMiAxNjcuNTU1IDIzMy41NCAxNjcuNDk3IDIzMy42NTggMTY3LjQ5N1YxNjkuNDk3QzIzNC4yMDggMTY5LjQ5NyAyMzQuNzIyIDE2OS4yMjIgMjM1LjAyOCAxNjguNzY2TDIzMy4zNjcgMTY3LjY1MlpNMjI2LjA4NyAxODIuNjE0QzIyNS43ODUgMTgyLjYxNCAyMjUuNTU4IDE4Mi40OTIgMjI1LjQzNyAxODIuMzMyTDIyMy44MzkgMTgzLjUzM0MyMjQuMzk2IDE4NC4yNzUgMjI1LjI2MiAxODQuNjE0IDIyNi4wODcgMTg0LjYxNFYxODIuNjE0WiIgZmlsbD0iIzBBMDYwNiIgbWFzaz0idXJsKCNwYXRoLTY5LWluc2lkZS0xMCkiLz4KPC9nPgo8cGF0aCBkPSJNMTE4LjUgODAuNUMxMTguNSA2Mi44MjY5IDEzMi44MjcgNDguNSAxNTAuNSA0OC41SDIwOEMyMjkuODE1IDQ4LjUgMjQ3LjUgNjYuMTg0OCAyNDcuNSA4OFYxMTIuNUgxNTAuNUMxMzIuODI3IDExMi41IDExOC41IDk4LjE3MzEgMTE4LjUgODAuNVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTEzOC4wNjIgNjguODY0M0gyMjcuOTM4IiBzdHJva2U9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xMzguMDYyIDgwLjA5ODZIMjI3LjkzOCIgc3Ryb2tlPSJibGFjayIvPgo8cGF0aCBkPSJNMTM4LjA2MiA5MS4zMzNIMjI3LjkzOCIgc3Ryb2tlPSJibGFjayIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KPHJlY3Qgd2lkdGg9IjY5OSIgaGVpZ2h0PSI1MzciIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjxjbGlwUGF0aCBpZD0iY2xpcDEiPgo8cmVjdCB3aWR0aD0iNjQ0IiBoZWlnaHQ9IjI3NiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5IDIzMSkiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwMiI+CjxyZWN0IHdpZHRoPSI2OCIgaGVpZ2h0PSIxNTciIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNDAgMzQwKSIvPgo8L2NsaXBQYXRoPgo8Y2xpcFBhdGggaWQ9ImNsaXAzIj4KPHJlY3Qgd2lkdGg9IjQ1IiBoZWlnaHQ9Ijg3IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTM2IDI0MykiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwNCI+CjxyZWN0IHdpZHRoPSI0NzQiIGhlaWdodD0iODUiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjUgNDUyKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIG9wYWNpdHk9IjAuNCI+CjxwYXRoIG9wYWNpdHk9IjAuNCIgZD0iTTEyNi4zNDQgNjMuNTQ2OUgyOC4xNzE5VjEyOS4zNDRIMTI2LjM0NFY2My41NDY5WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBvcGFjaXR5PSIwLjQiIGQ9Ik0xMjYuMzQ0IDYzLjc0MTJIMjguMTcxOVY2OC4xMzk3SDEyNi4zNDRWNjMuNzQxMloiIGZpbGw9IiMwQTA2MDYiLz4KPHBhdGggb3BhY2l0eT0iMC40IiBkPSJNMTExLjg1MiA2Ni44MzU5QzExMi4zNDggNjYuODM1OSAxMTIuNzUgNjYuNDMzNyAxMTIuNzUgNjUuOTM3NUMxMTIuNzUgNjUuNDQxMyAxMTIuMzQ4IDY1LjAzOTEgMTExLjg1MiA2NS4wMzkxQzExMS4zNTUgNjUuMDM5MSAxMTAuOTUzIDY1LjQ0MTMgMTEwLjk1MyA2NS45Mzc1QzExMC45NTMgNjYuNDMzNyAxMTEuMzU1IDY2LjgzNTkgMTExLjg1MiA2Ni44MzU5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggb3BhY2l0eT0iMC40IiBkPSJNMTE2LjMzNiA2Ni44MzU5QzExNi44MzIgNjYuODM1OSAxMTcuMjM0IDY2LjQzMzcgMTE3LjIzNCA2NS45Mzc1QzExNy4yMzQgNjUuNDQxMyAxMTYuODMyIDY1LjAzOTEgMTE2LjMzNiA2NS4wMzkxQzExNS44NCA2NS4wMzkxIDExNS40MzggNjUuNDQxMyAxMTUuNDM4IDY1LjkzNzVDMTE1LjQzOCA2Ni40MzM3IDExNS44NCA2Ni44MzU5IDExNi4zMzYgNjYuODM1OVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIG9wYWNpdHk9IjAuNCIgZD0iTTEyMC44MjggNjYuODM1OUMxMjEuMzI0IDY2LjgzNTkgMTIxLjcyNyA2Ni40MzM3IDEyMS43MjcgNjUuOTM3NUMxMjEuNzI3IDY1LjQ0MTMgMTIxLjMyNCA2NS4wMzkxIDEyMC44MjggNjUuMDM5MUMxMjAuMzMyIDY1LjAzOTEgMTE5LjkzIDY1LjQ0MTMgMTE5LjkzIDY1LjkzNzVDMTE5LjkzIDY2LjQzMzcgMTIwLjMzMiA2Ni44MzU5IDEyMC44MjggNjYuODM1OVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIG9wYWNpdHk9IjAuNCIgZD0iTTU3LjIyNjYgMTAzLjIzNEgzOC4zMTI1VjEyMi4xNDhINTcuMjI2NlYxMDMuMjM0WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBvcGFjaXR5PSIwLjQiIGQ9Ik0xMTIuNTE2IDEwNi43ODlINjEuMzUxNlYxMDguODQ0SDExMi41MTZWMTA2Ljc4OVoiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggb3BhY2l0eT0iMC40IiBkPSJNMTAyLjg5MSAxMTEuNjcySDYxLjM1MTZWMTEzLjcyN0gxMDIuODkxVjExMS42NzJaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIG9wYWNpdHk9IjAuNCIgZD0iTTg4Ljc1IDExNi41NDdINjEuMzUxNlYxMTguNjAySDg4Ljc1VjExNi41NDdaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIG9wYWNpdHk9IjAuNCIgZD0iTTU3LjIyNjYgNzUuNTg1OUgzOC4zMTI1Vjk0LjVINTcuMjI2NlY3NS41ODU5WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBvcGFjaXR5PSIwLjQiIGQ9Ik0xMTIuNTE2IDc5LjE0MDZINjEuMzUxNlY4MS4xOTUzSDExMi41MTZWNzkuMTQwNloiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggb3BhY2l0eT0iMC40IiBkPSJNMTAyLjg5MSA4NC4wMjM0SDYxLjM1MTZWODYuMDc4MUgxMDIuODkxVjg0LjAyMzRaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIG9wYWNpdHk9IjAuNCIgZD0iTTg4Ljc1IDg4Ljg5ODRINjEuMzUxNlY5MC45NTMxSDg4Ljc1Vjg4Ljg5ODRaIiBmaWxsPSIjRUZFRkVGIi8+CjwvZz4KPHBhdGggZD0iTTE2Mi42OTUgODYuMzU5NEg1MS4yMTg4VjE2MS4wNzhIMTYyLjY5NVY4Ni4zNTk0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTYyLjY5NSA4Ni41ODU5SDUxLjIxODhWOTEuNTc4MUgxNjIuNjk1Vjg2LjU4NTlaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0xNDYuMjUgOTAuMTAxNkMxNDYuODE1IDkwLjEwMTYgMTQ3LjI3MyA4OS42NDM0IDE0Ny4yNzMgODkuMDc4MUMxNDcuMjczIDg4LjUxMjkgMTQ2LjgxNSA4OC4wNTQ3IDE0Ni4yNSA4OC4wNTQ3QzE0NS42ODUgODguMDU0NyAxNDUuMjI3IDg4LjUxMjkgMTQ1LjIyNyA4OS4wNzgxQzE0NS4yMjcgODkuNjQzNCAxNDUuNjg1IDkwLjEwMTYgMTQ2LjI1IDkwLjEwMTZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTUxLjM0NCA5MC4xMDE2QzE1MS45MDkgOTAuMTAxNiAxNTIuMzY3IDg5LjY0MzQgMTUyLjM2NyA4OS4wNzgxQzE1Mi4zNjcgODguNTEyOSAxNTEuOTA5IDg4LjA1NDcgMTUxLjM0NCA4OC4wNTQ3QzE1MC43NzkgODguMDU0NyAxNTAuMzIgODguNTEyOSAxNTAuMzIgODkuMDc4MUMxNTAuMzIgODkuNjQzNCAxNTAuNzc5IDkwLjEwMTYgMTUxLjM0NCA5MC4xMDE2WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE1Ni40MzggOTAuMTAxNkMxNTcuMDAzIDkwLjEwMTYgMTU3LjQ2MSA4OS42NDM0IDE1Ny40NjEgODkuMDc4MUMxNTcuNDYxIDg4LjUxMjkgMTU3LjAwMyA4OC4wNTQ3IDE1Ni40MzggODguMDU0N0MxNTUuODcyIDg4LjA1NDcgMTU1LjQxNCA4OC41MTI5IDE1NS40MTQgODkuMDc4MUMxNTUuNDE0IDg5LjY0MzQgMTU1Ljg3MiA5MC4xMDE2IDE1Ni40MzggOTAuMTAxNloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik04NC4yMTg4IDEzMS40M0g2Mi43MzQ0VjE1Mi45MTRIODQuMjE4OFYxMzEuNDNaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik0xNDcuMDA4IDEzNS40NjlIODguOTA2MlYxMzcuNzk3SDE0Ny4wMDhWMTM1LjQ2OVoiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggZD0iTTEzNi4wNzggMTQxLjAxNkg4OC45MDYyVjE0My4zNDRIMTM2LjA3OFYxNDEuMDE2WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMTIwLjAxNiAxNDYuNTQ3SDg4LjkwNjJWMTQ4Ljg3NUgxMjAuMDE2VjE0Ni41NDdaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik0xNTMuODc1IDk4LjExNzJINjAuMDQ2OVYxMjMuMThIMTUzLjg3NVY5OC4xMTcyWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTgiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTM5LjU3OCA2NC41MjM0QzE0My44NzUgNjQuNTIzNCAxNDIuNDg0IDcyLjIyNjYgMTQ2LjAyMyA3My4xMTcyQzE0OC44OTEgNzMuODI4MSAxNDguMTcyIDc2LjY5NTMgMTQ4Ljg5MSA3OC44NDM3QzE0OS42MDkgODAuOTkyMiAxNTIuNDY5IDgyLjQyMTkgMTU1LjMzNiA4MS43MTA5QzE1Ny40MTQgODEuMTg3NSAxNTkuNjMzIDc1Ljk3NjYgMTU3LjEyNSA3MC44ODI4QzE1NC43ODEgNjYuMTk1MyAxNTQuNDM4IDYzLjc1IDE0OC4xNzIgNjEuNjU2MkMxNDQuMjAzIDYwLjMzNTkgMTQ1LjQzIDU4Ljc5NjkgMTQxLjAxNiA1OC43OTY5IiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0xMzkuNTc4IDY0LjUyMzRDMTQzLjg3NSA2NC41MjM0IDE0Mi40ODQgNzIuMjI2NiAxNDYuMDIzIDczLjExNzJDMTQ4Ljg5MSA3My44MjgxIDE0OC4xNzIgNzYuNjk1MyAxNDguODkxIDc4Ljg0MzdDMTQ5LjYwOSA4MC45OTIyIDE1Mi40NjkgODIuNDIxOSAxNTUuMzM2IDgxLjcxMDlDMTU3LjQxNCA4MS4xODc1IDE1OS42MzMgNzUuOTc2NiAxNTcuMTI1IDcwLjg4MjhDMTU0Ljc4MSA2Ni4xOTUzIDE1NC40MzggNjMuNzUgMTQ4LjE3MiA2MS42NTYyQzE0NC4yMDMgNjAuMzM1OSAxNDUuNDMgNTguNzk2OSAxNDEuMDE2IDU4Ljc5NjkiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQzLjg3NSA3My44MjgxQzE0My40OTYgNzMuODI4MSAxNDMuMTMyIDczLjY3NzUgMTQyLjg2NCA3My40MDk0QzE0Mi41OTYgNzMuMTQxMyAxNDIuNDQ1IDcyLjc3NzYgMTQyLjQ0NSA3Mi4zOTg0QzE0Mi4xMTUgNzEuMDAzMyAxNDEuNTcyIDY5LjY2NzQgMTQwLjgzNiA2OC40Mzc1QzE0MC43NDQgNjguMjczNCAxNDAuNjg2IDY4LjA5MjggMTQwLjY2NSA2Ny45MDYyQzE0MC42NDMgNjcuNzE5NiAxNDAuNjU5IDY3LjUzMDYgMTQwLjcxIDY3LjM1QzE0MC43NjIgNjcuMTY5MyAxNDAuODQ4IDY3LjAwMDYgMTQwLjk2NSA2Ni44NTM0QzE0MS4wODIgNjYuNzA2MyAxNDEuMjI2IDY2LjU4MzUgMTQxLjM5IDY2LjQ5MjJDMTQxLjU1NCA2Ni40MDA5IDE0MS43MzUgNjYuMzQyOCAxNDEuOTIyIDY2LjMyMTNDMTQyLjEwOCA2Ni4yOTk3IDE0Mi4yOTcgNjYuMzE1MSAxNDIuNDc4IDY2LjM2NjdDMTQyLjY1OCA2Ni40MTgyIDE0Mi44MjcgNjYuNTA0NyAxNDIuOTc0IDY2LjYyMTVDMTQzLjEyMiA2Ni43MzgyIDE0My4yNDQgNjYuODgyNyAxNDMuMzM2IDY3LjA0NjlDMTQzLjQ3NiA2Ny4yOTY5IDE0My43MTEgNjcuNzM0NCAxNDMuOTY4IDY4LjI2NTZDMTQ0LjE3MiA2OC42NzE5IDE0NC4zOSA2OS4xNDA2IDE0NC41ODYgNjkuNjI1QzE0NC43NDkgNzAuMDEwNCAxNDQuODkzIDcwLjQwNDIgMTQ1LjAxNSA3MC44MDQ3QzE0NS4xODcgNzEuMzA4OSAxNDUuMjg3IDcxLjgzNSAxNDUuMzEyIDcyLjM2NzJDMTQ1LjMxNSA3Mi41NTc5IDE0NS4yOCA3Mi43NDc0IDE0NS4yMSA3Mi45MjQ1QzE0NS4xMzkgNzMuMTAxNiAxNDUuMDMzIDczLjI2MjkgMTQ0LjkgNzMuMzk4OEMxNDQuNzY2IDczLjUzNDggMTQ0LjYwNiA3My42NDI4IDE0NC40MyA3My43MTY1QzE0NC4yNTQgNzMuNzkwMiAxNDQuMDY1IDczLjgyODIgMTQzLjg3NSA3My44MjgxWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQxLjgyOCA3MC4zMTI1QzE0MS40ODggNzAuNDk5MiAxNDEuMTA3IDcwLjU5ODUgMTQwLjcxOSA3MC42MDE2QzEzOC42NDEgNzAuNjAxNiAxMzYuODEyIDY3LjY2NDEgMTM2LjgxMiA2NS41OTM3QzEzNi44MTIgNjQuNTk3MSAxMzcuMjA4IDYzLjY0MTMgMTM3LjkxMyA2Mi45MzY2QzEzOC42MTggNjIuMjMxOCAxMzkuNTc0IDYxLjgzNTkgMTQwLjU3IDYxLjgzNTlDMTQxLjU2NyA2MS44MzU5IDE0Mi41MjMgNjIuMjMxOCAxNDMuMjI3IDYyLjkzNjZDMTQzLjkzMiA2My42NDEzIDE0NC4zMjggNjQuNTk3MSAxNDQuMzI4IDY1LjU5MzdDMTQ0LjMwNyA2Ni40MDIzIDE0NC4xMjYgNjcuMTk4NyAxNDMuNzk3IDY3LjkzNzUiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNDEuODI4IDcwLjMxMjVDMTQxLjQ4OCA3MC40OTkyIDE0MS4xMDcgNzAuNTk4NSAxNDAuNzE5IDcwLjYwMTZDMTM4LjY0MSA3MC42MDE2IDEzNi44MTIgNjcuNjY0MSAxMzYuODEyIDY1LjU5MzdDMTM2LjgxMiA2NC41OTcxIDEzNy4yMDggNjMuNjQxMyAxMzcuOTEzIDYyLjkzNjZDMTM4LjYxOCA2Mi4yMzE4IDEzOS41NzQgNjEuODM1OSAxNDAuNTcgNjEuODM1OUMxNDEuNTY3IDYxLjgzNTkgMTQyLjUyMyA2Mi4yMzE4IDE0My4yMjcgNjIuOTM2NkMxNDMuOTMyIDYzLjY0MTMgMTQ0LjMyOCA2NC41OTcxIDE0NC4zMjggNjUuNTkzN0MxNDQuMzA3IDY2LjQwMjMgMTQ0LjEyNiA2Ny4xOTg3IDE0My43OTcgNjcuOTM3NSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNDQuNjMzIDc1LjMxMjVDMTQ0LjIwMyA3Ni4wOTM3IDE0My43MjcgNzYuODc1IDE0My4yNzMgNzcuNjU2MkwxNDEuODUyIDgwQzE0MC45MDYgODEuNTYyNSAxMzkuMDg2IDg0LjM4MjggMTM4LjgyIDg0LjY4NzVDMTM4LjU1NSA4NC45OTIyIDEzNi41ODYgODYuNzY1NiAxMzUuNTQ3IDg3LjY0MDZDMTM1LjAzMSA4OC4wNzgxIDEzNC41MDggODguNTA3OCAxMzMuOTg0IDg4LjkzNzVDMTMzLjQ2MSA4OS4zNjcyIDEzMi45MjIgODkuNzgxMiAxMzIuMzY3IDkwLjE3OTdDMTMyLjA4NyA5MC4zNzk0IDEzMS43NDUgOTAuNDczMiAxMzEuNDAyIDkwLjQ0NDNDMTMxLjA1OSA5MC40MTU0IDEzMC43MzcgOTAuMjY1NyAxMzAuNDk0IDkwLjAyMThDMTMwLjI1MiA4OS43NzggMTMwLjEwMyA4OS40NTU4IDEzMC4wNzUgODkuMTEyOEMxMzAuMDQ4IDg4Ljc2OTcgMTMwLjE0MyA4OC40MjggMTMwLjM0NCA4OC4xNDg0QzEzMC43NDIgODcuNTkzNyAxMzEuMTcyIDg3LjA3MDMgMTMxLjU4NiA4Ni41MzEyQzEzMiA4NS45OTIyIDEzMi40MzggODUuNDc2NiAxMzIuODgzIDg0Ljk2ODdDMTMzLjY2NCA4NC4wMTU2IDEzNS4xNDggODIuNDUzMSAxMzUuMzQ0IDgyLjE2NDFDMTM1LjUzOSA4MS44NzUgMTM3LjA3IDc5LjE1NjIgMTM4LjAzMSA3Ny42MDk0TDEzOS40NzcgNzUuMjY1NkMxMzkuOTc3IDc0LjQ4NDQgMTQwLjQ2MSA3My43MDMxIDE0MC45ODQgNzIuOTg0NEMxNDEuMjk0IDcyLjUyNSAxNDEuNzcgNzIuMjAzMSAxNDIuMzEyIDcyLjA4NjFDMTQyLjg1MyA3MS45NjkxIDE0My40MTkgNzIuMDY1OSAxNDMuODkxIDcyLjM1NjRDMTQ0LjM2MyA3Mi42NDY4IDE0NC43MDUgNzMuMTA4NCAxNDQuODQ0IDczLjY0NDhDMTQ0Ljk4NCA3NC4xODExIDE0NC45MTEgNzQuNzUwNiAxNDQuNjQxIDc1LjIzNDRMMTQ0LjYzMyA3NS4zMTI1WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQwLjEyNSA3Ny40Mjk3QzE0MC42NTYgNzkuOTIxOSAxNDIuMDg2IDgyLjc4MTMgMTQxLjM2NyA4Ni4zNTk0SDE1Mi4xMDlDMTUxLjg1MiA4MS43NTc4IDE1MC41ODYgNzcuOTY4OCAxNDkuMDYzIDczLjgxMjVDMTQ4Ljc5NSA3Mi45NDYxIDE0OC4yNTkgNzIuMTg3NSAxNDcuNTMxIDcxLjY0NjZDMTQ2LjgwMyA3MS4xMDU4IDE0NS45MjIgNzAuODEwOSAxNDUuMDE2IDcwLjgwNDdDMTQ0LjcxOSA3MS4zMTg3IDE0NC4yMzkgNzEuNzAxMiAxNDMuNjcyIDcxLjg3NUMxNDMuMjAzIDcxLjk1OTkgMTQyLjcyIDcxLjg5NzEgMTQyLjI4OSA3MS42OTUzQzE0MC43OTcgNzIuNzQyMiAxMzkuNzY2IDc0LjcxODggMTQwLjEyNSA3Ny40Mjk3WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTM3LjAxNiA2NC4zMTI1QzEzNy44MzkgNjQuNTkzMiAxMzguNzIgNjQuNjY1NiAxMzkuNTc4IDY0LjUyMzRDMTQwLjE4IDY0LjM5OTggMTQwLjgwNCA2NC40MzIxIDE0MS4zOTEgNjQuNjE3MkMxNDEuNDc2IDY0LjUwNiAxNDEuNTg5IDY0LjQxOTYgMTQxLjcxOSA2NC4zNjcyQzE0MS45OTkgNjQuMjk5NyAxNDIuMjk1IDY0LjM0MzQgMTQyLjU0NCA2NC40ODlDMTQyLjc5MyA2NC42MzQ2IDE0Mi45NzYgNjQuODcwOSAxNDMuMDU1IDY1LjE0ODRDMTQzLjE2MiA2NS4zNzI2IDE0My4xOTYgNjUuNjI0NCAxNDMuMTU0IDY1Ljg2OTJDMTQzLjExMiA2Ni4xMTQgMTQyLjk5NiA2Ni4zMzk4IDE0Mi44MiA2Ni41MTU2QzE0My4wOTkgNjcuMjIzNCAxNDMuNTMgNjcuODYwOCAxNDQuMDg0IDY4LjM4MjJDMTQ0LjYzOCA2OC45MDM2IDE0NS4zIDY5LjI5NTkgMTQ2LjAyMyA2OS41MzEyQzE0OC41NyA3MC41MDc4IDE0OS4wNjIgNzMuODA0NyAxNDkuODI4IDc3Ljk3NjZDMTUwLjUyMyA4MS43ODEyIDE1Mi41NjIgODMuMDcwMyAxNTUuNDM3IDgyLjM4MjhDMTU4LjUyMyA4MS42NDA2IDE1OS42MzMgNzUuOTY4OCAxNTcuMTI1IDcwLjg3NUMxNTQuNzgxIDY2LjE4NzUgMTU0LjQzNyA2My43NDIyIDE0OC4xNzIgNjEuNjQ4NEMxNDMuODc1IDYwLjIxODggMTQ1LjMxMiA1OC43ODkxIDE0MS4wMTYgNTguNzg5MUMxNDAuMzEgNTguODI1MyAxMzkuNjIgNTkuMDA5NiAxMzguOTkgNTkuMzI5OUMxMzguMzYgNTkuNjUwMiAxMzcuODA0IDYwLjA5OTUgMTM3LjM1OSA2MC42NDg0QzEzNS45MyA2MC44OTA2IDEzNC45MyA2Mi4wMDc4IDEzNC45MyA2NC4xNTYzQzEzNC45MyA2Ny4wMjM0IDEzOC41NTUgNjkuNjI1IDEzOC41NTUgNjkuNjI1QzEzNy43MDEgNjguNzcxNCAxMzcuMTE5IDY3LjY4NCAxMzYuODgzIDY2LjVDMTM2LjY3MiA2NC43NSAxMzcuMDE2IDY0LjMxMjUgMTM3LjAxNiA2NC4zMTI1WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik01MS41MDc3IDEzMi41TDYzLjI4MTEgMTMyLjQ1M0w3My42NjM5IDEyNy4zODNDNzQuMDc4MyAxMjcuMTUgNzQuNTY4NCAxMjcuMDkxIDc1LjAyNjIgMTI3LjIxOUM3NS40ODQxIDEyNy4zNDcgNzUuODcyMiAxMjcuNjUyIDc2LjEwNTMgMTI4LjA2NkM3Ni4zMzg0IDEyOC40ODEgNzYuMzk3NCAxMjguOTcxIDc2LjI2OTIgMTI5LjQyOUM3Ni4xNDEgMTI5Ljg4NyA3NS44MzYyIDEzMC4yNzUgNzUuNDIxOCAxMzAuNTA4TDY1LjA5MzYgMTM3LjE0OEM2NC44NTg0IDEzNy4zMDEgNjQuNTkxIDEzNy4zOTcgNjQuMzEyNCAxMzcuNDNINjQuMDE1NUw1MS44OTA1IDEzOC45MDZDNTEuNDU0IDEzOC45NTkgNTEuMDExNCAxMzguOTIyIDUwLjU4OTcgMTM4Ljc5OEM1MC4xNjggMTM4LjY3NCA0OS43NzYyIDEzOC40NjQgNDkuNDM4MiAxMzguMTgzQzQ5LjEwMDMgMTM3LjkwMiA0OC44MjM1IDEzNy41NTQgNDguNjI0NyAxMzcuMTYyQzQ4LjQyNTggMTM2Ljc3IDQ4LjMwOTIgMTM2LjM0MSA0OC4yODIxIDEzNS45MDNDNDguMjU0OSAxMzUuNDY0IDQ4LjMxNzYgMTM1LjAyNCA0OC40NjY1IDEzNC42MUM0OC42MTU0IDEzNC4xOTcgNDguODQ3MyAxMzMuODE4IDQ5LjE0NzkgMTMzLjQ5N0M0OS40NDg1IDEzMy4xNzYgNDkuODExNSAxMzIuOTIgNTAuMjE0NiAxMzIuNzQ1QzUwLjYxNzcgMTMyLjU2OSA1MS4wNTI0IDEzMi40NzggNTEuNDkyMSAxMzIuNDc3TDUxLjUwNzcgMTMyLjVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMzQuNTkgODAuMzZMNjMuNzM1NCAxMTMuNEw3NC4zMjcyIDEzNi4xMTVMMTQ1LjE4MiAxMDMuMDc0TDEzNC41OSA4MC4zNloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik04NC42NDc1IDEwNy41MDVMNjguMzE5OCAxMTUuMTE5TDc1LjkzMzYgMTMxLjQ0N0w5Mi4yNjEzIDEyMy44MzNMODQuNjQ3NSAxMDcuNTA1WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMTMyLjIyOSA4OC4wMzYxTDkxLjA2MyAxMDcuMjMyTDkyLjA0NjkgMTA5LjM0MkwxMzMuMjEzIDkwLjE0NjFMMTMyLjIyOSA4OC4wMzYxWiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMTI2LjgzIDk2LjY2NjZMOTMuNDAyMyAxMTIuMjU0TDk0LjM4NjMgMTE0LjM2NEwxMjcuODEzIDk4Ljc3NjZMMTI2LjgzIDk2LjY2NjZaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik0xMTcuNzg3IDEwNi45OTVMOTUuNzQ1MSAxMTcuMjc0TDk2LjcyOSAxMTkuMzg0TDExOC43NzEgMTA5LjEwNUwxMTcuNzg3IDEwNi45OTVaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik0xMzIuNzExIDk5Ljc3MzVDMTMyLjkyMiA5OS41NzgyIDEzMy4xMjUgOTkuMzc1IDEzMy4zMjggOTkuMTcxOUMxMzMuMTA5IDk5LjMwNDcgMTMyLjg5MSA5OS40Mjk3IDEzMi42NDggOTkuNTQ2OUMxMzIuNDA2IDk5LjY2NDEgMTMyLjA4NiA5OS43NjU3IDEzMS44MTIgOTkuODgyOEwxMzAuOTg0IDEwMC4xOTVDMTMwLjk0MiAxMDAuMjE1IDEzMC44OTcgMTAwLjIyNyAxMzAuODUgMTAwLjIyOUMxMzAuODA0IDEwMC4yMzIgMTMwLjc1NyAxMDAuMjI1IDEzMC43MTMgMTAwLjIwOUMxMzAuNjY5IDEwMC4xOTQgMTMwLjYyOSAxMDAuMTcgMTMwLjU5NCAxMDAuMTM4QzEzMC41NiAxMDAuMTA3IDEzMC41MzIgMTAwLjA2OSAxMzAuNTEyIDEwMC4wMjdDMTMwLjQ5MiA5OS45ODUzIDEzMC40OCA5OS45Mzk3IDEzMC40NzggOTkuODkzMkMxMzAuNDc1IDk5Ljg0NjcgMTMwLjQ4MiA5OS44MDAyIDEzMC40OTggOTkuNzU2M0MxMzAuNTEzIDk5LjcxMjQgMTMwLjUzNyA5OS42NzIgMTMwLjU2OSA5OS42Mzc0QzEzMC42IDk5LjYwMjggMTMwLjYzOCA5OS41NzQ3IDEzMC42OCA5OS41NTQ3TDEzMS40NjEgOTkuMTMyOEwxMzIuMDg2IDk4Ljc4OTFMMTMxLjgzNiA5OC45MDYzTDEzMC4xNzIgOTkuNTU0N0MxMzAuMDg4IDk5LjU4MSAxMjkuOTk4IDk5LjU3NTggMTI5LjkxOCA5OS41NDAzQzEyOS44MzggOTkuNTA0NyAxMjkuNzc0IDk5LjQ0MTEgMTI5LjczNyA5OS4zNjE1QzEyOS43MDEgOTkuMjgxOSAxMjkuNjk1IDk5LjE5MTcgMTI5LjcyIDk5LjEwNzlDMTI5Ljc0NSA5OS4wMjQgMTI5LjgwMSA5OC45NTI0IDEyOS44NzUgOTguOTA2M0wxMzEuNDM3IDk4LjAzMTNMMTMxLjU3OCA5Ny45NDUzTDEyOS42ODcgOTguNzgxM0MxMjkuNjEgOTguODE4MyAxMjkuNTIxIDk4LjgyNjEgMTI5LjQzOCA5OC44MDMxQzEyOS4zNTQgOTguNzgwMiAxMjkuMjgyIDk4LjcyODEgMTI5LjIzNCA5OC42NTYzQzEyOS4yMDggOTguNjE2OCAxMjkuMTkgOTguNTcyNiAxMjkuMTgxIDk4LjUyNkMxMjkuMTcxIDk4LjQ3OTUgMTI5LjE3MiA5OC40MzE2IDEyOS4xODEgOTguMzg1MUMxMjkuMTkgOTguMzM4NyAxMjkuMjA5IDk4LjI5NDUgMTI5LjIzNiA5OC4yNTUyQzEyOS4yNjIgOTguMjE1OSAxMjkuMjk2IDk4LjE4MjMgMTI5LjMzNiA5OC4xNTYzTDEzMS45NTMgOTYuNDYxTDEzMi41IDk1LjkxNDFMMTMxLjg3NSA5NS45Njg4TDEzMC45MTQgOTYuNDg0NEMxMzAuODQgOTYuNTE3NCAxMzAuNzU2IDk2LjUyMzYgMTMwLjY3OCA5Ni41MDIxQzEzMC42IDk2LjQ4MDUgMTMwLjUzMSA5Ni40MzI2IDEzMC40ODUgOTYuMzY2M0MxMzAuNDM4IDk2LjMgMTMwLjQxNSA5Ni4yMTk2IDEzMC40MjEgOTYuMTM4NUMxMzAuNDI2IDk2LjA1NzUgMTMwLjQ2IDk1Ljk4MSAxMzAuNTE2IDk1LjkyMTlMMTMxLjQ1MyA5NS4wODZDMTMxLjQ4MSA5NS4wNTY0IDEzMS41MTYgOTUuMDM0OSAxMzEuNTU1IDk1LjAyMzVIMTMxLjY0OEMxMzEuNjQ4IDk1LjAyMzUgMTMzLjk0NSA5NC40NDUzIDEzMy45OTIgOTQuNDUzMkwxMzUuMTAyIDkzLjM0MzhDMTM1LjM3MiA5My4wNzM3IDEzNS43MzUgOTIuOTE2OCAxMzYuMTE3IDkyLjkwNTJDMTM2LjQ5OCA5Mi44OTM2IDEzNi44NyA5My4wMjgxIDEzNy4xNTYgOTMuMjgxM0MxMzcuNzczIDkzLjgzNiAxMzguMTY0IDk0LjEwOTQgMTM3LjYxNyA5NC43MjY2TDEzNS45MzcgOTYuODc1QzEzNS44NTEgOTcuMTQwOSAxMzUuNzQ5IDk3LjQwMTggMTM1LjYzMyA5Ny42NTYzQzEzNS40NTggOTguMDQ5NCAxMzUuMjA5IDk4LjQwNDkgMTM0Ljg5OCA5OC43MDMyQzEzNC4zNCA5OS4yNTQ5IDEzMy43NCA5OS43NjE3IDEzMy4xMDIgMTAwLjIxOUMxMzMuMDQgMTAwLjI2OSAxMzIuOTYyIDEwMC4yOTIgMTMyLjg4NCAxMDAuMjg0QzEzMi44MDUgMTAwLjI3NiAxMzIuNzMzIDEwMC4yMzcgMTMyLjY4NCAxMDAuMTc2QzEzMi42MzQgMTAwLjExNSAxMzIuNjEgMTAwLjAzNiAxMzIuNjE5IDk5Ljk1NzlDMTMyLjYyNyA5OS44Nzk1IDEzMi42NjUgOTkuODA3NiAxMzIuNzI3IDk5Ljc1NzhMMTMyLjcxMSA5OS43NzM1WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQ3IDc3LjEyNUMxNDYuMzM2IDgwLjAxNTYgMTQ1LjA5NCA4NS4zMjAzIDE0NC43NSA4NS45OTIyQzE0NC4yNzMgODYuOTE0MSAxMzcuMjgxIDk1LjY3MTkgMTM2Ljg0NCA5NS42NzE5QzEzNi40MDYgOTUuNjcxOSAxMzUuMTA5IDkzLjQ2ODcgMTM1LjA2MiA5My40Mzc1QzEzNS4wMTYgOTMuNDA2MiAxMzUuMDYyIDkzLjM0MzcgMTM1LjI0MiA5Mi45ODQ0QzEzNS40MjIgOTIuNjI1IDE0MC41NTUgODUuMjk2OSAxNDAuNzczIDg0LjA3MDNMMTQyLjE4NyA3Ni4xMTcyTDE0Mi41MjMgNzQuMjEwOSIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE0NyA3Ny4xMjVDMTQ2LjMzNiA4MC4wMTU2IDE0NS4wOTQgODUuMzIwMyAxNDQuNzUgODUuOTkyMkMxNDQuMjczIDg2LjkxNDEgMTM3LjI4MSA5NS42NzE5IDEzNi44NDQgOTUuNjcxOUMxMzYuNDA2IDk1LjY3MTkgMTM1LjEwOSA5My40Njg3IDEzNS4wNjIgOTMuNDM3NUMxMzUuMDE2IDkzLjQwNjIgMTM1LjA2MiA5My4zNDM3IDEzNS4yNDIgOTIuOTg0NEMxMzUuNDIyIDkyLjYyNSAxNDAuNTU1IDg1LjI5NjkgMTQwLjc3MyA4NC4wNzAzTDE0Mi4xODcgNzYuMTE3MkwxNDIuNTIzIDc0LjIxMDkiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNTMuNzE4OCAxMjYuNDM4SDUwLjE0MDZWMTMyLjkxNEg1My43MTg4VjEyNi40MzhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik04Mi44NTEzIDE2NS44MkM4NC44NzQ4IDE2Ni42NDggNzcuMjEwNyAxNTYuNTIzIDc3LjIxMDcgMTU2LjUyM0M3Ny4yMTA3IDE1Ni41MjMgNzQuODY3IDE1MS4zMiA3NC4xODczIDE1NC4zMjhDNzMuNTA3NiAxNTcuMzM2IDgwLjY4NzMgMTY0LjkzOCA4Mi44NTEzIDE2NS44MloiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjU1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTgwLjUyMzMgMTYzLjYwMkM3OS45MTM5IDE2NC4zODMgODAuNjc5NSAxNjMuOTY5IDgwLjk0NTEgMTY1LjMwNUM4MC44MjgzIDE2NS41MzMgODAuNzg5OSAxNjUuNzk0IDgwLjgzNTggMTY2LjA0N0M4MC43MDgzIDE2Ni4xNDcgODAuNjEzMiAxNjYuMjgzIDgwLjU2MjMgMTY2LjQzN0M4MC41NjIzIDE2Ni42MjUgODAuNTYyMyAxNjcuMzY3IDgwLjc1NzYgMTY3LjUxNkM4MC45NTI5IDE2Ny42NjQgODkuMDc3OSAxNjcuNzExIDg5LjYyNDggMTY3LjY5NUM5MC41MzYzIDE2Ny42NDMgOTEuNDM3IDE2Ny40NzIgOTIuMzA0NSAxNjcuMTg4QzkyLjkxMzkgMTY2Ljk1MyA5Mi42Nzk1IDE2Ny4zMjggOTIuNjQ4MyAxNjYuOTYxQzkyLjYyMzcgMTY2Ljc5NCA5Mi41NTE4IDE2Ni42MzcgOTIuNDQxIDE2Ni41MUM5Mi4zMzAyIDE2Ni4zODMgOTIuMTg1MyAxNjYuMjkgOTIuMDIzMyAxNjYuMjQyQzkxLjY5NTEgMTY2LjEwMiA5MC4yMjY0IDE2NC44NjcgODkuOTM3MyAxNjQuNjhDODkuNjQ4MyAxNjQuNDkyIDg3LjQ3NjQgMTYzLjExNyA4Ny4yMjY0IDE2Mi45NDVDODYuNjczNiAxNjIuNjExIDg2LjE1MDkgMTYyLjIyOSA4NS42NjM5IDE2MS44MDVDODUuNTc5OCAxNjEuNjgzIDg1LjQ1NDUgMTYxLjU5NSA4NS4zMTExIDE2MS41NThDODUuMTY3NiAxNjEuNTIgODUuMDE1NSAxNjEuNTM2IDg0Ljg4MjYgMTYxLjYwMkM4NC44ODI2IDE2MS42MDIgODQuNTQ2NyAxNjEuNzgxIDg0Ljg4MjYgMTYyLjE5NUM4NC41Njg4IDE2Mi4zNDggODQuMjcwNSAxNjIuNTMyIDgzLjk5MiAxNjIuNzQyQzgzLjc1NzYgMTYyLjkyMiA4Mi40Mjk1IDE2My42ODggODEuNjAxNCAxNjMuNTIzQzgwLjkyMTcgMTYzLjM1OSA4MC44MTIzIDE2My4yODEgODAuNTIzMyAxNjMuNjAyWiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNTEuNjk1MiAxNTUuNTE2TDczLjM0MzYgMTQ3LjY1Nkw3NC4wMzExIDE0Ny40MDZDNzQuNjQyMiAxNDcuMTg2IDc1LjMwOTIgMTQ3LjE3NyA3NS45MjYzIDE0Ny4zNzlDNzYuNTQzNCAxNDcuNTgyIDc3LjA3NTMgMTQ3Ljk4NCA3Ny40MzczIDE0OC41MjNMODcuNDEzOSAxNjMuMzY3Qzg3LjU4MzQgMTYzLjYxOCA4Ny43MDE3IDE2My44OTkgODcuNzYyIDE2NC4xOTZDODcuODIyMyAxNjQuNDkyIDg3LjgyMzQgMTY0Ljc5OCA4Ny43NjU0IDE2NS4wOTVDODcuNzA3MyAxNjUuMzkyIDg3LjU5MTEgMTY1LjY3NCA4Ny40MjM2IDE2NS45MjZDODcuMjU2IDE2Ni4xNzggODcuMDQwMyAxNjYuMzk0IDg2Ljc4ODkgMTY2LjU2M0M4NS43OTY3IDE2Ny4yMzQgODUuMDM4OSAxNjcuMzkxIDgzLjcxODYgMTY2LjEwOUM4My4zNzQ5IDE2NS43ODEgODIuOTk5OSAxNjUuMjM0IDgyLjM1MTQgMTY0LjYwMkM4MC4zOTgzIDE2Mi43MTEgNzcuMzU5MiAxNTkuODc1IDc2LjMzNTggMTU4LjM1MkM3NS41NjY5IDE1Ny4yMjkgNzQuOTI3NCAxNTYuMDI0IDc0LjQyOTUgMTU0Ljc1OEM3NC40Mjk1IDE1NC43NTggNzIuODIwMiAxNTcuMjY2IDY4LjI5NjcgMTYxLjVDNjMuNzczMyAxNjUuNzM0IDUyLjE0MDUgMTcwLjg3NSA0Ny40OTk4IDE2Ni45NjlDNDQuNTA3NyAxNjQuNDMgNDYuNTg1OCAxNTkuMTE3IDQ5LjYzMjcgMTU2LjY0MUM1MC4yNTM2IDE1Ni4xNTUgNTAuOTUwNCAxNTUuNzc1IDUxLjY5NTIgMTU1LjUxNloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTU3LjE3MTggMTM3LjI1QzU3LjE3MTggMTQwLjEwMiA1Ny4yMTg2IDE0MC41NjIgNTcuMjg5IDE0MS43ODFDNTcuNjk1MiAxNDkuMTY0IDU3Ljc2NTUgMTUzLjI5NyA1Ny43NjU1IDE1My4yOTdDNDguMjg5IDE1OC4wNDcgNTAuMzk4MyAxNjYuNDg0IDQ0Ljk3NjUgMTY4LjA4NkM0Mi41MDc3IDE2NS45NjEgNDEuNTc4IDE2MC4zNTIgNDEuNTIzMyAxNTkuMDA4QzQwLjg5ODMgMTUxLjE0MSA0MS43OTY4IDE0NC42OTUgNDUuNzEwOCAxMzYuMjI3QzQ2LjEzIDEzNS4yNjYgNDYuNzM4MiAxMzQuMzk5IDQ3LjQ5OTIgMTMzLjY3OUM0OC4yNjAyIDEzMi45NTggNDkuMTU4NSAxMzIuMzk4IDUwLjE0MDUgMTMyLjAzMUM1MC42NDAxIDEzMi4zODkgNTEuMjQ1NiAxMzIuNTY4IDUxLjg1OTMgMTMyLjUzOUM1Mi41MzAxIDEzMi41NDQgNTMuMTgzNyAxMzIuMzI3IDUzLjcxODYgMTMxLjkyMkM1NS42NzE4IDEzMi40OTIgNTcuMTY0IDEzNC4yODkgNTcuMTcxOCAxMzcuMjVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik03OS45NjA3IDEyOC42MDJDNzkuNzczMiAxMjguODEyIDc5LjU3IDEyOS4wMjMgNzkuMzY2OSAxMjkuMjI3Qzc5LjQ5MTkgMTI5LjAwOCA3OS42MjQ3IDEyOC43ODkgNzkuNzQxOSAxMjguNTQ3Qzc5Ljg1OTEgMTI4LjMwNSA3OS45NjA2IDEyNy45ODQgODAuMDcgMTI3LjcwM0w4MC4zOTAzIDEyNi44NzVDODAuNDE2NiAxMjYuNzkxIDgwLjQxMTUgMTI2LjcwMSA4MC4zNzU5IDEyNi42MjFDODAuMzQwMyAxMjYuNTQxIDgwLjI3NjcgMTI2LjQ3NyA4MC4xOTcxIDEyNi40NEM4MC4xMTc1IDEyNi40MDQgODAuMDI3MyAxMjYuMzk4IDc5Ljk0MzUgMTI2LjQyM0M3OS44NTk3IDEyNi40NDkgNzkuNzg4IDEyNi41MDQgNzkuNzQxOSAxMjYuNTc4TDc5LjMyNzggMTI3LjM1OUw3OC45NzYzIDEyNy45ODRDNzguOTc2MyAxMjcuODk4IDc5LjA1NDQgMTI3LjgyIDc5LjA4NTcgMTI3LjczNEw3OS43MzQxIDEyNi4wN0M3OS43NjU1IDEyNS45ODkgNzkuNzY2MiAxMjUuODk5IDc5LjczNiAxMjUuODE3Qzc5LjcwNTggMTI1LjczNSA3OS42NDY4IDEyNS42NjcgNzkuNTcgMTI1LjYyNUM3OS41Mjg3IDEyNS42MDIgNzkuNDgzMSAxMjUuNTg4IDc5LjQzNjEgMTI1LjU4M0M3OS4zODkgMTI1LjU3OCA3OS4zNDE1IDEyNS41ODIgNzkuMjk2MyAxMjUuNTk2Qzc5LjI1MSAxMjUuNjEgNzkuMjA5MSAxMjUuNjMzIDc5LjE3MjkgMTI1LjY2M0M3OS4xMzY3IDEyNS42OTQgNzkuMTA3IDEyNS43MzEgNzkuMDg1NyAxMjUuNzczTDc4LjIxODUgMTI3LjMzNkw3OC4xMjQ3IDEyNy40NzdMNzguOTkxOSAxMjUuNjE3Qzc5LjAzMDcgMTI1LjU0IDc5LjAzOTMgMTI1LjQ1IDc5LjAxNjMgMTI1LjM2N0M3OC45OTMyIDEyNS4yODMgNzguOTQgMTI1LjIxMSA3OC44NjY5IDEyNS4xNjRDNzguODI3NSAxMjUuMTM4IDc4Ljc4MzIgMTI1LjExOSA3OC43MzY3IDEyNS4xMUM3OC42OTAxIDEyNS4xMDEgNzguNjQyMiAxMjUuMTAxIDc4LjU5NTggMTI1LjExMUM3OC41NDkzIDEyNS4xMiA3OC41MDUxIDEyNS4xMzkgNzguNDY1OCAxMjUuMTY1Qzc4LjQyNjYgMTI1LjE5MiA3OC4zOTI5IDEyNS4yMjYgNzguMzY2OSAxMjUuMjY2TDc2LjY3MTYgMTI3Ljg5MUw3Ni4xMzI1IDEyOC40MzdMNzYuMTg3MiAxMjcuODA1TDc2LjY5NSAxMjYuODQ0Qzc2LjczNzYgMTI2Ljc2OSA3Ni43NTA4IDEyNi42ODEgNzYuNzMxOCAxMjYuNTk3Qzc2LjcxMjggMTI2LjUxNCA3Ni42NjMyIDEyNi40NCA3Ni41OTI2IDEyNi4zOTFDNzYuNTIyIDEyNi4zNDIgNzYuNDM1NiAxMjYuMzIxIDc2LjM1MDUgMTI2LjMzM0M3Ni4yNjUzIDEyNi4zNDQgNzYuMTg3NiAxMjYuMzg3IDc2LjEzMjUgMTI2LjQ1M0w3NS4yOTY2IDEyNy4zODNDNzUuMjcwOSAxMjcuNDEyIDc1LjI1MjIgMTI3LjQ0NyA3NS4yNDE5IDEyNy40ODRWMTI3LjU3OEM3NS4yNDE5IDEyNy41NzggNzQuNjYzOCAxMjkuODgzIDc0LjY2MzggMTI5LjkyMkw3My41NjIyIDEzMS4wMzFDNzMuMjgxNCAxMzEuMzA1IDczLjExOTYgMTMxLjY3OSA3My4xMTIxIDEzMi4wNzFDNzMuMTA0NSAxMzIuNDYzIDczLjI1MTggMTMyLjg0MiA3My41MjE5IDEzMy4xMjdDNzMuNzkyIDEzMy40MTEgNzQuMTYzMyAxMzMuNTc4IDc0LjU1NTQgMTMzLjU5MUM3NC45NDc1IDEzMy42MDQgNzUuMzI4OCAxMzMuNDYyIDc1LjYxNjkgMTMzLjE5NUw3Ny4xNzk0IDEzMS44MTJDNzcuNDQ1IDEzMS43MTkgNzcuNzAyOCAxMzEuNjE3IDc3Ljk2MDcgMTMxLjVDNzguMzU0OSAxMzEuMzI3IDc4LjcxMDggMTMxLjA3NyA3OS4wMDc1IDEzMC43NjZDNzkuNTU1MiAxMzAuMjA0IDgwLjA2MTcgMTI5LjYwMyA4MC41MjMyIDEyOC45NjlDODAuNTcxIDEyOC45MTMgODAuNTk3MyAxMjguODQzIDgwLjU5NzMgMTI4Ljc3QzgwLjU5NzMgMTI4LjY5NiA4MC41NzEgMTI4LjYyNiA4MC41MjMyIDEyOC41N0M4MC41MDAyIDEyOC41MTIgODAuNDU5NiAxMjguNDYzIDgwLjQwNzEgMTI4LjQyOUM4MC4zNTQ2IDEyOC4zOTYgODAuMjkyOSAxMjguMzggODAuMjMwNiAxMjguMzgzQzgwLjE2ODQgMTI4LjM4NyA4MC4xMDg4IDEyOC40MSA4MC4wNjA0IDEyOC40NDlDODAuMDExOSAxMjguNDg4IDc5Ljk3NyAxMjguNTQxIDc5Ljk2MDcgMTI4LjYwMloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTUzLjM3NSAxMzMuNDg0TDUzLjY4NzUgMTMzLjYyNUw2NC4yMDMxIDEzOS4wOTRMNzMuNDM3NSAxMzEuMDdMNzMuNjMyOCAxMzAuODc1Qzc0LjE3NjIgMTMxLjA0NCA3NC42NTM4IDEzMS4zNzcgNzUgMTMxLjgyOEM3NS4zNzU3IDEzMi4yMjggNzUuNTg0OSAxMzIuNzU2IDc1LjU4NDkgMTMzLjMwNUM3NS41ODQ5IDEzMy44NTMgNzUuMzc1NyAxMzQuMzgxIDc1IDEzNC43ODFMNjYuNDA2MiAxNDMuOTQ1QzY1LjcxODcgMTQ0LjY3MiA2NC45MDYyIDE0NC43MjcgNjMuNzg5MSAxNDQuNTMxQzYxLjcyMSAxNDQuMTY3IDU5LjY3OTggMTQzLjY2MyA1Ny42Nzk3IDE0My4wMjNDNTUuMzAwOSAxNDIuMTY2IDUzLjA1NDggMTQwLjk3NyA1MS4wMDc4IDEzOS40OTIiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik01My4zNzUgMTMzLjQ4NEw1My42ODc1IDEzMy42MjVMNjQuMjAzMSAxMzkuMDk0TDczLjQzNzUgMTMxLjA3TDczLjYzMjggMTMwLjg3NUM3NC4xNzYyIDEzMS4wNDQgNzQuNjUzOCAxMzEuMzc3IDc1IDEzMS44MjhDNzUuMzc1NyAxMzIuMjI4IDc1LjU4NDkgMTMyLjc1NiA3NS41ODQ5IDEzMy4zMDVDNzUuNTg0OSAxMzMuODUzIDc1LjM3NTcgMTM0LjM4MSA3NSAxMzQuNzgxTDY2LjQwNjIgMTQzLjk0NUM2NS43MTg3IDE0NC42NzIgNjQuOTA2MiAxNDQuNzI3IDYzLjc4OTEgMTQ0LjUzMUM2MS43MjEgMTQ0LjE2NyA1OS42Nzk4IDE0My42NjMgNTcuNjc5NyAxNDMuMDIzQzU1LjMwMDkgMTQyLjE2NiA1My4wNTQ4IDE0MC45NzcgNTEuMDA3OCAxMzkuNDkyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTU2LjI1IDEyMi41MTZDNTYuNDE0MSAxMjMuMjI5IDU2LjUwODMgMTIzLjk1NiA1Ni41MzEyIDEyNC42ODhDNTYuNTMxMiAxMjUuMzk4IDU0Ljk2ODggMTIzLjcwMyA1NC45Njg4IDEyMy43MDNMNTYuMjUgMTIyLjUxNloiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNTEuMjY1NSAxMjkuMzc1QzUwLjcwMTEgMTI4Ljk1NCA1MC4yMjgxIDEyOC40MjIgNDkuODc0OSAxMjcuODEzQzQ5LjM5ODMgMTI2LjkzNyA0OS4yODkgMTI1LjkwOCA0OS41NzExIDEyNC45NTJDNDkuODUzMSAxMjMuOTk2IDUwLjUwMzQgMTIzLjE5MSA1MS4zNzg4IDEyMi43MTVDNTIuMjU0MiAxMjIuMjM4IDUzLjI4MzEgMTIyLjEyOSA1NC4yMzkxIDEyMi40MTFDNTUuMTk1MSAxMjIuNjkzIDU1Ljk5OTkgMTIzLjM0MyA1Ni40NzY0IDEyNC4yMTlDNTcuNDY4NiAxMjYuMDQ3IDU3LjU1NDYgMTI5LjM0NCA1NS42OTUyIDEzMC4zMzZDNTUuMDg3OCAxMzAuNjM4IDU0LjM5MzIgMTMwLjcxNSA1My43MzQzIDEzMC41NTUiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik01MS4yNjU1IDEyOS4zNzVDNTAuNzAxMSAxMjguOTU0IDUwLjIyODEgMTI4LjQyMiA0OS44NzQ5IDEyNy44MTNDNDkuMzk4MyAxMjYuOTM3IDQ5LjI4OSAxMjUuOTA4IDQ5LjU3MTEgMTI0Ljk1MkM0OS44NTMxIDEyMy45OTYgNTAuNTAzNCAxMjMuMTkxIDUxLjM3ODggMTIyLjcxNUM1Mi4yNTQyIDEyMi4yMzggNTMuMjgzMSAxMjIuMTI5IDU0LjIzOTEgMTIyLjQxMUM1NS4xOTUxIDEyMi42OTMgNTUuOTk5OSAxMjMuMzQzIDU2LjQ3NjQgMTI0LjIxOUM1Ny40Njg2IDEyNi4wNDcgNTcuNTU0NiAxMjkuMzQ0IDU1LjY5NTIgMTMwLjMzNkM1NS4wODc4IDEzMC42MzggNTQuMzkzMiAxMzAuNzE1IDUzLjczNDMgMTMwLjU1NSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik01NC4yNDIxIDEyNy4xNzJDNTQuMjQyMSAxMjcuMTcyIDU0LjgxMjQgMTI2LjgyIDU0LjQzNzUgMTI1LjkzQzU0LjA2MjUgMTI1LjAzOSA1NC4wNjI1IDEyNS4yMTEgNTQuNDM3NSAxMjQuNzAzQzU0LjgxMjQgMTI0LjE5NSA1NC44NzUgMTI0LjIyNyA1NC43ODEyIDEyMy40MzdDNTQuNzQyMSAxMjMuMDk0IDU1LjkxNCAxMjMuMjgxIDU2LjQ5MjEgMTIyLjcxOUM1Ny4wNzAzIDEyMi4xNTYgNTYuMzQzNyAxMjAuMTU2IDU1LjcxMDkgMTE5LjgyOEM1NS4wNzgxIDExOS41IDU0LjE0ODQgMTIwLjE1NiA1My43NSAxMTkuOTE0QzUzLjM1MTUgMTE5LjY3MiA1My4wODU5IDExOS40MjIgNTIuNzEwOSAxMTkuNDc3QzUyLjMzNTkgMTE5LjUzMSA1Mi4yMDMxIDExOS45MDYgNTEuNzU3OCAxMTkuOTM3QzUxLjMxMjUgMTE5Ljk2OSA1MS4xNDA2IDExOS4zNzUgNTAuNDkyMSAxMTkuNTIzQzQ5LjcxMDkgMTE5LjY5NSA0OS45MjE4IDEyMC4xNjQgNDkuNTQ2OCAxMjAuMzk4QzQ5LjE3MTggMTIwLjYzMyA0OC43NjU2IDEyMC4zOTggNDguMzk4NCAxMjAuOTY5QzQ4LjE3OTYgMTIxLjI3MyA0OC41NDY4IDEyMS43MDMgNDguMjY1NiAxMjEuNzk3QzQ4LjAzNDMgMTIxLjg0OCA0Ny44MjE1IDEyMS45NjIgNDcuNjUwNiAxMjIuMTI2QzQ3LjQ3OTcgMTIyLjI5IDQ3LjM1NzMgMTIyLjQ5OCA0Ny4yOTY4IDEyMi43MjdDNDcuMjQyMSAxMjMuMTY0IDQ3LjM5ODQgMTIzLjYxNyA0Ny4yOTY4IDEyMy44NDRDNDcuMDcwMyAxMjQuMjI3IDQ3LjI5NjggMTI0Ljc4OSA0Ny40Mzc1IDEyNS4wODZDNDcuNzM0MyAxMjUuNzg5IDQ3LjU5MzcgMTI2LjA3OCA0Ny44MzU5IDEyNi42OTVDNDguNTYyNSAxMjguNTU1IDQ5Ljc1IDEyOS43NDIgNTAuNjc5NiAxMjkuOTkyQzUxLjE2NjIgMTMwLjE3MiA1MS43MDA5IDEzMC4xNzIgNTIuMTg3NSAxMjkuOTkyQzUyLjQ1MzEgMTI5Ljg4MyA1Mi44MDQ2IDEyOC4zNzUgNTIuNzgxMiAxMjcuMDdDNTIuNzU3OCAxMjUuNzY2IDUyLjg1OTMgMTI2LjUwOCA1My4yOTY4IDEyNi40NzdDNTMuNzM0MyAxMjYuNDQ1IDU0LjI0MjEgMTI3LjE3MiA1NC4yNDIxIDEyNy4xNzJaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41NSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik01My44NTQzIDEyOC40NDJDNTQuMzAwMSAxMjguMTU0IDU0LjM2MzcgMTI3LjQ1OSA1My45OTYyIDEyNi44OUM1My42Mjg3IDEyNi4zMjEgNTIuOTY5NCAxMjYuMDkzIDUyLjUyMzYgMTI2LjM4MUM1Mi4wNzc3IDEyNi42NjkgNTIuMDE0MiAxMjcuMzY0IDUyLjM4MTYgMTI3LjkzM0M1Mi43NDkxIDEyOC41MDIgNTMuNDA4NCAxMjguNzMgNTMuODU0MyAxMjguNDQyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTgyLjY3MTcgMTY0LjMxM0M4Mi4wNjIzIDE2NS4wOTQgODIuODI3OSAxNjQuNjggODMuMDkzNiAxNjYuMDIzQzgyLjk2NzkgMTY2LjI2MyA4Mi45MjkzIDE2Ni41MzkgODIuOTg0MiAxNjYuODA1QzgyLjg1ODMgMTY2LjkwMyA4Mi43NjM0IDE2Ny4wMzYgODIuNzEwOCAxNjcuMTg4QzgyLjcxMDggMTY3LjM4MyA4Mi43MTA4IDE2OC4xMTcgODIuOTA2MSAxNjguMjczQzgzLjEwMTQgMTY4LjQzIDkxLjIyNjQgMTY4LjQ2MSA5MS43NzMzIDE2OC40NDVDOTIuNjg0MyAxNjguMzk1IDkzLjU4NTEgMTY4LjIyNyA5NC40NTI5IDE2Ny45NDVDOTUuMDYyMyAxNjcuNzAzIDk1LjM5ODMgMTY3LjM0NCA5NS4zNjcgMTY2Ljk2OUM5NS4zNDIgMTY2LjgwMyA5NS4yNjk4IDE2Ni42NDggOTUuMTU4OSAxNjYuNTIxQzk1LjA0ODEgMTY2LjM5NSA5NC45MDM0IDE2Ni4zMDQgOTQuNzQyIDE2Ni4yNThDOTQuNDEzOSAxNjYuMTE3IDkyLjM5ODMgMTY1LjYxNyA5Mi4wODU4IDE2NS40NzdDOTEuNzczMyAxNjUuMzM2IDg5LjYyNDggMTYzLjkxNCA4OS4zNzQ4IDE2My43MzRDODguODIyIDE2My40MDMgODguMjk5MiAxNjMuMDI0IDg3LjgxMjMgMTYyLjYwMkM4Ny43MjgyIDE2Mi40OCA4Ny42MDMgMTYyLjM5MiA4Ny40NTk1IDE2Mi4zNTVDODcuMzE2MSAxNjIuMzE3IDg3LjE2NCAxNjIuMzMzIDg3LjAzMTEgMTYyLjM5OEM4Ny4wMzExIDE2Mi4zOTggODYuNjk1MSAxNjIuNTc4IDg3LjAzMTEgMTYyLjk5MkM4Ni43MTcyIDE2My4xNDUgODYuNDE4OSAxNjMuMzI4IDg2LjE0MDQgMTYzLjUzOUM4NS45MDYxIDE2My43MTkgODQuNTc3OSAxNjQuNDg0IDgzLjc0OTggMTY0LjMyQzgzLjA3MDEgMTY0LjA2MyA4Mi45NjA4IDE2My45NTMgODIuNjcxNyAxNjQuMzEzWiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNzQuMzUxNyAxNTMuNTk0TDc0LjQyOTggMTU0LjgxMkM3NC40Mjk4IDE1NC44MTIgNjkuODk4NSAxNjAuMTg3IDY4Ljc3MzUgMTYxLjA2MkM2OC43NTAxIDE2MS4wODYgNzMuMjY1NyAxNTYuMjUgNzQuMzUxNyAxNTMuNTk0WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQyLjA3OCA3MS4wOTM3QzE0Mi4wNzggNzEuMDkzNyAxNDMuMDcgNzAuMDkzNyAxNDIuODU5IDY5LjI2NTZDMTQyLjU3NCA2OS42OTE3IDE0Mi4xOTggNzAuMDQ5MiAxNDEuNzU4IDcwLjMxMjVDMTQxLjc1OCA3MC4zMTI1IDE0MS45NjEgNzAuNzczNCAxNDIuMDc4IDcxLjA5MzdaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC4yNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik01My43MTg4IDEzMC41NDdDNTMuNDcwMSAxMzAuNDQ5IDUzLjIyOTcgMTMwLjMzMiA1MyAxMzAuMTk1QzUzLjAzNjMgMTMwLjM5NSA1My4xMTc4IDEzMC41ODUgNTMuMjM4MyAxMzAuNzQ4QzUzLjM1ODggMTMwLjkxMiA1My41MTUxIDEzMS4wNDYgNTMuNjk1MyAxMzEuMTQxQzUzLjY5MTUgMTMwLjk0MiA1My42OTk0IDEzMC43NDQgNTMuNzE4OCAxMzAuNTQ3WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTYyLjY5NSAxNDIuMzA1VjE2Ny44MDUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTc5LjQ2OSAxMjYuMzQ0QzE3OS40NjggMTI0LjU4MiAxNzguOTgxIDEyMi44NTUgMTc4LjA2NCAxMjEuMzUyQzE3Ny4xNDYgMTE5Ljg0OCAxNzUuODMyIDExOC42MjYgMTc0LjI2NiAxMTcuODJDMTcwLjczNCAxMTUuNjY0IDE3NC4wMzkgMTEwLjA2MiAxNjkuMDc4IDEwNi4yMjdDMTYxLjQwNiAxMDEuMTg3IDE1My4zMTMgMTA2LjU3IDE1My4zMTMgMTEzLjgzNkMxNTMuNDQ5IDExNC41OTYgMTUzLjMzOCAxMTUuMzgxIDE1Mi45OTcgMTE2LjA3NEMxNTIuNjU1IDExNi43NjcgMTUyLjEgMTE3LjMzMiAxNTEuNDE0IDExNy42ODdDMTQ5Ljc2OSAxMTguNDYxIDE0OC4zNzggMTE5LjY4NyAxNDcuNDAzIDEyMS4yMjJDMTQ2LjQyOSAxMjIuNzU3IDE0NS45MTEgMTI0LjUzNyAxNDUuOTExIDEyNi4zNTVDMTQ1LjkxMSAxMjguMTc0IDE0Ni40MjkgMTI5Ljk1NCAxNDcuNDAzIDEzMS40ODlDMTQ4LjM3OCAxMzMuMDI0IDE0OS43NjkgMTM0LjI1IDE1MS40MTQgMTM1LjAyM0MxNTEuOTk1IDEzNS4zMDggMTUyLjQ4MSAxMzUuNzU0IDE1Mi44MTMgMTM2LjMwOUMxNTMuMTQ2IDEzNi44NjMgMTUzLjMxMSAxMzcuNTAyIDE1My4yODkgMTM4LjE0OEMxNTMuMjg5IDE0NS4yNTggMTYxLjAzMSAxNTAuNTYyIDE2OC41MzkgMTQ2LjA4NkMxNzMuODUyIDE0Mi4yMzQgMTcwLjg4MyAxMzYuOTkyIDE3NC4yMjcgMTM0LjgzNkMxNzUuNzk4IDEzNC4wNCAxNzcuMTE4IDEzMi44MjYgMTc4LjA0MyAxMzEuMzI4QzE3OC45NjggMTI5LjgyOSAxNzkuNDYyIDEyOC4xMDUgMTc5LjQ2OSAxMjYuMzQ0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTY3LjEwMiAxNjguNDE0SDE1OC4yODlMMTU2LjAwOCAxNTMuNTYySDE2OS4zODNMMTY3LjEwMiAxNjguNDE0WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNjIuNjk1IDE0OS45NTNWMTEzLjMyOCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjIuNjk1IDE0Mi4yNThDMTYyLjY5NSAxNDIuMjU4IDE2Ni4yOTcgMTM5LjgyIDE2Ni42NDggMTM3LjE0OCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjIuNjk1IDEyMi40OTJDMTYyLjY5NSAxMjIuNDkyIDE2Ni4yOTcgMTIwLjA0NyAxNjYuNjQ4IDExNy4zNzUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTYyLjY5NSAxMzEuNDE0QzE2Mi42OTUgMTMxLjQxNCAxNTkuMDk0IDEyOC45NzcgMTU4Ljc0MiAxMjYuMjk3IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTIyLjEwOTQgOTQuODU5NEgxOS43ODkxVjk3LjE3OTdIMjIuMTA5NFY5NC44NTk0WiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yMi41OTE0IDEwMC44NTVMMjAuOTUwNyA5OS4yMTQ4TDE5LjMxIDEwMC44NTVMMjAuOTUwNyAxMDIuNDk2TDIyLjU5MTQgMTAwLjg1NVoiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMjIuMTA5NCAxMDQuNTM5SDE5Ljc4OTFWMTA2Ljg1OUgyMi4xMDk0VjEwNC41MzlaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTcwLjc5NyAyNS45Mjk3SDkwLjUwNzlDOTEuMzA3IDI1LjkzMDcgOTIuMDk4MSAyNi4wODk1IDkyLjgzNTcgMjYuMzk3QzkzLjU3MzQgMjYuNzA0NSA5NC4yNDMgMjcuMTU0NiA5NC44MDYzIDI3LjcyMTRDOTUuMzY5NSAyOC4yODgzIDk1LjgxNTMgMjguOTYwOSA5Ni4xMTgxIDI5LjcwMDVDOTYuNDIwOCAzMC40NCA5Ni41NzQ1IDMxLjIzMjEgOTYuNTcwNCAzMi4wMzEzVjMzLjk2MDlDOTYuNTcwNCAzNS41NzA5IDk1LjkzMDggMzcuMTE0OSA5NC43OTI0IDM4LjI1MzNDOTMuNjU0IDM5LjM5MTcgOTIuMTEgNDAuMDMxMyA5MC41MDAxIDQwLjAzMTNINjQuNzE4OFYzMi4wMzEzQzY0LjcxNDcgMzEuMjMwOCA2NC44Njg5IDMwLjQzNzQgNjUuMTcyNiAyOS42OTY4QzY1LjQ3NjMgMjguOTU2MiA2NS45MjM1IDI4LjI4MyA2Ni40ODg1IDI3LjcxNTlDNjcuMDUzNCAyNy4xNDg4IDY3LjcyNDkgMjYuNjk5IDY4LjQ2NDMgMjYuMzkyNUM2OS4yMDM3IDI2LjA4NTkgNjkuOTk2NSAyNS45Mjg3IDcwLjc5NyAyNS45Mjk3WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik03Mi4yMTg4IDI5LjgyODFIODkuNDc2NiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIwLjc1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTcyLjIxODggMzMuMDE1Nkg4OS40NzY2IiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjAuNzUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNzIuMjE4OCAzNi4wOTM4SDg5LjQ3NjYiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMC43NSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMTAuMTQ4IDQ4SDg0LjM2NzJDODIuNzU3MiA0OCA4MS4yMTMyIDQ3LjM2MDQgODAuMDc0OCA0Ni4yMjJDNzguOTM2NCA0NS4wODM2IDc4LjI5NjkgNDMuNTM5NiA3OC4yOTY5IDQxLjkyOTdWNDBDNzguMjk2OSAzOC4zOTAxIDc4LjkzNjQgMzYuODQ2IDgwLjA3NDggMzUuNzA3NkM4MS4yMTMyIDM0LjU2OTIgODIuNzU3MiAzMy45Mjk3IDg0LjM2NzIgMzMuOTI5N0gxMDQuMDg2QzEwNS42OTYgMzMuOTI5NyAxMDcuMjQgMzQuNTY5MiAxMDguMzc4IDM1LjcwNzZDMTA5LjUxNyAzNi44NDYgMTEwLjE1NiAzOC4zOTAxIDExMC4xNTYgNDBWNDhIMTEwLjE0OFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwMi42NTYgMzcuODM1OUg4NS4zOTg0IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwMi42NTYgNDEuMDIzNEg4NS4zOTg0IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwMi42NTYgNDQuMTAxNkg4NS4zOTg0IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMxLjQ2ODggMTU3LjEzM0gyMC4xNzE5VjE2OC40M0gzMS40Njg4VjE1Ny4xMzNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMC4xNzE5IDE2NS4zMkwyMi42MjUgMTYyLjc4MUwyNC4yMjY2IDE2NC4zODMiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMjAuMTcxOSAxNjguNDNMMjguNDc2NiAxNjAuMTMzTDMxLjQ3NjYgMTYzLjEzMyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMy4wMzEyIDE2MS4yMTFDMjMuNzc3NyAxNjEuMjExIDI0LjM4MjggMTYwLjYwNiAyNC4zODI4IDE1OS44NTlDMjQuMzgyOCAxNTkuMTEzIDIzLjc3NzcgMTU4LjUwOCAyMy4wMzEyIDE1OC41MDhDMjIuMjg0OCAxNTguNTA4IDIxLjY3OTcgMTU5LjExMyAyMS42Nzk3IDE1OS44NTlDMjEuNjc5NyAxNjAuNjA2IDIyLjI4NDggMTYxLjIxMSAyMy4wMzEyIDE2MS4yMTFaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0xMzcuODEyIDE3MS44MzVMMTM1LjA2NyAxNjkuMDg5TDEzMi4zMjEgMTcxLjgzNUwxMzUuMDY3IDE3NC41ODFMMTM3LjgxMiAxNzEuODM1WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE0MC43NDkgMTcxLjg0MkwxMzguMDAzIDE2OS4wOTZMMTM1LjI1OCAxNzEuODQyTDEzOC4wMDMgMTc0LjU4N0wxNDAuNzQ5IDE3MS44NDJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTMiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTc1LjU5IDc5LjQ2NTNMMTcxLjYwNyA4My40NDgzTDE3NS41OSA4Ny40MzEzTDE3OS41NzMgODMuNDQ4M0wxNzUuNTkgNzkuNDY1M1oiIGZpbGw9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTE3NS41ODUgNzUuMjE3OUwxNzEuNjAyIDc5LjIwMDlMMTc1LjU4NSA4My4xODM5TDE3OS41NjggNzkuMjAwOUwxNzUuNTg1IDc1LjIxNzlaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTMiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzAuMzIyNiAyOC44Mzc1TDI3LjIyOSAyNS43NDM5TDI0LjEzNTQgMjguODM3NUwyNy4yMjkgMzEuOTMxMUwzMC4zMjI2IDI4LjgzNzVaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0zMy42MTUxIDI4LjgzMjhMMzAuNTIxNSAyNS43MzkyTDI3LjQyNzkgMjguODMyOEwzMC41MjE1IDMxLjkyNjRMMzMuNjE1MSAyOC44MzI4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI3LjE4NzUgNzUuODI4MUMzMy41MTI5IDc1LjgyODEgMzguNjQwNiA3MC43MDA0IDM4LjY0MDYgNjQuMzc1QzM4LjY0MDYgNTguMDQ5NiAzMy41MTI5IDUyLjkyMTkgMjcuMTg3NSA1Mi45MjE5QzIwLjg2MjEgNTIuOTIxOSAxNS43MzQ0IDU4LjA0OTYgMTUuNzM0NCA2NC4zNzVDMTUuNzM0NCA3MC43MDA0IDIwLjg2MjEgNzUuODI4MSAyNy4xODc1IDc1LjgyODFaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yNy4xODc1IDYwLjU0NjlWNjguMjEwOSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMxLjAyMzQgNjQuMzc1SDIzLjM1OTQiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjQuODUyIDM3Ljk0NTNWNTAuNjA5NEgxNTIuNDc3TDE1MC4wNyA1My4yMzQ0VjUwLjYwOTRIMTQ3LjI4OVYzNy45NDUzSDE2NC44NTJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYuMDcgNDcuOTkyMkMxNTQuNzQ1IDQ3LjQwMzggMTUzLjU5NSA0Ni40ODAzIDE1Mi43MzQgNDUuMzEyNUMxNTEuNjU2IDQzLjU5MzcgMTUyLjA3IDQxLjY2NDEgMTUzLjY0MSA0MS4wODU5QzE1NS4yMTEgNDAuNTA3OCAxNTYuMDcgNDIuMTg3NSAxNTYuMDcgNDIuMTg3NUMxNTYuMDcgNDIuMTg3NSAxNTcuMDA4IDQwLjU2MjUgMTU4LjUwOCA0MS4xMDk0QzE2MC4wMDggNDEuNjU2MiAxNjAuNDg0IDQzLjYxNzIgMTU5LjQxNCA0NS4zMzU5QzE1OC41NDkgNDYuNDk2MiAxNTcuMzk2IDQ3LjQxMTUgMTU2LjA3IDQ3Ljk5MjJaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE2OS43NDIgMzMuNjAxNkwxNjYuMzc1IDM2Ljk2ODgiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTcxLjI2NiAzNy45Mzc1TDE2Ny40MTQgMzguNDkyMiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjUuNDA2IDMyLjA3ODFMMTY0Ljg1MiAzNS45MjE5IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEzMS4xNDggMjIuNTMxMkwxMzAuNDMgMzAuNTM5MSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNzUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0Ljc5NyAyNi44OTA2TDEyNi43ODEgMjYuMTc5NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNzUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTg1LjM5OCAzMy4zOTA2QzE4Ni40MzQgMzYuMjI2OSAxODYuOTYyIDM5LjIyMjkgMTg2Ljk2MSA0Mi4yNDIyTDE4NS4zOTggMzMuMzkwNloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xODUuMzk4IDMzLjM5MDZDMTg2LjQzNCAzNi4yMjY5IDE4Ni45NjIgMzkuMjIyOSAxODYuOTYxIDQyLjI0MjIiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTYxLjI1IDE2LjUzOTFDMTY1LjAzNyAxNi41MzU3IDE2OC43NzggMTcuMzcwMiAxNzIuMjA1IDE4Ljk4M0MxNzUuNjMyIDIwLjU5NTcgMTc4LjY1OSAyMi45NDY2IDE4MS4wNyAyNS44NjcyIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTYxLjI1IDE2LjUzOTFDMTY1LjAzNyAxNi41MzU3IDE2OC43NzggMTcuMzcwMiAxNzIuMjA1IDE4Ljk4M0MxNzUuNjMyIDIwLjU5NTcgMTc4LjY1OSAyMi45NDY2IDE4MS4wNyAyNS44NjcyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE3Ni43ODEgMjguODM1OUMxNzkuNTk5IDMxLjY1IDE4MS41NTkgMzUuMjA3MyAxODIuNDMyIDM5LjA5M0MxODMuMzA1IDQyLjk3ODYgMTgzLjA1NSA0Ny4wMzIzIDE4MS43MTEgNTAuNzgxMyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE3Ni43ODEgMjguODM1OUMxNzkuNTk5IDMxLjY1IDE4MS41NTkgMzUuMjA3MyAxODIuNDMyIDM5LjA5M0MxODMuMzA1IDQyLjk3ODYgMTgzLjA1NSA0Ny4wMzIzIDE4MS43MTEgNTAuNzgxMyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yOS43MzQ0IDEzNy43OTdDMjcuMjQ4IDEzNy43OTcgMjQuODYzNCAxMzYuODA5IDIzLjEwNTIgMTM1LjA1MUMyMS4zNDcxIDEzMy4yOTMgMjAuMzU5NCAxMzAuOTA4IDIwLjM1OTQgMTI4LjQyMiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTI5LjczNDQgMTM3Ljc5N0MyNy4yNDggMTM3Ljc5NyAyNC44NjM0IDEzNi44MDkgMjMuMTA1MiAxMzUuMDUxQzIxLjM0NzEgMTMzLjI5MyAyMC4zNTk0IDEzMC45MDggMjAuMzU5NCAxMjguNDIyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTI5LjczNDQgMTM0LjYwOUMyOC4wOTEzIDEzNC42MDkgMjYuNTE1NSAxMzMuOTU3IDI1LjM1MzYgMTMyLjc5NUMyNC4xOTE4IDEzMS42MzMgMjMuNTM5MSAxMzAuMDU3IDIzLjUzOTEgMTI4LjQxNCIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTI5LjczNDQgMTM0LjYwOUMyOC4wOTEzIDEzNC42MDkgMjYuNTE1NSAxMzMuOTU3IDI1LjM1MzYgMTMyLjc5NUMyNC4xOTE4IDEzMS42MzMgMjMuNTM5MSAxMzAuMDU3IDIzLjUzOTEgMTI4LjQxNCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxjaXJjbGUgY3g9IjUzIiBjeT0iNDkiIHI9IjMiIGZpbGw9IiMwQTA2MDYiLz4KPC9zdmc+Cg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01MS40NzY2IDc1Ljk0NTNIMzcuODIwM1Y4OS42MDE2SDUxLjQ3NjZWNzUuOTQ1M1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM3LjgyMDMgODUuODQzOEw0MC43ODEzIDgyLjc3MzRMNDIuNzE4NyA4NC43MDMxIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM3LjgyMDMgODkuNjAxNkw0Ny44NTE2IDc5LjU3MDNMNTEuNDc2NiA4My4xOTUzIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTQxLjI3MzQgODAuODc1QzQyLjE3NTIgODAuODc1IDQyLjkwNjIgODAuMTQ0IDQyLjkwNjIgNzkuMjQyMkM0Mi45MDYyIDc4LjM0MDQgNDIuMTc1MiA3Ny42MDk0IDQxLjI3MzQgNzcuNjA5NEM0MC4zNzE3IDc3LjYwOTQgMzkuNjQwNiA3OC4zNDA0IDM5LjY0MDYgNzkuMjQyMkMzOS42NDA2IDgwLjE0NCA0MC4zNzE3IDgwLjg3NSA0MS4yNzM0IDgwLjg3NVoiIGZpbGw9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTI2LjExNzggNTcuNjc4MUwyMi4xMzQ4IDYxLjY2MTFMMjYuMTE3OCA2NS42NDQxTDMwLjEwMDggNjEuNjYxMUwyNi4xMTc4IDU3LjY3ODFaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0yNi4xMjAyIDUzLjQzMDhMMjIuMTM3MiA1Ny40MTM4TDI2LjEyMDIgNjEuMzk2OEwzMC4xMDMyIDU3LjQxMzhMMjYuMTIwMiA1My40MzA4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTMyLjM4MjggMTA0Ljc1OEMyOS44OTY0IDEwNC43NTggMjcuNTExOCAxMDMuNzcgMjUuNzUzNyAxMDIuMDEyQzIzLjk5NTUgMTAwLjI1NCAyMy4wMDc4IDk3Ljg2OTIgMjMuMDA3OCA5NS4zODI4IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzIuMzgyOCAxMDQuNzU4QzI5Ljg5NjQgMTA0Ljc1OCAyNy41MTE4IDEwMy43NyAyNS43NTM3IDEwMi4wMTJDMjMuOTk1NSAxMDAuMjU0IDIzLjAwNzggOTcuODY5MiAyMy4wMDc4IDk1LjM4MjgiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzIuMzgyOCAxMDEuNTYyQzMwLjc0MjQgMTAxLjU2IDI5LjE2OTggMTAwLjkwOCAyOC4wMDk5IDk5Ljc0NzlDMjYuODQ5OSA5OC41ODggMjYuMTk3NCA5Ny4wMTU0IDI2LjE5NTMgOTUuMzc1IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzIuMzgyOCAxMDEuNTYyQzMwLjc0MjQgMTAxLjU2IDI5LjE2OTggMTAwLjkwOCAyOC4wMDk5IDk5Ljc0NzlDMjYuODQ5OSA5OC41ODggMjYuMTk3NCA5Ny4wMTU0IDI2LjE5NTMgOTUuMzc1IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwMC4wODYgMjEuMDkzOEwxMDMuMDYyIDI0LjA3ODEiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOTguNzQyMiAyNC45Mzc1TDEwMi4xNDggMjUuNDI5NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMDMuOTMgMTkuNzVMMTA0LjQxNCAyMy4xNTYyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTcxLjYxNzIgNDYuOTI5N0w3MS44MjgxIDUyLjc4MTMiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjc1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTc0LjY0ODQgNDkuNzVMNjguNzk2OSA0OS45NjA5IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC43NSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik03NC41ODMyIDgyLjg3NzFMNzEuOTg2OCA4MC4yODA3TDY5LjM5MDQgODIuODc3MUw3MS45ODY4IDg1LjQ3MzVMNzQuNTgzMiA4Mi44NzcxWiIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNNzcuMzU2NyA4Mi44NzczTDc0Ljc2MDMgODAuMjgwOUw3Mi4xNjM5IDgyLjg3NzNMNzQuNzYwMyA4NS40NzM3TDc3LjM1NjcgODIuODc3M1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41MyIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik04NC43NjU2IDE0MS4yODFIMTkxLjQ2MSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMC44ODI4IDE0MS4yODFIODQuNzY1NiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik02MC44NTk0IDEyNS4wOTRWMTU5LjgyOCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNzIuNTIzNCAxMjUuMDk0VjE1NC4wODYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSI1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE2Ny41IDEyNS4wOTRWMTU5LjgyOCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTU1LjgzNiAxMjUuMDk0VjE1NC4wODYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSI1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE3Ni4zOTEgOTkuMjE4OEg1My4wNTQ3VjEzMi40NzdIMTc2LjM5MVY5OS4yMTg4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTc2LjM5MSAxMjQuMDA4SDUzLjA1NDdWMTM3LjAwOEgxNzYuMzkxVjEyNC4wMDhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNzYuMzkxIDEyNC4wMDhINTMuMDU0N1YxMzIuMDdIMTc2LjM5MVYxMjQuMDA4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNODMuNDQ1NSAxODQuOTYxQzgyLjY3MDcgMTg0Ljk2IDgxLjkwOTQgMTg0Ljc1OCA4MS4yMzY2IDE4NC4zNzRDODAuNTYzNyAxODMuOTkgODAuMDAyNiAxODMuNDM3IDc5LjYwODQgMTgyLjc3Qzc5LjIxNDIgMTgyLjEwMyA3OS4wMDA1IDE4MS4zNDUgNzguOTg4MyAxODAuNTdDNzguOTc2MiAxNzkuNzk1IDc5LjE2NjEgMTc5LjAzMSA3OS41MzkyIDE3OC4zNTJMODEuNzUwMiAxNzQuMzI4VjE2OC44NTlDODEuNzUwMiAxNjcuNjc2IDgyLjIyMDIgMTY2LjU0MiA4My4wNTY3IDE2NS43MDVDODMuODkzMyAxNjQuODY4IDg1LjAyOCAxNjQuMzk4IDg2LjIxMTEgMTY0LjM5OEM4Ny4zOTQyIDE2NC4zOTggODguNTI4OSAxNjQuODY4IDg5LjM2NTUgMTY1LjcwNUM5MC4yMDIgMTY2LjU0MiA5MC42NzIgMTY3LjY3NiA5MC42NzIgMTY4Ljg1OVYxNzUuNDY5QzkwLjY3NDUgMTc2LjIyMSA5MC40ODM1IDE3Ni45NiA5MC4xMTczIDE3Ny42MTdMODcuMzUxNyAxODIuNjQ4Qzg2Ljk2NzggMTgzLjM0OSA4Ni40MDI2IDE4My45MzMgODUuNzE1NCAxODQuMzRDODUuMDI4MSAxODQuNzQ3IDg0LjI0NDEgMTg0Ljk2MSA4My40NDU1IDE4NC45NjFaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0xMDkuMDA4IDE4NC45NjFDMTA5Ljc4MyAxODQuOTYgMTEwLjU0NCAxODQuNzU4IDExMS4yMTcgMTg0LjM3NEMxMTEuODkgMTgzLjk5IDExMi40NTEgMTgzLjQzNyAxMTIuODQ1IDE4Mi43N0MxMTMuMjM5IDE4Mi4xMDMgMTEzLjQ1MyAxODEuMzQ0IDExMy40NjUgMTgwLjU3QzExMy40NzcgMTc5Ljc5NSAxMTMuMjg3IDE3OS4wMzEgMTEyLjkxNCAxNzguMzUyTDExMC43MDMgMTc0LjMyOFYxNjguODU5QzExMC43MjggMTY4LjI1OCAxMTAuNjMyIDE2Ny42NTggMTEwLjQxOSAxNjcuMDk2QzExMC4yMDYgMTY2LjUzMyAxMDkuODgyIDE2Ni4wMTkgMTA5LjQ2NiAxNjUuNTg1QzEwOS4wNDkgMTY1LjE1MSAxMDguNTUgMTY0LjgwNSAxMDcuOTk2IDE2NC41NjlDMTA3LjQ0MyAxNjQuMzMzIDEwNi44NDggMTY0LjIxMiAxMDYuMjQ2IDE2NC4yMTJDMTA1LjY0NSAxNjQuMjEyIDEwNS4wNDkgMTY0LjMzMyAxMDQuNDk2IDE2NC41NjlDMTAzLjk0MyAxNjQuODA1IDEwMy40NDMgMTY1LjE1MSAxMDMuMDI2IDE2NS41ODVDMTAyLjYxIDE2Ni4wMTkgMTAyLjI4NiAxNjYuNTMzIDEwMi4wNzMgMTY3LjA5NkMxMDEuODYxIDE2Ny42NTggMTAxLjc2NCAxNjguMjU4IDEwMS43ODkgMTY4Ljg1OVYxNzUuNDY5QzEwMS43ODggMTc2LjIxOSAxMDEuOTc2IDE3Ni45NTggMTAyLjMzNiAxNzcuNjE3TDEwNS4xMDIgMTgyLjY0OEMxMDUuNDg2IDE4My4zNDggMTA2LjA1MSAxODMuOTMyIDEwNi43MzkgMTg0LjMzOUMxMDcuNDI2IDE4NC43NDUgMTA4LjIwOSAxODQuOTYgMTA5LjAwOCAxODQuOTYxWiIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNOTUuMzkwNyAxMjcuNDY5Qzk0LjE4ODIgMTMwLjI2MyA5My4xNzI5IDEzMy4xMzQgOTIuMzUxNiAxMzYuMDYyQzkyLjM1MTYgMTM2LjE0OCA5MS45MDYzIDE0My4xMzMgOTEuOTA2MyAxNDMuMTMzQzkxLjc1MDEgMTQ1Ljg0NCA5MS41NDY5IDE0OC41NDcgOTEuNDI5OCAxNTEuMjU4QzkxLjE0ODUgMTU2LjY4IDkwLjg4MjkgMTYyLjA5NCA5MC43NDIzIDE2Ny41MTZDOTAuNjk0MSAxNjguNjY1IDkwLjIwMzUgMTY5Ljc1MiA4OS4zNzI5IDE3MC41NDlDODguNTQyMyAxNzEuMzQ1IDg3LjQzNiAxNzEuNzkgODYuMjg1MiAxNzEuNzlDODUuMTM0NCAxNzEuNzkgODQuMDI4MiAxNzEuMzQ1IDgzLjE5NzYgMTcwLjU0OUM4Mi4zNjcgMTY5Ljc1MiA4MS44NzYzIDE2OC42NjUgODEuODI4MiAxNjcuNTE2QzgxLjY4NzYgMTYyLjA5NCA4MS40MjE5IDE1Ni42OCA4MS4xNDA3IDE1MS4yNThDODEuMDIzNSAxNDguNTQ3IDgwLjgyMDQgMTQ1Ljg0NCA4MC42NTYzIDE0My4xMzNMODAuMTU2MyAxMzVDODAuMTMyOCAxMzQuODI0IDgwLjEzMjggMTM0LjY0NSA4MC4xNTYzIDEzNC40NjlMODAuMjczNSAxMzMuNjg3QzgwLjc5NDEgMTMwLjU4NyA4MS4xMDk5IDEyNy40NTUgODEuMjE4OCAxMjQuMzEyQzgxLjIxNTMgMTIzLjMyNyA4MS40MDkxIDEyMi4zNSA4MS43ODg4IDEyMS40NEM4Mi4xNjg1IDEyMC41MyA4Mi43MjY0IDExOS43MDUgODMuNDI5NiAxMTkuMDE0Qzg0LjEzMjkgMTE4LjMyNCA4NC45NjczIDExNy43OCA4NS44ODM3IDExNy40MTdDODYuODAwMSAxMTcuMDUzIDg3Ljc4IDExNi44NzYgODguNzY1NyAxMTYuODk3Qzg5Ljc1MTQgMTE2LjkxOCA5MC43MjI5IDExNy4xMzYgOTEuNjIzMiAxMTcuNTM4QzkyLjUyMzQgMTE3Ljk0IDkzLjMzNDEgMTE4LjUxOCA5NC4wMDc1IDExOS4yMzhDOTQuNjgwOSAxMTkuOTU4IDk1LjIwMzQgMTIwLjgwNiA5NS41NDQzIDEyMS43MzFDOTUuODg1MSAxMjIuNjU2IDk2LjAzNzQgMTIzLjY0IDk1Ljk5MjMgMTI0LjYyNUM5NS45Nzk3IDEyNS42MDMgOTUuNzc1MyAxMjYuNTY5IDk1LjM5MDcgMTI3LjQ2OVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTExMi4wOTQgMTI0LjgyOEMxMTEuOTcyIDEyNy45MzIgMTEyLjA1OCAxMzEuMDQgMTEyLjM1MiAxMzQuMTMzTDExMi40MjIgMTM0LjkxNFYxMzUuMDA4TDExMS45MTQgMTQzLjE0MUMxMTEuNzUgMTQ1Ljg1MiAxMTEuNTU1IDE0OC41NTUgMTExLjQzOCAxNTEuMjY2QzExMS4xNDkgMTU2LjY4NyAxMTAuODkxIDE2Mi4xMDIgMTEwLjc1IDE2Ny41MjNDMTEwLjc1IDE2OC43MDcgMTEwLjI4IDE2OS44NDEgMTA5LjQ0NCAxNzAuNjc4QzEwOC42MDcgMTcxLjUxNCAxMDcuNDcyIDE3MS45ODQgMTA2LjI4OSAxNzEuOTg0QzEwNS4xMDYgMTcxLjk4NCAxMDMuOTcyIDE3MS41MTQgMTAzLjEzNSAxNzAuNjc4QzEwMi4yOTggMTY5Ljg0MSAxMDEuODI4IDE2OC43MDcgMTAxLjgyOCAxNjcuNTIzQzEwMS42ODggMTYyLjEwMiAxMDEuNDIyIDE1Ni42ODcgMTAxLjE0MSAxNTEuMjY2QzEwMS4wMjQgMTQ4LjU1NSAxMDAuODIxIDE0NS44NTIgMTAwLjY2NCAxNDMuMTQxTDEwMC4yMTEgMTM1Ljg0NEwxMDAuMTU2IDEzNS4wMDhDMTAwLjE1NiAxMzUuMDA4IDk4LjgzNjIgMTI5Ljg5MSA5Ny43NTgxIDEyNi45MzdDOTcuMTUyNyAxMjUuMTA5IDk3LjI4NDYgMTIzLjExNiA5OC4xMjU1IDEyMS4zODNDOTguOTY2NCAxMTkuNjUgMTAwLjQ1IDExOC4zMTMgMTAyLjI2MSAxMTcuNjU3QzEwNC4wNzIgMTE3LjAwMSAxMDYuMDY4IDExNy4wNzcgMTA3LjgyNCAxMTcuODY5QzEwOS41OCAxMTguNjYxIDExMC45NTggMTIwLjEwNiAxMTEuNjY0IDEyMS44OThDMTEyLjAwMSAxMjIuODM3IDExMi4xNDcgMTIzLjgzMyAxMTIuMDk0IDEyNC44MjhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMDMuMTg4IDg0LjM3NUwxMTAuMDE2IDEyNS43ODFDMTEwLjAxNiAxMjUuNzgxIDEwNi41MDggMTMwLjQ2OSA5Ni4zNjcyIDEzMC40NjlDODYuMjI2NiAxMzAuNDY5IDgyLjg3NSAxMjUuNjg4IDgyLjg3NSAxMjUuNjg4TDg5LjIxMDkgODQuMzc1SDEwMy4xODhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik05Ny44NzUxIDgwLjcxODhDMTAwLjM3NSA4MC41MTU2IDExMy4xNjQgODcuODA0NyAxMTMuMjgxIDkwLjc0MjJDMTEzLjI4MSA5MC44MDQ3IDExNC41MDggMTE3LjcwMyAxMTQuNTA4IDEyMS42NjRDMTE0LjUwOCAxMjUuNjI1IDExMC40NTMgMTI3LjIxMSAxMDguMTY0IDEyNC42NTZMOTYuNTcwNCAxMTIuNjQxQzkzLjk2MTEgMTEwLjAwOCA5Ny44OTg2IDEwNS44MTMgMTAwLjY4OCAxMDguMjAzTDEwNi4yNSAxMTMuMzM2TDEwNC44MDUgOTciIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik05Ny44NzUxIDgwLjcxODhDMTAwLjM3NSA4MC41MTU2IDExMy4xNjQgODcuODA0NyAxMTMuMjgxIDkwLjc0MjJDMTEzLjI4MSA5MC44MDQ3IDExNC41MDggMTE3LjcwMyAxMTQuNTA4IDEyMS42NjRDMTE0LjUwOCAxMjUuNjI1IDExMC40NTMgMTI3LjIxMSAxMDguMTY0IDEyNC42NTZMOTYuNTcwNCAxMTIuNjQxQzkzLjk2MTEgMTEwLjAwOCA5Ny44OTg2IDEwNS44MTMgMTAwLjY4OCAxMDguMjAzTDEwNi4yNSAxMTMuMzM2TDEwNC44MDUgOTciIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTAwLjg3NSA5OS4xNjQxSDkzLjA0NjlDOTIuNzQwNSA5OS4xNjQxIDkyLjQ5MjIgOTkuNDEyNCA5Mi40OTIyIDk5LjcxODdWMTE1LjMzNkM5Mi40OTIyIDExNS42NDIgOTIuNzQwNSAxMTUuODkxIDkzLjA0NjkgMTE1Ljg5MUgxMDAuODc1QzEwMS4xODEgMTE1Ljg5MSAxMDEuNDMgMTE1LjY0MiAxMDEuNDMgMTE1LjMzNlY5OS43MTg3QzEwMS40MyA5OS40MTI0IDEwMS4xODEgOTkuMTY0MSAxMDAuODc1IDk5LjE2NDFaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik05OS43NzM3IDEwOC40ODRDOTkuMDE1NSAxMDkuNTQ0IDk4LjE3MTUgMTEwLjU0IDk3LjI1MDIgMTExLjQ2MUM5Ni43NTc4IDExMS45NzkgOTYuMTY4NiAxMTIuMzk2IDk1LjUxNTkgMTEyLjY4N0M5NS4wNzA2IDExMi44ODMgOTQuNjQ4NyAxMTMuMDU1IDk0LjIxMTIgMTEzLjIwM0w5MC41MjM3IDExNi4wNzhDODkuNDkyNCAxMTcgODkuMDM5MyAxMTYuMzM2IDg4LjEzMzEgMTE1LjI5N0M4Ny43MDcgMTE0LjgyMyA4Ny40NzkxIDExNC4yMDQgODcuNDk2NSAxMTMuNTY3Qzg3LjUxNCAxMTIuOTMgODcuNzc1NCAxMTIuMzI1IDg4LjIyNjggMTExLjg3NUw5MC4wNzA2IDExMC4wMzFDOTAuMDcwNiAxMDkuODk4IDkxLjAyMzcgMTA2LjEyNSA5MS4wMjM3IDEwNi4xMjVWMTA1Ljk2OUM5MS4wMjM3IDEwNS44OTggOTIuNDUzNCAxMDMuNzQyIDkyLjQ1MzQgMTAzLjc0MlYxMDUuOTkyTDkyLjUwODEgMTA3LjU1NUw5My40MTQzIDEwNi42NDhMOTMuNDYxMiAxMDYuNjAyTDkzLjUyMzcgMTA2LjUwOEw5NC4wNTQ5IDEwNS43MjdMOTYuMjg5MyAxMDIuMjg5Qzk2LjM3MzUgMTAyLjE2NyA5Ni41MDA0IDEwMi4wODEgOTYuNjQ1IDEwMi4wNDdDOTYuNzg5NiAxMDIuMDE0IDk2Ljk0MTQgMTAyLjAzNiA5Ny4wNzA2IDEwMi4xMDlDOTcuMTk2NiAxMDIuMTkgOTcuMjg4IDEwMi4zMTUgOTcuMzI3IDEwMi40NTlDOTcuMzY2IDEwMi42MDQgOTcuMzQ5OCAxMDIuNzU3IDk3LjI4MTUgMTAyLjg5MUw5NS44NDQgMTA2LjAxNkw5NS45OTI0IDEwNS43ODlMOTcuNDQ1NiAxMDMuMTI1Qzk3LjUxMzkgMTAyLjk4MyA5Ny42MzU5IDEwMi44NzQgOTcuNzg0NiAxMDIuODIyQzk3LjkzMzMgMTAyLjc3IDk4LjA5NjYgMTAyLjc3OSA5OC4yMzg1IDEwMi44NDhDOTguMzgwNSAxMDIuOTE2IDk4LjQ4OTQgMTAzLjAzOCA5OC41NDE0IDEwMy4xODdDOTguNTkzNCAxMDMuMzM1IDk4LjU4NDIgMTAzLjQ5OSA5OC41MTU5IDEwMy42NDFMOTcuNDQ1NiAxMDYuNDA2Qzk3LjM4MzEgMTA2LjU1NSA5Ny4zMTI3IDEwNi42OCA5Ny4yNTAyIDEwNi44MjhMOTcuODIwNSAxMDUuODA1TDk4LjUxNTkgMTA0LjU0N0M5OC41OTY1IDEwNC40MjEgOTguNzIwMiAxMDQuMzI4IDk4Ljg2MzkgMTA0LjI4N0M5OS4wMDc2IDEwNC4yNDUgOTkuMTYxNiAxMDQuMjU3IDk5LjI5NzEgMTA0LjMyQzk5LjQyNDcgMTA0LjM5IDk5LjUyMjcgMTA0LjUwNCA5OS41NzMgMTA0LjY0Qzk5LjYyMzIgMTA0Ljc3NyA5OS42MjI0IDEwNC45MjcgOTkuNTcwNSAxMDUuMDYyTDk5LjAzOTMgMTA2LjQzN0M5OC44NTk2IDEwNi44OTEgOTguNjg3NyAxMDcuMzI4IDk4LjQ3NjggMTA3LjgyOEM5OC4yNjU5IDEwOC4zMjggOTguMDcwNiAxMDguNjA5IDk3Ljg1OTYgMTA4Ljk2MUM5OC4xOTU2IDEwOC42MzMgOTguNTM5MyAxMDguMjgxIDk4Ljg1OTYgMTA3LjkzN0M5OC45NDE1IDEwNy44MzQgOTkuMDYxMSAxMDcuNzY3IDk5LjE5MjIgMTA3Ljc1MkM5OS4zMjM0IDEwNy43MzYgOTkuNDU1MiAxMDcuNzc0IDk5LjU1ODggMTA3Ljg1NUM5OS42NjI0IDEwNy45MzcgOTkuNzI5MyAxMDguMDU3IDk5Ljc0NDcgMTA4LjE4OEM5OS43NiAxMDguMzE5IDk5LjcyMjcgMTA4LjQ1MSA5OS42NDA5IDEwOC41NTVMOTkuNzczNyAxMDguNDg0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOTQuNjAxNiA4MC43MTg4QzkyLjEwMTYgODAuNTE1NiA3OS4zMTI1IDg3LjgwNDcgNzkuMTk1MyA5MC43NDIyQzc5LjE5NTMgOTAuODA0NyA3Ny45Njg4IDExNy43MDMgNzcuOTY4OCAxMjEuNjY0Qzc3Ljk2ODggMTI1LjYyNSA4Mi4wMjM0IDEyNy4yMTEgODQuMzEyNSAxMjQuNjU2TDkyLjc0MjIgMTE1Ljc5N0M5NS4zNTk0IDExMy4xNjQgOTEuNDIxOSAxMDguOTY5IDg4LjYzMjggMTExLjM2N0w4Ni4yMjY2IDExMy4zMzZMODcuNjcxOSA5NyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTk0LjYwMTYgODAuNzE4OEM5Mi4xMDE2IDgwLjUxNTYgNzkuMzEyNSA4Ny44MDQ3IDc5LjE5NTMgOTAuNzQyMkM3OS4xOTUzIDkwLjgwNDcgNzcuOTY4OCAxMTcuNzAzIDc3Ljk2ODggMTIxLjY2NEM3Ny45Njg4IDEyNS42MjUgODIuMDIzNCAxMjcuMjExIDg0LjMxMjUgMTI0LjY1Nkw5Mi43NDIyIDExNS43OTdDOTUuMzU5NCAxMTMuMTY0IDkxLjQyMTkgMTA4Ljk2OSA4OC42MzI4IDExMS4zNjdMODYuMjI2NiAxMTMuMzM2TDg3LjY3MTkgOTciIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNODIuMTY0MSAxMTYuODUyTDg2LjIyNjYgMTEzLjMzNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik05Ni4yNDIyIDg2LjI4OTFDOTQuMDA3OCA4Ni4yODkxIDkyLjE5NTMgODQuODkwNiA5Mi4xOTUzIDgzLjE2NDFWNzcuNTIzNEM5Mi4xOTUzIDc1Ljc5NjkgOTQuMDA3OCA3NC4zOTg0IDk2LjI0MjIgNzQuMzk4NEM5OC40NzY2IDc0LjM5ODQgMTAwLjI4MSA3NS44MDQ3IDEwMC4yODEgNzcuNTIzNFY4My4xNjQxQzEwMC4yODEgODQuODkwNiA5OC40Mzc1IDg2LjI4OTEgOTYuMjQyMiA4Ni4yODkxWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTEwLjMxMyAxMTYuODUyTDEwNi4yNSAxMTMuMzM2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwNS41OTQgNzIuMzk4NEMxMDUuNDIgNzIuMzM0NSAxMDUuMjI5IDcyLjMzNDUgMTA1LjA1NSA3Mi4zOTg0QzEwNS4wNTUgNzIuMjE4OCAxMDUuMDU1IDcyLjAzOTEgMTA1LjA1NSA3MS44NTk0QzEwNS4wNTUgNjYuNjI1IDEwMS4wOTQgNjIuMzc1IDk2LjIxMDggNjIuMzc1QzkxLjMyOCA2Mi4zNzUgODcuMzk4MyA2Ni42NDA2IDg3LjM5ODMgNzEuODc1Qzg3LjM5ODMgNzIuMDU0NyA4Ny4zOTgzIDcyLjIzNDQgODcuMzk4MyA3Mi40MTQxQzg3LjIyNDMgNzIuMzUwMSA4Ny4wMzMyIDcyLjM1MDEgODYuODU5MiA3Mi40MTQxQzg2LjIwMyA3Mi42NTYzIDg1Ljk5OTggNzMuODkwNiA4Ni40MDYxIDc1LjE2NDFDODYuODEyMyA3Ni40Mzc1IDg3LjY4NzMgNzcuMjY1NiA4OC4zNTE0IDc3LjAyMzRDODguNDA4MiA3Ni45OTExIDg4LjQ2MDcgNzYuOTUxNyA4OC41MDc3IDc2LjkwNjNDOTAuMDIzMyA4MC4yNDIyIDkyLjkwNjEgODIuODgyOCA5Ni4yMTg2IDgyLjg4MjhDOTkuNTMxMSA4Mi44ODI4IDEwMi40MDYgODAuMjQyMiAxMDMuOTIyIDc2LjkwNjNDMTAzLjk3IDc2Ljk1MDIgMTA0LjAyMiA3Ni45ODk1IDEwNC4wNzggNzcuMDIzNEMxMDQuNzQyIDc3LjI2NTYgMTA1LjY0IDc2LjQyOTcgMTA2LjAyMyA3NS4xNjQxQzEwNi40MDYgNzMuODk4NCAxMDYuMjUgNzIuNjU2MyAxMDUuNTk0IDcyLjM5ODRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik04OC43NTc2IDcxLjE0ODRDODkuNjI0OCA2OC44MDQ3IDkyLjY2MzkgNjguMDIzNCA5NC4yMjY0IDY3LjM2NzJDOTUuNzg4OSA2Ni43MTA5IDk3LjIxODYgNjYuMjI2NSA5Ny41MjMzIDY2LjY1NjJDOTguMDc3OSA2Ny40Mzc1IDk4LjQ3NjQgNjkuMDYyNSA5OS4zNzQ4IDY5LjY3OTdDMTAyLjIxOSA3MS42MjUgMTAyLjUgNzEuNTcwMyAxMDMuOTQ1IDc0LjE1NjJDMTA0LjA1NSA3NC4zNTE1IDEwNC4yNSA3My42OTUzIDEwNC43MjYgNzMuMTMyOEMxMDUuMTE3IDcyLjY4NzUgMTA1LjM3NSA3Mi40Mjk3IDEwNS42OTUgNzIuNTcwM0MxMDYuODgzIDczLjA5MzcgMTA1Ljc5NyA3NC4zOTA2IDEwNi4xNTYgNzQuNzAzMUMxMDYuNDExIDczLjkzNTUgMTA2LjYxNyA3My4xNTI3IDEwNi43NzMgNzIuMzU5NEMxMDYuOTA1IDcxLjg4NjYgMTA3LjAwOSA3MS40MDY2IDEwNy4wODYgNzAuOTIxOUMxMDcuMTY1IDcwLjQwNDMgMTA3LjIxNSA2OS44ODI2IDEwNy4yMzQgNjkuMzU5NEMxMDcuMzEyIDY3LjIyNjUgMTA2LjkwNiA2NS4yNjU2IDEwNi4yNzMgNjQuNDY4N0MxMDUuMTMzIDYzLjA0NjkgMTA0LjAxNSA2Mi44MTI1IDEwMi42MTcgNjIuMDU0N0MxMDEuMjE5IDYxLjI5NjkgOTkuNDkyIDU5LjE1NjIgOTcuODA0NSA1OS4wMzlDOTcuMTI4NiA1OC44MzgzIDk2LjQyMTQgNTguNzY0MiA5NS43MTg2IDU4LjgyMDNDOTQuNTQ2NyA1OC45NDUzIDkzLjk2MDggNjAuMTc5NyA5Mi4zMTIzIDYwLjA4NTlDOTAuMjEwOCA1OS45Njg3IDg3LjIwMjkgNjIuMjczNCA4Ny4zMTIzIDYyLjQyOTdDODcuNDIxNyA2Mi41ODU5IDg4LjE5NTEgNjEuODkwNiA4OS4wNTQ1IDYyLjAzMTJDODguNDMxIDYyLjM1MyA4Ny44ODI1IDYyLjgwMjkgODcuNDQ1MSA2My4zNTE1Qzg2Ljc5OTIgNjQuMTA5MyA4Ni4zMDU3IDY0Ljk4NDcgODUuOTkyIDY1LjkyOTdDODUuODc0MiA2Ni4zNDU5IDg1LjgzOTcgNjYuNzgxMyA4NS44OTA0IDY3LjIxMDlDODYuMDM1NCA2Ni42OTE0IDg2LjMwMzQgNjYuMjE0NCA4Ni42NzE3IDY1LjgyMDNDODYuMzAwMSA2Ni43NzQ1IDg2LjAzOCA2Ny43Njc5IDg1Ljg5MDQgNjguNzgxMkM4NS44OTA0IDY4Ljc4MTIgODQuODM1OCA3MC4zNDM3IDg2LjA2MjMgNzQuMjAzMUM4Ni4yMTA4IDcxLjQ5MjIgODcuNzEwNyA3Mi43ODEyIDg3LjcxMDcgNzIuNzgxMkM4Ny43MTA3IDcyLjc4MTIgODguMDg1OCA3My4zMDQ3IDg4LjIxODYgNzIuNjAxNUM4OC4zNjEzIDcyLjEwNDMgODguNTQxNSA3MS42MTg1IDg4Ljc1NzYgNzEuMTQ4NFoiIGZpbGw9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTEzNy43MTEgMTI1LjgzNkMxMzcuNTM0IDEyNS44MzggMTM3LjM2IDEyNS44NzIgMTM3LjE5NSAxMjUuOTM4QzEzNy4wMzYgMTI1LjY2NSAxMzYuNzg5IDEyNS40NTMgMTM2LjQ5NSAxMjUuMzM3QzEzNi4yMDEgMTI1LjIyMSAxMzUuODc2IDEyNS4yMDYgMTM1LjU3MyAxMjUuMjk2QzEzNS4yNyAxMjUuMzg2IDEzNS4wMDUgMTI1LjU3NSAxMzQuODIyIDEyNS44MzNDMTM0LjYzOSAxMjYuMDkxIDEzNC41NDggMTI2LjQwMyAxMzQuNTYzIDEyNi43MTlDMTM0LjU2MyAxMjcuMDk5IDEzNC43MTMgMTI3LjQ2MyAxMzQuOTgxIDEyNy43MzJDMTM1LjI0OSAxMjguMDAyIDEzNS42MTIgMTI4LjE1NCAxMzUuOTkyIDEyOC4xNTZDMTM2LjE3IDEyOC4xNTMgMTM2LjM0NSAxMjguMTE2IDEzNi41MDggMTI4LjA0N0MxMzYuNjMyIDEyOC4yNTcgMTM2LjgwNyAxMjguNDMxIDEzNy4wMTggMTI4LjU1M0MxMzcuMjI5IDEyOC42NzQgMTM3LjQ2OCAxMjguNzQgMTM3LjcxMSAxMjguNzQyQzEzNy45MDggMTI4Ljc1NyAxMzguMTA2IDEyOC43MzEgMTM4LjI5MyAxMjguNjY1QzEzOC40NzkgMTI4LjYgMTM4LjY1IDEyOC40OTYgMTM4Ljc5NSAxMjguMzYyQzEzOC45NCAxMjguMjI3IDEzOS4wNTYgMTI4LjA2NCAxMzkuMTM1IDEyNy44ODNDMTM5LjIxNCAxMjcuNzAyIDEzOS4yNTQgMTI3LjUwNiAxMzkuMjU0IDEyNy4zMDlDMTM5LjI1NCAxMjcuMTExIDEzOS4yMTQgMTI2LjkxNSAxMzkuMTM1IDEyNi43MzRDMTM5LjA1NiAxMjYuNTUzIDEzOC45NCAxMjYuMzkgMTM4Ljc5NSAxMjYuMjU1QzEzOC42NSAxMjYuMTIxIDEzOC40NzkgMTI2LjAxOCAxMzguMjkzIDEyNS45NTJDMTM4LjEwNiAxMjUuODg3IDEzNy45MDggMTI1Ljg2IDEzNy43MTEgMTI1Ljg3NVYxMjUuODM2WiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNTEuOTYxIDEyMC42NjRDMTUyLjMwNSAxMTUuNTYyIDE0NC41NDcgMTEyLjI2NiAxNDAuMTMzIDExNS43NThDMTMyLjA4NiAxMTUuODk4IDEzMS43MjYgMTI3Ljg3NSAxMzkuNzk3IDEyNy43NDJDMTM5LjkxNCAxMjcuNzQyIDE1MS40MyAxMjguNTYyIDE1MS45NjEgMTIwLjY2NFoiIGZpbGw9IiNFRkVGRUYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTMyLjg5OSAxMTcuNTk0QzEzMi44OTkgMTE3LjU5NCAxMzEuNDkyIDExNC4wMzkgMTMyLjA0NyAxMTMuMzY3QzEzMi42MDIgMTEyLjY5NSAxMzQuMzUyIDExMy45OTIgMTM1LjIxOSAxMTUuMTQ4IiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik0xMzIuODk5IDExNy41OTRDMTMyLjg5OSAxMTcuNTk0IDEzMS40OTIgMTE0LjAzOSAxMzIuMDQ3IDExMy4zNjdDMTMyLjYwMiAxMTIuNjk1IDEzNC4zNTIgMTEzLjk5MiAxMzUuMjE5IDExNS4xNDgiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTMzLjEzMyAxMTYuNDA2QzEzMy4xMzMgMTE2LjQwNiAxMzIuMzUxIDExNC41NyAxMzIuNjg3IDExNC4xOEMxMzMuMDIzIDExMy43ODkgMTMzLjg5MSAxMTQuNTA4IDEzNC4zNTEgMTE1LjExNyIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMTMzLjEzMyAxMTYuNDA2QzEzMy4xMzMgMTE2LjQwNiAxMzIuMzUxIDExNC41NyAxMzIuNjg3IDExNC4xOEMxMzMuMDIzIDExMy43ODkgMTMzLjg5MSAxMTQuNTA4IDEzNC4zNTEgMTE1LjExNyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMzkuNzExIDExNy4xODdDMTM5LjcxMSAxMTcuMTg3IDE0MC45NDUgMTEzLjU3IDE0MC4zNjcgMTEyLjkyMkMxMzkuNzg5IDExMi4yNzMgMTM4LjA5NCAxMTMuNjU2IDEzNy4yODEgMTE0Ljg0NCIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMTM5LjcxMSAxMTcuMTg3QzEzOS43MTEgMTE3LjE4NyAxNDAuOTQ1IDExMy41NyAxNDAuMzY3IDExMi45MjJDMTM5Ljc4OSAxMTIuMjczIDEzOC4wOTQgMTEzLjY1NiAxMzcuMjgxIDExNC44NDQiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTM5LjM4MyAxMTYuMzEyQzEzOS4zODMgMTE2LjMxMiAxNDAuMTY0IDExNC4wNzggMTM5Ljc4OSAxMTMuNjhDMTM5LjQxNCAxMTMuMjgxIDEzOC4zOTEgMTE0LjEzMyAxMzcuODgzIDExNC44NjciIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggZD0iTTEzOS4zODMgMTE2LjMxMkMxMzkuMzgzIDExNi4zMTIgMTQwLjE2NCAxMTQuMDc4IDEzOS43ODkgMTEzLjY4QzEzOS40MTQgMTEzLjI4MSAxMzguMzkxIDExNC4xMzMgMTM3Ljg4MyAxMTQuODY3IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEzNi43MDMgMTIxLjM4M0MxMzguOTUxIDEyMS4zODMgMTQwLjc3MyAxMTkuNzQyIDE0MC43NzMgMTE3LjcxOUMxNDAuNzczIDExNS42OTUgMTM4Ljk1MSAxMTQuMDU1IDEzNi43MDMgMTE0LjA1NUMxMzQuNDU1IDExNC4wNTUgMTMyLjYzMyAxMTUuNjk1IDEzMi42MzMgMTE3LjcxOUMxMzIuNjMzIDExOS43NDIgMTM0LjQ1NSAxMjEuMzgzIDEzNi43MDMgMTIxLjM4M1oiIGZpbGw9IiNFRkVGRUYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTUxLjk3NyAxMTkuOTE0QzE1MS45NzcgMTE5LjkxNCAxNTMuNTM5IDExOS45MTQgMTUzLjYxNyAxMjEuMjk3QzE1My43NDIgMTIzLjY0MSAxNTEuNSAxMjYuNDQ1IDE0OC42OCAxMjcuODk4QzE0NS44NTkgMTI5LjM1MiAxMzkuNDg0IDEyOS40NjEgMTM2LjY1NiAxMjcuMzM2QzEzNi40MzEgMTI3LjE0NyAxMzYuMjg2IDEyNi44OCAxMzYuMjUgMTI2LjU4OEMxMzYuMjE1IDEyNi4yOTYgMTM2LjI5MyAxMjYuMDAxIDEzNi40NjcgMTI1Ljc2NEMxMzYuNjQxIDEyNS41MjcgMTM2Ljg5OSAxMjUuMzY2IDEzNy4xODggMTI1LjMxMkMxMzcuNDc3IDEyNS4yNTkgMTM3Ljc3NiAxMjUuMzE4IDEzOC4wMjMgMTI1LjQ3N0MxNDIuMjAzIDEyNy45NzcgMTQ5Ljc0MiAxMjYuNjU2IDE1MS42MjUgMTIxLjkzN0MxNTEuOTI2IDEyMS4zMDggMTUyLjA0NyAxMjAuNjA4IDE1MS45NzcgMTE5LjkxNFoiIGZpbGw9IiNFRkVGRUYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNzMuMTk1MyAxMzQuMDU1SDE4LjkyMTlWMTUxLjQ1M0g3My4xOTUzVjEzNC4wNTVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTMiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzMuODA0NyAxMzYuNDc3SDIxLjI5NjlWMTQ4Ljk4NEgzMy44MDQ3VjEzNi40NzdaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik02OS40NTMxIDEzOC4xODhIMzcuOTIxOVYxMzkuODA1SDY5LjQ1MzFWMTM4LjE4OFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTYzLjUyMzQgMTQyLjAzOUgzNy45MjE5VjE0My42NTZINjMuNTIzNFYxNDIuMDM5WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNTQuODA0NyAxNDUuODgzSDM3LjkyMTlWMTQ3LjVINTQuODA0N1YxNDUuODgzWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNjMuODA0NyAyMS42OTUzSDIyLjc3MzRWMzQuODUxNkg2My44MDQ3VjIxLjY5NTNaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTU4Ljk2MDkgMjQuODIwM0gyNi4wNjI1VjI2LjA0NjlINTguOTYwOVYyNC44MjAzWiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNNTIuNzczNCAyNy43MzQ0SDI2LjA2MjVWMjguOTYwOUg1Mi43NzM0VjI3LjczNDRaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik00My42Nzk3IDMwLjYzMjhIMjYuMDYyNVYzMS44NTk0SDQzLjY3OTdWMzAuNjMyOFoiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggZD0iTTE4OC4wMTYgMzUuMzkwNkgxMTMuNzg5VjU5LjE4NzVIMTg4LjAxNlYzNS4zOTA2WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEzNC4xNDggMzguNzAzMUgxMTcuMDQ3VjU1LjgwNDdIMTM0LjE0OFYzOC43MDMxWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE3MC43MDMgNDEuMDQ2OUgxMzkuNzgxVjQzLjI1NzhIMTcwLjcwM1Y0MS4wNDY5WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTgyLjkwNiA0MS4wNDY5SDE3Mi43MzRWNDMuMjU3OEgxODIuOTA2VjQxLjA0NjlaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjAuNTg2IDQ2LjMxMjVIMTM5Ljc4MVY0OC41MjM0SDE2MC41ODZWNDYuMzEyNVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE4Mi45MDYgNDYuMzEyNUgxNjIuNTYyVjQ4LjUyMzRIMTgyLjkwNlY0Ni4zMTI1WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUxLjMyOCA1MS41NzAzSDEzOS43ODFWNTMuNzgxMkgxNTEuMzI4VjUxLjU3MDNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMjIuOTIyIDI2LjI2NTZIMTA0LjY2NFY0NC41MjM0SDEyMi45MjJWMjYuMjY1NloiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggZD0iTTEyMS4yOTcgMjcuODgyOEgxMDYuMjgxVjQyLjg5ODRIMTIxLjI5N1YyNy44ODI4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTA5LjgwNSAzNS4zOTA2TDExMi40NjEgMzguMDQ2OUwxMTcuNzczIDMyLjczNDQiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMDkuODA1IDM1LjM5MDZMMTEyLjQ2MSAzOC4wNDY5TDExNy43NzMgMzIuNzM0NCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTgxLjczNCA3MS45NjA5SDE3My4wNTVWODAuNjQwNkgxODEuNzM0VjcxLjk2MDlaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNzUuMDk0IDc2LjI5NjlMMTc2LjYzMyA3Ny44MzU5TDE3OS43MDMgNzQuNzY1NiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE3NS4wOTQgNzYuMjk2OUwxNzYuNjMzIDc3LjgzNTlMMTc5LjcwMyA3NC43NjU2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE1Ny40MjIgMTc1LjQyMkwxNjAuOTE0IDE3MC40NDVMMTU2LjU3OCAxNzMuMTQ4TDE1OC44NzUgMTY3LjI4OUwxNTQuMTA5IDE3MS41NDdMMTUyLjI4MSAxNjQuNTMxTDE1MS4wMDggMTcxLjQ5MkwxNDYuMjg5IDE2Ny4yODlMMTQ4LjU4NiAxNzMuMTQ4TDE0NC4yNSAxNzAuNDQ1TDE0Ny43NDIgMTc1LjQyMiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE1Ny40MjIgMTc1LjQyMkwxNjAuOTE0IDE3MC40NDVMMTU2LjU3OCAxNzMuMTQ4TDE1OC44NzUgMTY3LjI4OUwxNTQuMTA5IDE3MS41NDdMMTUyLjI4MSAxNjQuNTMxTDE1MS4wMDggMTcxLjQ5MkwxNDYuMjg5IDE2Ny4yODlMMTQ4LjU4NiAxNzMuMTQ4TDE0NC4yNSAxNzAuNDQ1TDE0Ny43NDIgMTc1LjQyMiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xMy44NDM4IDEwOC4zMzZIMTg1LjM2NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik02OC4yODkxIDg3LjYwMTZINjUuMjEwOVYxMjcuMDg2SDY4LjI4OTFWODcuNjAxNloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTYyLjU3ODEgODYuMTI1SDU5LjVWMTIyLjI0Mkg2Mi41NzgxVjg2LjEyNVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTgzLjAyMzQgODcuNzI2Nkg3OS45NDUzVjEyNy4wODZIODMuMDIzNFY4Ny43MjY2WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQ2LjU2MiA4Ny41OTM4SDE0My40ODRWMTIyLjI0MkgxNDYuNTYyVjg3LjU5MzhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMjUgOTNIMTIyVjEyMkgxMjVWOTNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjcuMDM5IDc2LjI1NzhIMTY0LjA4NkwxNTguMzM2IDczLjc1NzhMMTQ5Ljc1IDY1LjgwNDdMMTY3LjAzOSA3Ni4yNTc4WiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzIuNDE0IDc2LjI1NzhIMTM1LjM3NUwxNDEuMTI1IDczLjc1NzhMMTQ5LjcxMSA2NS44MDQ3TDEzMi40MTQgNzYuMjU3OFoiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTY0LjA4NiA3Ni4yNTc4SDEzNS4zNzVMMTQxLjEyNSA3My43NTc4SDE1OC4zMzZMMTY0LjA4NiA3Ni4yNTc4WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTguMzM2IDczLjc1NzhIMTQ2LjQ4NFY5MC44MzU5SDE1OC4zMzZWNzMuNzU3OFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE1NS44NDQgNzguMjk2OUgxNDguOTc3VjkzLjIzNDRIMTU1Ljg0NFY3OC4yOTY5WiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMzguNTM5IDc0Ljg4MjhMMTQxLjEyNSA3My43NTc4SDE0Ni40ODRWOTMuMjM0NEgxMzguNTM5Vjc0Ljg4MjhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjAuOTIyIDc0Ljg4MjhMMTU4LjMzNiA3My43NTc4VjkzLjIzNDRIMTYwLjkyMlY3NC44ODI4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQxLjA2MiA3My43NTc4TDE0OS43NSA2NS44MDQ3TDE1OC4zMzYgNzMuNzU3OEgxNDEuMDYyWiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMjIuMDQ3IDc5LjM0MzdWNzcuNzU3OEwxMzEuMTI1IDc3LjEyNVY5My4yMzQ0SDEyMi4wNDdMMTIyLjA0NyA5Mi41IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTIyLjA0NyA3OS4zNDM3Vjc3Ljc1NzhMMTMxLjEyNSA3Ny4xMjVWOTMuMjM0NEgxMjIuMDQ3TDEyMi4wNDcgOTIuNSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNDYuNDg0IDgwLjAyMzRIMTMxLjEyNVY5My4yMzQ0SDE0Ni40ODRWODAuMDIzNFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTgyLjcxMDkgNjcuNzczNEg3NC4wNzgxSDY1LjQzNzVWNDQuMTc5N0g4Mi43MTA5VjY3Ljc3MzRaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTYwLjMzNTkgNjcuMDU0N0w2NS40Mzc1IDY3Ljc3MzRWNDQuMTc5N0w1OS42OTUzIDQ2LjY3OTdWNTIuMzgyOCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik04OC40NjA5IDY2Ljk2ODdMODIuNzEwOSA2Ny43NzM0VjQ0LjE3OTdMODguNDYwOSA0Ni42Nzk3VjY2Ljk2ODdaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTY1LjQzNzUgNDQuMTc5N0w3NC4xMjUgMzYuMjM0NEw4Mi43MTA5IDQ0LjE3OTdINjUuNDM3NVoiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOTEuNDIxOSA0Ni42Nzk3SDg4LjQ2MDlMODIuNzEwOSA0NC4xNzk3TDc0LjEyNSAzNi4yMzQ0TDkxLjQyMTkgNDYuNjc5N1oiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNTYuNzg5MSA0Ni42Nzk3SDU5Ljc1TDY1LjUgNDQuMTc5N0w3NC4wODU5IDM2LjIzNDRMNTYuNzg5MSA0Ni42Nzk3WiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik04NS40ODQ0IDg2LjEyNUw4Mi43NzM0IDg3LjcyNjZINjUuNDM3NUw1OS42OTUzIDg2LjEyNVY2Ni45Njg4TDY1LjQzNzUgNjcuNzczNEg3NC4xMjVIODIuNzEwOUw4OC40NjA5IDY2Ljk2ODhWNzQuMjQyMiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTg1LjQ4NDQgODYuMTI1TDgyLjc3MzQgODcuNzI2Nkg2NS40Mzc1TDU5LjY5NTMgODYuMTI1VjY2Ljk2ODhMNjUuNDM3NSA2Ny43NzM0SDc0LjEyNUg4Mi43MTA5TDg4LjQ2MDkgNjYuOTY4OFY3NC4yNDIyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTY1LjQzNzUgODcuNzI2NlY2Ni45Njg4IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTgyLjc3MzQgODcuNzI2NlY2Ny43NzM0IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTc4Ljc1IDQ4LjI1NzhINjkuMjgxMlY2My40NTMxSDc4Ljc1VjQ4LjI1NzhaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik04Ni43NSA2Mi42NTYyTDg0LjIwMzEgNjMuNDUzMVY0OC4yNTc4TDg2Ljc1IDQ5LjA2MjVWNjIuNjU2MloiIGZpbGw9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTk5LjQyOTcgMTIwLjc1OFY3NC4yNDIySDg1LjU4NTlWMTEzLjgzNkw5OS40Mjk3IDEyMC43NThaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik01NC4wMTU4IDEwOS44OThDNTMuMjM0NiAxMTEuMjgxIDU0LjU0NzEgMTE1LjA1NSA1NC41NDcxIDExNS4wNTVDNTQuNTQ3MSAxMTUuMDU1IDg5Ljc1OCAxMzAuOTY5IDkxLjM1OTYgMTMzLjI1OEM5Mi4yNzI5IDEzNC40MTUgOTIuNzUzNyAxMzUuODU0IDkyLjcxODkgMTM3LjMyOEM5Mi43MTg5IDEzNy4zMjggOTMuMDYyNyAxMzEuMjk3IDkwLjg5ODYgMTI4LjU3Qzg4LjczNDYgMTI1Ljg0NCA1OC45MjIxIDExMS45MjIgNTQuMDE1OCAxMDkuODk4TDY1LjQzNzcgMTE1LjE0MVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNTcuNTIzIDkxLjc3MzRMMTc2LjU2MiAxMjEuMjI3TDE4NiAxMjMuMDQ3IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTU5LjExNyA5MC42MjVMMTc3LjUxNSAxMjAuNTIzTDE3Ni43MzQgMTIwLjAxNkwxODYuMTA5IDEyMi4yMzRDMTg2LjIxIDEyMi4yNTggMTg2LjMwNiAxMjIuMzAyIDE4Ni4zODkgMTIyLjM2M0MxODYuNDczIDEyMi40MjQgMTg2LjU0NCAxMjIuNTAxIDE4Ni41OTggMTIyLjU5QzE4Ni42NTIgMTIyLjY3OCAxODYuNjg4IDEyMi43NzcgMTg2LjcwMyAxMjIuODhDMTg2LjcxOCAxMjIuOTgyIDE4Ni43MTMgMTIzLjA4NyAxODYuNjg3IDEyMy4xODdDMTg2LjY0OCAxMjMuMzc5IDE4Ni41MzcgMTIzLjU0OSAxODYuMzc4IDEyMy42NjRDMTg2LjIxOSAxMjMuNzc4IDE4Ni4wMjMgMTIzLjgyOCAxODUuODI4IDEyMy44MDVMMTc2LjMyIDEyMi4zODNDMTc2LjE3OCAxMjIuMzYgMTc2LjA0MiAxMjIuMzA4IDE3NS45MjEgMTIyLjIzQzE3NS44IDEyMi4xNTIgMTc1LjY5NiAxMjIuMDUgMTc1LjYxNyAxMjEuOTNMMTc1LjU3IDEyMS44NjdMMTU1LjkzIDkyLjg5MDZDMTU1LjYzNSA5Mi40NTUxIDE1NS41MTggOTEuOTIzMSAxNTUuNjA0IDkxLjQwNDJDMTU1LjY5IDkwLjg4NTQgMTU1Ljk3MSA5MC40MTkxIDE1Ni4zOSA5MC4xMDE2QzE1Ni41OTUgODkuOTUwMiAxNTYuODI5IDg5Ljg0MjIgMTU3LjA3NyA4OS43ODQyQzE1Ny4zMjUgODkuNzI2MSAxNTcuNTgyIDg5LjcxOTEgMTU3LjgzMyA4OS43NjM3QzE1OC4wODQgODkuODA4MyAxNTguMzIzIDg5LjkwMzUgMTU4LjUzNSA5MC4wNDM1QzE1OC43NDggOTAuMTgzNiAxNTguOTMgOTAuMzY1NSAxNTkuMDcgOTAuNTc4MUMxNTkuMDg3IDkwLjU5MjUgMTU5LjEwMyA5MC42MDgxIDE1OS4xMTcgOTAuNjI1WiIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNMTU4LjAxNiA5MS43NzM0SDE0Ny4xOTVDMTQ3LjEyNiA5MS43NzY3IDE0Ny4wNTkgOTEuNzk4NSAxNDcuMDAxIDkxLjgzNjNDMTQ2Ljk0MyA5MS44NzQyIDE0Ni44OTYgOTEuOTI2OSAxNDYuODY0IDkxLjk4ODlDMTQ2LjgzMyA5Mi4wNTEgMTQ2LjgyIDkyLjEyMDIgMTQ2LjgyNCA5Mi4xODk0QzE0Ni44MjkgOTIuMjU4NiAxNDYuODUyIDkyLjMyNTQgMTQ2Ljg5MSA5Mi4zODI4TDE2OC40MDYgMTIyLjUwOEwxNzUuMzU5IDEyNC4yODlMMTg2IDEyMy40MzdWMTIyLjcyN0wxNzYuNzY2IDEyMC44NTlMMTU4LjAxNiA5MS43NzM0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNDguMDIzIDkxLjc3MzRMMTY4LjQwNiAxMjIuNTA4TDE3Ni43NzMgMTI0LjA2MiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE0OS42MDIgOTAuNjI1TDE2OS4zNTIgMTIxLjgxMkwxNjguNTcgMTIxLjMxMkwxNzYuODY3IDEyMy4yNjZDMTc2Ljk3IDEyMy4yODggMTc3LjA2NyAxMjMuMzMyIDE3Ny4xNTIgMTIzLjM5M0MxNzcuMjM4IDEyMy40NTQgMTc3LjMxIDEyMy41MzIgMTc3LjM2NSAxMjMuNjIxQzE3Ny40MTkgMTIzLjcxMSAxNzcuNDU1IDEyMy44MTEgMTc3LjQ3IDEyMy45MTVDMTc3LjQ4NiAxMjQuMDE5IDE3Ny40OCAxMjQuMTI1IDE3Ny40NTMgMTI0LjIyN0MxNzcuNDEzIDEyNC40MTggMTc3LjMwMyAxMjQuNTg4IDE3Ny4xNDQgMTI0LjcwM0MxNzYuOTg1IDEyNC44MTcgMTc2Ljc4OCAxMjQuODY3IDE3Ni41OTQgMTI0Ljg0NEwxNjguMTY0IDEyMy42OEMxNjguMDI0IDEyMy42NTkgMTY3Ljg4OSAxMjMuNjExIDE2Ny43NjggMTIzLjUzN0MxNjcuNjQ4IDEyMy40NjMgMTY3LjU0MyAxMjMuMzY1IDE2Ny40NjEgMTIzLjI1TDE2Ny40MTQgMTIzLjE4TDE0Ni40MDYgOTIuOTA2MkMxNDYuNDA2IDkyLjYzMjggMTQ1Ljk3NyA5MC43NTc4IDE0Ni44MzYgOTAuMTA5NEMxNDcuMDM4IDg5Ljk1NTQgMTQ3LjI3IDg5Ljg0NDUgMTQ3LjUxNyA4OS43ODM0QzE0Ny43NjQgODkuNzIyMyAxNDguMDIxIDg5LjcxMjMgMTQ4LjI3MiA4OS43NTRDMTQ4LjUyMyA4OS43OTU3IDE0OC43NjMgODkuODg4MiAxNDguOTc2IDkwLjAyNTlDMTQ5LjE5IDkwLjE2MzYgMTQ5LjM3NCA5MC4zNDM1IDE0OS41MTYgOTAuNTU0N0wxNDkuNjAyIDkwLjYyNVoiIGZpbGw9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTQ0LjI0MjIgMTA3LjMwNUg0MS4xNjQxVjEyNy4wNzhINDQuMjQyMlYxMDcuMzA1WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNTcuODEyNSAxMTYuNTE2TDU1LjkyOTcgMTE1LjY4QzQzLjc1IDExMC4yNjYgMjguNjU2MiAxMDMuNTM5IDI4LjY1NjIgODMuOTI5N0MyOC42NTYyIDczLjI4MTIgMzQuMDE1NiA2NC4zOTg0IDQ0LjE1NjMgNTguMjVDNDguNTUwMiA1NS42MDMzIDUzLjMzNjMgNTMuNjcwNCA1OC4zMzU5IDUyLjUyMzRDNTguNzgzMiA1Mi40MzExIDU5LjIzODYgNTIuMzg0IDU5LjY5NTMgNTIuMzgyOEM2NC4zODI4IDUyLjM4MjggNjUuNDA2MyA2NS4yNDIyIDYxLjAzMTMgNjYuNTcwM0M2MC42ODc1IDY2LjY3MTkgNDIuNjk1MyA3MC45ODQ0IDQyLjY5NTMgODMuOTI5N0M0Mi42OTUzIDkyLjk3NjYgNDkuNDQ1MyA5Ny4wMDc4IDYyLjc3MzQgMTAyLjkzN0w2NS4xMTcyIDEwNC4yMDMiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik01Ny44MTI1IDExNi41MTZMNTUuOTI5NyAxMTUuNjhDNDMuNzUgMTEwLjI2NiAyOC42NTYyIDEwMy41MzkgMjguNjU2MiA4My45Mjk3QzI4LjY1NjIgNzMuMjgxMiAzNC4wMTU2IDY0LjM5ODQgNDQuMTU2MyA1OC4yNUM0OC41NTAyIDU1LjYwMzMgNTMuMzM2MyA1My42NzA0IDU4LjMzNTkgNTIuNTIzNEM1OC43ODMyIDUyLjQzMTEgNTkuMjM4NiA1Mi4zODQgNTkuNjk1MyA1Mi4zODI4QzY0LjM4MjggNTIuMzgyOCA2NS40MDYzIDY1LjI0MjIgNjEuMDMxMyA2Ni41NzAzQzYwLjY4NzUgNjYuNjcxOSA0Mi42OTUzIDcwLjk4NDQgNDIuNjk1MyA4My45Mjk3QzQyLjY5NTMgOTIuOTc2NiA0OS40NDUzIDk3LjAwNzggNjIuNzczNCAxMDIuOTM3TDY1LjExNzIgMTA0LjIwMyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik05Mi43MTg3IDEzNy4zMjhDOTIuNzAwOCAxMzUuODYzIDkyLjIyNTYgMTM0LjQ0IDkxLjM1OTQgMTMzLjI1OEM4OS4yMzQ0IDEzMC40OTIgNTcuMjczNCAxMTYuMjczIDU3LjI3MzQgMTE2LjI3MyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik02NS40Mzc1IDExNS4xNDFMNTQuMDE1NiAxMDkuODk4QzU4LjkyMTkgMTExLjkyMiA4OC43MzQ0IDEyNS44NDQgOTAuODk4NCAxMjguNTdDOTMuMDYyNSAxMzEuMjk3IDkyLjcxODggMTM3LjMyOCA5Mi43MTg4IDEzNy4zMjhMMTA4Ljc2NiAxMzQuNzI3QzEwOC43NjYgMTM0LjcyNyAxMDkuNDc3IDEyOS4wNDcgMTA4LjEwOSAxMjYuMTMzQzEwNi43NDIgMTIzLjIxOSA2NS4xNDA2IDEwNC4xODggNjUuMTQwNiAxMDQuMTg4IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNjUuNDM3NSAxMTUuMTQxTDU0LjAxNTYgMTA5Ljg5OEM1OC45MjE5IDExMS45MjIgODguNzM0NCAxMjUuODQ0IDkwLjg5ODQgMTI4LjU3QzkzLjA2MjUgMTMxLjI5NyA5Mi43MTg4IDEzNy4zMjggOTIuNzE4OCAxMzcuMzI4TDEwOC43NjYgMTM0LjcyN0MxMDguNzY2IDEzNC43MjcgMTA5LjQ3NyAxMjkuMDQ3IDEwOC4xMDkgMTI2LjEzM0MxMDYuNzQyIDEyMy4yMTkgNjUuMTQwNiAxMDQuMTg4IDY1LjE0MDYgMTA0LjE4OCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik00Ni4yMTA5IDU3LjE2NDFDNDguMzMxOCA1Ny40MDgzIDUwLjI4NTggNTguNDMzMiA1MS42OTI0IDYwLjAzOTFDNTMuMDk5MSA2MS42NDUgNTMuODU3NiA2My43MTcgNTMuODIwMyA2NS44NTE2QzUzLjgyNjcgNjcuMjAyOSA1My41Mjc1IDY4LjUzODMgNTIuOTQ1MyA2OS43NTc4IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNDYuMjEwOSA1Ny4xNjQxQzQ4LjMzMTggNTcuNDA4MyA1MC4yODU4IDU4LjQzMzIgNTEuNjkyNCA2MC4wMzkxQzUzLjA5OTEgNjEuNjQ1IDUzLjg1NzYgNjMuNzE3IDUzLjgyMDMgNjUuODUxNkM1My44MjY3IDY3LjIwMjkgNTMuNTI3NSA2OC41MzgzIDUyLjk0NTMgNjkuNzU3OCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMy43OTY5IDY3LjU5MzdDMzQuNzg2IDY3LjE3NzUgMzUuODQ4OCA2Ni45NjUgMzYuOTIxOSA2Ni45Njg3QzM5LjE4NzUgNjcuMDIyMSA0MS4zNDAzIDY3Ljk2ODEgNDIuOTExOCA2OS42MDFDNDQuNDgzMyA3MS4yMzQgNDUuMzQ2MSA3My40MjE1IDQ1LjMxMjUgNzUuNjg3NUM0NS4zMTI1IDc1LjgyMDMgNDUuMzEyNSA3NS45NTMxIDQ1LjMxMjUgNzYuMDc4MSIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTMzLjc5NjkgNjcuNTkzN0MzNC43ODYgNjcuMTc3NSAzNS44NDg4IDY2Ljk2NSAzNi45MjE5IDY2Ljk2ODdDMzkuMTg3NSA2Ny4wMjIxIDQxLjM0MDMgNjcuOTY4MSA0Mi45MTE4IDY5LjYwMUM0NC40ODMzIDcxLjIzNCA0NS4zNDYxIDczLjQyMTUgNDUuMzEyNSA3NS42ODc1QzQ1LjMxMjUgNzUuODIwMyA0NS4zMTI1IDc1Ljk1MzEgNDUuMzEyNSA3Ni4wNzgxIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTI4LjY2NDEgODQuMzI4MUMyOS4zMzAyIDgyLjkwMzYgMzAuMzg1NyA4MS42OTY1IDMxLjcwODYgODAuODQ2M0MzMy4wMzE2IDc5Ljk5NjEgMzQuNTY4MSA3OS41Mzc1IDM2LjE0MDYgNzkuNTIzNEMzNy40MTU3IDc5LjUyNTYgMzguNjcyOCA3OS44MjM3IDM5LjgxMyA4MC4zOTQ1QzQwLjk1MzEgODAuOTY1MyA0MS45NDUyIDgxLjc5MyA0Mi43MTA5IDgyLjgxMjUiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yOC42NjQxIDg0LjMyODFDMjkuMzMwMiA4Mi45MDM2IDMwLjM4NTcgODEuNjk2NSAzMS43MDg2IDgwLjg0NjNDMzMuMDMxNiA3OS45OTYxIDM0LjU2ODEgNzkuNTM3NSAzNi4xNDA2IDc5LjUyMzRDMzcuNDE1NyA3OS41MjU2IDM4LjY3MjggNzkuODIzNyAzOS44MTMgODAuMzk0NUM0MC45NTMxIDgwLjk2NTMgNDEuOTQ1MiA4MS43OTMgNDIuNzEwOSA4Mi44MTI1IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTMxLjQ0NTMgOTYuODEyNUMzMS40NjU0IDk0LjU4NTUgMzIuMzU0NyA5Mi40NTQ1IDMzLjkyMzcgOTAuODczOEMzNS40OTI2IDg5LjI5MzIgMzcuNjE3IDg4LjM4ODEgMzkuODQzOCA4OC4zNTE1QzQxLjE4MzQgODguMzQ3OSA0Mi41MDI0IDg4LjY4MSA0My42Nzk3IDg5LjMyMDMiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0zMS40NDUzIDk2LjgxMjVDMzEuNDY1NCA5NC41ODU1IDMyLjM1NDcgOTIuNDU0NSAzMy45MjM3IDkwLjg3MzhDMzUuNDkyNiA4OS4yOTMyIDM3LjYxNyA4OC4zODgxIDM5Ljg0MzggODguMzUxNUM0MS4xODM0IDg4LjM0NzkgNDIuNTAyNCA4OC42ODEgNDMuNjc5NyA4OS4zMjAzIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTQ3LjU5MzcgMTExLjcxOUM0Ny4xMjM5IDExMC42MDQgNDYuODgyMSAxMDkuNDA1IDQ2Ljg4MjggMTA4LjE5NUM0Ni44NDkxIDEwNS45MzMgNDcuNzA4NyAxMDMuNzQ5IDQ5LjI3NTIgMTAyLjExN0M1MC44NDE2IDEwMC40ODUgNTIuOTg4NSA5OS41MzYgNTUuMjUgOTkuNDc2Nkg1NS40Njg3IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNDcuNTkzNyAxMTEuNzE5QzQ3LjEyMzkgMTEwLjYwNCA0Ni44ODIxIDEwOS40MDUgNDYuODgyOCAxMDguMTk1QzQ2Ljg0OTEgMTA1LjkzMyA0Ny43MDg3IDEwMy43NDkgNDkuMjc1MiAxMDIuMTE3QzUwLjg0MTYgMTAwLjQ4NSA1Mi45ODg1IDk5LjUzNiA1NS4yNSA5OS40NzY2SDU1LjQ2ODciIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNTMuODIwMSAxMDkuODk4QzUzLjc5OTQgMTA4Ljk3MyA1My45NjE2IDEwOC4wNTMgNTQuMjk3MyAxMDcuMTlDNTQuNjMzMSAxMDYuMzI4IDU1LjEzNTkgMTA1LjU0IDU1Ljc3NjggMTA0Ljg3MkM1Ni40MTc3IDEwNC4yMDQgNTcuMTg0MiAxMDMuNjcgNTguMDMyMiAxMDMuMjk5QzU4Ljg4MDIgMTAyLjkyOCA1OS43OTMxIDEwMi43MjggNjAuNzE4NiAxMDIuNzExQzYxLjI5ODkgMTAyLjcxMSA2MS44NzY4IDEwMi43ODcgNjIuNDM3MyAxMDIuOTM3QzYzLjk0NTIgMTAzLjM2OCA2NS4yNjk1IDEwNC4yODMgNjYuMjA1NyAxMDUuNTQxQzY3LjE0MTggMTA2Ljc5OSA2Ny42Mzc4IDEwOC4zMyA2Ny42MTcgMTA5Ljg5OEM2Ny42MjA2IDExMC44NzMgNjcuNDI5NyAxMTEuODM5IDY3LjA1NTQgMTEyLjczOUM2Ni42ODEyIDExMy42MzkgNjYuMTMxIDExNC40NTYgNjUuNDM3MyAxMTUuMTQxIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0zOC40ODQzIDEwNS43ODFMMzguNDE0IDEwNS41QzM4LjI0NjkgMTA0Ljc5OSAzOC4xNjI5IDEwNC4wOCAzOC4xNjQgMTAzLjM1OUMzOC4xNDAyIDEwMi4yMyAzOC4zMzkyIDEwMS4xMDcgMzguNzQ5NyAxMDAuMDU1QzM5LjE2MDEgOTkuMDAyNyAzOS43NzQgOTguMDQxNiA0MC41NTYyIDk3LjIyNjhDNDEuMzM4NCA5Ni40MTIgNDIuMjczNiA5NS43NTkzIDQzLjMwODIgOTUuMzA2MkM0NC4zNDI4IDk0Ljg1MyA0NS40NTY2IDk0LjYwODMgNDYuNTg1OSA5NC41ODU5QzQ2Ljk5NjIgOTQuNTg2NSA0Ny40MDYxIDk0LjYxNTIgNDcuODEyNSA5NC42NzE5IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMzguNDg0MyAxMDUuNzgxTDM4LjQxNCAxMDUuNUMzOC4yNDY5IDEwNC43OTkgMzguMTYyOSAxMDQuMDggMzguMTY0IDEwMy4zNTlDMzguMTQwMiAxMDIuMjMgMzguMzM5MiAxMDEuMTA3IDM4Ljc0OTcgMTAwLjA1NUMzOS4xNjAxIDk5LjAwMjcgMzkuNzc0IDk4LjA0MTYgNDAuNTU2MiA5Ny4yMjY4QzQxLjMzODQgOTYuNDEyIDQyLjI3MzYgOTUuNzU5MyA0My4zMDgyIDk1LjMwNjJDNDQuMzQyOCA5NC44NTMgNDUuNDU2NiA5NC42MDgzIDQ2LjU4NTkgOTQuNTg1OUM0Ni45OTYyIDk0LjU4NjUgNDcuNDA2MSA5NC42MTUyIDQ3LjgxMjUgOTQuNjcxOSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik01NS4zOTA3IDExNS4zNDRDNTQuOTkzNSAxMTQuODQ4IDU0LjY3NDYgMTE0LjI5NSA1NC40NDUzIDExMy43MDNDNTQuMDI4MyAxMTIuNzE0IDUzLjgxNTcgMTExLjY1MSA1My44MjAzIDExMC41NzhDNTMuNzgwNiAxMDguNTg0IDU0LjUzNDMgMTA2LjY1NiA1NS45MTU3IDEwNS4yMTdDNTcuMjk3MiAxMDMuNzc4IDU5LjE5MzQgMTAyLjk0NyA2MS4xODc1IDEwMi45MDZINjEuMzkwN0M2MS45ODg1IDEwMi45MjcgNjIuNTgxNSAxMDMuMDIyIDYzLjE1NjMgMTAzLjE4OCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMTEuMjExIDY3LjY0MDZIOTkuNDM3NVYxMTUuOTE0SDExMS4yMTFWNjcuNjQwNloiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTExLjIxMSAxMjQuOTUzVjExNS4yNzMiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTExLjIxMSA2NS44NzVWNjguMzA0NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik05OS40Mjk3IDY1Ljg3NVY2OC4zMDQ3IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTk5LjQzNzUgMTAwSDExMS4yMTEiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOTkuNDM3NSA4OEgxMTEuMjExIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTk5LjQzNzUgNzUuOTA2MkgxMTEuMjExIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExMS4yMTEgNzkuMzIwM0gxMjMuMDc4QzEyNC43MzYgNzkuMzIwMyAxMjYuMzI1IDc5Ljk3ODggMTI3LjQ5OCA4MS4xNTA5QzEyOC42NyA4Mi4zMjMgMTI5LjMyOCA4My45MTI3IDEyOS4zMjggODUuNTcwM1Y4Ni4wMzEzQzEyOS4zMjggODcuNjg4OSAxMjguNjcgODkuMjc4NiAxMjcuNDk4IDkwLjQ1MDdDMTI2LjMyNSA5MS42MjI4IDEyNC43MzYgOTIuMjgxMyAxMjMuMDc4IDkyLjI4MTNIMTExLjIxMVY3OS4zMjAzWiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMTcuMDYyIDc5LjMyMDNDMTE4LjE0OCA4MC4wMDkxIDExOS4wNDMgODAuOTYxMSAxMTkuNjYyIDgyLjA4NzlDMTIwLjI4MiA4My4yMTQ3IDEyMC42MDcgODQuNDc5NyAxMjAuNjA3IDg1Ljc2NTZDMTIwLjYwNyA4Ny4wNTE1IDEyMC4yODIgODguMzE2NiAxMTkuNjYyIDg5LjQ0MzNDMTE5LjA0MyA5MC41NzAxIDExOC4xNDggOTEuNTIyMSAxMTcuMDYyIDkyLjIxMDkiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNOTkuNDI5NyA3NC4yNDIyTDk5LjQzNzUgNzIuMzI4MUg4OC40NjA5TDg1LjU4NTkgNzQuMjQyMkg5OS40Mjk3WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTMyLjY2NCA4My43ODkxSDE0NC43NzMiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTMyLjY2NCA4Ni42MjVIMTQ0Ljc3MyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzIuNjY0IDg5LjQ2ODhIMTQwLjkwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik03OC40MjE5IDE3MC44MlYxNzQuNjY0SDMwLjkxNDFMMTUuNTMxMiAxNTQuMjQyVjE1MC4zOTgiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik03OC40MjE5IDE3MC44MlYxNzQuNjY0SDMwLjkxNDFMMTUuNTMxMiAxNTQuMjQyVjE1MC4zOTgiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNzguNDIxOSAxNzAuODJIMzAuOTE0MUwxNS41MzEyIDE1MC4zOThINjMuMDM5MUw3OC40MjE5IDE3MC44MloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTc0LjAzMTMgMTY4LjY0OEgzMi4yNjU2TDE5LjkzNzUgMTUyLjUxNkg2MS43MDMxTDc0LjAzMTMgMTY4LjY0OFoiIGZpbGw9IiNFRkVGRUYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzAuOTE0MSAxNzAuODJWMTc0LjY2NCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzAuNzY2IDEzMS4xNjRMMTMzLjkzIDEzOS43NThMMTM0LjAyNCAxNDAuMDE2QzEzNC4wNjMgMTQwLjEyMyAxMzQuMDg0IDE0MC4yMzcgMTM0LjA4NiAxNDAuMzUyTDEzNC4zMDUgMTQ2LjY1NkMxMzQuMzUzIDE0Ny4wNzEgMTM0LjIzNiAxNDcuNDg3IDEzMy45NzcgMTQ3LjgxNUMxMzMuNzE4IDE0OC4xNDIgMTMzLjM0IDE0OC4zNTQgMTMyLjkyNiAxNDguNDAyQzEzMi41MTEgMTQ4LjQ1MSAxMzIuMDk1IDE0OC4zMzMgMTMxLjc2NyAxNDguMDc1QzEzMS40NCAxNDcuODE2IDEzMS4yMjggMTQ3LjQzOCAxMzEuMTggMTQ3LjAyM0wxMjkuOTIyIDE0MC44NTJMMTMwLjA3OCAxNDEuNDQ1TDEyNS45NDUgMTMzLjI4OUMxMjUuNzAzIDEzMi42NzcgMTI1LjY5OCAxMzEuOTk3IDEyNS45MzEgMTMxLjM4MkMxMjYuMTYzIDEzMC43NjcgMTI2LjYxNyAxMzAuMjYxIDEyNy4yMDQgMTI5Ljk2M0MxMjcuNzkgMTI5LjY2NCAxMjguNDY3IDEyOS41OTYgMTI5LjEwMSAxMjkuNzcxQzEyOS43MzUgMTI5Ljk0NSAxMzAuMjgyIDEzMC4zNSAxMzAuNjMzIDEzMC45MDZDMTMwLjY4MSAxMzAuOTkgMTMwLjcyNiAxMzEuMDc2IDEzMC43NjYgMTMxLjE2NFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEzNC4zNzUgMTUzLjM3NUMxMzQuMzc1IDE1My4zNzUgMTM0Ljk0NSAxNTguMDYzIDEzNC45NDUgMTYxLjAzMUMxMzQuOTQ1IDE2NCAxMzMuNzI3IDE3MS44MiAxMzMuNzI3IDE3MS44MkMxMzMuNzE2IDE3Mi4zMDYgMTMzLjUyIDE3Mi43NjggMTMzLjE3OCAxNzMuMTE0QzEzMi44MzcgMTczLjQ1OSAxMzIuMzc2IDE3My42NiAxMzEuODkxIDE3My42NzZDMTMxLjQwNiAxNzMuNjkyIDEzMC45MzMgMTczLjUyMSAxMzAuNTcgMTczLjJDMTMwLjIwNiAxNzIuODc4IDEyOS45OCAxNzIuNDI5IDEyOS45MzggMTcxLjk0NUwxMjguMDU1IDE1My41ODZDMTI4LjAwOSAxNTIuNzcxIDEyOC4yOCAxNTEuOTcgMTI4LjgxIDE1MS4zNDlDMTI5LjM0IDE1MC43MjkgMTMwLjA4OSAxNTAuMzM2IDEzMC45MDEgMTUwLjI1NEMxMzEuNzEzIDE1MC4xNzEgMTMyLjUyNiAxNTAuNDA1IDEzMy4xNyAxNTAuOTA2QzEzMy44MTQgMTUxLjQwOCAxMzQuMjQgMTUyLjEzOCAxMzQuMzU5IDE1Mi45NDVDMTM0LjM3NiAxNTMuMDg4IDEzNC4zODEgMTUzLjIzMiAxMzQuMzc1IDE1My4zNzVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMjguNTYzIDE1My4yMDNDMTI4LjU2MyAxNTMuMjAzIDEyNy45MTQgMTU4LjYxNyAxMjcuNDIyIDE2MS4yMDNDMTI2LjkzIDE2My43ODkgMTI0LjA2MyAxNzEuMzU5IDEyNC4wNjMgMTcxLjM1OUMxMjMuOTU1IDE3MS44MzYgMTIzLjY2OCAxNzIuMjUzIDEyMy4yNjEgMTcyLjUyM0MxMjIuODU1IDE3Mi43OTQgMTIyLjM1OSAxNzIuODk3IDEyMS44NzggMTcyLjgxMkMxMjEuMzk3IDE3Mi43MjYgMTIwLjk2OCAxNzIuNDU4IDEyMC42NzkgMTcyLjA2NEMxMjAuMzkgMTcxLjY3IDEyMC4yNjUgMTcxLjE4IDEyMC4zMjggMTcwLjY5NUwxMjIuMzM2IDE1Mi4xMDJDMTIyLjQ0NSAxNTEuMjggMTIyLjg3MSAxNTAuNTM0IDEyMy41MjMgMTUwLjAyM0MxMjQuMTc0IDE0OS41MTEgMTI1LjAwMSAxNDkuMjc1IDEyNS44MjQgMTQ5LjM2NUMxMjYuNjQ4IDE0OS40NTUgMTI3LjQwNCAxNDkuODYzIDEyNy45MyAxNTAuNTAzQzEyOC40NTYgMTUxLjE0MyAxMjguNzExIDE1MS45NjQgMTI4LjY0MSAxNTIuNzg5QzEyOC42MjIgMTUyLjkyOCAxMjguNTk2IDE1My4wNjcgMTI4LjU2MyAxNTMuMjAzWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTM1LjI3MyAxNzQuODEySDEzMS45ODRDMTMxLjQ1OCAxNzQuODEyIDEzMC45NTMgMTc0LjYwMyAxMzAuNTgxIDE3NC4yMzFDMTMwLjIwOSAxNzMuODU5IDEzMCAxNzMuMzU0IDEzMCAxNzIuODI4TDEyOS44MiAxNzAuNzY2SDEzMy43NzNDMTMzLjc3MyAxNzAuNzY2IDEzOC4xNzIgMTcxLjc4OSAxMzguMTcyIDE3My4yNThDMTM4LjE3MiAxNzQuNDE0IDEzNi4zNjcgMTc0LjgxMiAxMzUuMjczIDE3NC44MTJaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEyNSAxNzQuNDUzTDEyMS43ODkgMTczLjc1QzEyMS4yNzkgMTczLjYzOCAxMjAuODMzIDE3My4zMjggMTIwLjU1IDE3Mi44OUMxMjAuMjY2IDE3Mi40NTEgMTIwLjE2NyAxNzEuOTE4IDEyMC4yNzMgMTcxLjQwNkwxMjAuNTM5IDE2OS4zNTJMMTI0LjM5OCAxNzAuMTk1QzEyNC4zOTggMTcwLjE5NSAxMjguNDg0IDE3Mi4xMjUgMTI4LjE3MiAxNzMuNTYyQzEyNy45MTQgMTc0LjY3MiAxMjYuMDYyIDE3NC42ODcgMTI1IDE3NC40NTNaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEzMS4zMTMgMTMxLjg3NUMxMzEuNjEgMTM3LjYwMiAxMzMuODEzIDE0My41IDEzNC41NDcgMTQ5LjA2M0MxMzQuODA1IDE1MC45OTIgMTM0LjkzOCAxNTIuNTIzIDEzMy4yMzUgMTUzLjk2OUMxMzEuMTY0IDE1NS43MTkgMTI3LjkyMiAxNTYuMDMxIDEyNS4wNDcgMTU1LjM3NUMxMjMuMzQ0IDE1NC45ODQgMTIwLjM2IDE1My40MTQgMTIwLjMxMyAxNTEuNjY0QzEyMC4yNDIgMTQ0LjUzOSAxMjIuNDUzIDEyNi42NjQgMTI4LjYxNyAxMjguMzI4QzEyOS4zODcgMTI4LjU1MiAxMzAuMDY1IDEyOS4wMTggMTMwLjU1IDEyOS42NTdDMTMxLjAzNiAxMzAuMjk1IDEzMS4zMDMgMTMxLjA3MyAxMzEuMzEzIDEzMS44NzVaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMjYuOTM4IDEyOC4zNDRDMTI2Ljk4NyAxMjcuMTUyIDEyNy4yNTEgMTI1Ljk4IDEyNy43MTkgMTI0Ljg4M0MxMjcuNzkgMTI0LjY4OCAxMjcuODk5IDEyNC41MDkgMTI4LjA0IDEyNC4zNTZDMTI4LjE4IDEyNC4yMDMgMTI4LjM0OSAxMjQuMDggMTI4LjUzOCAxMjMuOTkyQzEyOC43MjYgMTIzLjkwNSAxMjguOTI5IDEyMy44NTUgMTI5LjEzNyAxMjMuODQ3QzEyOS4zNDQgMTIzLjgzOCAxMjkuNTUxIDEyMy44NyAxMjkuNzQ2IDEyMy45NDFDMTI5Ljk0MSAxMjQuMDEzIDEzMC4xMiAxMjQuMTIyIDEzMC4yNzMgMTI0LjI2MkMxMzAuNDI2IDEyNC40MDMgMTMwLjU0OSAxMjQuNTcyIDEzMC42MzcgMTI0Ljc2QzEzMC43MjQgMTI0Ljk0OCAxMzAuNzc0IDEyNS4xNTIgMTMwLjc4MiAxMjUuMzU5QzEzMC43OTEgMTI1LjU2NyAxMzAuNzU5IDEyNS43NzQgMTMwLjY4OCAxMjUuOTY5QzEzMC4yNjUgMTI2Ljk2NSAxMjkuOTg4IDEyOC4wMTggMTI5Ljg2NyAxMjkuMDk0QzEyOS45NTMgMTI5Ljk1MyAxMjYuOTIyIDEyOS41NjIgMTI2LjkzOCAxMjguMzQ0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTM0Ljk0NSAxMTguNzAzQzEzNi4xOTUgMTIxLjUwOCAxMzUuNTQ3IDEyNi4xNzIgMTMyLjc0MiAxMjcuNDE0QzEyOS45MzcgMTI4LjY1NiAxMjYuMDM5IDEyNi4wMjMgMTI0Ljc4OSAxMjMuMjE5QzEyNC4xOSAxMjEuODcyIDEyNC4xNTEgMTIwLjM0MiAxMjQuNjggMTE4Ljk2N0MxMjUuMjA5IDExNy41OTEgMTI2LjI2MiAxMTYuNDgyIDEyNy42MDkgMTE1Ljg4M0MxMjguOTU2IDExNS4yODQgMTMwLjQ4NiAxMTUuMjQ1IDEzMS44NjEgMTE1Ljc3NEMxMzMuMjM3IDExNi4zMDMgMTM0LjM0NiAxMTcuMzU2IDEzNC45NDUgMTE4LjcwM1oiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEyOC45MDYgMTM1LjQ2OUwxMjcuMDc4IDE0MC43NUwxMzEuNTQ3IDE0OC4yNUMxMzEuNjU1IDE0OC40MjggMTMxLjcyNSAxNDguNjI2IDEzMS43NTUgMTQ4LjgzM0MxMzEuNzg1IDE0OS4wMzkgMTMxLjc3NCAxNDkuMjQ5IDEzMS43MjEgMTQ5LjQ1MUMxMzEuNjY5IDE0OS42NTIgMTMxLjU3NyAxNDkuODQxIDEzMS40NSAxNTAuMDA3QzEzMS4zMjQgMTUwLjE3MiAxMzEuMTY1IDE1MC4zMTEgMTMwLjk4NCAxNTAuNDE0QzEzMC42NDkgMTUwLjYxOSAxMzAuMjQ5IDE1MC42OSAxMjkuODY0IDE1MC42MTNDMTI5LjQ3OSAxNTAuNTM2IDEyOS4xMzcgMTUwLjMxOCAxMjguOTA2IDE1MEwxMjIuOTQ1IDE0MS45MjJDMTIyLjc2IDE0MS42NzMgMTIyLjYzOCAxNDEuMzgzIDEyMi41OTIgMTQxLjA3NkMxMjIuNTQ2IDE0MC43NyAxMjIuNTc2IDE0MC40NTYgMTIyLjY4IDE0MC4xNjRMMTIyLjc3MyAxMzkuOTA2TDEyNC44ODMgMTMzLjE4OCIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTEyOC45MDYgMTM1LjQ2OUwxMjcuMDc4IDE0MC43NUwxMzEuNTQ3IDE0OC4yNUMxMzEuNjU1IDE0OC40MjggMTMxLjcyNSAxNDguNjI2IDEzMS43NTUgMTQ4LjgzM0MxMzEuNzg1IDE0OS4wMzkgMTMxLjc3NCAxNDkuMjQ5IDEzMS43MjEgMTQ5LjQ1MUMxMzEuNjY5IDE0OS42NTIgMTMxLjU3NyAxNDkuODQxIDEzMS40NSAxNTAuMDA3QzEzMS4zMjQgMTUwLjE3MiAxMzEuMTY1IDE1MC4zMTEgMTMwLjk4NCAxNTAuNDE0QzEzMC42NDkgMTUwLjYxOSAxMzAuMjQ5IDE1MC42OSAxMjkuODY0IDE1MC42MTNDMTI5LjQ3OSAxNTAuNTM2IDEyOS4xMzcgMTUwLjMxOCAxMjguOTA2IDE1MEwxMjIuOTQ1IDE0MS45MjJDMTIyLjc2IDE0MS42NzMgMTIyLjYzOCAxNDEuMzgzIDEyMi41OTIgMTQxLjA3NkMxMjIuNTQ2IDE0MC43NyAxMjIuNTc2IDE0MC40NTYgMTIyLjY4IDE0MC4xNjRMMTIyLjc3MyAxMzkuOTA2TDEyNC44ODMgMTMzLjE4OCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzIuNzU1IDE1Mi4wODhDMTMzLjczMiAxNTEuMzYyIDEzMy44MzYgMTQ5Ljg0OCAxMzIuOTg3IDE0OC43MDRDMTMyLjEzOSAxNDcuNTYxIDEzMC42NTkgMTQ3LjIyMiAxMjkuNjgyIDE0Ny45NDdDMTI4LjcwNSAxNDguNjcyIDEyOC42IDE1MC4xODcgMTI5LjQ0OSAxNTEuMzNDMTMwLjI5OCAxNTIuNDc0IDEzMS43NzggMTUyLjgxMyAxMzIuNzU1IDE1Mi4wODhaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMjMuNDk4IDExNy4wNjRMMTI4LjAwOSAxMTMuNzE2QzEyOC40OTMgMTEzLjM1NyAxMjkuMSAxMTMuMjA1IDEyOS42OTcgMTEzLjI5M0MxMzAuMjkzIDExMy4zODEgMTMwLjgzIDExMy43MDMgMTMxLjE4OSAxMTQuMTg3TDEzMi4xOSAxMTUuNTM2TDEyNC4wNDcgMTIxLjU3OUwxMjMuMDQ2IDEyMC4yM0MxMjIuNjg5IDExOS43NDkgMTIyLjUzNyAxMTkuMTQ3IDEyMi42MjEgMTE4LjU1NEMxMjIuNzA2IDExNy45NjEgMTIzLjAyMSAxMTcuNDI2IDEyMy40OTggMTE3LjA2NFoiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTM2Ljc1OCAxMTcuMDU1TDEyNC4xNjQgMTI2LjM5OEwxMjQuMDMxIDEyMS41OTRMMTMyLjE5NSAxMTUuNTM5TDEzNi43NTggMTE3LjA1NVoiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTIzLjc2NiAxMjEuNzk3TDEzMi40NjEgMTE1LjMzNiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTY5LjIxOSAxNTIuMTY0QzE2OS4xNjMgMTUyLjI1MiAxNjkuMSAxNTIuMzM2IDE2OS4wMzEgMTUyLjQxNEMxNjcuOTY5IDE1My42NzIgMTY2LjkyMiAxNTQuODIgMTY1LjgwNSAxNTUuOTc3QzE2NC42NyAxNTcuMTY2IDE2My40NTcgMTU4LjI3OCAxNjIuMTcyIDE1OS4zMDVDMTYxLjQ1IDE1OS44ODEgMTYwLjY2NCAxNjAuMzcxIDE1OS44MjggMTYwLjc2NkMxNTkuMDMyIDE2MS4xMzkgMTU4LjIwNyAxNjEuNDQ0IDE1Ny4zNiAxNjEuNjhDMTU1Ljc0MiAxNjIuMTIgMTU0LjA4MSAxNjIuMzgyIDE1Mi40MDYgMTYyLjQ2MUMxNTEuOTkyIDE2Mi41MDUgMTUxLjU3NyAxNjIuMzg0IDE1MS4yNTIgMTYyLjEyMkMxNTAuOTI4IDE2MS44NjEgMTUwLjcyMSAxNjEuNDgxIDE1MC42NzYgMTYxLjA2NkMxNTAuNjMxIDE2MC42NTIgMTUwLjc1MyAxNjAuMjM3IDE1MS4wMTUgMTU5LjkxMkMxNTEuMjc2IDE1OS41ODggMTUxLjY1NiAxNTkuMzggMTUyLjA3MSAxNTkuMzM2SDE1Mi4xNjRDMTUzLjU0NiAxNTkuMTE2IDE1NC45IDE1OC43NDkgMTU2LjIwMyAxNTguMjQyQzE1Ni44MTUgMTU3Ljk5NyAxNTcuNDA2IDE1Ny43MDIgMTU3Ljk2OSAxNTcuMzU5QzE1OC40OTcgMTU3LjAyNiAxNTguOTgyIDE1Ni42MyAxNTkuNDE0IDE1Ni4xOEMxNjAuNDE1IDE1NS4xNTcgMTYxLjM0NyAxNTQuMDY5IDE2Mi4yMDMgMTUyLjkyMkMxNjMuMDk0IDE1MS43NTggMTYzLjk3NyAxNTAuNTE2IDE2NC43NjYgMTQ5LjMyIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTY5LjIxOSAxNTIuMTY0QzE2OS4xNjMgMTUyLjI1MiAxNjkuMSAxNTIuMzM2IDE2OS4wMzEgMTUyLjQxNEMxNjcuOTY5IDE1My42NzIgMTY2LjkyMiAxNTQuODIgMTY1LjgwNSAxNTUuOTc3QzE2NC42NyAxNTcuMTY2IDE2My40NTcgMTU4LjI3OCAxNjIuMTcyIDE1OS4zMDVDMTYxLjQ1IDE1OS44ODEgMTYwLjY2NCAxNjAuMzcxIDE1OS44MjggMTYwLjc2NkMxNTkuMDMyIDE2MS4xMzkgMTU4LjIwNyAxNjEuNDQ0IDE1Ny4zNiAxNjEuNjhDMTU1Ljc0MiAxNjIuMTIgMTU0LjA4MSAxNjIuMzgyIDE1Mi40MDYgMTYyLjQ2MUMxNTEuOTkyIDE2Mi41MDUgMTUxLjU3NyAxNjIuMzg0IDE1MS4yNTIgMTYyLjEyMkMxNTAuOTI4IDE2MS44NjEgMTUwLjcyMSAxNjEuNDgxIDE1MC42NzYgMTYxLjA2NkMxNTAuNjMxIDE2MC42NTIgMTUwLjc1MyAxNjAuMjM3IDE1MS4wMTUgMTU5LjkxMkMxNTEuMjc2IDE1OS41ODggMTUxLjY1NiAxNTkuMzggMTUyLjA3MSAxNTkuMzM2SDE1Mi4xNjRDMTUzLjU0NiAxNTkuMTE2IDE1NC45IDE1OC43NDkgMTU2LjIwMyAxNTguMjQyQzE1Ni44MTUgMTU3Ljk5NyAxNTcuNDA2IDE1Ny43MDIgMTU3Ljk2OSAxNTcuMzU5QzE1OC40OTcgMTU3LjAyNiAxNTguOTgyIDE1Ni42MyAxNTkuNDE0IDE1Ni4xOEMxNjAuNDE1IDE1NS4xNTcgMTYxLjM0NyAxNTQuMDY5IDE2Mi4yMDMgMTUyLjkyMkMxNjMuMDk0IDE1MS43NTggMTYzLjk3NyAxNTAuNTE2IDE2NC43NjYgMTQ5LjMyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE1My45MyAxNjMuODkxSDE0Mi45MzhDMTQyLjA3NSAxNjMuODkxIDE0MS4zNzUgMTY0LjU5IDE0MS4zNzUgMTY1LjQ1M1YxNzMuMjVDMTQxLjM3NSAxNzQuMTEzIDE0Mi4wNzUgMTc0LjgxMiAxNDIuOTM4IDE3NC44MTJIMTUzLjkzQzE1NC43OTMgMTc0LjgxMiAxNTUuNDkyIDE3NC4xMTMgMTU1LjQ5MiAxNzMuMjVWMTY1LjQ1M0MxNTUuNDkyIDE2NC41OSAxNTQuNzkzIDE2My44OTEgMTUzLjkzIDE2My44OTFaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNTEuOTE0IDE1Ni45MzhIMTQ0Ljk1M0MxNDQuMDkgMTU2LjkzOCAxNDMuMzkxIDE1Ny42MzcgMTQzLjM5MSAxNTguNVYxNjMuMTY0QzE0My4zOTEgMTY0LjAyNyAxNDQuMDkgMTY0LjcyNyAxNDQuOTUzIDE2NC43MjdIMTUxLjkxNEMxNTIuNzc3IDE2NC43MjcgMTUzLjQ3NyAxNjQuMDI3IDE1My40NzcgMTYzLjE2NFYxNTguNUMxNTMuNDc3IDE1Ny42MzcgMTUyLjc3NyAxNTYuOTM4IDE1MS45MTQgMTU2LjkzOFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE3MC4xMDIgMTQ0Ljg5OEMxOTguMzM2IDE2My4xNzIgMTc5LjI2NiAxNzcuODIgMTc0LjAwOCAxNjQuOTUzQzE3NC4wNTUgMTY1LjE0MSAxNzQuMDA4IDE2NS4wMDggMTc0LjAwOCAxNjUuMDE2QzE3Mi45NjkgMTU5LjYwMiAxNjguOTY5IDE1NS4xMTcgMTY0LjkyMiAxNTEuNTQ3QzE2MS4xNDEgMTQ4LjIyNyAxNjUuOTc3IDE0Mi4wNDcgMTcwLjEwMiAxNDQuODk4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTYzLjI4MSAxNDMuNDNDMTY0LjM5MSAxNDQuMTcyIDE2NS4yMzQgMTQ0Ljk5MiAxNjYuNDUzIDE0NS44NTJDMTY3LjAyMyAxNDYuMjY2IDE2NS4wNjIgMTQ5LjIxMSAxNjMuNjY0IDE0Ny44MTJDMTYyLjUgMTQ2LjY2NCAxNTkuMjM0IDE0Mi44MTIgMTYzLjI4MSAxNDMuNDNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNzguMTI1IDE2OS45NTNMMTY5Ljk0NSAxNjQuODQ0TDE2OS45MDYgMTcwLjg0NEMxNjkuNzE5IDE3NC43MDMgMTY2LjEzMyAxNzQuNzUgMTY2IDE3MC44NDRMMTY0LjI3MyAxNjAuNDUzQzE2NC4yNDcgMTU5Ljk0NSAxNjQuMzUgMTU5LjQzOCAxNjQuNTcyIDE1OC45OEMxNjQuNzk0IDE1OC41MjEgMTY1LjEyOSAxNTguMTI3IDE2NS41NDQgMTU3LjgzMkMxNjUuOTU5IDE1Ny41MzggMTY2LjQ0MiAxNTcuMzUzIDE2Ni45NDggMTU3LjI5NUMxNjcuNDU0IDE1Ny4yMzcgMTY3Ljk2NiAxNTcuMzA3IDE2OC40MzggMTU3LjVMMTY4LjY3MiAxNTcuNjAyTDE4Mi4wMzEgMTYyLjVDMTg3LjUgMTY0LjkwNiAxODMuMjU4IDE3My4wNDcgMTc4LjEyNSAxNjkuOTUzWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTY5LjkwNiAxNTMuMDQ3QzE2OS44MjYgMTUzLjExNCAxNjkuNzM5IDE1My4xNzQgMTY5LjY0OSAxNTMuMjI3QzE2OC4yNTggMTU0LjEwMiAxNjYuOTE0IDE1NC44NzUgMTY1LjQ5MiAxNTUuNjQxQzE2NC4wNSAxNTYuNDI2IDE2Mi41NTcgMTU3LjExNSAxNjEuMDI0IDE1Ny43MDNDMTYwLjE2OSAxNTguMDI3IDE1OS4yODEgMTU4LjI1NSAxNTguMzc1IDE1OC4zODNDMTU3LjUwNSAxNTguNDk5IDE1Ni42MjcgMTU4LjUzOCAxNTUuNzUgMTU4LjVDMTU0LjA3MyAxNTguNDIzIDE1Mi40MDkgMTU4LjE2MSAxNTAuNzg5IDE1Ny43MTlDMTUwLjU4NyAxNTcuNjc3IDE1MC4zOTQgMTU3LjU5NSAxNTAuMjIzIDE1Ny40NzlDMTUwLjA1MiAxNTcuMzYyIDE0OS45MDYgMTU3LjIxMyAxNDkuNzkyIDE1Ny4wNEMxNDkuNjc4IDE1Ni44NjcgMTQ5LjYgMTU2LjY3NCAxNDkuNTYxIDE1Ni40N0MxNDkuNTIzIDE1Ni4yNjcgMTQ5LjUyNSAxNTYuMDU4IDE0OS41NjcgMTU1Ljg1NUMxNDkuNjA5IDE1NS42NTMgMTQ5LjY5IDE1NS40NiAxNDkuODA3IDE1NS4yODlDMTQ5LjkyMyAxNTUuMTE4IDE1MC4wNzIgMTU0Ljk3MiAxNTAuMjQ1IDE1NC44NThDMTUwLjQxOCAxNTQuNzQ1IDE1MC42MTIgMTU0LjY2NiAxNTAuODE1IDE1NC42MjhDMTUxLjAxOCAxNTQuNTg5IDE1MS4yMjcgMTU0LjU5MSAxNTEuNDMgMTU0LjYzM0gxNTEuNTI0QzE1Mi45MDYgMTU0Ljg0NSAxNTQuMzA4IDE1NC45MDUgMTU1LjcwMyAxNTQuODEzQzE1Ni4zNjIgMTU0Ljc3MSAxNTcuMDE2IDE1NC42NjkgMTU3LjY1NiAxNTQuNTA4QzE1OC4yNjIgMTU0LjM1OSAxNTguODQ1IDE1NC4xMzEgMTU5LjM5MSAxNTMuODI4QzE2MC42NTUgMTUzLjE1OCAxNjEuODczIDE1Mi40MDcgMTYzLjAzOSAxNTEuNTc4QzE2NC4yNDIgMTUwLjc0MiAxNjUuNDYxIDE0OS44MjggMTY2LjU3OCAxNDguOTMiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNjkuOTA2IDE1My4wNDdDMTY5LjgyNiAxNTMuMTE0IDE2OS43MzkgMTUzLjE3NCAxNjkuNjQ5IDE1My4yMjdDMTY4LjI1OCAxNTQuMTAyIDE2Ni45MTQgMTU0Ljg3NSAxNjUuNDkyIDE1NS42NDFDMTY0LjA1IDE1Ni40MjYgMTYyLjU1NyAxNTcuMTE1IDE2MS4wMjQgMTU3LjcwM0MxNjAuMTY5IDE1OC4wMjcgMTU5LjI4MSAxNTguMjU1IDE1OC4zNzUgMTU4LjM4M0MxNTcuNTA1IDE1OC40OTkgMTU2LjYyNyAxNTguNTM4IDE1NS43NSAxNTguNUMxNTQuMDczIDE1OC40MjMgMTUyLjQwOSAxNTguMTYxIDE1MC43ODkgMTU3LjcxOUMxNTAuNTg3IDE1Ny42NzcgMTUwLjM5NCAxNTcuNTk1IDE1MC4yMjMgMTU3LjQ3OUMxNTAuMDUyIDE1Ny4zNjIgMTQ5LjkwNiAxNTcuMjEzIDE0OS43OTIgMTU3LjA0QzE0OS42NzggMTU2Ljg2NyAxNDkuNiAxNTYuNjc0IDE0OS41NjEgMTU2LjQ3QzE0OS41MjMgMTU2LjI2NyAxNDkuNTI1IDE1Ni4wNTggMTQ5LjU2NyAxNTUuODU1QzE0OS42MDkgMTU1LjY1MyAxNDkuNjkgMTU1LjQ2IDE0OS44MDcgMTU1LjI4OUMxNDkuOTIzIDE1NS4xMTggMTUwLjA3MiAxNTQuOTcyIDE1MC4yNDUgMTU0Ljg1OEMxNTAuNDE4IDE1NC43NDUgMTUwLjYxMiAxNTQuNjY2IDE1MC44MTUgMTU0LjYyOEMxNTEuMDE4IDE1NC41ODkgMTUxLjIyNyAxNTQuNTkxIDE1MS40MyAxNTQuNjMzSDE1MS41MjRDMTUyLjkwNiAxNTQuODQ1IDE1NC4zMDggMTU0LjkwNSAxNTUuNzAzIDE1NC44MTNDMTU2LjM2MiAxNTQuNzcxIDE1Ny4wMTYgMTU0LjY2OSAxNTcuNjU2IDE1NC41MDhDMTU4LjI2MiAxNTQuMzU5IDE1OC44NDUgMTU0LjEzMSAxNTkuMzkxIDE1My44MjhDMTYwLjY1NSAxNTMuMTU4IDE2MS44NzMgMTUyLjQwNyAxNjMuMDM5IDE1MS41NzhDMTY0LjI0MiAxNTAuNzQyIDE2NS40NjEgMTQ5LjgyOCAxNjYuNTc4IDE0OC45MyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNjQuNTg2IDE0Mi4zMjhDMTY0LjAzMSAxNDUuMzQ0IDE2MC45OTIgMTQ4LjM0NCAxNTcuOTc3IDE0Ny43OTdDMTU0Ljk2MSAxNDcuMjUgMTUzLjA5NCAxNDMuMzUyIDE1My42NDkgMTQwLjMyOEMxNTMuOTUxIDEzOC45MTMgMTU0Ljc5NCAxMzcuNjcxIDE1NS45OTcgMTM2Ljg2N0MxNTcuMiAxMzYuMDYzIDE1OC42NjkgMTM1Ljc1OSAxNjAuMDkyIDEzNi4wMjFDMTYxLjUxNiAxMzYuMjgyIDE2Mi43ODEgMTM3LjA4OCAxNjMuNjIgMTM4LjI2N0MxNjQuNDU5IDEzOS40NDYgMTY0LjgwNiAxNDAuOTA2IDE2NC41ODYgMTQyLjMzNlYxNDIuMzI4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTUyLjE0MSAxNDIuMjk3QzE1My4yNDMgMTQyLjQxNSAxNTQuMzQ4IDE0Mi4xMTMgMTU1LjIzOSAxNDEuNDUzQzE1Ni4xMjkgMTQwLjc5MyAxNTYuNzM4IDEzOS44MjMgMTU2Ljk0NSAxMzguNzM0QzE1OS4yMDMgMTQzLjMyOCAxNjMuNzk3IDE0Ni4yMzQgMTY1LjUzOSAxNDIuMDQ3QzE2NS45NjcgMTQxLjEyOSAxNjYuMTU1IDE0MC4xMTggMTY2LjA4OCAxMzkuMTA4QzE2Ni4wMjEgMTM4LjA5OCAxNjUuNjk5IDEzNy4xMjEgMTY1LjE1NCAxMzYuMjY4QzE2NC42MDkgMTM1LjQxNSAxNjMuODU3IDEzNC43MTMgMTYyLjk2OCAxMzQuMjI4QzE2Mi4wOCAxMzMuNzQzIDE2MS4wODMgMTMzLjQ5IDE2MC4wNyAxMzMuNDkyQzE1NS4zOTkgMTMzLjQ1MyAxNTIuMDU1IDEzNS4zMzYgMTUyLjE0MSAxNDIuMjk3WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNjEuODEyIDEzNi41ODZDMTYxLjg2NiAxMzUuOTMgMTYyLjAxNCAxMzUuMjg2IDE2Mi4yNSAxMzQuNjcyQzE2Mi41MTMgMTMzLjk4NyAxNjIuOTI0IDEzMy4zNjggMTYzLjQ1MyAxMzIuODU5QzE2NC4wOTcgMTMyLjI2NSAxNjQuOTIzIDEzMS45MDQgMTY1Ljc5NyAxMzEuODM2QzE2Ni41OTMgMTMxLjc5NiAxNjcuMzg5IDEzMS45MTMgMTY4LjE0MSAxMzIuMThDMTY5LjYxNCAxMzIuNjkgMTcwLjg2MyAxMzMuNjk5IDE3MS42NzIgMTM1LjAzMUMxNzIuMDYyIDEzNS42NDkgMTcyLjM3NCAxMzYuMzEzIDE3Mi42MDIgMTM3LjAwOEMxNzIuNzExIDEzNy4zNDQgMTcyLjgwNSAxMzcuNjg3IDE3Mi44ODMgMTM4LjAzMUMxNzIuODgzIDEzOC4yMDMgMTcyLjk1MyAxMzguMzgzIDE3Mi45ODQgMTM4LjU2MkMxNzMuMDE2IDEzOC43NDIgMTczLjAzMSAxMzguODkxIDE3My4wNDcgMTM5LjE4N0MxNzMuMDYgMTM5LjgwOSAxNzIuODI2IDE0MC40MTEgMTcyLjM5NiAxNDAuODZDMTcxLjk2NiAxNDEuMzA5IDE3MS4zNzYgMTQxLjU2OSAxNzAuNzU0IDE0MS41ODJDMTcwLjEzMiAxNDEuNTk1IDE2OS41MzEgMTQxLjM2MSAxNjkuMDgyIDE0MC45MzFDMTY4LjYzMyAxNDAuNTAxIDE2OC4zNzMgMTM5LjkxMSAxNjguMzU5IDEzOS4yODlDMTY4LjM2OCAxMzkuMjE2IDE2OC4zNjggMTM5LjE0MyAxNjguMzU5IDEzOS4wN1YxMzguNzY2QzE2OC4zNDggMTM4LjU1NiAxNjguMzI0IDEzOC4zNDcgMTY4LjI4OSAxMzguMTQxQzE2OC4yMzcgMTM3LjczOSAxNjguMTQ1IDEzNy4zNDQgMTY4LjAxNiAxMzYuOTYxQzE2Ny44MDQgMTM2LjI1OSAxNjcuMzgyIDEzNS42NCAxNjYuODA1IDEzNS4xODdDMTY2LjUzNiAxMzQuOTkgMTY2LjIyNiAxMzQuODU2IDE2NS44OTggMTM0Ljc5N0MxNjUuNjMxIDEzNC43NTUgMTY1LjM1NiAxMzQuODAyIDE2NS4xMTcgMTM0LjkzQzE2NC4zNjcgMTM1LjQyOCAxNjMuNzY3IDEzNi4xMjMgMTYzLjM4MyAxMzYuOTM3VjEzNy4wMTZDMTYzLjMwNSAxMzcuMTg2IDE2My4xNjggMTM3LjMyMiAxNjIuOTk4IDEzNy40QzE2Mi44MjggMTM3LjQ3OCAxNjIuNjM1IDEzNy40OTIgMTYyLjQ1NiAxMzcuNDRDMTYyLjI3NiAxMzcuMzg4IDE2Mi4xMjEgMTM3LjI3MyAxNjIuMDE4IDEzNy4xMTdDMTYxLjkxNiAxMzYuOTYgMTYxLjg3NCAxMzYuNzcxIDE2MS44OTggMTM2LjU4NkgxNjEuODEyWiIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNMTYxLjQ4NCAxMzkuMTg4TDE1OS40NTMgMTM3LjUzMUwxNjEuOTUzIDEzOC4zMDVMMTYxLjQ4NCAxMzkuMTg4WiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQ5LjcyNyAxNTguNTY4QzE1MS4xNDkgMTU4LjQ5OCAxNTIuMjUzIDE1Ny40NTcgMTUyLjE5NCAxNTYuMjQxQzE1Mi4xMzQgMTU1LjAyNiAxNTAuOTMzIDE1NC4wOTggMTQ5LjUxMSAxNTQuMTY3QzE0OC4wODggMTU0LjIzNyAxNDYuOTg0IDE1NS4yNzkgMTQ3LjA0NCAxNTYuNDk0QzE0Ny4xMDMgMTU3LjcwOSAxNDguMzA0IDE1OC42MzggMTQ5LjcyNyAxNTguNTY4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTYwLjQ2NiAxNDMuOTYyQzE2MS4wMjMgMTQzLjY0MSAxNjEuMTIxIDE0Mi43NjggMTYwLjY4NSAxNDIuMDEzQzE2MC4yNDkgMTQxLjI1OCAxNTkuNDQ1IDE0MC45MDcgMTU4Ljg4OCAxNDEuMjI5QzE1OC4zMzEgMTQxLjU1IDE1OC4yMzMgMTQyLjQyMyAxNTguNjY5IDE0My4xNzdDMTU5LjEwNSAxNDMuOTMyIDE1OS45MDkgMTQ0LjI4MyAxNjAuNDY2IDE0My45NjJaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTY0LjUzMSAxNzQuODUySDE2Ny44MkMxNjguMzQ3IDE3NC44NTIgMTY4Ljg1MSAxNzQuNjQzIDE2OS4yMjMgMTc0LjI3QzE2OS41OTYgMTczLjg5OCAxNjkuODA1IDE3My4zOTMgMTY5LjgwNSAxNzIuODY3TDE2OS44OTEgMTcwLjY2NEwxNjYuMDMxIDE3MC44MDVDMTY2LjAzMSAxNzAuODA1IDE2MS42MjUgMTcxLjgyOCAxNjEuNjI1IDE3My4yOTdDMTYxLjYyNSAxNzQuNDQ1IDE2My40MzggMTc0Ljg1MiAxNjQuNTMxIDE3NC44NTJaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE4NS4zOTEgMTkuOTkyMkgxMTIuMzEyVjQzLjQyMTlIMTg1LjM5MVYxOS45OTIyWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEzMi4zNTkgMjMuMjU3OEgxMTUuNTE2VjQwLjEwMTZIMTMyLjM1OVYyMy4yNTc4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE2OC4zNDQgMjUuNTU0N0gxMzcuODk4VjI3LjczNDRIMTY4LjM0NFYyNS41NTQ3WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTgwLjM1OSAyNS41NTQ3SDE3MC4zNDRWMjcuNzM0NEgxODAuMzU5VjI1LjU1NDdaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTguMzgzIDMwLjc0MjJIMTM3Ljg5OFYzMi45MjE5SDE1OC4zODNWMzAuNzQyMloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE4MC4zNTkgMzAuNzQyMkgxNjAuMzI4VjMyLjkyMTlIMTgwLjM1OVYzMC43NDIyWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQ5LjI2NiAzNS45MTQxSDEzNy44OThWMzguMDkzOEgxNDkuMjY2VjM1LjkxNDFaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik03OC40MDYyIDMxLjE3OTdMNzkuNTQ2OSAzNS41TDgzLjU1NDcgMzMuMTAxNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwNy45NjkgMjMuNTA3OEMxMDcuOTY5IDIzLjUwNzggOTkuODgyOCAxNy42MTcyIDk0LjUzMTMgMjEuODc1Qzg5LjQ1MzEgMjUuOTIxOSA5Mi4zMTI1IDM2IDk2LjQxNDEgMzMuMzA0N0MxMDEuODI4IDI5Ljc1NzggODQuNDY4OCAxOS44OTg1IDc5LjgwNDcgMzUuMjEwOSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xNzguOTg0IDM4LjA0NjlWNTIuODk4NEgxNjQuNDc3TDE2MS42NTYgNTUuOTc2NlY1Mi44OTg0SDE1OC4zOThWMzguMDQ2OUgxNzguOTg0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTY4LjY4OCA0OS44MjgxQzE2Ny4xMzMgNDkuMTI5NiAxNjUuNzg3IDQ4LjAzOTMgMTY0Ljc4MSA0Ni42NjQxQzE2My41MjQgNDQuNjU2MiAxNjQgNDIuMzkwNiAxNjUuODQ0IDQxLjcxODdDMTY3LjY4OCA0MS4wNDY5IDE2OC42ODggNDIuOTY4NyAxNjguNjg4IDQyLjk2ODdDMTY4LjY4OCA0Mi45Njg3IDE2OS43ODEgNDEuMDYyNSAxNzEuNTQ3IDQxLjcxMDlDMTczLjMxMyA0Mi4zNTk0IDE3My44OTEgNDQuNjQ4NCAxNzIuNjA5IDQ2LjY1NjJDMTcxLjU5OCA0OC4wMzQ3IDE3MC4yNDcgNDkuMTI3NSAxNjguNjg4IDQ5LjgyODFaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTExOS40MjIgMjIuMjE4OEgxNy45Njg4VjEwMi43NjZIMTE5LjQyMlYyMi4yMTg4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTEzLjgxMiAyNy45Mjk3SDIzLjU3ODFWOTcuMDU0N0gxMTMuODEyVjI3LjkyOTdaIiBmaWxsPSIjRUZFRkVGIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNMjguOTQ1MyA2OC4xNDA2SDEwOC4zMjgiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik01Mi40OTIyIDU5LjU3ODFINTEuMjAzMVY3Ni4xMjVINTIuNDkyMlY1OS41NzgxWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTUwLjEwMTYgNTguOTUzMUg0OC44MTI1Vjc0LjA4NTlINTAuMTAxNlY1OC45NTMxWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTU4LjY2NDEgNTkuNjI1SDU3LjM3NVY3Ni4xMTcySDU4LjY2NDFWNTkuNjI1WiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTg1LjI5NjkgNTkuNTcwM0g4NC4wMDc4Vjc0LjA4NTlIODUuMjk2OVY1OS41NzAzWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTgwLjAwNzggNTkuNTcwM0g3OC43MTg4Vjc2LjExNzJIODAuMDA3OFY1OS41NzAzWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTc2LjM2NzIgNTkuNTcwM0g3NS4wNzgxVjc0LjA4NTlINzYuMzY3MlY1OS41NzAzWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTkwLjE3OTcgNTkuNTcwM0g4OC44OTA2Vjc2LjExNzJIOTAuMTc5N1Y1OS41NzAzWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTkzLjg3NSA1NC44MjAzSDkyLjY0MDZMOTAuMjI2NiA1My43NzM0TDg2LjYzMjggNTAuNDM3NUw5My44NzUgNTQuODIwM1oiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik03OS4zNjcyIDU0LjgyMDNIODAuNjA5NEw4My4wMTU2IDUzLjc3MzRMODYuNjE3MiA1MC40Mzc1TDc5LjM2NzIgNTQuODIwM1oiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik05Mi42NDA2IDU0LjgyMDNIODAuNjA5NEw4My4wMTU2IDUzLjc3MzRIOTAuMjI2Nkw5Mi42NDA2IDU0LjgyMDNaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNOTAuMjM0NCA1My43NzM0SDg1LjI2NTZWNjAuOTI5N0g5MC4yMzQ0VjUzLjc3MzRaIiBmaWxsPSIjRUZFRkVGIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNODkuMTc5NyA1NS42NzE5SDg2LjMwNDdWNjEuOTI5N0g4OS4xNzk3VjU1LjY3MTlaIiBmaWxsPSIjRUZFRkVGIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNODEuOTI5NyA1NC4yNDIyTDgzLjAxNTYgNTMuNzczNEg4NS4yNjU2VjYxLjkzNzVIODEuOTI5N1Y1NC4yNDIyWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTkxLjMxMjUgNTQuMjQyMkw5MC4yMjY2IDUzLjc3MzRWNjEuOTM3NUg5MS4zMTI1VjU0LjI0MjJaIiBmaWxsPSIjRUZFRkVGIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNODIuOTkyMiA1My43NzM0TDg2LjYzMjggNTAuNDM3NUw5MC4yMjY1IDUzLjc3MzRIODIuOTkyMloiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8ZyBvcGFjaXR5PSIwLjUiPgo8cGF0aCBkPSJNNzUuMDIzNCA1Ni4xMTcyVjU1LjQ1MzFMNzguODIwMyA1NS4xODc1VjYxLjkzNzVINzUuMDIzNFY2MS41IiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik03NS4wMjM0IDU2LjExNzJWNTUuNDUzMUw3OC44MjAzIDU1LjE4NzVWNjEuOTM3NUg3NS4wMjM0VjYxLjUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTg1LjI2NTYgNTYuMzk4NEg3OC44MjgxVjYxLjkzNzVIODUuMjY1NlY1Ni4zOTg0WiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxnIG9wYWNpdHk9IjAuNSI+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTU4LjUzOTEgNTEuMjY1Nkg1NC45MjE5SDUxLjI5NjlWNDEuMzgyOEg1OC41MzkxVjUxLjI2NTZaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNDkuMTU2MiA1MC45Njg4TDUxLjI5NjkgNTEuMjY1NlY0MS4zODI4TDQ4Ljg5MDYgNDIuNDI5N1Y0NC44MjAzIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNjAuOTQ1MyA1MC45Mjk3TDU4LjUzOTEgNTEuMjY1NlY0MS4zODI4TDYwLjk0NTMgNDIuNDI5N1Y1MC45Mjk3WiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTUxLjI5NjkgNDEuMzgyOEw1NC45Mzc1IDM4LjA0NjlMNTguNTM5MSA0MS4zODI4SDUxLjI5NjlaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNjIuMTg3NSA0Mi40Mjk3SDYwLjk0NTNMNTguNTM5MSA0MS4zODI4TDU0LjkzNzUgMzguMDQ2OUw2Mi4xODc1IDQyLjQyOTdaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNDcuNjcxOSA0Mi40Mjk3SDQ4LjkxNDFMNTEuMzIwMyA0MS4zODI4TDU0LjkyMTkgMzguMDQ2OUw0Ny42NzE5IDQyLjQyOTdaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggZD0iTTU5LjcwMzEgNTguOTUzMUw1OC41NjI1IDU5LjYyNUg1MS4yOTY5TDQ4Ljg5MDYgNTguOTUzMVY1MC45Mjk3TDUxLjI5NjkgNTEuMjY1Nkg1NC45Mzc1SDU4LjUzOTFMNjAuOTQ1MyA1MC45Mjk3VjUzLjk3NjYiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggZD0iTTU5LjcwMzEgNTguOTUzMUw1OC41NjI1IDU5LjYyNUg1MS4yOTY5TDQ4Ljg5MDYgNTguOTUzMVY1MC45Mjk3TDUxLjI5NjkgNTEuMjY1Nkg1NC45Mzc1SDU4LjUzOTFMNjAuOTQ1MyA1MC45Mjk3VjUzLjk3NjYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTUxLjI5NjkgNTkuNjI1VjUwLjkyOTciIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik01OC41NjI1IDU5LjYyNVY1MS4yNjU2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNTYuODc1IDQzLjA4NTlINTIuOTA2MlY0OS40NTMxSDU2Ljg3NVY0My4wODU5WiIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik02MC4yMjY2IDQ5LjExNzJMNTkuMTY0MSA0OS40NTMxVjQzLjA4NTlMNjAuMjI2NiA0My40MjE5VjQ5LjExNzJaIiBmaWxsPSIjMEEwNjA2Ii8+CjwvZz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNjUuNTM5MSA3My40Njg4VjUzLjk3NjZINTkuNzQyMlY3MC41NzAzTDY1LjUzOTEgNzMuNDY4OFoiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik00Ni41MDc2IDY4LjkyMTlDNDYuMTk1MSA2OS41IDQ2LjczNDIgNzEuMDc4MSA0Ni43MzQyIDcxLjA3ODFDNDYuNzM0MiA3MS4wNzgxIDYxLjQ5MiA3Ny43NSA2Mi4xNTYgNzguNzEwOUM2Mi41NDAzIDc5LjE5NDUgNjIuNzQ0NyA3OS43OTY1IDYyLjczNDIgODAuNDE0MUM2Mi43MzQyIDgwLjQxNDEgNjIuODc0OCA3Ny44OTA2IDYxLjk1MjkgNzYuNzQyMkM2MS4wMzEgNzUuNTkzOCA0OC41NDY3IDY5Ljc2NTYgNDYuNDkyIDY4LjkyOTdMNTEuMjk2NyA3MS4wOTM3IiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTg5Ljg5MDYgNjEuMzI4MUw5Ny44NjcyIDczLjY2NDFMMTAxLjgyIDc0LjQyOTciIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNOTAuNTU0OSA2MC44NTE2TDk4LjI2NTggNzMuMzUxNkw5Ny45NTMzIDczLjE0MDZMMTAxLjg2IDc0LjA3MDNDMTAxLjk0NCA3NC4wOTI1IDEwMi4wMTYgNzQuMTQ2NCAxMDIuMDYxIDc0LjIyMDdDMTAyLjEwNiA3NC4yOTUgMTAyLjEyMSA3NC4zODM5IDEwMi4xMDIgNzQuNDY4OEMxMDIuMDg3IDc0LjU0OTcgMTAyLjA0MSA3NC42MjE2IDEwMS45NzQgNzQuNjY5N0MxMDEuOTA3IDc0LjcxNzcgMTAxLjgyNCA3NC43MzggMTAxLjc0MiA3NC43MjY2TDk3Ljc1OCA3NC4xMzI4Qzk3LjYzODIgNzQuMTExOSA5Ny41MzE1IDc0LjA0NDUgOTcuNDYxMiA3My45NDUzTDg5LjIxOSA2MS43OTY5Qzg5LjA5NDQgNjEuNjE0IDg5LjA0NTEgNjEuMzkwMSA4OS4wODE1IDYxLjE3MThDODkuMTE3OSA2MC45NTM1IDg5LjIzNzEgNjAuNzU3NiA4OS40MTQzIDYwLjYyNUM4OS40OTk3IDYwLjU2MDQgODkuNTk3NCA2MC41MTQxIDg5LjcwMTUgNjAuNDg4OEM4OS44MDU2IDYwLjQ2MzYgODkuOTEzNyA2MC40NjAxIDkwLjAxOTIgNjAuNDc4NEM5MC4xMjQ3IDYwLjQ5NjcgOTAuMjI1MyA2MC41MzY1IDkwLjMxNDggNjAuNTk1M0M5MC40MDQyIDYwLjY1NDEgOTAuNDgwNyA2MC43MzA3IDkwLjUzOTMgNjAuODIwM0w5MC41NTQ5IDYwLjg1MTZaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTkwLjA5MzkgNjEuMzIwM0g4NS41NjI2Qzg1LjUzMjggNjEuMzIwNiA4NS41MDM2IDYxLjMyOTEgODUuNDc4MyA2MS4zNDQ4Qzg1LjQ1MjkgNjEuMzYwNCA4NS40MzIzIDYxLjM4MjcgODUuNDE4NiA2MS40MDkyQzg1LjQwNDkgNjEuNDM1NyA4NS4zOTg4IDYxLjQ2NTUgODUuNDAwOCA2MS40OTUyQzg1LjQwMjcgNjEuNTI1IDg1LjQxMjggNjEuNTUzNyA4NS40Mjk4IDYxLjU3ODFMOTQuNDQ1NCA3NC4yMTg4TDk3LjM2NzMgNzVMMTAxLjgyIDc0LjY0MDZWNzQuMjk2OUw5Ny45MTQyIDczLjUxNTZMOTAuMDkzOSA2MS4zMjAzWiIgZmlsbD0iI0VGRUZFRiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNODUuOTA2MiA2MS4zMjgxTDk0LjQ0NTMgNzQuMjAzMUw5Ny45NTMxIDc0Ljg1OTQiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNODYuNTcwMyA2MC44NDM4TDk0Ljg0MzcgNzMuOTE0MUw5NC41MzEyIDczLjcxMUw5OC4wMTU2IDc0LjQ5MjJDOTguMTAwMyA3NC41MTYxIDk4LjE3MjYgNzQuNTcxNSA5OC4yMTc3IDc0LjY0NzFDOTguMjYyNyA3NC43MjI2IDk4LjI3NzEgNzQuODEyNiA5OC4yNTc4IDc0Ljg5ODVDOTguMjQwOCA3NC45Nzg1IDk4LjE5NDYgNzUuMDQ5MyA5OC4xMjgxIDc1LjA5N0M5OC4wNjE2IDc1LjE0NDcgOTcuOTc5NyA3NS4xNjU4IDk3Ljg5ODQgNzUuMTU2M0w5NC4zNjcyIDc0LjY3MTlDOTQuMzA3NyA3NC42NjIgOTQuMjUwOCA3NC42NDAzIDk0LjE5OTggNzQuNjA4MUM5NC4xNDg5IDc0LjU3NTkgOTQuMTA0OCA3NC41MzM4IDk0LjA3MDMgNzQuNDg0NEw4NS4yNDIyIDYxLjgwNDdDODUuMjQyMiA2MS42ODc1IDg1LjA2MjUgNjAuODk4NSA4NS40MjE5IDYwLjYyNUM4NS41MDc1IDYwLjU1OTEgODUuNjA1OCA2MC41MTE3IDg1LjcxMDcgNjAuNDg1OEM4NS44MTU2IDYwLjQ1OTggODUuOTI0NyA2MC40NTU5IDg2LjAzMTEgNjAuNDc0MkM4Ni4xMzc2IDYwLjQ5MjYgODYuMjM5MSA2MC41MzI4IDg2LjMyOTIgNjAuNTkyNEM4Ni40MTkzIDYwLjY1MiA4Ni40OTYxIDYwLjcyOTYgODYuNTU0NyA2MC44MjAzTDg2LjU3MDMgNjAuODQzOFoiIGZpbGw9IiMwQTA2MDYiLz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNMzcuMTY0MSA1OC41NDY5SDM1Ljg3NVY3NC4wOTM4SDM3LjE2NDFWNTguNTQ2OVoiIGZpbGw9IiNFRkVGRUYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik00NC40Mzc1IDUyLjM0MzhINDMuMTQ4NFY2My40Mzc1SDQ0LjQzNzVWNTIuMzQzOFoiIGZpbGw9IiNFRkVGRUYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik00Mi40MTQxIDY3LjgzNTlINDEuMTI1Vjc2LjEyNUg0Mi40MTQxVjY3LjgzNTlaIiBmaWxsPSIjRUZFRkVGIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggZD0iTTQ4LjEwOTQgNzEuNjk1M0w0Ny4zMjgxIDcxLjM0MzdDNDIuMjM0NCA2OS4wNzAzIDM1Ljg5MDYgNjYuMjUgMzUuODkwNiA1OC4wNjI1QzM1Ljg5MDYgNTMuNjAxNiAzOC4xNDA2IDQ5Ljg3NSA0Mi4zODI4IDQ3LjI5NjlDNDQuMjI2MSA0Ni4xODk2IDQ2LjIzMjUgNDUuMzgwMiA0OC4zMjgxIDQ0Ljg5ODRDNDguNTE1NyA0NC44NTg4IDQ4LjcwNjcgNDQuODM3OSA0OC44OTg0IDQ0LjgzNTlDNTAuODU5NCA0NC44MzU5IDUxLjI4OTEgNTAuMjI2NiA0OS40NjA5IDUwLjc4MTJDNDkuMzEyNSA1MC44MjgxIDQxLjc3MzQgNTIuNjMyOCA0MS43NzM0IDU4LjA2MjVDNDEuNzczNCA2MS44NTE2IDQ0LjYwMTYgNjMuNTMxMiA1MC4xODc1IDY2LjAyMzRMNTEuMTcxOSA2Ni41NTQ3IiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik00OC4xMDk0IDcxLjY5NTNMNDcuMzI4MSA3MS4zNDM3QzQyLjIzNDQgNjkuMDcwMyAzNS44OTA2IDY2LjI1IDM1Ljg5MDYgNTguMDYyNUMzNS44OTA2IDUzLjYwMTYgMzguMTQwNiA0OS44NzUgNDIuMzgyOCA0Ny4yOTY5QzQ0LjIyNjEgNDYuMTg5NiA0Ni4yMzI1IDQ1LjM4MDIgNDguMzI4MSA0NC44OTg0QzQ4LjUxNTcgNDQuODU4OCA0OC43MDY3IDQ0LjgzNzkgNDguODk4NCA0NC44MzU5QzUwLjg1OTQgNDQuODM1OSA1MS4yODkxIDUwLjIyNjYgNDkuNDYwOSA1MC43ODEyQzQ5LjMxMjUgNTAuODI4MSA0MS43NzM0IDUyLjYzMjggNDEuNzczNCA1OC4wNjI1QzQxLjc3MzQgNjEuODUxNiA0NC42MDE2IDYzLjUzMTIgNTAuMTg3NSA2Ni4wMjM0TDUxLjE3MTkgNjYuNTU0NyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNjIuNzM0NCA4MC40MTQxQzYyLjcyMzQgNzkuODAwMSA2Mi41MjE0IDc5LjIwNDcgNjIuMTU2MiA3OC43MTA5QzYxLjI3MzQgNzcuNTQ2OSA0Ny44NzUgNzEuNTkzOCA0Ny44NzUgNzEuNTkzOCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxnIG9wYWNpdHk9IjAuNSI+CjxwYXRoIGQ9Ik01MS4yOTY5IDcxLjA5MzdMNDYuNTA3OCA2OC44OTg0QzQ4LjU2MjUgNjkuNzQyMiA2MS4wNjI1IDc1LjU3ODEgNjEuOTY4OCA3Ni43MTA5QzYyLjg3NSA3Ny44NDM3IDYyLjc1IDgwLjM4MjggNjIuNzUgODAuMzgyOEw2OS40Njg4IDc5LjI4OTFDNjkuNDY4OCA3OS4yODkxIDY5Ljc2NTYgNzYuOTQ1MyA2OS4xOTUzIDc1LjY5NTNDNjguNjI1IDc0LjQ0NTMgNTEuMTY0MSA2Ni41MzEyIDUxLjE2NDEgNjYuNTMxMiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNNTEuMjk2OSA3MS4wOTM3TDQ2LjUwNzggNjguODk4NEM0OC41NjI1IDY5Ljc0MjIgNjEuMDYyNSA3NS41NzgxIDYxLjk2ODggNzYuNzEwOUM2Mi44NzUgNzcuODQzNyA2Mi43NSA4MC4zODI4IDYyLjc1IDgwLjM4MjhMNjkuNDY4OCA3OS4yODkxQzY5LjQ2ODggNzkuMjg5MSA2OS43NjU2IDc2Ljk0NTMgNjkuMTk1MyA3NS42OTUzQzY4LjYyNSA3NC40NDUzIDUxLjE2NDEgNjYuNTMxMiA1MS4xNjQxIDY2LjUzMTIiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxnIG9wYWNpdHk9IjAuNSI+CjxwYXRoIGQ9Ik00My4yNDIyIDQ2LjgyMDNDNDQuMTMxNCA0Ni45MjEzIDQ0Ljk1MDkgNDcuMzUwNSA0NS41NDA1IDQ4LjAyMzhDNDYuMTMgNDguNjk3MSA0Ni40NDcxIDQ5LjU2NjIgNDYuNDI5NyA1MC40NjA5QzQ2LjQ0MDMgNTEuMDIzNCA0Ni4zMjU2IDUxLjU4MTIgNDYuMDkzOCA1Mi4wOTM4IiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik00My4yNDIyIDQ2LjgyMDNDNDQuMTMxNCA0Ni45MjEzIDQ0Ljk1MDkgNDcuMzUwNSA0NS41NDA1IDQ4LjAyMzhDNDYuMTMgNDguNjk3MSA0Ni40NDcxIDQ5LjU2NjIgNDYuNDI5NyA1MC40NjA5QzQ2LjQ0MDMgNTEuMDIzNCA0Ni4zMjU2IDUxLjU4MTIgNDYuMDkzNyA1Mi4wOTM4IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiPgo8cGF0aCBkPSJNMzguMDM5MSA1MS4xODc1QzM4LjQ1MyA1MS4wMTc0IDM4Ljg5NjIgNTAuOTI5OSAzOS4zNDM4IDUwLjkyOTdDMzkuODE0MyA1MC45Mzg4IDQwLjI3ODUgNTEuMDQwNyA0MC43MDk2IDUxLjIyOTVDNDEuMTQwOCA1MS40MTgzIDQxLjUzMDQgNTEuNjkwMyA0MS44NTYzIDUyLjAzQzQyLjE4MjEgNTIuMzY5NiA0Mi40Mzc4IDUyLjc3MDIgNDIuNjA4NiA1My4yMDg4QzQyLjc3OTQgNTMuNjQ3NCA0Mi44NjE5IDU0LjExNTQgNDIuODUxNiA1NC41ODU5QzQyLjg1NTQgNTQuNjQwNiA0Mi44NTU0IDU0LjY5NTQgNDIuODUxNiA1NC43NSIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMzguMDM5MSA1MS4xODc1QzM4LjQ1MyA1MS4wMTc0IDM4Ljg5NjIgNTAuOTI5OSAzOS4zNDM4IDUwLjkyOTdDMzkuODE0MyA1MC45Mzg4IDQwLjI3ODUgNTEuMDQwNyA0MC43MDk2IDUxLjIyOTVDNDEuMTQwOCA1MS40MTgzIDQxLjUzMDQgNTEuNjkwMyA0MS44NTYzIDUyLjAzQzQyLjE4MjEgNTIuMzY5NiA0Mi40Mzc4IDUyLjc3MDIgNDIuNjA4NiA1My4yMDg4QzQyLjc3OTQgNTMuNjQ3NCA0Mi44NjE5IDU0LjExNTQgNDIuODUxNiA1NC41ODU5QzQyLjg1NTQgNTQuNjQwNiA0Mi44NTU0IDU0LjY5NTQgNDIuODUxNiA1NC43NSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggZD0iTTM1Ljg5MDYgNTguMjAzMUMzNi4xNjggNTcuNjA2MyAzNi42MDg3IDU3LjEwMDMgMzcuMTYxOCA1Ni43NDM2QzM3LjcxNDggNTYuMzg2OSAzOC4zNTc2IDU2LjE5NDEgMzkuMDE1NiA1Ni4xODc1QzM5LjU1MTMgNTYuMTkwMiA0MC4wNzg5IDU2LjMxODEgNDAuNTU2MyA1Ni41NjA5QzQxLjAzMzggNTYuODAzNyA0MS40NDc5IDU3LjE1NDcgNDEuNzY1NiA1Ny41ODU5IiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik0zNS44OTA2IDU4LjIwMzFDMzYuMTY4IDU3LjYwNjMgMzYuNjA4NyA1Ny4xMDAzIDM3LjE2MTggNTYuNzQzNkMzNy43MTQ4IDU2LjM4NjkgMzguMzU3NiA1Ni4xOTQxIDM5LjAxNTYgNTYuMTg3NUMzOS41NTEzIDU2LjE5MDIgNDAuMDc4OSA1Ni4zMTgxIDQwLjU1NjMgNTYuNTYwOUM0MS4wMzM4IDU2LjgwMzcgNDEuNDQ3OSA1Ny4xNTQ3IDQxLjc2NTYgNTcuNTg1OSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggZD0iTTM3LjA1NDcgNjMuNDM3NUMzNy4wNjI2IDYyLjUwNzMgMzcuNDMyNCA2MS42MTY4IDM4LjA4NTggNjAuOTU0NkMzOC43MzkyIDYwLjI5MjUgMzkuNjI0NyA1OS45MTA5IDQwLjU1NDcgNTkuODkwNkM0MS4xMTY4IDU5Ljg4NzkgNDEuNjcwNSA2MC4wMjc3IDQyLjE2NDEgNjAuMjk2OCIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMzcuMDU0NyA2My40Mzc1QzM3LjA2MjYgNjIuNTA3MyAzNy40MzI0IDYxLjYxNjggMzguMDg1OCA2MC45NTQ2QzM4LjczOTIgNjAuMjkyNSAzOS42MjQ3IDU5LjkxMDkgNDAuNTU0NyA1OS44OTA2QzQxLjExNjggNTkuODg3OSA0MS42NzA1IDYwLjAyNzcgNDIuMTY0MSA2MC4yOTY4IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiPgo8cGF0aCBkPSJNNDMuODIwNSA2OS42OTUzQzQzLjYyNTYgNjkuMjI3NCA0My41MjQ3IDY4LjcyNTcgNDMuNTIzNyA2OC4yMTg3QzQzLjUwNDggNjcuMjY5IDQzLjg2MzYgNjYuMzUwNSA0NC41MjEzIDY1LjY2NUM0NS4xNzg5IDY0Ljk3OTUgNDYuMDgxNyA2NC41ODMgNDcuMDMxNSA2NC41NjI1SDQ3LjEyNTIiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggZD0iTTQzLjgyMDUgNjkuNjk1M0M0My42MjU2IDY5LjIyNzQgNDMuNTI0NyA2OC43MjU3IDQzLjUyMzcgNjguMjE4N0M0My41MDQ4IDY3LjI2OSA0My44NjM2IDY2LjM1MDUgNDQuNTIxMyA2NS42NjVDNDUuMTc4OSA2NC45Nzk1IDQ2LjA4MTcgNjQuNTgzIDQ3LjAzMTUgNjQuNTYyNUg0Ny4xMjUyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik00Ni40Mjk3IDY4LjkyMThDNDYuNDE1IDY4LjEzOTIgNDYuNzEwOSA2Ny4zODI1IDQ3LjI1MjYgNjYuODE3NEM0Ny43OTQzIDY2LjI1MjMgNDguNTM3NyA2NS45MjQ3IDQ5LjMyMDMgNjUuOTA2MkM0OS41NjMxIDY1LjkwNTEgNDkuODA0OCA2NS45MzY2IDUwLjAzOTEgNjZDNTAuNjcxNCA2Ni4xODE1IDUxLjIyNjUgNjYuNTY1OCA1MS42MTg5IDY3LjA5MzhDNTIuMDExNCA2Ny42MjE4IDUyLjIxOTQgNjguMjY0MSA1Mi4yMTEgNjguOTIxOEM1Mi4yMSA2OS4zMjY0IDUyLjEyODcgNjkuNzI2NiA1MS45NzE4IDcwLjA5OTVDNTEuODE0OSA3MC40NzIzIDUxLjU4NTUgNzAuODEwMyA1MS4yOTY5IDcxLjA5MzciIGZpbGw9IiMwQTA2MDYiLz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggZD0iTTQwLjAwMDIgNjcuMTg3NUM0MC4wMDM3IDY3LjE0ODUgNDAuMDAzNyA2Ny4xMDkzIDQwLjAwMDIgNjcuMDcwM0MzOS45MTY0IDY2Ljc3OTkgMzkuODY0IDY2LjQ4MTMgMzkuODQ0IDY2LjE3OTdDMzkuODM0NiA2NS43MDQ0IDM5LjkxOTMgNjUuMjMxOSA0MC4wOTMxIDY0Ljc4OTRDNDAuMjY2OSA2NC4zNDY5IDQwLjUyNjQgNjMuOTQzMSA0MC44NTY3IDYzLjYwMTJDNDEuMTg3IDYzLjI1OTMgNDEuNTgxNiA2Mi45ODYgNDIuMDE3OCA2Mi43OTdDNDIuNDU0IDYyLjYwOCA0Mi45MjMzIDYyLjUwNzEgNDMuMzk4NiA2Mi41QzQzLjU3MDMgNjIuNDg4NCA0My43NDI2IDYyLjQ4ODQgNDMuOTE0MyA2Mi41IiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik00MC4wMDAyIDY3LjE4NzVDNDAuMDAzNyA2Ny4xNDg1IDQwLjAwMzcgNjcuMTA5MyA0MC4wMDAyIDY3LjA3MDNDMzkuOTE2NCA2Ni43Nzk5IDM5Ljg2NCA2Ni40ODEzIDM5Ljg0NCA2Ni4xNzk3QzM5LjgzNDYgNjUuNzA0NCAzOS45MTkzIDY1LjIzMTkgNDAuMDkzMSA2NC43ODk0QzQwLjI2NjkgNjQuMzQ2OSA0MC41MjY0IDYzLjk0MzEgNDAuODU2NyA2My42MDEyQzQxLjE4NyA2My4yNTkzIDQxLjU4MTYgNjIuOTg2IDQyLjAxNzggNjIuNzk3QzQyLjQ1NCA2Mi42MDggNDIuOTIzMyA2Mi41MDcxIDQzLjM5ODYgNjIuNUM0My41NzAzIDYyLjQ4ODQgNDMuNzQyNiA2Mi40ODg0IDQzLjkxNDMgNjIuNSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNDcuMDg1OSA3MS4yMDMxQzQ2LjkxOTkgNzAuOTk2MiA0Ni43ODggNzAuNzY0MSA0Ni42OTUzIDcwLjUxNTZDNDYuNTE5MSA3MC4xMDYgNDYuNDI4NyA2OS42NjQ2IDQ2LjQyOTYgNjkuMjE4N0M0Ni40MTcxIDY4LjgwMDUgNDYuNDg4NiA2OC4zODQxIDQ2LjY0IDY3Ljk5NDFDNDYuNzkxNSA2Ny42MDQgNDcuMDE5NyA2Ny4yNDg0IDQ3LjMxMTEgNjYuOTQ4MkM0Ny42MDI1IDY2LjY0OCA0Ny45NTEzIDY2LjQwOTQgNDguMzM2NyA2Ni4yNDY1QzQ4LjcyMjEgNjYuMDgzNiA0OS4xMzYyIDY1Ljk5OTggNDkuNTU0NiA2Nkg0OS42NDA2QzQ5Ljg5MiA2Ni4wMDY2IDUwLjE0MTUgNjYuMDQ2IDUwLjM4MjggNjYuMTE3MiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41Ij4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNzAuNDg0NCA1MS4yMTA5SDY1LjU0NjlWNzEuNDM3NUg3MC40ODQ0VjUxLjIxMDlaIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggb3BhY2l0eT0iMC41IiBkPSJNNzAuNDc2NiA3NS4yMjY2VjcxLjE3MTkiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik03MC40NzY2IDUwLjQ2ODhWNTEuNDkyMiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTY1LjUzOTEgNTAuNDY4OFY1MS40OTIyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik03MC40NzY2IDU2LjEwOTRINzUuMzUxNkM3Ni4wNjg1IDU2LjEwOTQgNzYuNzU2IDU2LjM5NDIgNzcuMjYzIDU2LjkwMTFDNzcuNzY5OSA1Ny40MDggNzguMDU0NyA1OC4wOTU2IDc4LjA1NDcgNTguODEyNVY1OC44MTI1Qzc4LjA1NDcgNTkuNTI5NCA3Ny43Njk5IDYwLjIxNyA3Ny4yNjMgNjAuNzIzOUM3Ni43NTYgNjEuMjMwOCA3Ni4wNjg1IDYxLjUxNTYgNzUuMzUxNiA2MS41MTU2SDcwLjQ3NjZWNTYuMTA5NFoiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTY1LjUzOTEgNTMuOTc2Nkw2NS41NDY5IDUzLjE3MTlINjAuOTQ1M0w1OS43NDIyIDUzLjk3NjZINjUuNTM5MVoiIGZpbGw9IiNFRkVGRUYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxtYXNrIGlkPSJtYXNrMCIgeD0iMjMiIHk9IjI3IiB3aWR0aD0iOTIiIGhlaWdodD0iNzEiPgo8cGF0aCBkPSJNMTEzLjgxMiAyNy45Mjk3SDIzLjU3ODFWOTcuMDU0N0gxMTMuODEyVjI3LjkyOTdaIiBmaWxsPSIjRUZFRkVGIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swKSI+CjxwYXRoIG9wYWNpdHk9IjAuNSIgZD0iTTEyMi43MTQgMTMuOTg3MkwxMTUuODQ3IDguNzQyNjhMMzkuNTE2NyAxMDguNjg3TDQ2LjM4MzcgMTEzLjkzMUwxMjIuNzE0IDEzLjk4NzJaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBvcGFjaXR5PSIwLjUiIGQ9Ik04OS45MTggMTIuNTE5M0w4MC41MDU0IDUuMzMwNjNMOC45NzQyMSA5OC45OTExTDE4LjM4NjggMTA2LjE4TDg5LjkxOCAxMi41MTkzWiIgZmlsbD0id2hpdGUiLz4KPC9nPgo8cGF0aCBkPSJNODUuNDIxOSAyNy45OTIySDc2LjgwNDdWOTYuODc1SDg1LjQyMTlWMjcuOTkyMloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTc0LjIxMDkgMTE0Ljk2MUg3MC41NTQ3VjE2Ny4wNzhINzQuMjEwOVYxMTQuOTYxWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTY5Ljg1MiAxMTQuOTYxSDE2Ni4xOTVWMTY3LjA3OEgxNjkuODUyVjExNC45NjFaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNzguODQ0IDExNC45NjFINjEuNTYyNVYxMTkuOTUzSDE3OC44NDRWMTE0Ljk2MVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEyMy4yNzMgMTEyLjQzOEg3OS41MzkxVjExNC45NjFIMTIzLjI3M1YxMTIuNDM4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTA5Ljc2NiAxMTQuOTYxSDc5LjUzOTFMNzMuNjQwNiA5Mi45NTMxSDEwMy44NjdMMTA5Ljc2NiAxMTQuOTYxWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTA5Ljc2NiAxMTQuOTYxSDEwOC4wODZMMTAyLjE4OCA5Mi45NTMxSDEwMy44NjdMMTA5Ljc2NiAxMTQuOTYxWiIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNOTIuMDE0NSAxMDcuOTY2QzkzLjU3MDIgMTA3LjU3MSA5NC40MTAzIDEwNS41OTMgOTMuODkwOSAxMDMuNTQ4QzkzLjM3MTYgMTAxLjUwMyA5MS42ODk0IDEwMC4xNjUgOTAuMTMzNyAxMDAuNTZDODguNTc4IDEwMC45NTYgODcuNzM3OSAxMDIuOTM0IDg4LjI1NzMgMTA0Ljk3OUM4OC43NzY2IDEwNy4wMjQgOTAuNDU4OCAxMDguMzYxIDkyLjAxNDUgMTA3Ljk2NloiIGZpbGw9IiMwQTA2MDYiLz4KPHBhdGggZD0iTTc0LjIxODkgMTAxLjE5NUM3NC4yMTg5IDEwMS4xOTUgNTguODIwNSA5My42ODc1IDYxLjQ4NDUgODMuMzk4NEM2Ni4zMzYxIDY0LjcxMDkgMTE1LjQ5MiA4MS41NjI1IDEyNi4zMjggNzYuODUxNkMxMzcuMTY0IDcyLjE0MDYgMTM2LjQ4NSA1Ni4xMDk0IDEyNC44MTMgNTIuMzQzOCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTEwOC4yMjYgNzUuNzM2NEwxMDMuMzk3IDcwLjkwODFMOTguNTY5MiA3NS43MzY0TDEwMy4zOTcgODAuNTY0NkwxMDguMjI2IDc1LjczNjRaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0xNDkuNTQ3IDEyMi41NzhDMTQzLjY0OCAxMjEuNzk3IDEzNy45MTQgMTE5LjM3NSAxMzIuMDIzIDEyMC4xOEMxMzEuODY3IDEyMC4xOCAxMzAuODA1IDEyNS4yNjYgMTMwLjQ2MSAxMjkuNDM3QzEzMC4yMjYgMTMyLjMyIDEyOC41MTUgMTMyLjE5NSAxMjYuNDMgMTMyLjMxMkMxMjQuMzQ0IDEzMi40MyAxMjEuODIgMTMyLjcyNyAxMjEuNjQ4IDEyOS41OTRDMTIyLjA3IDEyMi4yNDIgMTIwLjI0MiAxMTYuODc1IDEyNC4xNTYgMTEyLjk2OUMxMjguMDcgMTA5LjA2MiAxNDEuODI4IDEwOC41NzggMTUwLjU4NiAxMDYuODkxQzE2MC44MjggMTA1Ljg5MSAxNTkuNzI2IDEyNC4xNDggMTQ5LjU0NyAxMjIuNTc4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQxLjIwMyAxNTEuNDA2TDEzNy4xOCAxNjMuNDY5IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEzOC43NzYgMTUwLjU5M0wxMzQuNzU1IDE2Mi42NTlMMTM5LjYxNyAxNjQuMjc5TDE0My42MzggMTUyLjIxM0wxMzguNzc2IDE1MC41OTNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNjEuOTYxIDExNi4zMjhDMTU3LjQ3NyAxMjMuMTcyIDE1My4wMzkgMTMwLjUxNiAxNDkuMDA4IDEzNy42NDhDMTQ1LjgzNiAxNDUuMTg3IDE0Ni41NTUgMTQ5LjA2MiAxNDQuMzU5IDE1Ni45NzdDMTQzLjA4NiAxNTguNTM5IDEzNy43MjcgMTU4LjkyMiAxMzUuMjczIDE1NC4yNzNDMTM3LjU3IDE0NS4yNDIgMTM2LjgzNiAxNDAuNTg2IDE0MC4yNjYgMTMxLjg0NEMxNDMuNjg4IDEyNC43MzQgMTQ2LjgwNSAxMTcuNDQ1IDE0OS41NjMgMTEwLjAzOUMxNTMuMjk3IDEwMC41NDcgMTY3LjQyMiAxMDcuNjcyIDE2MS45NjEgMTE2LjMyOFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE1Ny43MjcgODQuODIwNEwxNTYuNDMgMTA1LjcxOVYxMDUuODk4QzE1Ni4zNzYgMTA2Ljc1NSAxNTUuOTg0IDEwNy41NTUgMTU1LjM0MSAxMDguMTIzQzE1NC42OTggMTA4LjY5MSAxNTMuODU3IDEwOC45ODEgMTUzIDEwOC45M0MxNTIuODM3IDEwOC45MjIgMTUyLjY3NSAxMDguOTAxIDE1Mi41MTYgMTA4Ljg2N0wxMzcuNjcyIDEwNC45NjFDMTM2LjEwOSAxMDQuNjE3IDEzNC41NDcgMTAzLjU1NSAxMzQuODY3IDEwMS45NjlDMTM1LjAyOSAxMDEuMjMgMTM1LjQ3IDEwMC41ODMgMTM2LjA5NyAxMDAuMTYxQzEzNi43MjQgOTkuNzM5IDEzNy40OSA5OS41NzUgMTM4LjIzNCA5OS43MDMyTDE0OS43ODkgMTAxLjcwM0wxNDkuNjQ5IDg0LjYwMTZDMTQ5LjY4NiA4My41NjMzIDE1MC4xMjIgODIuNTc5NCAxNTAuODY3IDgxLjg1NTFDMTUxLjYxMSA4MS4xMzA4IDE1Mi42MDcgODAuNzIxOSAxNTMuNjQ2IDgwLjcxMzlDMTU0LjY4NSA4MC43MDU4IDE1NS42ODcgODEuMDk5MSAxNTYuNDQzIDgxLjgxMThDMTU3LjE5OSA4Mi41MjQ1IDE1Ny42NSA4My41MDE1IDE1Ny43MDMgODQuNTM5MUMxNTcuNzE5IDg0LjYzMiAxNTcuNzI3IDg0LjcyNjEgMTU3LjcyNyA4NC44MjA0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTYwLjI0MiA4MS4zNjcyQzE2My40NzYgOTEuMjgxMyAxNjQuMTQ4IDEwMy4yODkgMTYzLjU2MiAxMTMuNjI1QzE2Mi44MjggMTI3LjM0NCAxNDEuMDA3IDEyNS42NjQgMTQyLjU0NiAxMTEuOTkyQzE0NC40NDUgMTA1LjI2NiAxNDguMjE4IDk3LjgxMjUgMTQ3LjkyOSA5MC43NUMxNDcuOTM0IDg4LjQ0MjIgMTQ4LjA5NiA4Ni4xMzc0IDE0OC40MTQgODMuODUxNkMxNDkuODI4IDc1LjkzNzUgMTU4LjQ5MiA3NC41NDY5IDE2MC4yNDIgODEuMzY3MloiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE1My4zMDQgNzEuMjE4OEMxNTQuNDg0IDczLjUgMTU1LjE4NyA3My41NjI1IDE1NS41NTQgNzYuMTc5N0MxNTUuNzUgNzcuNTkzNyAxNTAuNzExIDgwLjg2NzIgMTUwLjk1MyA3OC44MjAzQzE1MS4xMzMgNzcgMTUwLjM5IDc0LjM1MTYgMTQ5LjkwNiA3Mi41NzAzQzE0OS4zMTIgNzAuNDkyMiAxNTIuMzQzIDY5LjMyODEgMTUzLjMwNCA3MS4yMTg4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTUwLjc4MSA3Ni4wNzgxQzE1MC4yMiA3Ni40NDk2IDE0OS41ODkgNzYuNzAyOCAxNDguOTI3IDc2LjgyMjNDMTQ4LjI2NSA3Ni45NDE5IDE0Ny41ODUgNzYuOTI1MiAxNDYuOTMgNzYuNzczNEMxNDMuNjI1IDc1Ljc4OSAxNDIuMzU5IDcwLjIxMDkgMTQzLjM0NCA2Ni45MDYyQzE0My44NzggNjUuMzk2MyAxNDQuOTcxIDY0LjE0ODkgMTQ2LjM5OCA2My40MjE2QzE0Ny44MjUgNjIuNjk0MiAxNDkuNDc2IDYyLjU0MjQgMTUxLjAxMiA2Mi45OTc1QzE1Mi41NDggNjMuNDUyNSAxNTMuODUgNjQuNDc5NyAxNTQuNjUgNjUuODY3MUMxNTUuNDUgNjcuMjU0NCAxNTUuNjg4IDY4Ljg5NiAxNTUuMzEzIDcwLjQ1MzFDMTU0Ljc5OCA3MS45OTgzIDE1My45MTkgNzMuMzk3IDE1Mi43NSA3NC41MzEyIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTUwLjc4MSA3Ni4wNzgxQzE1MC4yMiA3Ni40NDk2IDE0OS41ODkgNzYuNzAyOCAxNDguOTI3IDc2LjgyMjNDMTQ4LjI2NSA3Ni45NDE5IDE0Ny41ODUgNzYuOTI1MiAxNDYuOTMgNzYuNzczNEMxNDMuNjI1IDc1Ljc4OSAxNDIuMzU5IDcwLjIxMDkgMTQzLjM0NCA2Ni45MDYyQzE0My44NzggNjUuMzk2MyAxNDQuOTcxIDY0LjE0ODkgMTQ2LjM5OCA2My40MjE2QzE0Ny44MjUgNjIuNjk0MiAxNDkuNDc2IDYyLjU0MjQgMTUxLjAxMiA2Mi45OTc1QzE1Mi41NDggNjMuNDUyNSAxNTMuODUgNjQuNDc5NyAxNTQuNjUgNjUuODY3MUMxNTUuNDUgNjcuMjU0NCAxNTUuNjg4IDY4Ljg5NiAxNTUuMzEzIDcwLjQ1MzFDMTU0Ljc5OCA3MS45OTgzIDE1My45MTkgNzMuMzk3IDE1Mi43NSA3NC41MzEyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEyOC4zOTEgOTguNjcxOUMxMjguNDQzIDEwMC4wMjYgMTI5LjAxOCAxMDEuMzA4IDEyOS45OTQgMTAyLjI0N0MxMzAuOTcxIDEwMy4xODcgMTMyLjI3NCAxMDMuNzEyIDEzMy42MjkgMTAzLjcxMkMxMzQuOTg0IDEwMy43MTIgMTM2LjI4NyAxMDMuMTg3IDEzNy4yNjMgMTAyLjI0N0MxMzguMjQgMTAxLjMwOCAxMzguODE1IDEwMC4wMjYgMTM4Ljg2NyA5OC42NzE5SDEyOC4zOTFaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTI5LjM4MiAxMDQuMjQyQzEyOS43MjYgMTA0LjMxMyAxMzAuMDc4IDEwNC4zNjcgMTMwLjQyOSAxMDQuNDIyQzEzMC4xNCAxMDQuMjk3IDEyOS44NTEgMTA0LjE3MiAxMjkuNTU0IDEwNC4wMTZDMTI5LjI1NyAxMDMuODU5IDEyOC45MjEgMTAzLjYxNyAxMjguNjA5IDEwMy40MjJMMTI3LjY4NyAxMDIuODI4QzEyNy41OTMgMTAyLjc2NyAxMjcuNTI1IDEwMi42NzMgMTI3LjQ5NyAxMDIuNTY1QzEyNy40NyAxMDIuNDU2IDEyNy40ODQgMTAyLjM0MSAxMjcuNTM3IDEwMi4yNDNDMTI3LjU5IDEwMi4xNDQgMTI3LjY3OSAxMDIuMDY5IDEyNy43ODUgMTAyLjAzM0MxMjcuODkxIDEwMS45OTcgMTI4LjAwNyAxMDIuMDAyIDEyOC4xMDkgMTAyLjA0N0wxMjkuMDc4IDEwMi41TDEyOS44NTkgMTAyLjg1OUwxMjkuNTYyIDEwMi42ODhMMTI3LjcwMyAxMDEuNUMxMjcuNTk5IDEwMS40NDQgMTI3LjUyMiAxMDEuMzQ5IDEyNy40ODggMTAxLjIzNkMxMjcuNDU1IDEwMS4xMjQgMTI3LjQ2NyAxMDEuMDAyIDEyNy41MjMgMTAwLjg5OEMxMjcuNTc5IDEwMC43OTUgMTI3LjY3NCAxMDAuNzE4IDEyNy43ODcgMTAwLjY4NEMxMjcuODk5IDEwMC42NSAxMjguMDIxIDEwMC42NjMgMTI4LjEyNSAxMDAuNzE5TDEzMC4xNjQgMTAxLjY4TDEzMC4zNTEgMTAxLjc1TDEyOC4xMzIgMTAwLjUzMUMxMjguMDQ3IDEwMC40NzIgMTI3Ljk4NSAxMDAuMzg1IDEyNy45NTggMTAwLjI4NUMxMjcuOTMxIDEwMC4xODUgMTI3Ljk0MSAxMDAuMDc5IDEyNy45ODUgOTkuOTg1QzEyOC4wMjkgOTkuODkxMiAxMjguMTA1IDk5LjgxNjEgMTI4LjE5OSA5OS43NzMxQzEyOC4yOTMgOTkuNzMgMTI4LjQgOTkuNzIxOSAxMjguNSA5OS43NUwxMzIuMTA5IDEwMS4xMTdIMTMyLjE0OEwxMzMuMDkzIDEwMS4yNjZMMTMyLjU3OCAxMDAuNjcyTDEzMS4zNjcgMTAwLjA4NkMxMzEuMjgxIDEwMC4wNDYgMTMxLjIxMiA5OS45NzcgMTMxLjE3MSA5OS44OTE3QzEzMS4xMjkgOTkuODA2NCAxMzEuMTE5IDk5LjcwOTUgMTMxLjE0IDk5LjYxNzJDMTMxLjE1MSA5OS41NjI4IDEzMS4xNzMgOTkuNTExMSAxMzEuMjA0IDk5LjQ2NTFDMTMxLjIzNiA5OS40MTkxIDEzMS4yNzYgOTkuMzc5NyAxMzEuMzIyIDk5LjM0OTNDMTMxLjM2OCA5OS4zMTg4IDEzMS40MjEgOTkuMjk3OCAxMzEuNDc1IDk5LjI4NzRDMTMxLjUzIDk5LjI3NzEgMTMxLjU4NiA5OS4yNzc3IDEzMS42NCA5OS4yODkxTDEzMy4xNTYgOTkuNjAxNkMxMzMuMjA1IDk5LjYxMzkgMTMzLjI1MSA5OS42MzggMTMzLjI4OSA5OS42NzE5TDEzMy4zODIgOTkuNzQyMkMxMzMuMzgyIDk5Ljc0MjIgMTM1LjY0IDEwMS42MTcgMTM1LjY2NCAxMDEuNjY0TDEzNy41ODYgMTAxLjk2MUMxMzguMDU0IDEwMi4wMzQgMTM4LjQ3NiAxMDIuMjg0IDEzOC43NjcgMTAyLjY1OUMxMzkuMDU3IDEwMy4wMzMgMTM5LjE5NCAxMDMuNTA1IDEzOS4xNDggMTAzLjk3N0MxMzkuMDQ2IDEwNC45OTIgMTM5LjA2MiAxMDUuNTg2IDEzOC4wNDYgMTA1LjQ4NEwxMzQuNTcgMTA1LjM3NUMxMzQuMjM0IDEwNS40NzcgMTMzLjkwNiAxMDUuNTYzIDEzMy41NTQgMTA1LjYzM0MxMzMuMDM5IDEwNS43MzYgMTMyLjUwOCAxMDUuNzM2IDEzMS45OTIgMTA1LjYzM0MxMzEuMDM0IDEwNS40ODEgMTMwLjA5MSAxMDUuMjUxIDEyOS4xNzEgMTA0Ljk0NUMxMjkuMDg0IDEwNC45MiAxMjkuMDEgMTA0Ljg2MiAxMjguOTYzIDEwNC43ODRDMTI4LjkxNyAxMDQuNzA1IDEyOC45MDIgMTA0LjYxMiAxMjguOTIxIDEwNC41MjNDMTI4LjkzMSAxMDQuNDc0IDEyOC45NTIgMTA0LjQyNyAxMjguOTgxIDEwNC4zODVDMTI5LjAxIDEwNC4zNDMgMTI5LjA0NyAxMDQuMzA4IDEyOS4wOSAxMDQuMjgyQzEyOS4xMzQgMTA0LjI1NSAxMjkuMTgyIDEwNC4yMzggMTI5LjIzMiAxMDQuMjMxQzEyOS4yODIgMTA0LjIyNSAxMjkuMzM0IDEwNC4yMjggMTI5LjM4MiAxMDQuMjQyWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTU3LjczNCA4NC41ODU5QzE1Ny43MzQgODQuNjU2MiAxNTcuNzM0IDg0Ljc1IDE1Ny43MzQgODQuODIwM0MxNTcuNzM0IDg0Ljg5MDYgMTU4LjE4IDg5LjAwNzggMTU4LjE4IDkzLjY0MDZDMTU4LjA5OCA5Ny43NzI0IDE1Ny41NSAxMDEuODgyIDE1Ni41NDcgMTA1Ljg5MUMxNTUuOTUzIDEwOC4wNzggMTU0Ljg1OSAxMDkuMTQxIDE1My4wMTYgMTA5LjAxNkgxNTIuNzg5TDEzNi4yNDIgMTA2Ljk1M0MxMzQuNTM5IDEwNi43NDIgMTM1LjI0MiAxMDAuNjU2IDEzNi44OTEgMTAwLjc5N0wxNDkuNzM0IDEwMS45MTRMMTUwLjk2MSA4NS43NDIyIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTU3LjczNCA4NC41ODU5QzE1Ny43MzQgODQuNjU2MiAxNTcuNzM0IDg0Ljc1IDE1Ny43MzQgODQuODIwM0MxNTcuNzM0IDg0Ljg5MDYgMTU4LjE4IDg5LjAwNzggMTU4LjE4IDkzLjY0MDZDMTU4LjA5OCA5Ny43NzI0IDE1Ny41NSAxMDEuODgyIDE1Ni41NDcgMTA1Ljg5MUMxNTUuOTUzIDEwOC4wNzggMTU0Ljg1OSAxMDkuMTQxIDE1My4wMTYgMTA5LjAxNkgxNTIuNzg5TDEzNi4yNDIgMTA2Ljk1M0MxMzQuNTM5IDEwNi43NDIgMTM1LjI0MiAxMDAuNjU2IDEzNi44OTEgMTAwLjc5N0wxNDkuNzM0IDEwMS45MTRMMTUwLjk2MSA4NS43NDIyIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE0Mi4wODYgNzAuODgyOEMxMzkuNDI5IDY0LjMwNDcgMTQ4LjMzNiA1OC4yNzM1IDE1My43MzQgNjEuNjQwNkMxNTkuMTMyIDY1LjAwNzggMTU3LjcwMyA2Ni4yMjY2IDE2MC42ODcgNjcuMzU5NEMxNjQuOTc2IDY4Ljk5MjIgMTYzLjgxMiA3My4yODEzIDE2NS43MjYgNzUuODA0N0MxNjcuNjQgNzguMzI4MSAxNjkuNTMxIDgwLjQ2ODggMTcwLjE1NiA4My45MDYzQzE3MC43ODEgODcuMzQzOCAxNjguODI4IDkyLjI3MzQgMTY2LjM0MyA5NC4yNzM0QzE2Mi41MDcgOTcuMzUxNiAxNjMuNjg3IDkzLjQyMTkgMTYxLjg5OCA4OS4wMDc4QzE2MC4xMDkgODQuNTkzOCAxNjAuNzQyIDgxLjkyOTcgMTU0LjE0IDc2Ljg0MzhDMTUyLjIzNCA3NS4zNDM4IDE1MS4zODIgNzEuNTM5MSAxNTEuMTY0IDY4LjkwNjNDMTQ4LjI5NyA3Mi4yNjU2IDE0NCA2OC43NSAxNDIuMDg2IDcwLjg4MjhaIiBmaWxsPSIjMEEwNjA2Ii8+CjxwYXRoIGQ9Ik0xNTIuMjE5IDcwLjgzMDRDMTUyLjMzNyA2OS44NTgxIDE1MS44NjcgNjkuMDAxMSAxNTEuMTY5IDY4LjkxNjJDMTUwLjQ3IDY4LjgzMTQgMTQ5LjgwOSA2OS41NTA4IDE0OS42OTEgNzAuNTIzMUMxNDkuNTcyIDcxLjQ5NTQgMTUwLjA0MyA3Mi4zNTI0IDE1MC43NDEgNzIuNDM3MkMxNTEuNDM5IDcyLjUyMjEgMTUyLjEwMSA3MS44MDI3IDE1Mi4yMTkgNzAuODMwNFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNDEgMTYxLjMzNkMxNDEuODU5IDE2Mi40MDYgMTQwLjc4MSAxNjEuODQ0IDE0MC40MTQgMTYzLjcxOUMxNDAuNTc4IDE2NC4wNDIgMTQwLjYzIDE2NC40MSAxNDAuNTYyIDE2NC43NjZDMTQwLjc0MiAxNjQuOTAyIDE0MC44NzYgMTY1LjA5IDE0MC45NDUgMTY1LjMwNUMxNDAuOTg0IDE2NS41NyAxNDAuOTg0IDE2Ni42MDkgMTQwLjY3MiAxNjYuODJDMTQwLjM1OSAxNjcuMDMxIDEyOS4wMDggMTY3LjA5NCAxMjguMjUgMTY3LjA3QzEyNi45NzIgMTY2Ljk5NCAxMjUuNzA5IDE2Ni43NTYgMTI0LjQ5MiAxNjYuMzU5QzEyMy42NCAxNjYuMDMxIDEyMy4xNjQgMTY1LjUxNiAxMjMuMjExIDE2NUMxMjMuMjQyIDE2NC43NjUgMTIzLjM0MSAxNjQuNTQ0IDEyMy40OTcgMTY0LjM2NUMxMjMuNjUyIDE2NC4xODYgMTIzLjg1NyAxNjQuMDU2IDEyNC4wODYgMTYzLjk5MkMxMjQuNTQ3IDE2My44MDUgMTI3LjQwNiAxNjMuMTAyIDEyNy44MDQgMTYyLjg3NUMxMjguMjAzIDE2Mi42NDggMTMxLjI1OCAxNjAuNzExIDEzMS42MDkgMTYwLjQzQzEzMi4zOTcgMTU5Ljk4MSAxMzMuMTQgMTU5LjQ1OCAxMzMuODI4IDE1OC44NjdDMTMzLjk0NyAxNTguNjk3IDEzNC4xMjIgMTU4LjU3NiAxMzQuMzIzIDE1OC41MjRDMTM0LjUyMyAxNTguNDczIDEzNC43MzYgMTU4LjQ5NCAxMzQuOTIyIDE1OC41ODZDMTM0LjkyMiAxNTguNTg2IDEzNS4zOTggMTU4Ljg0NCAxMzQuOTIyIDE1OS40MTRDMTM1LjM1OCAxNTkuNjQyIDEzNS43NzYgMTU5LjkwMyAxMzYuMTcyIDE2MC4xOTVDMTM2LjUgMTYwLjQ0NSAxMzguMzgzIDE2MS41MjMgMTM5LjUxNSAxNjEuMjU4QzE0MC40MzcgMTYxIDE0MC42MjUgMTYwLjgyOCAxNDEgMTYxLjMzNloiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjU1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTEzMC40MDYgMTMwLjE1NkMxMzAuNDA2IDEzMy4xMTcgMTI5LjAyMyAxMzIuMzEyIDEyNi40MyAxMzIuMzEyQzEyMy44MzYgMTMyLjMxMiAxMjEuNzQyIDEzMy4wOTQgMTIxLjc0MiAxMzAuMTU2QzEyMS43NDIgMTI3LjIxOSAxMjMuODQ0IDEyNi42OTUgMTI2LjQzIDEyNi42OTVDMTI5LjAxNiAxMjYuNjk1IDEzMC40MDYgMTI3LjE5NSAxMzAuNDA2IDEzMC4xNTZaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41NSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMzAuNjA5IDEyOS4zODNMMTI5LjY4NyAxMzkuMTMzTDEyNS4yOTcgMTM5LjA2MkwxMjQuNzk3IDEyNi43OTdDMTI2LjE0NiAxMjYuNDQxIDEyNy41NjkgMTI2LjQ3NiAxMjguODk4IDEyNi44OThDMTI5LjM4OCAxMjcuMTEgMTI5LjgwOCAxMjcuNDU2IDEzMC4xMSAxMjcuODk1QzEzMC40MTMgMTI4LjMzNCAxMzAuNTg2IDEyOC44NSAxMzAuNjA5IDEyOS4zODNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMjEuMDIzIDE0Ni4wOTRDMTE5LjY3MiAxNDQuODkxIDExOS41NyAxNDIuOTY5IDEyMS4yODkgMTQwLjY3MkwxMjUuMjM0IDEzNS4zMkMxMjUuNTk2IDEzNC43ODggMTI2LjA3OCAxMzQuMzQ4IDEyNi42NCAxMzQuMDM0QzEyNy4yMDIgMTMzLjcyIDEyNy44MjkgMTMzLjU0MiAxMjguNDcyIDEzMy41MTNDMTI5LjExNSAxMzMuNDg0IDEyOS43NTYgMTMzLjYwNiAxMzAuMzQ0IDEzMy44NjhDMTMwLjkzMiAxMzQuMTMgMTMxLjQ1MSAxMzQuNTI2IDEzMS44NTkgMTM1LjAyM0MxMzIuMjIxIDEzNS40NTMgMTMyLjQ5NSAxMzUuOTQ5IDEzMi42NjUgMTM2LjQ4NEMxMzIuODM1IDEzNy4wMTkgMTMyLjg5NyAxMzcuNTgzIDEzMi44NDkgMTM4LjE0MkMxMzIuODAyIDEzOC43MDEgMTMyLjY0NCAxMzkuMjQ2IDEzMi4zODYgMTM5Ljc0NEMxMzIuMTI3IDE0MC4yNDMgMTMxLjc3MyAxNDAuNjg1IDEzMS4zNDQgMTQxLjA0N0wxMjYuNjU2IDE0NC45OTJDMTI0Ljg1MSAxNDYuNTA4IDEyMi4zNzUgMTQ3LjI5NyAxMjEuMDIzIDE0Ni4wOTRaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41NSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNTAuNzgxIDc2LjA3ODFDMTUxLjE4OSA3NS43ODg4IDE1MS41NTIgNzUuNDQxNCAxNTEuODU5IDc1LjA0NjlDMTUxLjY4NiA3NS44Njk1IDE1MS4zODUgNzYuNjYwMiAxNTAuOTY5IDc3LjM5MDZDMTUwLjk1MyA3Ni45NDc3IDE1MC44OSA3Ni41MDc3IDE1MC43ODEgNzYuMDc4MVoiIGZpbGw9IiMwQTA2MDYiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI0LjU2MiA1My43MTA5QzEyNS4yNDkgNTMuNzEwOSAxMjUuODA1IDUzLjE1NDggMTI1LjgwNSA1Mi40Njg4QzEyNS44MDUgNTEuNzgyNyAxMjUuMjQ5IDUxLjIyNjYgMTI0LjU2MiA1MS4yMjY2QzEyMy44NzYgNTEuMjI2NiAxMjMuMzIgNTEuNzgyNyAxMjMuMzIgNTIuNDY4OEMxMjMuMzIgNTMuMTU0OCAxMjMuODc2IDUzLjcxMDkgMTI0LjU2MiA1My43MTA5WiIgZmlsbD0iIzBBMDYwNiIvPgo8cGF0aCBkPSJNMzguMzY3MyAxNTguMDA4QzM4LjM2NzMgMTU4LjAwOCAzMC44OTA3IDE0Ni4yMTEgMjUuMDAwMSAxNDMuODM2QzE5LjEwOTUgMTQxLjQ2MSAxNi42Nzk4IDEzOS4xNDggMTcuMTg3NiAxMzUuNjMzQzE3LjY5NTQgMTMyLjExNyAyNC4xNDg1IDEzMS4xMjUgMzAuNDY4OCAxMzYuNTQ3QzM2Ljc4OTEgMTQxLjk2OSAzNy44NTE2IDE0OS4xMDkgMzguMzY3MyAxNTguMDA4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMzkuNDIxOSAxNTguMDA4QzM5LjQyMTkgMTU4LjAwOCA0My45NzY2IDE0OC41NTUgNDkuODUxNiAxNDQuOTkyQzUzLjkzNzUgMTQyLjUxNiA2Mi45Njg4IDEzNy4yNDIgNjIuNDIxOSAxMzMuNzI3QzYxLjg3NSAxMzAuMjExIDUyLjc2NTYgMTI5Ljc1IDQ2LjQxNDEgMTM1LjE1NkM0MC4wNjI1IDE0MC41NjMgMzkuOTM3NSAxNDkuMTA5IDM5LjQyMTkgMTU4LjAwOFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM4LjUzMTUgMTY0LjI4OUMzOC4zMTkxIDE1Ny40MzEgMzcuMzQxNyAxNTAuNjE4IDM1LjYxNzQgMTQzLjk3N0MzMi44MTI4IDEzMy42ODcgMzIuODU5NiAxMjIuNjU2IDM4LjUzMTUgMTIyLjY1NkM0NC4yMDM0IDEyMi42NTYgNDQuOTUzNCAxMzMuNTk0IDQzLjAzMTUgMTQwLjkxNEM0MS4xMDk2IDE0OC4yMzQgMzguMjI2OCAxNTkuNjQxIDM4LjUzMTUgMTY0LjI4OVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTQ1LjE5NTMgMTY4LjkzSDM0LjE0MDZMMzEuMjczNCAxNTMuNzY2SDQ4LjA2MjVMNDUuMTk1MyAxNjguOTNaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPC9zdmc+Cg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzY2IiBoZWlnaHQ9IjQwOSIgdmlld0JveD0iMCAwIDM2NiA0MDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgo8cGF0aCBkPSJNMjcxLjA0OCAzNjUuMDI4QzMyNi4yMzkgMzY2LjI2NiAzMzkuMTEzIDMwMC42NDMgMzM5LjExMyAzMDAuNjQzQzMzOS4xMTMgMzAwLjY0MyAzNjkuNzc5IDE3MC45NDIgMzI1Ljg0NSAxMTEuMTg2QzI4NS44NzMgNTYuODE4MiAyMDQuNDc2IC00NC44NTYxIDE2OC42OTggMzkuMzM0MUMxMzIuOTE5IDEyMy41MjQgMzEuOTg3NCA4Mi4wOTI4IDguMTg5MDUgMTU1Ljc4OEMtMTIuMTM2OSAyMTguNzMxIDE5LjY3NjQgMjQzLjQxNCA0NS4wMDc5IDI5Mi42MDdDNzAuNjQ4NSAzNDIuNCA5My44NzA0IDM4NC44MjggMTM2LjM4OCA0MDMuMTQxQzE4OC4zNDMgNDI1LjUxOSAyMDIuMDU5IDM2My40OCAyNzEuMDQ4IDM2NS4wMjhaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik0zNjUuMzExIDEyNC40NjVWMTU5Ljk2MUgzMzAuNzI1TDMyMy45OTUgMTY3LjMxNlYxNTkuOTYxSDMxNi4yMlYxMjQuNDY1SDM2NS4zMTFaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0zNDAuNzczIDE1Mi42MjJDMzQwLjc3MyAxNTIuNjIyIDMzNC40MzggMTQ5Ljg4NyAzMzEuNDM3IDE0NS4wMjRDMzI4LjQzNiAxNDAuMTYyIDMyOS41ODggMTM0Ljc4MiAzMzMuOTY4IDEzMy4xODdDMzM4LjM0OCAxMzEuNTkxIDM0MC43NzMgMTM2LjIyNiAzNDAuNzczIDEzNi4yMjZDMzQwLjc3MyAxMzYuMjI2IDM0My4zOCAxMzEuNjY3IDM0Ny41NzggMTMzLjE4N0MzNTEuNzc3IDEzNC43MDYgMzUzLjE0MSAxNDAuMjUzIDM1MC4xMSAxNDUuMDdDMzQ3LjA3OCAxNDkuODg3IDM0MC43NzMgMTUyLjYyMiAzNDAuNzczIDE1Mi42MjJaIiBmaWxsPSIjMEEwNjA2IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTM1Mi44ODMgNDAuMjgyN0gxOTguODk2Vjg5Ljc3MzlIMzUyLjg4M1Y0MC4yODI3WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTI0MS4xMzYgNDcuMTgxNUgyMDUuNjU1VjgyLjc1MzdIMjQxLjEzNlY0Ny4xODE1WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUzIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTMxNi45NzggNTIuMDU5MkgyNTIuODIxVjU2LjY2MzRIMzE2Ljk3OFY1Mi4wNTkyWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzQyLjI4OSA1Mi4wNTkySDMyMS4xOTFWNTYuNjYzNEgzNDIuMjg5VjUyLjA1OTJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yOTUuOTg2IDYyLjk5OThIMjUyLjgyMVY2Ny42MDM5SDI5NS45ODZWNjIuOTk5OFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM0Mi4yODkgNjIuOTk5OEgzMDAuMDc5VjY3LjYwMzlIMzQyLjI4OVY2Mi45OTk4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMjc2Ljc2OCA3My45NDA0SDI1Mi44MjFWNzguNTQ0NkgyNzYuNzY4VjczLjk0MDRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yMTcuODQxIDIxLjMwMzhIMTc5Ljk2NVY1OS4yNzY5SDIxNy44NDFWMjEuMzAzOFoiIGZpbGw9IiNFRkVGRUYiLz4KPHBhdGggZD0iTTIxNC40NzYgMjQuNjc3MUgxODMuMzE1VjU1LjkxODdIMjE0LjQ3NlYyNC42NzcxWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTkxLjE2NiA0MC4yOTc5TDE5Ni4zMTkgNDUuNDQ5MUwyMDYuNjI1IDM1LjExNjMiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xOTEuMTY2IDQwLjI5NzlMMTk2LjMxOSA0NS40NDkxTDIwNi42MjUgMzUuMTE2MyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMjY4LjkxNyAxNzUuMjkzSDI0Ny41MDFWMTk2Ljc2NEgyNjguOTE3VjE3NS4yOTNaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yNTIuNTE5IDE4Ni4wMzZMMjU2LjMwOCAxODkuODJMMjYzLjg4NiAxODIuMjM3IiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjUyLjUxOSAxODYuMDM2TDI1Ni4zMDggMTg5LjgyTDI2My44ODYgMTgyLjIzNyIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yNy42Mjk5IDM1Ni42NjRIMzYwLjM3IiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTMyMi4zNzQgMzU2LjY2NEMzMjAuNjE2IDM0NS40NjUgMjk1LjA5MiAzMjguMDk3IDI3NC41NTYgMzEzLjY5MkMyNDAuODk0IDI5MC4wNDggMTk1Ljc0MyAyNDAuNzU0IDE5NS43NDMgMjQwLjc1NEMxODkuODQ5IDIzNS4zMTUgMTgyLjE0NiAyMzIuMjcgMTc0LjEzNiAyMzIuMjEyQzE2Ni4xMjUgMjMyLjE1NCAxNTguMzc5IDIzNS4wODYgMTUyLjQwNyAyNDAuNDM5QzE0Ni40MzQgMjQ1Ljc5MiAxNDIuNjYyIDI1My4xODEgMTQxLjgyNSAyNjEuMTY5QzE0MC45ODkgMjY5LjE1NyAxNDMuMTQ3IDI3Ny4xNzEgMTQ3Ljg4IDI4My42NTFDMTQ3Ljg4IDI4My42NTEgMTgxLjYwMiAzMzMuNTUyIDE5OC4zNSAzNTYuNjhMMzIyLjM3NCAzNTYuNjY0WiIgZmlsbD0iIzBBMDYwNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0yMTkuNzY2IDI2NC4yOTJDMjE5Ljc2NiAyNjQuMjkyIDIwMi42MzkgMjQ3LjkxMSAyMDEuNzMgMjI3LjgyM0MyMDAuODIgMjA3LjczNSAyMDQuOTczIDIwMC40NzIgMjA0Ljc2MSAxOTQuODA0QzIwNC4zNzYgMTg1LjUxIDIwMS4zODIgMTc2LjUxMyAxOTYuMTIyIDE2OC44NUMxOTIuNDg1IDE1Ny4zMTcgMTg3LjkzOCAxNDYuMjQgMTg3LjkzOCAxNDYuMjRMMTQwLjg0NyAxNDcuMzk0TDg2LjI4NDcgMTgwLjgyNEwxMTMuNTY2IDI1Mi4yNDJDMTEzLjU2NiAyNTIuMjQyIDEyMy4wMzkgMjcwLjA5NyAxMjkuMzQ0IDI3NS4yOTNDMTM1LjY0OSAyODAuNDkgMTQzLjA5IDI4Ni44MTEgMTQ2LjI1OCAyODkuNTE2QzE0OS40MjYgMjkyLjIyMSAxNTcuNjEgMzAwLjc2MSAxNjcuOTc3IDMxMS4xNTRDMjA3LjY0MSAyOTcuMDA4IDIxOS43NjYgMjY0LjI5MiAyMTkuNzY2IDI2NC4yOTJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik05NC45ODQ0IDEyMy43Mkw2My4zODM2IDkyLjkwNDFDNjEuNjIzMiA5MS4zNTY4IDYwLjUyNTggODkuMTg4NSA2MC4zMTk5IDg2Ljg1MDRDNjAuMTE0IDg0LjUxMjMgNjAuODE1NCA4Mi4xODQ3IDYyLjI3ODIgODAuMzUyMUM2My43NDA5IDc4LjUxOTUgNjUuODUyMiA3Ny4zMjMgNjguMTcyNyA3Ny4wMTE4QzcwLjQ5MzEgNzYuNzAwNiA3Mi44NDM5IDc3LjI5ODYgNzQuNzM1NyA3OC42ODEzTDExMS42NDEgMTAyLjg1N0MxMTQuNjE0IDEwNC44MDQgMTE2LjY5MyAxMDcuODU0IDExNy40MjIgMTExLjMzOEMxMTguMTUxIDExNC44MjIgMTE3LjQ3IDExOC40NTMgMTE1LjUyOSAxMjEuNDMzQzExMy41ODcgMTI0LjQxNCAxMTAuNTQ0IDEyNi40OTggMTA3LjA3IDEyNy4yMjlDMTAzLjU5NSAxMjcuOTYgOTkuOTcyNyAxMjcuMjc3IDk3LjAwMDIgMTI1LjMzMUM5Ni4yODY1IDEyNC44NDkgOTUuNjEyNSAxMjQuMzEgOTQuOTg0NCAxMjMuNzJaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik01OC43OTEyIDE0Ny4zOTRDNTYuMDYzOSAxNDcuMzY3IDUzLjQ0NiAxNDYuMzE2IDUxLjQ1MyAxNDQuNDQ5QzQ5LjQ2IDE0Mi41ODIgNDguMjM2NSAxNDAuMDM1IDQ4LjAyMzYgMTM3LjMwOUM0Ny44MTA2IDEzNC41ODMgNDguNjIzNiAxMzEuODc1IDUwLjMwMjQgMTI5LjcyQzUxLjk4MTIgMTI3LjU2NSA1NC40MDQgMTI2LjExOCA1Ny4wOTM3IDEyNS42NjVMODIuNjc3NSAxMjEuNjA4Qzg0LjA5NTYgMTIxLjM4NCA4NS41NDM5IDEyMS40NDEgODYuOTM5OCAxMjEuNzc4Qzg4LjMzNTcgMTIyLjExNSA4OS42NTE3IDEyMi43MjQgOTAuODEyOCAxMjMuNTdDOTEuOTczOSAxMjQuNDE3IDkyLjk1NzMgMTI1LjQ4NCA5My43MDY5IDEyNi43MTJDOTQuNDU2NCAxMjcuOTQgOTQuOTU3NSAxMjkuMzAzIDk1LjE4MTQgMTMwLjcyNUM5NS40MDUzIDEzMi4xNDcgOTUuMzQ3NyAxMzMuNTk5IDk1LjAxMTkgMTM0Ljk5OUM5NC42NzYgMTM2LjM5OCA5NC4wNjg2IDEzNy43MTcgOTMuMjI0MSAxMzguODgyQzkyLjM3OTcgMTQwLjA0NiA5MS4zMTQ4IDE0MS4wMzIgOTAuMDkwNCAxNDEuNzgzQzg4Ljg2NTkgMTQyLjUzNSA4Ny41MDU3IDE0My4wMzcgODYuMDg3NiAxNDMuMjYxTDYwLjUxOSAxNDcuMzk0QzU5Ljk0NCAxNDcuNDQgNTkuMzY2MyAxNDcuNDQgNTguNzkxMiAxNDcuMzk0WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTU1LjY0NCA2MC44Nzk2TDEwMS43NTMgNTIuNTI0OUM5MC4xNzE2IDUwLjcyOTUgNzkuMzMxNSA1OC42ODY2IDc3LjU0MDcgNzAuMjk3Nkw1Mi40NjQ1IDIzMi44ODVDNTAuNjczNyAyNDQuNDk2IDU4LjYxMDQgMjU1LjM2NCA3MC4xOTE2IDI1Ny4xNTlMMTI0LjA4MyAyNjUuNTE0QzEzNS42NjQgMjY3LjMxIDE0Ni41MDUgMjU5LjM1MiAxNDguMjk1IDI0Ny43NDFMMTczLjM3MSA4NS4xNTQxQzE3NS4xNjIgNzMuNTQzMSAxNjcuMjI2IDYyLjY3NSAxNTUuNjQ0IDYwLjg3OTZaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xNTIuODQ1IDYzLjEyMTFMMTAzLjc2MSA1NS41MTE3QzkyLjE3OTkgNTMuNzE2MyA4MS4zMzk4IDYxLjY3MzQgNzkuNTQ5IDczLjI4NDRMNTUuMjc4OCAyMzAuNjQ2QzUzLjQ4OCAyNDIuMjU3IDYxLjQyNDcgMjUzLjEyNSA3My4wMDU4IDI1NC45MkwxMjIuMDkgMjYyLjUzQzEzMy42NzEgMjY0LjMyNSAxNDQuNTExIDI1Ni4zNjggMTQ2LjMwMiAyNDQuNzU3TDE3MC41NzIgODcuMzk1NUMxNzIuMzYzIDc1Ljc4NDUgMTY0LjQyNiA2NC45MTY1IDE1Mi44NDUgNjMuMTIxMVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE2OC4zODYgMTc0LjQyN0MxNjEuNzAyIDE1My4xNTMgMTYyLjIxNyAxMjkuNTg2IDE2NS41NjcgMTA3LjRDMTY2LjQ0NiA5Ni40NTk3IDE4My4zNzYgOTYuOTQ2IDE4My43NTUgMTA3LjgxMUMxODQuODc2IDExOS4wMjUgMTg0LjkwNiAxMzAuNjA0IDE4OC4wNTkgMTQxLjM3N0MxOTAuOTA4IDE1MC4yOTcgMTk3LjAzMSAxNjYuODYgMjAwLjE4NCAxNzUuOTAxIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTY4LjM4NiAxNzQuNDI3QzE2MS43MDIgMTUzLjE1MyAxNjIuMjE3IDEyOS41ODYgMTY1LjU2NyAxMDcuNEMxNjYuNDQ2IDk2LjQ1OTcgMTgzLjM3NiA5Ni45NDYgMTgzLjc1NSAxMDcuODExQzE4NC44NzYgMTE5LjAyNSAxODQuOTA2IDEzMC42MDQgMTg4LjA1OSAxNDEuMzc3QzE5MC45MDggMTUwLjI5NyAxOTcuMDMxIDE2Ni44NiAyMDAuMTg0IDE3NS45MDEiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTQ5LjA2MiAxNjguMDk1TDc4LjAyIDE1Ny4wODJMNzYuODE4IDE2NC44NzVMMTQ3Ljg2IDE3NS44ODlMMTQ5LjA2MiAxNjguMDk1WiIgZmlsbD0iI0VGRUZFRiIvPgo8cGF0aCBkPSJNMTM1Ljk0MyAxODEuNjE2TDg2LjQyNTMgMTczLjk0TDg1LjIyMzIgMTgxLjczNEwxMzQuNzQxIDE4OS40MUwxMzUuOTQzIDE4MS42MTZaIiBmaWxsPSIjRUZFRkVGIi8+CjxwYXRoIGQ9Ik02MS4wNzk4IDE3Ni4yNjZDNTkuNTA4NSAxNzUuODU0IDU3Ljk4NDUgMTc1LjI3OSA1Ni41MzI5IDE3NC41NDlDNTUuMTM2NSAxNzMuODggNTMuNzg5MyAxNzMuMTE0IDUyLjUwMTQgMTcyLjI1NEM1MS4yMTQxIDE3MS40MjMgNDkuOTkyOSAxNzAuNDkzIDQ4Ljg0ODcgMTY5LjQ3M0M0Ny42OTEgMTY4LjQ0NSA0Ni42NzIgMTY3LjI3MSA0NS44MTc1IDE2NS45NzhDNDUuMDA3MiAxNjQuNzA5IDQ0LjQ1NDMgMTYzLjI5MyA0NC4xOTAyIDE2MS44MDlDNDMuOTI2MiAxNjAuMzI2IDQzLjk1NjEgMTU4LjgwNSA0NC4yNzg0IDE1Ny4zMzNDNDQuNjAwNyAxNTUuODYyIDQ1LjIwOTEgMTU0LjQ2OCA0Ni4wNjg2IDE1My4yMzJDNDYuOTI4MiAxNTEuOTk2IDQ4LjAyMjMgMTUwLjk0MiA0OS4yODgyIDE1MC4xM0M1MC44MjYyIDE0OS4xNTQgNTIuNTcyMSAxNDguNTU2IDU0LjM4NDEgMTQ4LjM4NEM1Ni4xOTYgMTQ4LjIxMyA1OC4wMjI3IDE0OC40NzIgNTkuNzE1NyAxNDkuMTQyQzYxLjEyOSAxNDkuNzU4IDYyLjQ1NDIgMTUwLjU2MSA2My42NTY0IDE1MS41MjhDNjQuODY2MSAxNTIuNDU1IDY2LjAwNTkgMTUzLjQ3MSA2Ny4wNjY1IDE1NC41NjdDNjguMTU2OCAxNTUuNjc2IDY5LjE2OTYgMTU2Ljg1OSA3MC4wOTc4IDE1OC4xMDdDNzEuMDgyNSAxNTkuMzg4IDcxLjkzMDkgMTYwLjc2OCA3Mi42Mjg5IDE2Mi4yMjVDNzMuNDI3NyAxNjMuOTUxIDczLjcyMzUgMTY1Ljg2OCA3My40ODIgMTY3Ljc1NkM3My4yNDA1IDE2OS42NDMgNzIuNDcxNyAxNzEuNDIzIDcxLjI2NDIgMTcyLjg5MUM3MC4wNTY3IDE3NC4zNTkgNjguNDU5OCAxNzUuNDU1IDY2LjY1NzcgMTc2LjA1MkM2NC44NTU3IDE3Ni42NDkgNjIuOTIyIDE3Ni43MjMgNjEuMDc5OCAxNzYuMjY2WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNjcuNzMzMiAxMzAuMjM5QzY4LjYwNzggMTMxLjEzOCA2OS4zOTkyIDEzMi4xMTQgNzAuMDk3NiAxMzMuMTU3QzcwLjgxMjYgMTM0LjE4OCA3MS40NzA0IDEzNS4yNTkgNzIuMDY3OSAxMzYuMzYzQzcyLjY3NTEgMTM3LjQ3NSA3My4yMTY2IDEzOC42MjEgNzMuNjg5NiAxMzkuNzk3Qzc0LjIwMjggMTQxLjAxNiA3NC41OTM4IDE0Mi4yODQgNzQuODU2NiAxNDMuNTgxQzc1LjIxMzEgMTQ1LjQ2OSA3NS4wMTkxIDE0Ny40MjEgNzQuMjk3OCAxNDkuMjAyQzczLjU3NjUgMTUwLjk4MiA3Mi4zNTg1IDE1Mi41MTcgNzAuNzg5NiAxNTMuNjIyQzY5LjIyMDggMTU0LjcyNiA2Ny4zNjc1IDE1NS4zNTQgNjUuNDUxOSAxNTUuNDNDNjMuNTM2MiAxNTUuNTA2IDYxLjYzOTMgMTU1LjAyNyA1OS45ODg0IDE1NC4wNUM1OC44NjI3IDE1My4zNjUgNTcuODA2OCAxNTIuNTcxIDU2LjgzNTkgMTUxLjY4QzU1Ljg5NjEgMTUwLjgwOCA1NS4wMDU1IDE0OS44ODUgNTQuMTY4NCAxNDguOTE0QzUzLjMyNjggMTQ3Ljk4IDUyLjU0MjMgMTQ2Ljk5NSA1MS44MTkxIDE0NS45NjZDNTAuNzU3NCAxNDQuNDA4IDQ5Ljc5NTYgMTQyLjc4NCA0OC45Mzk1IDE0MS4xMDQiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik02Ny43MzMyIDEzMC4yMzlDNjguNjA3OCAxMzEuMTM4IDY5LjM5OTIgMTMyLjExNCA3MC4wOTc2IDEzMy4xNTdDNzAuODEyNiAxMzQuMTg4IDcxLjQ3MDQgMTM1LjI1OSA3Mi4wNjc5IDEzNi4zNjNDNzIuNjc1MSAxMzcuNDc1IDczLjIxNjYgMTM4LjYyMSA3My42ODk2IDEzOS43OTdDNzQuMjAyOCAxNDEuMDE2IDc0LjU5MzggMTQyLjI4NCA3NC44NTY2IDE0My41ODFDNzUuMjEzMSAxNDUuNDY5IDc1LjAxOTEgMTQ3LjQyMSA3NC4yOTc4IDE0OS4yMDJDNzMuNTc2NSAxNTAuOTgyIDcyLjM1ODUgMTUyLjUxNyA3MC43ODk2IDE1My42MjJDNjkuMjIwOCAxNTQuNzI2IDY3LjM2NzUgMTU1LjM1NCA2NS40NTE5IDE1NS40M0M2My41MzYyIDE1NS41MDYgNjEuNjM5MyAxNTUuMDI3IDU5Ljk4ODQgMTU0LjA1QzU4Ljg2MjcgMTUzLjM2NSA1Ny44MDY4IDE1Mi41NzEgNTYuODM1OSAxNTEuNjhDNTUuODk2MSAxNTAuODA4IDU1LjAwNTUgMTQ5Ljg4NSA1NC4xNjg0IDE0OC45MTRDNTMuMzI2OCAxNDcuOTggNTIuNTQyMyAxNDYuOTk1IDUxLjgxOTEgMTQ1Ljk2NkM1MC43NTc0IDE0NC40MDggNDkuNzk1NiAxNDIuNzg0IDQ4LjkzOTUgMTQxLjEwNCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNNjEuODA3MSAyMDEuMzk5QzYxLjA5NzggMjAxLjQgNjAuMzkwNyAyMDEuMzE5IDU5LjcwMDQgMjAxLjE1Nkw1My43Mjg4IDE5OS43MjdDNDguODQ4NSAxOTguNTcyIDQ2LjMzMjUgMTkzLjEzMiA0Ni45ODQzIDE4OC43NzFDNDcuNjM2IDE4NC40MSA1My4wNDY4IDE4MC44MzkgNTcuOTExOSAxODIuMDA5TDYzLjg4MzUgMTgzLjQyM0M2Ni4wMzkgMTgzLjk0OCA2Ny45Mjg2IDE4NS4yNDUgNjkuMTk2NyAxODcuMDdDNzAuNDY0OCAxODguODk1IDcxLjAyMzkgMTkxLjEyMSA3MC43Njg3IDE5My4zMzFDNzAuNTEzNSAxOTUuNTQgNjkuNDYxNiAxOTcuNTc5IDY3LjgxMTEgMTk5LjA2NUM2Ni4xNjA2IDIwMC41NTEgNjQuMDI1MyAyMDEuMzgxIDYxLjgwNzEgMjAxLjM5OVoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTE4My40MzQgMTAzLjY2NEMxODMuMjY2IDEwMS42MzIgMTgxLjQ4NiAxMDAuMTIxIDE3OS40NTkgMTAwLjI5QzE3Ny40MzIgMTAwLjQ1OSAxNzUuOTI1IDEwMi4yNDQgMTc2LjA5NCAxMDQuMjc2TDE3Ny4yNDQgMTE4LjE2MkMxNzcuNDEzIDEyMC4xOTQgMTc5LjE5MyAxMjEuNzA1IDE4MS4yMiAxMjEuNTM2QzE4My4yNDcgMTIxLjM2NyAxODQuNzU0IDExOS41ODMgMTg0LjU4NSAxMTcuNTUxTDE4My40MzQgMTAzLjY2NFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTU1LjUxMjkgMTQxLjMwMkw2MC42MjMxIDEzNy4yMjJDNjAuOTc0OSAxMzYuOTQxIDYxLjM3ODYgMTM2LjczMiA2MS44MTA5IDEzNi42MDhDNjIuMjQzMiAxMzYuNDgzIDYyLjY5NTggMTM2LjQ0NSA2My4xNDI3IDEzNi40OTZDNjMuNTg5NyAxMzYuNTQ3IDY0LjAyMjMgMTM2LjY4NiA2NC40MTU4IDEzNi45MDRDNjQuODA5NCAxMzcuMTIyIDY1LjE1NjEgMTM3LjQxNiA2NS40MzYzIDEzNy43NjlMNzEuMzE4MiAxNDUuMTc1QzcyLjQyMjQgMTQ2LjU2NSA3Mi45MzA2IDE0OC4zMzggNzIuNzMwOCAxNTAuMTA0QzcyLjUzMTEgMTUxLjg3IDcxLjYzOTggMTUzLjQ4NCA3MC4yNTMxIDE1NC41OTFDNjguODY2MyAxNTUuNjk4IDY3LjA5NzcgMTU2LjIwOCA2NS4zMzYzIDE1Ni4wMDhDNjMuNTc0OSAxNTUuODA3IDYxLjk2NSAxNTQuOTE0IDYwLjg2MDggMTUzLjUyM0w1NC45Njk1IDE0Ni4xMDZDNTQuNDEgMTQ1LjM5NSA1NC4xNTMyIDE0NC40OTEgNTQuMjU0OSAxNDMuNTkyQzU0LjM1NjcgMTQyLjY5MiA1NC44MDg4IDE0MS44NjkgNTUuNTEyOSAxNDEuMzAyWiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNNTMuMzE5OCAxNjYuMjRMNTYuNTg2IDE2MC41NjlDNTcuMDQwMiAxNTkuNzggNTcuNzg4NCAxNTkuMjA0IDU4LjY2NTkgMTU4Ljk2OUM1OS41NDM0IDE1OC43MzMgNjAuNDc4MyAxNTguODU2IDYxLjI2NTEgMTU5LjMxMkw2OS40NDI0IDE2NC4wNDVDNzAuOTc3NiAxNjQuOTM0IDcyLjA5NzggMTY2LjM5NyA3Mi41NTY2IDE2OC4xMTRDNzMuMDE1NCAxNjkuODMxIDcyLjc3NTIgMTcxLjY2IDcxLjg4ODkgMTczLjE5OUM3MS4wMDI1IDE3NC43MzggNjkuNTQyNiAxNzUuODYxIDY3LjgzMDMgMTc2LjMyMUM2Ni4xMTgxIDE3Ni43ODEgNjQuMjkzNyAxNzYuNTQgNjIuNzU4NSAxNzUuNjUyTDU0LjU4MTIgMTcwLjkxOEM1My43OTQ0IDE3MC40NjMgNTMuMjIwMyAxNjkuNzEzIDUyLjk4NTIgMTY4LjgzM0M1Mi43NTAxIDE2Ny45NTMgNTIuODczMiAxNjcuMDE2IDUzLjMyNzQgMTY2LjIyN0w1My4zMTk4IDE2Ni4yNFoiIGZpbGw9IndoaXRlIiBzdHJva2U9IiMwQTA2MDYiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KPHBhdGggZD0iTTU3LjYzNDEgMTkyLjAwNkw1OC4yOTIyIDE4OS41NDRDNTguNTUzNSAxODguNTY3IDU5LjE5MTMgMTg3LjczNCA2MC4wNjUzIDE4Ny4yMjhDNjAuOTM5MyAxODYuNzIyIDYxLjk3OCAxODYuNTg1IDYyLjk1MjggMTg2Ljg0N0w2OC43MzA1IDE4OC40QzcwLjAzMjggMTg4Ljc1IDcxLjE0MzEgMTg5LjYwNCA3MS44MTcxIDE5MC43NzVDNzIuNDkxMSAxOTEuOTQ1IDcyLjY3MzcgMTkzLjMzNyA3Mi4zMjQ2IDE5NC42NDJDNzIuMTUxOCAxOTUuMjg5IDcxLjg1MzYgMTk1Ljg5NSA3MS40NDcyIDE5Ni40MjZDNzEuMDQwNyAxOTYuOTU3IDcwLjUzMzkgMTk3LjQwMiA2OS45NTU3IDE5Ny43MzdDNjkuMzc3NiAxOTguMDcxIDY4LjczOTMgMTk4LjI4OSA2OC4wNzc0IDE5OC4zNzZDNjcuNDE1NSAxOTguNDYzIDY2Ljc0MyAxOTguNDE5IDY2LjA5ODEgMTk4LjI0Nkw2MC4zMjA0IDE5Ni42OTNDNTkuMzQ1NiAxOTYuNDMxIDU4LjUxNDYgMTk1Ljc5MiA1OC4wMTAxIDE5NC45MTVDNTcuNTA1NiAxOTQuMDM5IDU3LjM2ODkgMTkyLjk5OCA1Ny42MzAyIDE5Mi4wMkw1Ny42MzQxIDE5Mi4wMDZaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNTAyMTIiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPgo8cGF0aCBkPSJNMTIwLjc2NSAxNDkuMTU3QzEzNS40OTcgMTQ5LjE1NyAxNDcuNDQgMTM3LjE4NCAxNDcuNDQgMTIyLjQxM0MxNDcuNDQgMTA3LjY0MyAxMzUuNDk3IDk1LjY2OTcgMTIwLjc2NSA5NS42Njk3QzEwNi4wMzMgOTUuNjY5NyA5NC4wODk4IDEwNy42NDMgOTQuMDg5OCAxMjIuNDEzQzk0LjA4OTggMTM3LjE4NCAxMDYuMDMzIDE0OS4xNTcgMTIwLjc2NSAxNDkuMTU3WiIgZmlsbD0iIzNCMzNCMCIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CjxwYXRoIGQ9Ik0xMDkuNDU4IDEyMC42NjZMMTE1LjgyNCAxMjkuMzg4TDEzMy4yMzkgMTE2LjYwOSIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE4Ny4xOTUgMTM4LjlDMTg1LjczOCAxMzkuNzc5IDE4NC4xMSAxNDAuMzM0IDE4Mi40MjEgMTQwLjUyNkwxODcuMTk1IDEzOC45WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE4Ny4xOTUgMTM4LjlDMTg1LjczOCAxMzkuNzc5IDE4NC4xMSAxNDAuMzM0IDE4Mi40MjEgMTQwLjUyNiIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xODguMTk1IDE0Mi41MTdDMTg4LjE5NSAxNDIuNTE3IDE4Ni4yMSAxNDUuMjY3IDE4MS42MzMgMTQ0LjI3OUwxODguMTk1IDE0Mi41MTdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMTg4LjE5NSAxNDIuNTE3QzE4OC4xOTUgMTQyLjUxNyAxODYuMjEgMTQ1LjI2NyAxODEuNjMzIDE0NC4yNzkiIHN0cm9rZT0iIzBBMDYwNiIgc3Ryb2tlLXdpZHRoPSIwLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMjQ1LjQ3NSAyODIuNDRMMjE4Ljk5NSAyNTMuODAxTDE1OC42MTcgMzA5LjkxNEwxODUuMDk4IDMzOC41NTRMMjQ1LjQ3NSAyODIuNDRaIiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSIjMEEwNjA2IiBzdHJva2Utd2lkdGg9IjAuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iMzY2IiBoZWlnaHQ9IjQwOSIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K\"","import { BaseContainer, RoleRedirect, RoleRoute } from 'components';\nimport { observer } from 'mobx-react-lite';\nimport { CreateVote, UsersPage } from 'pages';\nimport * as React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { useRoutes } from 'utils';\nimport { OrganizerPage } from 'pages/Organizer';\nimport { VoterPage } from 'pages/Voter';\nimport { ApplicantPage } from 'pages/Applicant';\nimport { CreateProject } from 'pages/Applicant/CreateProject';\nimport { PollPage } from '../pages/Poll';\nimport { ActiveProject } from '../pages/Applicant/ActiveProject';\nimport { ProfilePage } from '../pages/profile';\nimport { ArchivePollsPage } from 'pages/Archive';\nimport { ArchiveProjectsPage } from 'pages/Archive/details/ArchiveProjectsPage';\nimport { LandingPage } from '../pages/Landing';\n\nexport function AuthorizedApp() {\n  const Routes = useRoutes();\n\n  return (\n    <BaseContainer>\n      <Switch>\n        <RoleRoute\n          roles={['REGULATOR']}\n          exact={true}\n          path={`/${Routes.homeOrganizer}`}\n          component={OrganizerPage}\n        />\n        <RoleRoute\n          roles={['APPLICANT']}\n          exact={true}\n          path={`/${Routes.homeApplicant}`}\n          component={ApplicantPage}\n        />\n        <RoleRoute\n          roles={['APPLICANT']}\n          exact={true}\n          path={`/${Routes.projectPage}/:id`}\n          component={ActiveProject}\n        />\n        <RoleRoute\n          roles={['APPLICANT']}\n          exact={true}\n          path={`/${Routes.createProject}`}\n          component={CreateProject}\n        />\n        <RoleRoute\n          roles={['REGULATOR', 'VOTER']}\n          exact\n          path={`/${Routes.archive}`}\n          component={ArchivePollsPage}\n        />\n\n        <RoleRoute\n          roles={['REGULATOR', 'VOTER']}\n          exact\n          path={`/${Routes.archive}/:id`}\n          component={ArchiveProjectsPage}\n        />\n\n        <RoleRoute\n          roles={['VOTER']}\n          exact={true}\n          path={`/${Routes.homeVoter}`}\n          component={VoterPage}\n        />\n\n        <RoleRoute\n          exact={true}\n          roles={['REGULATOR']}\n          path={`/${Routes.createVote}`}\n          component={CreateVote}\n        />\n\n        <RoleRoute\n          exact={true}\n          roles={['REGULATOR', 'VOTER']}\n          path={`/${Routes.poll}/:id`}\n          component={PollPage}\n        />\n\n        <RoleRoute\n          exact={true}\n          roles={['REGULATOR', 'APPLICANT']}\n          path={`/${Routes.profile}`}\n          component={ProfilePage}\n        />\n\n        <RoleRoute\n          exact\n          roles={['REGULATOR']}\n          path={`/${Routes.users}`}\n          component={UsersPage}\n        />\n\n        <RoleRoute\n          exact={true}\n          roles={['REGULATOR', 'APPLICANT', 'VOTER']}\n          path={`/${Routes.landing}`}\n          component={LandingPage}\n        />\n\n        <Route\n          roles={['REGULATOR', 'APPLICANT', 'VOTER']}\n          exact={true}\n          path={`/${Routes.infoAboutProgram}`}\n          component={LandingPage}\n        />\n\n\n        {/*<RoleRoute*/}\n        {/*  exact*/}\n        {/*  roles={EXTERNAL_ROLES}*/}\n        {/*  path={`/${Routes.profile}`}*/}\n        {/*  component={ProfilePage}*/}\n        {/*/>*/}\n        <AuthRedirect />\n      </Switch>\n    </BaseContainer>\n  );\n}\n\nconst AuthRedirect = observer(() => {\n  const routes = useRoutes();\n\n  return (\n    <>\n      <RoleRedirect\n        rolesOptions={[\n          {\n            roles: ['REGULATOR'],\n            to: `/${routes.homeOrganizer}`\n          },\n          {\n            roles: ['APPLICANT'],\n            to: `/${routes.homeApplicant}`\n          },\n          {\n            roles: ['VOTER'],\n            to: `/${routes.homeVoter}`\n          }\n        ]}\n      />\n    </>\n  );\n});\n","export const hidePhone = phone => {\n  const end = phone.slice(phone.length - 2);\n  const start = phone.slice(2, 5);\n\n  return `+7 ${start} ***-**-${end}`;\n};\n\nlet decCache = [],\n  decCases = [2, 0, 1, 1, 1, 2];\n\nexport function decOfNum(number, titles) {\n  if (!decCache[number])\n    decCache[number] =\n      number % 100 > 4 && number % 100 < 20\n        ? 2\n        : decCases[Math.min(number % 10, 5)];\n  return number + ' ' + titles[decCache[number]];\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\nimport { useLocalStore } from 'mobx-react-lite';\nimport { Ref } from 'react';\n\ntype Recaptcha = {\n  ready: (cb: any) => void;\n  execute: (key: string, params: object) => Promise<any>;\n\n  render: (key: any, params: object) => any;\n  getResponse: (id: string) => any;\n  reset: (id?: string) => any;\n};\n\nconst SITE_KEY =\n  (window as any).injectedEnv?.WE_ENV_GOOGLE_RECAPTCHA_KEY ||\n  process.env.WE_ENV_GOOGLE_RECAPTCHA_KEY;\n\ntype RecaptchaProps = {\n  onResponse: (response: string) => void;\n  grecaptcha: Recaptcha;\n};\n\nexport const Recaptcha: React.FC<RecaptchaProps> = observer(\n  React.forwardRef(function Recaptcha(props, refFn: Ref<any>) {\n    const state = useLocalStore(() => ({\n      widgetId: null,\n\n      visible: true,\n\n      touched: false,\n      response: null,\n\n      isValid() {\n        return !!this.response;\n      }\n    }));\n\n    function render() {\n      props.grecaptcha.ready(() => {\n        state.widgetId = props.grecaptcha.render(ref.current, {\n          sitekey: SITE_KEY,\n          callback: () => {\n            state.touched = true;\n            state.response = props.grecaptcha.getResponse(state.widgetId);\n            props.onResponse(state.response);\n          }\n        });\n      });\n    }\n\n    React.useEffect(() => render(), []);\n\n    React.useImperativeHandle(refFn, () => ({\n      reset() {\n        props.grecaptcha.reset();\n\n        state.visible = true;\n        state.touched = false;\n        state.response = null;\n      }\n    }));\n\n    const ref = React.useRef();\n\n    return (\n      <div\n        style={{ display: state.visible ? 'block' : 'none' }}\n        id=\"recaptcha-wrapper\"\n        ref={ref as any}\n      />\n    );\n  })\n);\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\n\nconst loadedScripts = [];\n\nexport const AsyncScript = observer(\n  ({\n    url,\n    globalName,\n    render\n  }: {\n    url: string;\n    globalName: string;\n    render: (o: any) => React.ReactElement;\n  }) => {\n    const [loaded, setLoaded] = React.useState(false);\n\n    React.useEffect(() => {\n      let script = document.createElement('script');\n\n      script.src = url;\n      script.async = true;\n\n      script.onload = () => {\n        if (loadedScripts.includes(url)) {\n          loadedScripts.push(url);\n        }\n\n        setLoaded(true);\n      };\n\n      document.body.appendChild(script);\n    }, []);\n\n    return (\n      loaded && window[globalName] !== undefined && render(window[globalName])\n    );\n  }\n);\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Icon, Text, Title } from '@we-ui-components/base';\nimport { Anchor, Box } from 'grommet';\nimport { useStores } from 'stores';\nimport { Form, Input, isRequired, MobxForm } from '@we-ui-components/form';\nimport { breakpoints, ButtonEx, Error as ErrorUI, Panel, Spinner2 } from 'ui';\nimport { observer, useLocalStore } from 'mobx-react-lite';\nimport styled from 'styled-components';\nimport { phoneRegister, sendConfirmCode, smsRegister } from 'services/userService';\nimport { api } from 'services/api';\nimport { PhoneInput } from '../Registration/PhoneInput';\nimport { oneOfLengths } from 'utils/validators';\nimport { decOfNum, hidePhone } from './helpers';\nimport { useMediaQuery } from 'react-responsive';\nimport { useTheme } from 'utils/hooks';\nimport { ENDPOINTS } from 'services/endpoints';\nimport { Recaptcha } from './Recaptcha';\nimport { AsyncScript } from './AsyncScript';\n\ninterface ILoginPhone {\n  phone: string;\n  code: string;\n}\n\nenum LOGIN_STEPS {\n  INPUT_PHONE = 'INPUT_PHONE',\n  CONFIRM_CODE = 'CONFIRM_CODE',\n  REQUEST_SMS = 'REQUEST_SMS'\n}\n\nconst SMS_RESEND_TIMEOUT =\n  Number(\n    (window as any).injectedEnv?.WE_ENV_SMS_RESEND_TIMEOUT_SECONDS ||\n      process.env.WE_ENV_SMS_RESEND_TIMEOUT_SECONDS\n  ) || 90;\n\nconst INVALID_PHONE_REQUEST =\n  'There is already an active phone code for number ';\n\n  // \"[500 ] during [POST] to [http://ibudget-vst-oauth2/phone/phone-code?number=%2079851946375&notifyChannel=CALL] [PhoneNumberApi#createPhoneCode(String,PhoneNotifyChannel)]: [{\\\"timestamp\\\":\\\"2025-05-22T19:23:51.528+0300\\\",\\\"status\\\":500,\\\"error\\\":\\\"Internal Server Error\\\",\\\"message\\\":\\\"status 500 reading VstNotifyApi#sendNotification(NotificationDto)\\\",\\\"path\\\":\\\"/phone/phone-code\\\"}]\",\n\nconst SPAM_VOICE_PASSWORD =\n  'status 500 reading VstNotifyApi#sendNotification(NotificationDto)';  \n\nconst ERROR_TRANSLATE = {\n  [INVALID_PHONE_REQUEST]: 'Срок действия кода не истек',\n  [SPAM_VOICE_PASSWORD]: 'Исчерпано количество попыток в получении кода. Обратитесь в техническую поддержку'\n};\n\nfunction transformServerError(e) {\n  const isProcessable = e.detail && e.instance && e.status;\n\n  if (!isProcessable) {\n    return e;\n  }\n\n  function isInvalidPhoneRequest() {\n    return (\n      e.detail.indexOf('There is already an active phone code for number') >= 0\n    );\n  }\n\n  function isSapmVoicePasswordRequest() {\n    return (\n      e.detail.indexOf(SPAM_VOICE_PASSWORD) >= 0\n    );\n  }\n\n  if (isInvalidPhoneRequest()) {\n    e.detail = ERROR_TRANSLATE[INVALID_PHONE_REQUEST];\n  }\n\n  if(isSapmVoicePasswordRequest()) {\n    e.detail = ERROR_TRANSLATE[SPAM_VOICE_PASSWORD];\n  }\n\n  return e;\n}\n\nlet resetFn = null;\n\nexport const LoginVoterPage = observer(function LoginVoterPage() {\n  const { actionModals, user, routing } = useStores();\n  const theme = useTheme();\n  const timer = useCountdown();\n\n  const refreshSMS = useLocalStore(() => {\n    return {\n      active: false\n    };\n  });\n\n  const captcha = useLocalStore(() => {\n    return {\n      response: null,\n      touched: false,\n\n      isValid() {\n        return !!captcha.response;\n      }\n    };\n  });\n\n  const [step, setStep] = React.useState<LOGIN_STEPS>(LOGIN_STEPS.INPUT_PHONE);\n  const [codeChannel, setCodeChannel] = React.useState<'CALL' | 'SMS'>('CALL');\n  const [isLoading, setIsLoading] = React.useState(false);\n  const [codeId, setCodeId] = React.useState('');\n  const [error, setError] = React.useState('');\n\n  const data = useLocalStore(() => ({ ...DEFAULT_DATA }));\n\n  const formRef = React.useRef<MobxForm>();\n\n  const captchaRef = React.useRef(null);\n\n  function resetCaptcha() {\n    captcha.touched = false;\n    captcha.response = null;\n  }\n\n  React.useEffect(() => {\n    resetCaptcha();\n\n    refreshSMS.active = false;\n  }, [step]);\n\n  React.useEffect(() => {\n    const enterPressListener = (e: KeyboardEvent) => {\n      if (e.key === 'Enter') onSubmit(step);\n    };\n\n    window.addEventListener('keyup', enterPressListener);\n\n    return () => window.removeEventListener('keyup', enterPressListener);\n  }, [step]);\n\n  const showHelpModal = () => {\n    actionModals.open(\n      () => (\n        <Box pad={{ bottom: 'large' }} gap=\"12px\">\n          <Text style={{ lineHeight: '22px' }}>\n            Если звонок не поступил, попробуйте запросить код с помощью СМС.\n          </Text>\n          <Text style={{ lineHeight: '22px' }}>\n            Если код не пришёл, проверьте корректность указанного номера\n            телефона.\n          </Text>\n          <Text style={{ lineHeight: '22px' }}>\n            Если номер указан корректно, обратитесь в службу технической\n            поддержки.\n          </Text>\n        </Box>\n      ),\n      {\n        title: 'Не поступает звонок или не приходит код?',\n        width: isLaptopOrWider ? '545px' : 'auto',\n        modalStyle: {\n          maxWidth: isTabletOrWider ? '545px' : '100vw'\n        }\n      }\n    );\n  };\n\n  const onSubmit = async (action = step) => {\n    const isInputPhone = step === LOGIN_STEPS.INPUT_PHONE;\n\n    if (isInputPhone && !captcha.touched) {\n      setError('Пожалуйста, пройдите проверку что вы не робот');\n\n      return;\n    }\n\n    if (isInputPhone && !captcha.isValid()) {\n      setError('Убедитесь, что вы не робот');\n      return;\n    }\n\n\n    try {\n      if (action == step) {\n        await formRef.current.validateFields();\n      }\n    } catch (e) {\n      return;\n    }\n\n    setError('');\n    setIsLoading(true);\n\n    try {\n      if (action === LOGIN_STEPS.INPUT_PHONE) {\n        const response = await phoneRegister(data.phone, captcha.response);\n        setCodeId(response.codeId);\n        setCodeChannel('CALL');\n        setStep(LOGIN_STEPS.CONFIRM_CODE);\n        const activeUntil = new Date(Date.now() + (response.ttl ? Number(response.ttl) : SMS_RESEND_TIMEOUT) * 1000)\n        timer.setFinishDate(activeUntil);\n        refreshSMS.active = false;\n      }\n\n      if (action === LOGIN_STEPS.REQUEST_SMS) {\n        const response = await smsRegister(data.phone, captcha.response);\n        setCodeId(response.codeId);\n        setCodeChannel('SMS');\n        const activeUntil = new Date(Date.now() + (response.ttl ? Number(response.ttl) : SMS_RESEND_TIMEOUT) * 1000)\n        timer.setFinishDate(activeUntil);\n        refreshSMS.active = false;\n      }\n\n      if (action === LOGIN_STEPS.CONFIRM_CODE) {\n        const token = await sendConfirmCode({\n          grant_type: 'otp',\n          codeId: codeId,\n          code: data.code,\n          scope: ''\n        });\n\n        // @ts-ignore\n        api.storage.saveToken(token);\n        user.init();\n      }\n    } catch (e) {\n      const errorUnauthorizedOrInvalid =\n        e.error === 'unauthorized_client' || e.error === 'invalid_client'\n          ? 'Введен неверный код'\n          : null;\n      const errorCodeInactive =\n        e.error_description &&\n        e.error_description.indexOf('Active code not found for id') >= 0\n          ? 'Срок действия кода истек'\n          : null;\n      const errorWrongPhoneFormat =\n        e.detail &&\n        e.detail === 'Wrong format of the phone number'\n          ? 'Некорректный формат номера телефона'\n          : null;\n\n      transformServerError(e);\n\n      const msg =\n        errorWrongPhoneFormat ||\n        e.detail ||\n        e.title ||\n        errorCodeInactive ||\n        errorUnauthorizedOrInvalid ||\n        e.error_description ||\n        e.error ||\n        'Ошибка сервера';\n      setError(msg);\n\n      resetCaptcha();\n\n      captchaRef.current && captchaRef.current.reset();\n    }\n\n    setIsLoading(false);\n  };\n\n  const resetForm = () => {\n    for (const prop in data) {\n      if (prop in DEFAULT_DATA) {\n        data[prop] = DEFAULT_DATA[prop];\n      } else {\n        data[prop] = null;\n        delete data[prop];\n      }\n    }\n\n    setIsLoading(false);\n    setCodeId('');\n    setError('');\n    setCodeChannel('CALL');\n    setStep(LOGIN_STEPS.INPUT_PHONE);\n  };\n\n  const isLaptopOrWider = useMediaQuery({\n    minDeviceWidth: breakpoints.laptopL\n  });\n  const isTabletOrWider = useMediaQuery({ minDeviceWidth: breakpoints.tablet });\n\n  const openFileInNewWindow = () => {\n    window.open(ENDPOINTS.getConfidentialFile({ inline: 'true' }), '_blank');\n  };\n\n  return (\n    <PageContainer>\n      <Box\n        align=\"center\"\n        justify=\"center\"\n        style={{\n          margin: 'auto',\n          marginTop: isLaptopOrWider ? 'auto' : '44px'\n        }}\n        direction=\"column\"\n        gap=\"30px\"\n      >\n        {step === LOGIN_STEPS.CONFIRM_CODE || !isLaptopOrWider ? (\n          <Box\n            direction=\"row\"\n            fill={true}\n            justify=\"start\"\n            onClick={() => {\n              if (step === LOGIN_STEPS.CONFIRM_CODE) {\n                resetForm();\n              } else {\n                routing.goBack();\n              }\n            }}\n          >\n            <Icon glyph=\"Left\" color={theme.palette.Purple}/>\n            <Text>Назад</Text>\n          </Box>\n        ) : null}\n\n        <Panel\n          align=\"center\"\n          style={{\n            maxWidth: isLaptopOrWider ? '544px' : '464px'\n          }}\n          width={isLaptopOrWider ? '544px' : 'calc(100% - 16px)'}\n          pad={isLaptopOrWider ? '32px' : '24px'}\n          margin={{ horizontal: 'auto' }}\n          gap={isLaptopOrWider ? '32px' : '24px'}\n        >\n          <Title\n            size={isTabletOrWider ? '22px' : '18px'}\n            style={{\n              lineHeight: step === LOGIN_STEPS.INPUT_PHONE ? '36px' : '32px'\n            }}\n            color=\"Black\"\n            bold\n          >\n            {step === LOGIN_STEPS.INPUT_PHONE\n              ? 'Добро пожаловать в систему инициативного голосования Волгоградской области'\n              : codeChannel === 'SMS'\n                ? `На Ваш номер ${hidePhone(data.phone)} отправлено СМС с кодом подтверждения`\n                : `На Ваш номер ${hidePhone(data.phone)} поступит звонок. Код подтверждения - последние 4 цифры входящего номера`\n            }\n          </Title>\n\n          <Form ref={formRef} data={data} {...({} as any)}>\n            {step === LOGIN_STEPS.INPUT_PHONE ? (\n              <PhoneInput\n                placeholder=\"Введите телефон\"\n                onChange={() => {\n                  setError('');\n                }}\n                name=\"phone\"\n                rules={[\n                  isRequired,\n                  oneOfLengths([12], 'Введите корректный номер')\n                ]}\n              />\n            ) : null}\n\n            {step === LOGIN_STEPS.CONFIRM_CODE ? (\n              <Input\n                placeholder=\"Код\"\n                name=\"code\"\n                rules={[isRequired]}\n                onChange={() => {\n                  setError('');\n                }}\n              />\n            ) : null}\n          </Form>\n\n          {(step === LOGIN_STEPS.INPUT_PHONE || refreshSMS.active) && (\n            <AsyncScript\n              url=\"https://www.google.com/recaptcha/api.js\"\n              globalName=\"grecaptcha\"\n              render={grecaptcha => {\n                return (\n                  <Recaptcha\n                    grecaptcha={grecaptcha}\n                    ref={captchaRef}\n                    onResponse={response => {\n                      captcha.response = response;\n                      captcha.touched = true;\n                      refreshSMS.active && onSubmit(LOGIN_STEPS.REQUEST_SMS);\n                    }}\n                    {...({} as any)}\n                  />\n                );\n              }}\n            />\n          )}\n\n          <StyledButtonEx\n            fontSize={isLaptopOrWider ? '16px' : '13px'}\n            style={{\n              alignItems: 'center'\n            }}\n            spinnerRender={\n              <Spinner2\n                height=\"16px\"\n                width=\"16px\"\n                color=\"white\"\n                style={{ marginRight: 5 }}\n              />\n            }\n            isLoading={isLoading}\n            onClick={() => {\n              onSubmit(step);\n            }}\n          >\n            {step === LOGIN_STEPS.INPUT_PHONE ? 'Участвовать' : 'Войти'}\n          </StyledButtonEx>\n\n          {step === LOGIN_STEPS.INPUT_PHONE && (\n            <Box>\n              <Text size=\"xsmall\">\n                Нажимая на кнопку \"Участвовать\" вы соглашаетесь с\n                <Anchor\n                  onClick={() => openFileInNewWindow()}\n                  color={theme.palette.Purple}\n                >\n                  {' '}\n                  Политикой конфиденциальности\n                </Anchor>\n              </Text>\n            </Box>\n          )}\n\n          {error && <ErrorUI error={error} style={{ padding: 0 }}/>}\n\n          {step === LOGIN_STEPS.CONFIRM_CODE ? (\n            <Box\n              margin={{ top: 'small' }}\n              direction=\"column\"\n              align={isLaptopOrWider ? 'start' : 'center'}\n              fill={true}\n              gap=\"15px\"\n            >\n              {timer.timeLeft <= 0 ? (\n                <Box\n                  onClick={() => {\n                    refreshSMS.active = true;\n                  }}\n                  direction=\"row\"\n                >\n                  <Text size=\"13px\" color={theme.palette.Purple}>\n                    Получить код подтверждения в СМС-сообщении\n                  </Text>\n                </Box>\n              ) : (\n                <Box direction=\"row\">\n                  <Text size=\"13px\" color={theme.palette.BlackText}>\n                    Срок действия кода{' '}\n                    {decOfNum(timer.timeLeft, ['секунда', 'секунды', 'секунд'])}\n                  </Text>\n                </Box>\n              )}\n              <Text\n                size=\"13px\"\n                color={theme.palette.BlackText}\n                style={{\n                  lineHeight: '18px',\n                  textAlign: isLaptopOrWider ? 'start' : 'center'\n                }}\n              >\n                <Anchor\n                  color={theme.palette.Purple}\n                  onClick={() => showHelpModal()}\n                >\n                  Не поступает звонок или не приходит код?\n                </Anchor>\n                <br />\n                По истечении срока действия кода запросите код в\n                СМС-сообщении.\n              </Text>\n            </Box>\n          ) : null}\n        </Panel>\n      </Box>\n    </PageContainer>\n  );\n});\n\nconst StyledButtonEx = styled(ButtonEx)`\n  width: 100%;\n\n  button {\n    width: 100%;\n    height: 48px;\n  }\n`;\n\nconst PageContainer = styled(Box)`\n  min-height: 100vh;\n  min-width: 100vw;\n\n  background-color: ${props => props.theme.palette.LightGrey};\n  background-size: 100%;\n  background-repeat: no-repeat;\n`;\n\nconst DEFAULT_DATA: ILoginPhone = {\n  phone: '',\n  code: ''\n};\n\nconst ms2s = (ts: number) => {\n  return Math.trunc(ts / 1000)\n}\n\nconst useDate = (updateInterval = 1000) => {\n  const [date, setDate] = useState(new Date())\n  useEffect(() => {\n    const i = setInterval(() => {\n      setDate(new Date())\n    }, updateInterval)\n    return () => clearInterval(i)\n  }, [updateInterval])\n  return date\n}\n\nconst useCountdown = (until?: Date) => {\n  const [finishDate, setFinishDate] = useState(until)\n  const now = useDate();\n\n  return {\n    setFinishDate,\n    timeLeft: finishDate ? ms2s(finishDate.getTime() - now.getTime()) : 0\n  }\n}\n","import { AuthenticationGuard, RedirectEx, BaseContainer } from 'components';\nimport { LoginPage } from 'pages';\nimport * as React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { useRoutes } from 'utils';\nimport { AuthorizedApp } from './AuthorizedApp';\nimport { LandingPage } from 'pages/Landing';\nimport { LoginVoterPage } from 'pages/LoginVoter';\nimport { ArchivePollsPage } from 'pages/Archive';\nimport { ArchiveProjectsPage } from 'pages/Archive/details/ArchiveProjectsPage';\n\nexport function AppRoutes() {\n  const Routes = useRoutes();\n\n  return (\n    <AuthenticationGuard\n      render={({ status }) => {\n        if (status === 'unauthenticated') {\n          return (\n            <Switch>\n              <Route\n                exact={true}\n                path={`/${Routes.loginOrganizer}`}\n                component={LoginPage}\n              />\n              <Route\n                exact={true}\n                path={`/${Routes.loginApplicant}`}\n                component={LoginPage}\n              />\n              <Route\n                exact={true}\n                path={`/${Routes.loginVoter}`}\n                component={LoginVoterPage}\n              />\n              <Route\n                exact={true}\n                path={`/${Routes.questionAnswer}`}\n                component={LandingPage}\n              />\n              <Route\n                exact={true}\n                path={`/${Routes.infoAboutProgram}`}\n                component={LandingPage}\n              />\n              <Route\n                exact\n                path={`/${Routes.landing}`}\n                component={LandingPage}\n              />\n\n              <Route exact path={`/${Routes.archive}`}>\n                <BaseContainer>\n                  <ArchivePollsPage />\n                </BaseContainer>\n              </Route>\n\n              <Route exact path={`/${Routes.archive}/:id`}>\n                <BaseContainer>\n                  <ArchiveProjectsPage />\n                </BaseContainer>\n              </Route>\n\n              <RedirectEx to={`/${Routes.landing}`} />\n            </Switch>\n          );\n        }\n\n        return <AuthorizedApp />;\n      }}\n    />\n  );\n}\n","import * as React from 'react';\nimport mobxStores, { StoresProvider } from 'stores';\nimport { Provider as MobxProvider } from 'mobx-react';\nimport { Grommet } from 'grommet';\nimport { Theme, mainTheme } from 'themes';\nimport { Router } from 'react-router-dom';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n  return (\n    <StoresProvider stores={mobxStores}>\n      <MobxProvider {...mobxStores}>\n        <Router history={mobxStores.routing.history}>\n          <Grommet\n            theme={{ ...Theme, ...mainTheme }}\n            plain={true}\n            full={true}\n            id=\"grommetRoot\"\n          >\n            {children}\n          </Grommet>\n        </Router>\n      </MobxProvider>\n    </StoresProvider>\n  );\n}\n","import * as React from 'react';\nimport './App.styl';\nimport { mainTheme } from 'themes';\nimport { Modals, ActionModals } from 'components';\nimport { GlobalStyle } from './global-styles';\nimport { AppRoutes } from './routes';\nimport { Providers } from './providers';\n\nexport const App = () => {\n  return (\n    <Providers>\n      <AppRoutes />\n      <Modals />\n      <ActionModals />\n      <GlobalStyle theme={mainTheme as any} />\n    </Providers>\n  );\n};\n","import { App } from './app/root';\nimport * as React from 'react';\nimport { render } from 'react-dom';\n\nrender(<App />, document.getElementById('root'));\n\ndeclare const module;\nif (module.hot) {\n  module.hot.accept();\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".users-page-container td {\\n  padding-top: 22px;\\n  padding-bottom: 22px;\\n}\\n\\n.users-page-container td:first-child,\\n.users-page-container th:first-child {\\n  padding-left: 24px;\\n}\\n\\n.users-page-container td:last-child,\\n.users-page-container th:last-child {\\n  padding-right: 24px;\\n}\\n\\n.users-page-container tbody td {\\n  border: none;\\n}\\n\\n.users-page-container .rc-table thead.rc-table-thead th.rc-table-cell * {\\n  font-size: 11px;\\n  color: #8d8d8d;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/pages/Users/UsersPage.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,iBAAiB;EACjB,oBAAoB;AACtB;;AAEA;;EAEE,kBAAkB;AACpB;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,eAAe;EACf,cAAc;AAChB\",\"sourcesContent\":[\".users-page-container td {\\n  padding-top: 22px;\\n  padding-bottom: 22px;\\n}\\n\\n.users-page-container td:first-child,\\n.users-page-container th:first-child {\\n  padding-left: 24px;\\n}\\n\\n.users-page-container td:last-child,\\n.users-page-container th:last-child {\\n  padding-right: 24px;\\n}\\n\\n.users-page-container tbody td {\\n  border: none;\\n}\\n\\n.users-page-container .rc-table thead.rc-table-thead th.rc-table-cell * {\\n  font-size: 11px;\\n  color: #8d8d8d;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".K6f\\\\+8lx8Id448i5cx84AzQ\\\\=\\\\={min-width:960px;height:100%}.bLiBVHZaA3fC49i3X7THdg\\\\=\\\\={background:linear-gradient(to top,#dbf1ff,#fff)}div.notification-warning{background:Yellow600;border-left:8px solid rgba(206,156,9,0.639)}div.notification-warning p.notification-message,div.notification-warning p.notification-title{color:Basic1000}div.notification-warning p.notification-message{font-size:fontSizeDefault}div.notification-warning p.notification-title{font-size:fontSizeBold}.react-datepicker-popper{z-index:16 !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/App.styl\"],\"names\":[],\"mappings\":\"AAAA,6BAAS,eAAe,CAAC,WAAW,CAAC,4BAAmB,+CAA+C,CAAC,yBAAiC,oBAAoB,CAAC,2CAA2C,CAAC,8FAA8G,eAAe,CAAC,gDAAwD,yBAAyB,CAAC,8CAAsD,sBAAsB,CAAC,yBAAiC,qBAAqB\",\"sourcesContent\":[\".content{min-width:960px;height:100%}.appContainerLogin{background:linear-gradient(to top,#dbf1ff,#fff)}:global div.notification-warning{background:Yellow600;border-left:8px solid rgba(206,156,9,0.639)}:global div.notification-warning p.notification-message,:global div.notification-warning p.notification-title{color:Basic1000}:global div.notification-warning p.notification-message{font-size:fontSizeDefault}:global div.notification-warning p.notification-title{font-size:fontSizeBold}:global .react-datepicker-popper{z-index:16 !important}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"content\": \"K6f+8lx8Id448i5cx84AzQ==\",\n\t\"appContainerLogin\": \"bLiBVHZaA3fC49i3X7THdg==\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".E1ObzQOkmlW7XLOHqbTBlw\\\\=\\\\={fill:rgba(141,141,141,0.3);stroke:rgba(10,6,6,0.5);stroke-width:.5px}.RO1z19ztHLhr2vfj6kmBuw\\\\=\\\\={cursor:pointer}.kgBubrnJTDoJM-HUYDmb-Q\\\\=\\\\={cursor:default}.RbZ7oEa3MWeVZewq9JIuWw\\\\=\\\\={fill:#00a87a}.vTU143\\\\+8wUOamX5G9NfoLA\\\\=\\\\={fill:#f0b51d}._4vUM8E9qM2SvKigTofKaXA\\\\=\\\\={opacity:.8}.zUBpgqfJYrN-q\\\\+9TzURkbQ\\\\=\\\\={fill:currentColor;stroke:none;font-size:8px;text-anchor:middle}.IdgR4p3CXzhA6P1vH1KBJw\\\\=\\\\={pointer-events:none}._2cbqZKxX3tn\\\\+D7olFx\\\\+Geg\\\\=\\\\={pointer-events:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/RegionMap/region.styl\"],\"names\":[],\"mappings\":\"AAAA,4BAAQ,0BAA0B,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,4BAAY,cAAc,CAAC,4BAAoB,cAAc,CAAC,4BAAsB,YAAY,CAAC,6BAA4B,YAAY,CAAC,6BAAiB,UAAU,CAAC,6BAAmB,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,4BAAa,mBAAmB,CAAC,+BAAc,mBAAmB\",\"sourcesContent\":[\".region{fill:rgba(141,141,141,0.3);stroke:rgba(10,6,6,0.5);stroke-width:.5px}.regionArea{cursor:pointer}.regionAreaDisabled{cursor:default}.regionAreaStatusVote{fill:#00a87a}.regionAreaStatusAcceptance{fill:#f0b51d}.regionAreaHover{opacity:.8}.regionArea__title{fill:currentColor;stroke:none;font-size:8px;text-anchor:middle}.regionWater{pointer-events:none}.regionTitles{pointer-events:none}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"region\": \"E1ObzQOkmlW7XLOHqbTBlw==\",\n\t\"regionArea\": \"RO1z19ztHLhr2vfj6kmBuw==\",\n\t\"regionAreaDisabled\": \"kgBubrnJTDoJM-HUYDmb-Q==\",\n\t\"regionAreaStatusVote\": \"RbZ7oEa3MWeVZewq9JIuWw==\",\n\t\"regionAreaStatusAcceptance\": \"vTU143+8wUOamX5G9NfoLA==\",\n\t\"regionAreaHover\": \"_4vUM8E9qM2SvKigTofKaXA==\",\n\t\"regionArea__title\": \"zUBpgqfJYrN-q+9TzURkbQ==\",\n\t\"regionWater\": \"IdgR4p3CXzhA6P1vH1KBJw==\",\n\t\"regionTitles\": \"_2cbqZKxX3tn+D7olFx+Geg==\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".GE1E98beINogMLhxhzxhpA\\\\=\\\\={cursor:pointer;opacity:1}.GE1E98beINogMLhxhzxhpA\\\\=\\\\=:hover{opacity:.6}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/ui/Icons/styles.styl\"],\"names\":[],\"mappings\":\"AAAA,4BAAW,cAAc,CAAC,SAAS,CAAC,kCAAiB,UAAU\",\"sourcesContent\":[\".hoverIcon{cursor:pointer;opacity:1}.hoverIcon:hover{opacity:.6}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"hoverIcon\": \"GE1E98beINogMLhxhzxhpA==\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"._0S1mf9IDTyhXNLC6mKC6Kw\\\\=\\\\={animation:kYQ0WYmLxtdSHN3wNjB7ug\\\\=\\\\= .6s linear infinite}@-moz-keyframes kYQ0WYmLxtdSHN3wNjB7ug\\\\=\\\\={from{transform:rotate(0)}to{transform:rotate(360deg)}}@-webkit-keyframes kYQ0WYmLxtdSHN3wNjB7ug\\\\=\\\\={from{transform:rotate(0)}to{transform:rotate(360deg)}}@-o-keyframes kYQ0WYmLxtdSHN3wNjB7ug\\\\=\\\\={from{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes kYQ0WYmLxtdSHN3wNjB7ug\\\\=\\\\={from{transform:rotate(0)}to{transform:rotate(360deg)}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/ui/Spinner/styles.styl\"],\"names\":[],\"mappings\":\"AAAA,6BAAS,wDAAkC,CAAC,2CAAqB,KAAK,mBAAmB,CAAC,GAAG,wBAAwB,CAAC,CAAC,8CAAwB,KAAK,mBAAmB,CAAC,GAAG,wBAAwB,CAAC,CAAC,yCAAmB,KAAK,mBAAmB,CAAC,GAAG,wBAAwB,CAAC,CAAC,sCAAgB,KAAK,mBAAmB,CAAC,GAAG,wBAAwB,CAAC\",\"sourcesContent\":[\".spinner{animation:spin .6s linear infinite}@-moz-keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}@-webkit-keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}@-o-keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"spinner\": \"_0S1mf9IDTyhXNLC6mKC6Kw==\",\n\t\"spin\": \"kYQ0WYmLxtdSHN3wNjB7ug==\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 28293;"],"sourceRoot":""}