From a3716f72066d25d745f4d5103ff23a553c3e102b Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期四, 17 二月 2022 11:41:19 +0800
Subject: [PATCH] Merge branch 'sit' into uat

---
 pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java                    |   33 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java       |   14 
 pamapi/src/doc/滿意度/查詢登入者所有的滿意度問卷.txt                                                            |   68 
 PAMapp/components/Ui/UiScrollPicker.vue                                                         |   12 
 PAMapp/pages/agentInfo/edit/_agentNo.vue                                                        |  520 +
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java      |   13 
 PAMapp/assets/icon/fonts/icomoon.eot                                                            |    0 
 PAMapp/pages/userReviewsRecord/index.vue                                                        |   70 
 PAMapp/components/Ui/UiGoToTop.vue                                                              |   14 
 pamapi/src/doc/sql/20211222_w.sql                                                               |    1 
 PAMapp/assets/images/satisfaction/satisfactionBtn_s_web.svg                                     |  274 
 pamapi/src/doc/顧問API/紀錄客戶查看顧問清單的view_time API.txt                                               |    6 
 pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java                       |   36 
 PAMapp/assets/icon/fonts/icomoon.woff                                                           |    0 
 PAMapp/shared/models/quick-filter.model.ts                                                      |   27 
 PAMapp/shared/models/appointment.model.ts                                                       |  187 
 PAMapp/shared/const/day-time-frames.ts                                                          |   18 
 pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html                     |   11 
 pamapi/src/doc/滿意度/顧問主動發送滿意度通知API.txt                                                           |    1 
 pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java                            |   12 
 PAMapp/middleware/errorRoute.ts                                                                 |   15 
 PAMapp/assets/scss/vendors/elementUI/_radio.scss                                                |   53 
 PAMapp/pages/questionnaire/_agentNo.vue                                                         |  365 
 pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java              |   37 
 pamapi/src/main/resources/static/consultant/consultant_A183619275.jpg                           |    0 
 pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java                             |    6 
 PAMapp/shared/models/editAppointmentParams.model.ts                                             |   12 
 PAMapp/assets/icon/style.css                                                                    |   76 
 PAMapp/components/AddAndReservedBtns.vue                                                        |   44 
 pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java                        |   10 
 PAMapp/components/NavBar.vue                                                                    |  132 
 PAMapp/pages/agentInfo/_agentNo.vue                                                             |  108 
 PAMapp/pages/myAppointmentList/appointmentList.vue                                              |   91 
 PAMapp/components/Interview/InterviewCard.vue                                                   |  176 
 PAMapp/store/appointment.store.ts                                                               |   84 
 PAMapp/pages/myConsultantList/consultantList.vue                                                |   13 
 pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java                            |  135 
 PAMapp/assets/scss/vendors/elementUI/_dialog.scss                                               |   35 
 PAMapp/shared/models/strict-query.model.ts                                                      |   27 
 PAMapp/components/Ui/UiPagination.vue                                                           |   41 
 PAMapp/shared/models/enum/otpErrorCode.ts                                                       |    0 
 PAMapp/pages/login/index.vue                                                                    |  462 
 PAMapp/middleware/myAppointment.ts                                                              |   19 
 pamapi/src/doc/預約單/預約前詢問.txt                                                                    |   27 
 PAMapp/pages/myAppointmentList/closedList.vue                                                   |  156 
 pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java                   |   11 
 pamapi/src/doc/滿意度/客戶填寫滿意度問卷.txt                                                                |   56 
 pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java                       |   10 
 PAMapp/shared/models/loginVerify.model.ts                                                       |    9 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java   |    8 
 pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java              |   15 
 PAMapp/components/Consultant/ConsultantSwiper.vue                                               |   35 
 pamapi/src/doc/預約單/刪除預約單備註.txt                                                                  |    6 
 pamapi/src/doc/sql/20220122_w.sql                                                               |    7 
 pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java                   |   22 
 PAMapp/pages/quickFilter/index.vue                                                              |  459 
 pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java                             |   39 
 PAMapp/shared/models/strictQueryDto.model.ts                                                    |   11 
 pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java                      |   11 
 pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java                               |   18 
 pamapi/src/doc/sql/20220112_j.sql                                                               |   66 
 pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java                                  |   26 
 pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java                        |   64 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java       |   13 
 pamapi/src/doc/sql/20211229_j.sql                                                               |   10 
 pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java                   |   10 
 pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java                   |   37 
 pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java                          |  139 
 PAMapp/assets/images/index_banner_web.svg                                                       |  194 
 PAMapp/components/Interview/InterviewMsg.vue                                                    |  176 
 PAMapp/shared/models/consultant.model.ts                                                        |   25 
 PAMapp/shared/models/agent-info.model.ts                                                        |   22 
 PAMapp/assets/images/quickFilter/btn_young.svg                                                  |    1 
 pamapi/src/main/resources/static/consultant/consultant_J149388015.jpg                           |    0 
 pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java                          |   27 
 PAMapp/components/singleSelectBtn.vue                                                           |   25 
 PAMapp/assets/scss/vendors/elementUI/_select.scss                                               |   42 
 PAMapp/components/QuickFilter/QuickFilterSelector.vue                                           |  132 
 PAMapp/components/Ui/UiField.vue                                                                |   50 
 PAMapp/shared/models/otpInfo.model.ts                                                           |    9 
 pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java                           |   82 
 PAMapp/assets/images/satisfaction/satisfactionBtn_s_mob.svg                                     |  222 
 PAMapp/components/Ui/UiCarousel.vue                                                             |   27 
 PAMapp/pages/accountSetting/index.vue                                                           |  603 +
 PAMapp/shared/models/loginSuccessToken.model.ts                                                 |    4 
 PAMapp/components/DateTimePicker.vue                                                            |   65 
 PAMapp/shared/models/loginRequest.model.ts                                                      |    7 
 PAMapp/pages/appointment/_appointmentId/interviewList/index.vue                                 |   38 
 pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java                           |   43 
 PAMapp/shared/models/reviews.model.ts                                                           |   32 
 pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java                             |    6 
 PAMapp/shared/services/my-consultant.service.ts                                                 |   52 
 pamapi/src/doc/sql/20220126_w.sql                                                               |    6 
 PAMapp/pages/appointment/_appointmentId/interview/new/index.vue                                 |   55 
 PAMapp/shared/const/week-days.ts                                                                |   29 
 pamapi/src/main/resources/static/consultant/consultant_AG0101234567.jpg                         |    0 
 pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java                        |   77 
 pamapi/src/main/java/com/pollex/pam/domain/Consultant.java                                      |   18 
 PAMapp/assets/scss/vendors/elementUI/_dateTimePicker.scss                                       |   85 
 pamapi/src/main/resources/i18n/messages_zh_TW.properties                                        |   10 
 pamapi/src/doc/sql/20211229_w.sql                                                               |    2 
 PAMapp/shared/models/enum/seniority.ts                                                          |    0 
 PAMapp/store/localStorage.ts                                                                    |   75 
 pamapi/src/doc/sql/20220103_w.sql                                                               |   10 
 PAMapp/shared/const/quickFilter-questionList.ts                                                 |   48 
 PAMapp/shared/models/optionBtnDto.model.ts                                                      |    9 
 pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java                         |   60 
 pamapi/src/main/resources/static/consultant/consultant_AGAM11249699.jpg                         |    0 
 PAMapp/assets/images/satisfaction/satisfactionBtn_mob.svg                                       |    0 
 pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java                                 |   87 
 PAMapp/shared/models/enum/Gender.ts                                                             |    0 
 pamapi/src/doc/sql/20220210_w.sql                                                               |   10 
 pamapi/src/doc/顧問API/客戶的顧問清單.txt                                                                |   16 
 PAMapp/components/phoneContactTimePicker.vue                                                    |  273 
 pamapi/src/doc/約訪紀錄API/刪除約訪紀錄.txt                                                               |    6 
 pamapi/src/doc/預約單/標記為已聯絡API.txt                                                                |   58 
 PAMapp/shared/services/utils.service.ts                                                         |    8 
 PAMapp/assets/scss/utilities/_utilities.scss                                                    |   17 
 PAMapp/components/Interview/InterviewRecordCard.vue                                             |   98 
 pamapi/src/doc/sql/20211213_w.sql                                                               |    1 
 PAMapp/shared/const/taiwan-cities.ts                                                            |    1 
 PAMapp/pages/myConsultantList/contactedList.vue                                                 |   13 
 PAMapp/plugins/filters/serve-area.filter.ts                                                     |   16 
 pamapi/src/main/resources/config/application-sit.yml                                            |   15 
 PAMapp/components/ReviewRecords/ReviewRecords.vue                                               |  126 
 PAMapp/shared/models/reviewsList.model.ts                                                       |    5 
 PAMapp/shared/services/otp.service.ts                                                           |   57 
 PAMapp/pages/userReviews/index.vue                                                              |  171 
 pamapi/src/doc/預約單/結案API.txt                                                                    |   32 
 pamapi/src/doc/約訪紀錄API/新增約訪紀錄.txt                                                               |   27 
 pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java           |   32 
 PAMapp/pages/appointment/_appointmentId/index.vue                                               |  304 
 PAMapp/assets/scss/_variable.scss                                                               |    3 
 PAMapp/components/Interview/InterviewAdd.vue                                                    |  269 
 PAMapp/components/editConsultantAvatar.vue                                                      |  133 
 PAMapp/shared/models/enum/Role.ts                                                               |    5 
 PAMapp/shared/storageRequests.ts                                                                |    2 
 PAMapp/store/localStorage.service.ts                                                            |  109 
 pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java                      |   15 
 PAMapp/components/Ui/UiDatePicker.vue                                                           |   71 
 pamapi/src/doc/約訪紀錄API/修改約訪紀錄.txt                                                               |   31 
 pamapi/src/doc/預約單/取得預約單細節API.txt                                                               |   76 
 pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java                                |   11 
 pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java                   |   27 
 PAMapp/components/Ui/UiDrawer.vue                                                               |   12 
 pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java                            |  165 
 pamapi/src/main/resources/static/consultant/consultant_D265260662.jpg                           |    0 
 PAMapp/pages/faq/index.vue                                                                      |   26 
 PAMapp/components/BackActionBar.vue                                                             |  106 
 PAMapp/components/Consultant/ConsultantCard.vue                                                 |  433 
 PAMapp/shared/const/appointment-fail-reason-list.ts                                             |   26 
 pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java                        |    6 
 pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java                           |  112 
 pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java                             |  196 
 PAMapp/components/Appointment/AppointmentInterviewList.vue                                      |   76 
 PAMapp/pages/recommendConsultant/index.vue                                                      |  766 +-
 pamapi/src/main/resources/static/consultant/consultant_X147309614.jpg                           |    0 
 PAMapp/assets/images/satisfaction/satisfactionBtn_web.svg                                       |    0 
 pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java       |    9 
 pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java                                |   35 
 PAMapp/assets/images/appointment/avatar_bg.svg                                                  |    9 
 PAMapp/assets/scss/vendors/elementUI/_rate.scss                                                 |   20 
 pamapi/src/main/resources/templates/mail/writeSatisfactionNotice.html                           |   10 
 pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java                            |   60 
 PAMapp/assets/scss/vendors/elementUI/_upload.scss                                               |   16 
 PAMapp/pages/consultantLogin/index.vue                                                          |   67 
 PAMapp/assets/scss/utilities/_icon.scss                                                         |    6 
 pamapi/src/doc/小鈴鐺通知API/取得登入者所有小鈴鐺通知API                                                         |   38 
 pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java                                    |   14 
 PAMapp/components/Appointment/AppointmentRecordList.vue                                         |   53 
 PAMapp/components/Appointment/AppointmentProgress.vue                                           |  119 
 PAMapp/shared/const/consult-questions.ts                                                        |    1 
 pamapi/src/doc/sql/20220121_j.sql                                                               |    3 
 PAMapp/components/Appointment/AppointmentClosedInfo.vue                                         |   74 
 pamapi/src/doc/小鈴鐺通知API/所有小鈴鐺通知設為已讀.txt                                                         |    6 
 pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java                        |   47 
 PAMapp/shared/models/registerInfo.ts                                                            |   10 
 pamapi/src/doc/sql/20220215_w.sql                                                               |    2 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java                   |   12 
 PAMapp/shared/const/agent-expert-list.ts                                                        |    1 
 pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java                           |  142 
 pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java                     |   29 
 pamapi/src/main/resources/templates/mail/appointmentNotifyEmail.html                            |   15 
 pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java                            |  123 
 pamapi/src/doc/顧問API/編輯修改顧問資料.txt                                                               |   26 
 pamapi/src/main/resources/config/application-dev.yml                                            |   33 
 PAMapp/shared/storageConsultant.ts                                                              |    0 
 pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java   |   12 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java          |   13 
 PAMapp/assets/images/notification/banner_web.svg                                                |   60 
 pamapi/src/doc/預約單/新增預約單備註.txt                                                                  |   14 
 PAMapp/plugins/filters/appointment-fail-reason.filter.ts                                        |   16 
 PAMapp/pages/satisfactionList.vue                                                               |  185 
 pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java                         |   84 
 PAMapp/components/Ui/UiTags.vue                                                                 |    5 
 pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java                            |   40 
 PAMapp/assets/icon/fonts/icomoon.ttf                                                            |    0 
 pamapi/src/doc/預約單/顧問取得所有自己的預約單API.txt                                                          |  177 
 pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java                   |   26 
 pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java              |   23 
 PAMapp/components/Client/ClientCard.vue                                                         |  505 +
 PAMapp/shared/services/query-consultant.service.ts                                              |   37 
 PAMapp/pages/appointment/_appointmentId/recordList/index.vue                                    |   32 
 pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java                                 |  172 
 PAMapp/shared/services/auth.service.ts                                                          |   14 
 pamapi/src/main/resources/templates/mail/appointmentExpiringNotifyEmail.html                    |   11 
 PAMapp/pages/notification/index.vue                                                             |  125 
 pamapi/src/main/resources/config/application-prod.yml                                           |   24 
 PAMapp/components/careerSelect.vue                                                              |  120 
 PAMapp/store/login.store.ts                                                                     |   33 
 pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java                       |   45 
 PAMapp/store/index.ts                                                                           |  123 
 PAMapp/pages/recommendConsultant/result.vue                                                     |   95 
 pamapi/src/doc/預約單/更新預約單備註.txt                                                                  |   12 
 PAMapp/pages/record/index.vue                                                                   |   69 
 PAMapp/shared/models/enum/ContactType.ts                                                        |    0 
 pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java           |    4 
 pamapi/src/main/resources/static/consultant/consultant_Z152717443.jpg                           |    0 
 pamapi/src/doc/預約單/客戶取得最新預約的未處理預約單.txt                                                          |   61 
 PAMapp/shared/services/message-box.service.ts                                                   |   30 
 pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java                           |   29 
 PAMapp/assets/icon/demo.html                                                                    |  182 
 PAMapp/shared/services/appointment.service.ts                                                   |   95 
 PAMapp/shared/services/account-setting.service.ts                                               |   22 
 pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java              |   16 
 PAMapp/pages/index.vue                                                                          |  418 +
 PAMapp/pages/myAppointmentList/contactedList.vue                                                |  129 
 PAMapp/assets/images/quickFilter/btn_senior.svg                                                 |    1 
 pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java                            |  103 
 PAMapp/assets/scss/vendors/_elementUI.scss                                                      |    5 
 PAMapp/shared/const/agent-communication-style-list.ts                                           |    1 
 PAMapp/nuxt.config.js                                                                           |    4 
 pamapi/src/doc/顧問API/取得顧問頭像.txt                                                                 |    6 
 PAMapp/shared/models/enum/satisfaction-type.ts                                                  |    5 
 pamapi/src/doc/顧問API/指定顧問詳細資訊.txt                                                               |   40 
 pamapi/src/main/resources/static/consultant/consultant_B282677963.jpg                           |    0 
 PAMapp/components/Ui/UiTimePicker.vue                                                           |  118 
 pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java                           |   60 
 pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java                   |   18 
 PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue                        |   14 
 PAMapp/assets/images/notification/banner_mob.svg                                                |   56 
 pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java                   |   23 
 pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java                 |   46 
 PAMapp/assets/scss/vendors/elementUI/_input.scss                                                |   34 
 pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java                 |   57 
 PAMapp/components/Ui/UiReviewScore.vue                                                          |    5 
 pamapi/src/main/resources/config/application-uat.yml                                            |   15 
 pamapi/src/doc/顧問API/快速篩選.txt                                                                   |    3 
 pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java                             |   99 
 PAMapp/components/Ui/UiSelect.vue                                                               |   26 
 PAMapp/layouts/default.vue                                                                      |   97 
 pamapi/src/main/resources/i18n/messages.properties                                              |    9 
 pamapi/src/main/java/com/pollex/pam/config/Constants.java                                       |   21 
 PAMapp/assets/images/index_banner2_web.svg                                                      |  362 +
 pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java             |   15 
 pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java             |   21 
 pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java                 |    6 
 pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java                               |    6 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java                 |   12 
 PAMapp/shared/models/ConsultantLoginInfo.ts                                                     |    0 
 pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java                     |    6 
 pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java                    |  159 
 PAMapp/components/Consultant-ques.vue                                                           |  117 
 pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java                   |   22 
 PAMapp/assets/scss/_common.scss                                                                 |   48 
 pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java                            |  110 
 PAMapp/assets/scss/utilities/_heading.scss                                                      |   43 
 pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java                       |    7 
 pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java                      |   65 
 pamapi/src/doc/約訪通知API/發送約訪通知API.txt                                                            |   17 
 pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java                         |   69 
 PAMapp/components/AddressPicker.vue                                                             |   30 
 pamapi/src/main/resources/config/application-pollex.yml                                         |   29 
 pamapi/src/main/resources/static/consultant/consultant_R221444250.jpg                           |    0 
 pamapi/src/doc/顧問API/嚴選配對.txt                                                                   |    4 
 pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java                  |   55 
 PAMapp/assets/icon/fonts/icomoon.svg                                                            |   48 
 PAMapp/shared/const/faqList.ts                                                                  |   43 
 PAMapp/pages/appointmentAgenda/index.vue                                                        |   68 
 PAMapp/plugins/filters/date.filter.ts                                                           |    4 
 PAMapp/shared/models/enum/contact-status.ts                                                     |    8 
 pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java                   |   53 
 PAMapp/assets/images/quickFilter/btn_unlimited.svg                                              |    1 
 PAMapp/components/Consultant/ConsultantList.vue                                                 |   47 
 PAMapp/assets/scss/vendors/elementUI/_textarea.scss                                             |    8 
 PAMapp/components/multiSelectBtn.vue                                                            |   86 
 pamapi/src/doc/sql/20220216_w.sql                                                               |   22 
 pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java        |   14 
 pamapi/src/main/resources/static/consultant/consultant_AG0109051204.jpg                         |    0 
 PAMapp/assets/scss/vendors/elementUI/_tree.scss                                                 |   90 
 PAMapp/shared/services/httpClient.ts                                                            |   83 
 pamapi/src/doc/sql/淨空整個系統資料(除顧問).sql                                                            |   12 
 PAMapp/pages/myConsultantList.vue                                                               |  100 
 pamapi/src/doc/預約單/顧問取得未處理預約單數量通知.txt                                                           |    5 
 PAMapp/components/loading.vue                                                                   |    9 
 PAMapp/components/QuickFilter/QuickFilterConsultantList.vue                                     |   34 
 PAMapp/assets/icon/selection.json                                                               |    2 
 pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java               |   29 
 PAMapp/assets/images/taiwan-logo.png                                                            |    0 
 pamapi/src/main/java/com/pollex/pam/service/NoticeService.java                                  |   57 
 PAMapp/shared/models/account.model.ts                                                           |   24 
 pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java |   13 
 PAMapp/shared/const/hide-reviews.ts                                                             |    1 
 pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java                                  |   69 
 PAMapp/components/Client/ClientList.vue                                                         |   30 
 pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java                                 |   57 
 pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java                      |   78 
 pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java                            |   61 
 PAMapp/components/Ui/UiAvatar.vue                                                               |   11 
 pamapi/src/doc/sql/20220114_j.sql                                                               |    2 
 pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java                              |   10 
 PAMapp/middleware/getUrlQuery.ts                                                                |   26 
 PAMapp/shared/services/login.service.ts                                                         |   52 
 PAMapp/assets/images/index_banner2_mob.svg                                                      |  331 +
 PAMapp/pages/myAppointmentList.vue                                                              |  201 
 pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java                           |  114 
 PAMapp/pages/appointment/_appointmentId/close/index.vue                                         |  313 
 pamapi/src/main/java/com/pollex/pam/domain/Appointment.java                                     |   60 
 PAMapp/components/Ui/UiDialog.vue                                                               |   12 
 /dev/null                                                                                       |   22 
 pamapi/src/doc/sql/20220120_j.sql                                                               |   13 
 pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java                           |    3 
 pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java                 |   37 
 PAMapp/components/popUpFrame.vue                                                                |   53 
 pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java                         |   19 
 PAMapp/assets/images/logo.png                                                                   |    0 
 PAMapp/shared/services/reviews.service.ts                                                       |   45 
 pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java                              |  237 
 PAMapp/components/Footer.vue                                                                    |   47 
 PAMapp/components/Ui/UiDateFormat.vue                                                           |   29 
 330 files changed, 16,563 insertions(+), 3,277 deletions(-)

diff --git a/PAMapp/assets/icon/demo.html b/PAMapp/assets/icon/demo.html
index 78e1388..cb91aee 100644
--- a/PAMapp/assets/icon/demo.html
+++ b/PAMapp/assets/icon/demo.html
@@ -9,18 +9,18 @@
     <link rel="stylesheet" href="style.css"></head>
 <body>
     <div class="bgc1 clearfix">
-        <h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs:&nbsp;33)</small></h1>
+        <h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs:&nbsp;39)</small></h1>
     </div>
     <div class="clearfix mhl ptl">
         <h1 class="mvm mtn fgc1">Grid Size: Unknown</h1>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-delet"></span>
-                <span class="mls"> icon-delet</span>
+                <span class="icon-sort-decrease"></span>
+                <span class="mls"> icon-sort-decrease</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
-                <input type="text" readonly value="e920" class="unit size1of2" />
-                <input type="text" maxlength="1" readonly value="&#xe920;" class="unitRight size1of2 talign-right" />
+                <input type="text" readonly value="e922" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe922;" class="unitRight size1of2 talign-right" />
             </fieldset>
             <div class="fs0 bshadow0 clearfix hidden-true">
                 <span class="unit pvs fgc1">liga: </span>
@@ -29,12 +29,12 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-top"></span>
-                <span class="mls"> icon-top</span>
+                <span class="icon-sort-add"></span>
+                <span class="mls"> icon-sort-add</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
-                <input type="text" readonly value="e91f" class="unit size1of2" />
-                <input type="text" maxlength="1" readonly value="&#xe91f;" class="unitRight size1of2 talign-right" />
+                <input type="text" readonly value="e923" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe923;" class="unitRight size1of2 talign-right" />
             </fieldset>
             <div class="fs0 bshadow0 clearfix hidden-true">
                 <span class="unit pvs fgc1">liga: </span>
@@ -43,12 +43,12 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-puzzle"></span>
-                <span class="mls"> icon-puzzle</span>
+                <span class="icon-expand"></span>
+                <span class="mls"> icon-expand</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
-                <input type="text" readonly value="e91e" class="unit size1of2" />
-                <input type="text" maxlength="1" readonly value="&#xe91e;" class="unitRight size1of2 talign-right" />
+                <input type="text" readonly value="e924" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe924;" class="unitRight size1of2 talign-right" />
             </fieldset>
             <div class="fs0 bshadow0 clearfix hidden-true">
                 <span class="unit pvs fgc1">liga: </span>
@@ -57,8 +57,36 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-down"></span>
-                <span class="mls"> icon-down</span>
+                <span class="icon-sex-female"></span>
+                <span class="mls"> icon-sex-female</span>
+            </div>
+            <fieldset class="fs0 size1of1 clearfix hidden-false">
+                <input type="text" readonly value="e925" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe925;" class="unitRight size1of2 talign-right" />
+            </fieldset>
+            <div class="fs0 bshadow0 clearfix hidden-true">
+                <span class="unit pvs fgc1">liga: </span>
+                <input type="text" readonly value="" class="liga unitRight" />
+            </div>
+        </div>
+        <div class="glyph fs1">
+            <div class="clearfix bshadow0 pbs">
+                <span class="icon-sex-male"></span>
+                <span class="mls"> icon-sex-male</span>
+            </div>
+            <fieldset class="fs0 size1of1 clearfix hidden-false">
+                <input type="text" readonly value="e926" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe926;" class="unitRight size1of2 talign-right" />
+            </fieldset>
+            <div class="fs0 bshadow0 clearfix hidden-true">
+                <span class="unit pvs fgc1">liga: </span>
+                <input type="text" readonly value="" class="liga unitRight" />
+            </div>
+        </div>
+        <div class="glyph fs1">
+            <div class="clearfix bshadow0 pbs">
+                <span class="icon-decrease"></span>
+                <span class="mls"> icon-decrease</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e900" class="unit size1of2" />
@@ -169,8 +197,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-checkbox"></span>
-                <span class="mls"> icon-checkbox</span>
+                <span class="icon-checkbox-1"></span>
+                <span class="mls"> icon-checkbox-1</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e908" class="unit size1of2" />
@@ -183,8 +211,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-checkbox-1"></span>
-                <span class="mls"> icon-checkbox-1</span>
+                <span class="icon-checkbox"></span>
+                <span class="mls"> icon-checkbox</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e909" class="unit size1of2" />
@@ -267,8 +295,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-edit"></span>
-                <span class="mls"> icon-edit</span>
+                <span class="icon-delet"></span>
+                <span class="mls"> icon-delet</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e90f" class="unit size1of2" />
@@ -281,8 +309,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-eye"></span>
-                <span class="mls"> icon-eye</span>
+                <span class="icon-down"></span>
+                <span class="mls"> icon-down</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e910" class="unit size1of2" />
@@ -295,8 +323,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-eye-1"></span>
-                <span class="mls"> icon-eye-1</span>
+                <span class="icon-edit"></span>
+                <span class="mls"> icon-edit</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e911" class="unit size1of2" />
@@ -309,8 +337,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-flag"></span>
-                <span class="mls"> icon-flag</span>
+                <span class="icon-eye-1"></span>
+                <span class="mls"> icon-eye-1</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e912" class="unit size1of2" />
@@ -323,8 +351,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-information"></span>
-                <span class="mls"> icon-information</span>
+                <span class="icon-eye"></span>
+                <span class="mls"> icon-eye</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e913" class="unit size1of2" />
@@ -337,8 +365,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-left"></span>
-                <span class="mls"> icon-left</span>
+                <span class="icon-flag"></span>
+                <span class="mls"> icon-flag</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e914" class="unit size1of2" />
@@ -351,8 +379,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-phone"></span>
-                <span class="mls"> icon-phone</span>
+                <span class="icon-information"></span>
+                <span class="mls"> icon-information</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e915" class="unit size1of2" />
@@ -365,8 +393,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-right"></span>
-                <span class="mls"> icon-right</span>
+                <span class="icon-left"></span>
+                <span class="mls"> icon-left</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e916" class="unit size1of2" />
@@ -379,8 +407,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-school"></span>
-                <span class="mls"> icon-school</span>
+                <span class="icon-phone"></span>
+                <span class="mls"> icon-phone</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e917" class="unit size1of2" />
@@ -393,8 +421,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-search"></span>
-                <span class="mls"> icon-search</span>
+                <span class="icon-puzzle"></span>
+                <span class="mls"> icon-puzzle</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e918" class="unit size1of2" />
@@ -407,8 +435,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-star"></span>
-                <span class="mls"> icon-star</span>
+                <span class="icon-right"></span>
+                <span class="mls"> icon-right</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e919" class="unit size1of2" />
@@ -421,8 +449,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-star-1"></span>
-                <span class="mls"> icon-star-1</span>
+                <span class="icon-school"></span>
+                <span class="mls"> icon-school</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e91a" class="unit size1of2" />
@@ -435,8 +463,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-thumbs-up"></span>
-                <span class="mls"> icon-thumbs-up</span>
+                <span class="icon-search"></span>
+                <span class="mls"> icon-search</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e91b" class="unit size1of2" />
@@ -449,8 +477,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-time"></span>
-                <span class="mls"> icon-time</span>
+                <span class="icon-star-1"></span>
+                <span class="mls"> icon-star-1</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e91c" class="unit size1of2" />
@@ -463,8 +491,8 @@
         </div>
         <div class="glyph fs1">
             <div class="clearfix bshadow0 pbs">
-                <span class="icon-trophy"></span>
-                <span class="mls"> icon-trophy</span>
+                <span class="icon-star"></span>
+                <span class="mls"> icon-star</span>
             </div>
             <fieldset class="fs0 size1of1 clearfix hidden-false">
                 <input type="text" readonly value="e91d" class="unit size1of2" />
@@ -475,6 +503,62 @@
                 <input type="text" readonly value="" class="liga unitRight" />
             </div>
         </div>
+        <div class="glyph fs1">
+            <div class="clearfix bshadow0 pbs">
+                <span class="icon-thumbs-up"></span>
+                <span class="mls"> icon-thumbs-up</span>
+            </div>
+            <fieldset class="fs0 size1of1 clearfix hidden-false">
+                <input type="text" readonly value="e91e" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe91e;" class="unitRight size1of2 talign-right" />
+            </fieldset>
+            <div class="fs0 bshadow0 clearfix hidden-true">
+                <span class="unit pvs fgc1">liga: </span>
+                <input type="text" readonly value="" class="liga unitRight" />
+            </div>
+        </div>
+        <div class="glyph fs1">
+            <div class="clearfix bshadow0 pbs">
+                <span class="icon-time"></span>
+                <span class="mls"> icon-time</span>
+            </div>
+            <fieldset class="fs0 size1of1 clearfix hidden-false">
+                <input type="text" readonly value="e91f" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe91f;" class="unitRight size1of2 talign-right" />
+            </fieldset>
+            <div class="fs0 bshadow0 clearfix hidden-true">
+                <span class="unit pvs fgc1">liga: </span>
+                <input type="text" readonly value="" class="liga unitRight" />
+            </div>
+        </div>
+        <div class="glyph fs1">
+            <div class="clearfix bshadow0 pbs">
+                <span class="icon-top"></span>
+                <span class="mls"> icon-top</span>
+            </div>
+            <fieldset class="fs0 size1of1 clearfix hidden-false">
+                <input type="text" readonly value="e920" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe920;" class="unitRight size1of2 talign-right" />
+            </fieldset>
+            <div class="fs0 bshadow0 clearfix hidden-true">
+                <span class="unit pvs fgc1">liga: </span>
+                <input type="text" readonly value="" class="liga unitRight" />
+            </div>
+        </div>
+        <div class="glyph fs1">
+            <div class="clearfix bshadow0 pbs">
+                <span class="icon-trophy"></span>
+                <span class="mls"> icon-trophy</span>
+            </div>
+            <fieldset class="fs0 size1of1 clearfix hidden-false">
+                <input type="text" readonly value="e921" class="unit size1of2" />
+                <input type="text" maxlength="1" readonly value="&#xe921;" class="unitRight size1of2 talign-right" />
+            </fieldset>
+            <div class="fs0 bshadow0 clearfix hidden-true">
+                <span class="unit pvs fgc1">liga: </span>
+                <input type="text" readonly value="" class="liga unitRight" />
+            </div>
+        </div>
     </div>
 
     <!--[if gt IE 8]><!-->
diff --git a/PAMapp/assets/icon/fonts/icomoon.eot b/PAMapp/assets/icon/fonts/icomoon.eot
index 8422bb1..32ec960 100644
--- a/PAMapp/assets/icon/fonts/icomoon.eot
+++ b/PAMapp/assets/icon/fonts/icomoon.eot
Binary files differ
diff --git a/PAMapp/assets/icon/fonts/icomoon.svg b/PAMapp/assets/icon/fonts/icomoon.svg
index 564212f..6127b01 100644
--- a/PAMapp/assets/icon/fonts/icomoon.svg
+++ b/PAMapp/assets/icon/fonts/icomoon.svg
@@ -7,7 +7,7 @@
 <font-face units-per-em="1024" ascent="960" descent="-64" />
 <missing-glyph horiz-adv-x="1024" />
 <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
-<glyph unicode="&#xe900;" glyph-name="down" d="M563.115 105.771l407.851 408.107c13.086 12.984 21.186 30.975 21.186 50.858 0 19.714-7.963 37.568-20.848 50.521l-68.136 68.136c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l-289.532-289.617-289.195 289.195c-13.008 13.118-31.038 21.24-50.965 21.24-19.778 0-37.688-8.001-50.669-20.943l-0.297-0.297-67.968-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l408.231-408.316c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z" />
+<glyph unicode="&#xe900;" glyph-name="decrease" horiz-adv-x="1059" d="M947.023 536.276h-834.737c-42.513 0-76.977-34.464-76.977-76.977s34.464-76.977 76.977-76.977h834.737c42.513 0 76.977 34.464 76.977 76.977s-34.464 76.977-76.977 76.977v0z" />
 <glyph unicode="&#xe901;" glyph-name="add" d="M944.305 527.805h-352.501v352.501c-0.083 44.019-35.777 79.674-79.803 79.695h-0.002c-43.994-0.083-79.632-35.735-79.695-79.725v-352.47h-352.537c-44.055 0-79.768-35.713-79.768-79.768s35.713-79.768 79.768-79.768v0h352.501v-352.574c0-44.055 35.713-79.768 79.768-79.768s79.768 35.713 79.768 79.768v0 352.574h352.501c44.055 0 79.768 35.713 79.768 79.768s-35.713 79.768-79.768 79.768v0z" />
 <glyph unicode="&#xe902;" glyph-name="address" horiz-adv-x="717" d="M358.4 960c-0.076 0-0.166 0-0.256 0-197.797 0-358.144-160.347-358.144-358.144 0-0.090 0-0.18 0-0.27v0.014c0-268.8 358.4-665.6 358.4-665.6s358.4 396.8 358.4 665.6c0 0.076 0 0.166 0 0.256 0 197.797-160.347 358.144-358.144 358.144-0.090 0-0.18 0-0.27 0h0.014zM358.4 473.6c-70.692 0-128 57.308-128 128s57.308 128 128 128c70.692 0 128-57.308 128-128v0c0-70.692-57.308-128-128-128v0z" />
 <glyph unicode="&#xe903;" glyph-name="agent" horiz-adv-x="896" d="M447.993 448.019c141.38 0 255.991 114.611 255.991 255.991s-114.611 255.991-255.991 255.991c-141.38 0-255.991-114.611-255.991-255.991v0c0-141.38 114.611-255.991 255.991-255.991v0zM639.585 382.836l-95.609-382.81-63.988 272.006 63.988 111.998h-191.965l63.988-111.998-63.988-272.006-95.609 382.773c-142.815-6.542-256.155-123.796-256.401-267.577v-179.221h895.986v179.197c-0.246 143.806-113.586 261.059-255.814 267.58l-0.587 0.021z" />
@@ -15,29 +15,35 @@
 <glyph unicode="&#xe905;" glyph-name="avatar" horiz-adv-x="894" d="M448.963 456.819c138.95 0 251.59 112.641 251.59 251.59s-112.641 251.59-251.59 251.59v0c-138.95 0-251.59-112.641-251.59-251.59s112.641-251.59 251.59-251.59v0zM448.963 840.512v0c72.958 0 132.103-59.144 132.103-132.103s-59.144-132.103-132.103-132.103c-72.958 0-132.103 59.144-132.103 132.103 0 0.013 0 0.026 0 0.039v-0.002c0 72.938 59.128 132.065 132.065 132.065 0.013 0 0.026 0 0.039 0h-0.002zM448.963 393.931c-167.938 0-448.963-50.013-448.963-217.355v-240.576h893.721v240.576c0 167.305-276.82 217.355-444.758 217.355zM774.233 55.525h-654.931v121.051c0 40.263 142.671 97.83 329.475 97.83v0c186.804 0 325.27-57.567 325.27-97.83z" />
 <glyph unicode="&#xe906;" glyph-name="bell" horiz-adv-x="932" d="M908.486 267.183c-1.1 0.834-112.139 84.872-112.139 362.886 0 182.216-147.715 329.931-329.931 329.931s-329.931-147.715-329.931-329.931v0c0-278.014-111.039-362.052-111.191-362.242-15.359-10.347-25.326-27.674-25.326-47.328 0-31.414 25.465-56.881 56.878-56.885h819.14c25.031 0.194 46.179 16.601 53.474 39.229l0.112 0.401c1.696 5.184 2.675 11.15 2.675 17.344 0 19.089-9.291 36.008-23.598 46.482l-0.162 0.113zM174.901 277.384c47.923 94.131 76 205.282 76 322.99 0 10.443-0.221 20.835-0.659 31.17l0.050-1.475c0 119.383 96.779 216.162 216.162 216.162s216.162-96.779 216.162-216.162v0c-0.387-8.856-0.608-19.244-0.608-29.684 0-117.708 28.062-228.862 77.862-327.136l-1.9 4.135zM573.853 87.541c-8.181 4.825-18.026 7.675-28.536 7.675-20.904 0-39.175-11.276-49.061-28.077l-0.145-0.266c-6.013-10.266-16.989-17.051-29.55-17.051-6.311 0-12.222 1.713-17.293 4.699l0.16-0.087c-5.181 3.025-9.376 7.22-12.314 12.241l-0.086 0.16c-10.022 17.142-28.338 28.474-49.3 28.474-31.434 0-56.916-25.482-56.916-56.916 0-10.472 2.828-20.283 7.762-28.711l-0.145 0.269c26.074-44.41 73.596-73.753 127.972-73.753s101.897 29.344 127.594 73.059l0.377 0.694c4.808 8.17 7.648 17.998 7.648 28.489 0 20.831-11.197 39.047-27.901 48.958l-0.263 0.144z" />
 <glyph unicode="&#xe907;" glyph-name="calender" horiz-adv-x="922" d="M307.2 499.2h-102.4v-102.4h102.4zM512 499.2h-102.4v-102.4h102.4zM716.8 499.2h-102.4v-102.4h102.4zM819.2 857.6h-51.2v102.4h-102.4v-102.4h-409.6v102.4h-102.4v-102.4h-51.2c-56.277-0.024-101.889-45.651-101.889-101.931 0-0.165 0-0.33 0.001-0.495v0.025l-0.512-716.8c0-56.554 45.846-102.4 102.4-102.4v0h716.8c56.486 0.169 102.231 45.914 102.4 102.384v716.816c-0.169 56.486-45.914 102.231-102.384 102.4h-0.016zM819.2 38.4h-716.8v563.2h716.8z" />
-<glyph unicode="&#xe908;" glyph-name="checkbox" d="M910.222 846.222v-796.444h-796.444v796.444h796.444zM910.222 960h-796.444c-62.76-0.193-113.584-51.018-113.778-113.759v-796.463c0.193-62.76 51.018-113.584 113.759-113.778h796.463c62.76 0.193 113.584 51.018 113.778 113.759v796.463c-0.193 62.76-51.018 113.584-113.759 113.778h-0.019z" />
-<glyph unicode="&#xe909;" glyph-name="checkbox-1" d="M910.222 960h-796.444c-62.838 0-113.778-50.94-113.778-113.778v0-796.444c0-62.838 50.94-113.778 113.778-113.778v0h796.444c62.838 0 113.778 50.94 113.778 113.778v0 796.444c0 62.838-50.94 113.778-113.778 113.778v0zM398.222 163.556l-284.444 284.444 80.213 80.213 204.231-203.662 431.787 431.787 80.213-80.782z" />
+<glyph unicode="&#xe908;" glyph-name="checkbox-1" d="M910.222 960h-796.444c-62.838 0-113.778-50.94-113.778-113.778v0-796.444c0-62.838 50.94-113.778 113.778-113.778v0h796.444c62.838 0 113.778 50.94 113.778 113.778v0 796.444c0 62.838-50.94 113.778-113.778 113.778v0zM398.222 163.556l-284.444 284.444 80.213 80.213 204.231-203.662 431.787 431.787 80.213-80.782z" />
+<glyph unicode="&#xe909;" glyph-name="checkbox" d="M910.222 846.222v-796.444h-796.444v796.444h796.444zM910.222 960h-796.444c-62.76-0.193-113.584-51.018-113.778-113.759v-796.463c0.193-62.76 51.018-113.584 113.759-113.778h796.463c62.76 0.193 113.584 51.018 113.778 113.759v796.463c-0.193 62.76-51.018 113.584-113.759 113.778h-0.019z" />
 <glyph unicode="&#xe90a;" glyph-name="circle-left" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM276.821 412.928l279.723-279.723c8.937-8.992 21.312-14.557 34.987-14.557s26.050 5.565 34.984 14.554l35.117 35.117c8.992 8.937 14.557 21.312 14.557 34.987s-5.565 26.050-14.554 34.984l-209.751 209.751 209.749 209.749c8.992 8.937 14.557 21.312 14.557 34.987s-5.565 26.050-14.554 34.984l-35.117 35.117c-8.937 8.992-21.312 14.557-34.987 14.557s-26.050-5.565-34.984-14.554l-279.725-279.767c-8.993-8.976-14.557-21.385-14.557-35.093s5.564-26.118 14.556-35.093l0.001-0.001z" />
 <glyph unicode="&#xe90b;" glyph-name="circle-right" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512v0c0-282.77 229.23-512 512-512v0zM747.136 412.885l-279.723-279.723c-8.937-8.992-21.312-14.557-34.987-14.557s-26.050 5.565-34.984 14.554l-35.117 35.117c-8.992 8.937-14.557 21.312-14.557 34.987s5.565 26.050 14.554 34.984l209.751 209.751-209.792 209.792c-8.992 8.937-14.557 21.312-14.557 34.987s5.565 26.050 14.554 34.984l35.117 35.117c8.937 8.992 21.312 14.557 34.987 14.557s26.050-5.565 34.984-14.554l279.725-279.725c9.019-8.98 14.6-21.406 14.6-35.136 0-13.709-5.564-26.118-14.556-35.093l-0.001-0.001z" />
 <glyph unicode="&#xe90c;" glyph-name="close" d="M843.123 929.004l-331.098-331.098-331.098 331.098c-19.185 19.146-45.668 30.985-74.916 30.985s-55.731-11.839-74.918-30.987l0.002 0.002c-19.117-19.18-30.937-45.643-30.937-74.868s11.82-55.687 30.94-74.87l331.047-331.095-331.050-331.244c-19.191-19.173-31.063-45.67-31.063-74.94 0-58.504 47.427-105.93 105.93-105.93 29.234 0 55.702 11.842 74.868 30.991l331.097 331.097 331.196-331.147c19.046-18.46 45.049-29.839 73.71-29.839 58.521 0 105.961 47.44 105.961 105.961 0 28.661-11.379 54.663-29.865 73.737l0.027-0.028-331.196 331.196 331.098 331.098c18.46 19.046 29.839 45.049 29.839 73.71 0 58.521-47.44 105.961-105.961 105.961-28.661 0-54.663-11.379-73.737-29.865l0.028 0.027z" />
 <glyph unicode="&#xe90d;" glyph-name="comment" d="M895.851 960h-767.872c-70.681 0-127.979-57.298-127.979-127.979v0-575.904c0-70.681 57.298-127.979 127.979-127.979v0h191.968v-167.993c0-0.025 0-0.056 0-0.086 0-13.288 10.772-24.060 24.060-24.060 5.399 0 10.382 1.778 14.397 4.781l-0.063-0.045 249.558 187.403h287.952c70.681 0 127.979 57.298 127.979 127.979v0 575.904c0 70.681-57.298 127.979-127.979 127.979v0zM604.699 384.096h-371.821v127.979h371.821zM791.42 663.303h-558.84v127.979h558.84z" />
 <glyph unicode="&#xe90e;" glyph-name="company" horiz-adv-x="970" d="M646.741 474.965v323.371l-161.707 161.664-161.664-161.664v-107.819h-323.371v-754.517h970.112v538.965zM215.595 43.776h-107.819v107.819h107.819zM215.595 259.371h-107.819v107.776h107.819zM215.595 474.965h-107.819v107.776h107.819zM538.965 43.819h-107.819v107.776h107.776zM538.965 259.413h-107.819v107.733h107.776zM538.965 475.008h-107.819v107.733h107.776zM538.965 690.603h-107.819v107.733h107.776zM862.336 43.861h-107.819v107.733h107.776zM862.336 259.456h-107.819v107.691h107.776z" />
-<glyph unicode="&#xe90f;" glyph-name="edit" d="M864 960c88.366 0 160-71.634 160-160 0-36.2-12.022-69.593-32.292-96.402l0.292 0.402-64-64-224 224 64 64c26.324 19.976 59.637 32 95.758 32 0.085 0 0.17 0 0.255 0h-0.013zM64 224l-64-288 288 64 592.171 592-224.171 224.128zM715.563 596.437l-448-448-55.168 55.125 448 448z" />
-<glyph unicode="&#xe910;" glyph-name="eye" horiz-adv-x="1352" d="M1343.806 481.543c-9.762 19.575-244.11 478.457-667.948 478.457s-658.136-458.883-667.948-478.457c-4.994-9.78-7.92-21.332-7.92-33.568s2.926-23.787 8.117-33.994l-0.197 0.427c10.013-19.575 244.11-478.407 667.948-478.407s658.186 458.832 667.948 478.407c4.994 9.78 7.92 21.332 7.92 33.568s-2.926 23.787-8.117 33.994l0.197-0.427zM675.858 86.040c-272.446 0-457.030 266.138-514.553 361.809 57.523 95.671 242.107 361.809 514.553 361.809s457.13-266.288 514.553-361.809c-57.523-95.521-242.157-361.659-514.553-361.659zM675.858 748.381c-165.896 0-300.381-134.485-300.381-300.381s134.485-300.381 300.381-300.381c165.896 0 300.381 134.485 300.381 300.381v0c-0.199 165.816-134.565 300.182-300.362 300.381h-0.020zM675.858 297.809c-82.948 0-150.191 67.243-150.191 150.191s67.243 150.191 150.191 150.191c82.948 0 150.191-67.243 150.191-150.191v0c0-82.948-67.243-150.191-150.191-150.191v0z" />
-<glyph unicode="&#xe911;" glyph-name="eye-1" horiz-adv-x="1142" d="M1123.235 38.654l-217.634 208.847c5.132-1.805 11.050-2.848 17.211-2.848 15.851 0 30.089 6.902 39.875 17.864l0.046 0.052c37.481 38.161 71.036 80.412 99.866 125.951l1.835 3.103c5.666 8.976 9.029 19.899 9.029 31.606 0 11.056-2.999 21.412-8.227 30.299l0.153-0.28c-7.952 13.359-194.813 327.802-528.499 327.802h-1.312c-35.996-0.005-71.127-3.696-105.040-10.716l3.34 0.578c-18.092-3.787-32.895-15.391-40.954-31.036l-0.156-0.333-212.306 203.798c-10.7 10.287-25.264 16.622-41.308 16.622-32.938 0-59.64-26.702-59.64-59.64 0-16.894 7.024-32.148 18.312-42.999l0.020-0.019 162.768-156.208c-5.287-1.648-9.884-3.809-14.111-6.501l0.235 0.14c-95.97-62.868-175.328-142.911-235.543-236.445l-1.89-3.135c-5.835-9.056-9.303-20.115-9.303-31.985 0-11.035 2.997-21.371 8.222-30.236l-0.152 0.279c7.952-13.359 194.813-327.802 529.175-327.802 107.604 0.9 207.542 32.95 291.456 87.555l-2.1-1.281c1.312 0.835 2.385 1.908 3.618 2.863l210.398-201.929c10.7-10.287 25.264-16.622 41.308-16.622 32.938 0 59.64 26.702 59.64 59.64 0 16.894-7.024 32.148-18.312 42.999l-0.020 0.019zM536.729 661.777c210.716 0 354.679-168.573 405.529-238.546-20.464-28.603-41.631-53.756-64.584-77.15l0.097 0.1c-10.193-10.583-16.471-24.997-16.471-40.878 0-6.315 0.993-12.399 2.831-18.103l-0.116 0.417-385.213 369.747c17.213 2.809 37.053 4.414 57.267 4.414 0.232 0 0.464 0 0.696-0.001h-0.036zM480.591 454.242c6.937 5.309 12.58 11.943 16.621 19.556l0.156 0.323 89.972-86.354c-14.804-12.070-33.904-19.382-54.711-19.382-7.266 0-14.323 0.892-21.069 2.571l0.598-0.126c-21.583 3.776-39.081 18.284-47.003 37.713l-0.149 0.414c-0.942 3.344-1.484 7.185-1.484 11.153 0 13.911 6.658 26.266 16.961 34.054l0.107 0.078zM536.729 184.685c-210.716 0-354.4 168.215-405.211 238.546 49.32 68.027 109.037 125.034 177.432 169.904l2.551 1.571c11.947 7.883 20.761 19.68 24.668 33.535l0.101 0.418 78.482-75.301c-2.135-1.142-3.89-2.209-5.584-3.359l0.217 0.139c-39.593-30.204-64.883-77.409-64.883-130.521 0-16.497 2.44-32.424 6.979-47.441l-0.301 1.159c21.213-61.143 72.589-106.713 135.851-119.32l1.154-0.192c13.578-3.209 29.168-5.048 45.187-5.048 51.658 0 98.848 19.131 134.872 50.694l-0.235-0.202c1.923 1.788 3.692 3.67 5.327 5.665l0.080 0.1 67.389-64.686c-58.645-34.055-128.851-54.577-203.762-55.657l-0.314-0.004z" />
-<glyph unicode="&#xe912;" glyph-name="flag" horiz-adv-x="1008" d="M470.315 580.139v-136.192c52.181-11.819 98.603-31.189 147.2-44.587v136.405c-52.011 11.605-98.773 30.976-147.2 44.416zM916.907 826.112c-67.939-35.792-147.729-58.874-232.376-63.923l-1.608-0.077c-107.008 0.213-195.584 69.76-330.368 69.76-0.457 0.002-0.998 0.003-1.539 0.003-48.265 0-94.476-8.794-137.118-24.867l2.678 0.885c4.705 11.905 7.433 25.695 7.433 40.122 0 61.856-50.144 112-112 112s-112-50.144-112-112c0-37.882 18.807-71.371 47.593-91.64l0.355-0.237v-772.267c0-0.038 0-0.083 0-0.128 0-26.439 21.433-47.872 47.872-47.872 0.045 0 0.090 0 0.135 0h31.993c0.038 0 0.083 0 0.128 0 26.439 0 47.872 21.433 47.872 47.872 0 0.045 0 0.090 0 0.135v-0.007 188.928c64.268 28.012 139.144 44.31 217.827 44.31 3.851 0 7.693-0.039 11.525-0.117l-0.573 0.009c107.179 0 195.584-69.589 330.368-69.589 92.324 0.765 177.356 31.352 246.099 82.581l-1.107-0.789c16.771 11.705 27.605 30.909 27.605 52.644 0 0.047 0 0.094 0 0.141v-0.007 486.144c-0.078 35.287-28.702 63.863-64 63.863-9.72 0-18.935-2.167-27.186-6.044l0.391 0.165zM323.157 308.992c-54.473-5.68-104.346-17.389-151.58-34.589l4.38 1.394v140.8c42.966 16.959 92.83 29.258 144.754 34.612l2.446 0.204zM911.957 577.792c-42.344-20.263-91.614-36.787-143.125-47.106l-4.075-0.681v-141.867c55.26 7.286 105.051 25.69 148.773 52.924l-1.573-0.913v-140.8c-41.573-28.653-91.64-48.031-145.739-54.055l-1.461-0.132v142.976c-14.605-2.234-31.455-3.51-48.603-3.51-35.177 0-69.1 5.37-100.994 15.334l2.396-0.645v-134.912c-39.685 15.094-88.92 29.775-139.395 41.183l-7.805 1.483v136.875c-28.906 6.694-62.098 10.532-96.186 10.532-17.976 0-35.702-1.067-53.12-3.141l2.106 0.204v140.032c-55.565-9.583-104.997-24.104-151.88-43.532l4.68 1.718v140.8c42.614 19.83 92.097 35.166 143.91 43.55l3.29 0.439v-142.976c14.417 2.165 31.054 3.401 47.98 3.401 35.4 0 69.537-5.408 101.63-15.442l-2.41 0.649v134.741c39.858-15.224 89.098-29.908 139.605-41.235l7.595-1.431v-136.704c26.239-6.45 56.363-10.149 87.35-10.149 21.13 0 41.859 1.72 62.054 5.028l-2.204-0.298v143.872c55.763 10.757 105.071 26.328 151.746 46.79l-4.546-1.777z" />
-<glyph unicode="&#xe913;" glyph-name="information" d="M460.771 601.604h102.293v102.251h-102.293zM511.917 38.251c-0.012 0-0.027 0-0.041 0-226.23 0-409.625 183.395-409.625 409.625s183.395 409.625 409.625 409.625c226.215 0 409.601-183.372 409.625-409.581v-0.002c0-226.23-183.395-409.625-409.625-409.625v0zM511.876 960.207c-282.717-0.071-511.876-229.274-511.876-512 0-282.77 229.23-512 512-512 282.697 0 511.882 229.113 512 511.782v0.011c0 282.77-229.23 512-512 512v0zM460.854 191.979h102.21v307.25h-102.21z" />
-<glyph unicode="&#xe914;" glyph-name="left" horiz-adv-x="661" d="M22.52 393.406l435.159-434.886c13.85-13.942 33.032-22.572 54.23-22.572s40.38 8.63 54.226 22.567l72.295 72.295c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-308.504 308.413 308.365 308.365c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-0.003 0.003-71.973 72.792c-13.85 13.942-33.032 22.572-54.23 22.572s-40.38-8.63-54.226-22.567l-435.027-434.936c-14.154-13.904-22.927-33.246-22.927-54.637 0-21.234 8.643-40.449 22.604-54.319l0.004-0.004z" />
-<glyph unicode="&#xe915;" glyph-name="phone" horiz-adv-x="652" d="M558.549 959.531l-465.451 0.469c-51.358-0.145-92.954-41.74-93.099-93.085v-837.817c0.145-51.358 41.74-92.954 93.085-93.099h465.465c51.358 0.145 92.954 41.74 93.099 93.085v837.817c-0.194 51.199-41.744 92.629-92.97 92.629-0.045 0-0.090 0-0.136 0h0.007zM558.549 122.197h-465.451v651.605h465.451z" />
-<glyph unicode="&#xe916;" glyph-name="right" horiz-adv-x="661" d="M638.368 393.381l-435.042-434.86c-13.855-13.932-33.037-22.554-54.232-22.554s-40.377 8.622-54.229 22.55l-72.298 72.298c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l308.381 308.381-308.378 308.378c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l0.003 0.003 71.976 72.795c13.855 13.932 33.037 22.554 54.232 22.554s40.377-8.622 54.229-22.55l435.045-434.726c14.1-13.896 22.836-33.203 22.836-54.549 0-21.189-8.607-40.368-22.515-54.232l-0.002-0.002z" />
-<glyph unicode="&#xe917;" glyph-name="school" horiz-adv-x="1252" d="M227.579 380.884v-227.579l398.211-217.305 398.211 217.305v227.579l-398.211-217.358zM625.789 960l-625.789-341.316 625.789-341.316 512 279.311v-393.1h113.789v455.105z" />
-<glyph unicode="&#xe918;" glyph-name="search" d="M1009.922 74.686l-199.391 199.391c-8.672 8.647-20.639 13.993-33.854 13.993-0.096 0-0.192 0-0.288-0.001h-32.577c54.858 69.783 87.982 158.908 87.982 255.769 0 229.618-186.142 415.76-415.76 415.76s-415.76-186.142-415.76-415.76c0-229.618 186.142-415.76 415.76-415.76 96.861 0 185.986 33.123 256.666 88.661l-0.897-0.679v-32.464c0-0.081-0.001-0.177-0.001-0.273 0-13.216 5.346-25.182 13.994-33.855l199.39-199.39c8.657-8.711 20.645-14.103 33.893-14.103s25.236 5.392 33.891 14.1l56.611 56.611c8.774 8.732 14.204 20.817 14.204 34.171 0 13.184-5.292 25.131-13.869 33.834l0.006-0.006zM415.973 287.984c-141.361 0-255.957 114.596-255.957 255.957s114.596 255.957 255.957 255.957c141.361 0 255.957-114.596 255.957-255.957v0c-0.049-141.325-114.626-255.872-255.957-255.872v0z" />
-<glyph unicode="&#xe919;" glyph-name="star" horiz-adv-x="1103" d="M1060.923 605.515h-362.082l-110.034 328.386c-5.769 15.366-20.337 26.102-37.413 26.102s-31.644-10.737-37.322-25.828l-0.091-0.275-110.034-328.386h-364.574c-21.717-0.069-39.304-17.656-39.374-39.367v-0.007c0-0.051-0.001-0.111-0.001-0.172 0-2.3 0.268-4.537 0.775-6.682l-0.039 0.196c1.082-11.588 7.245-21.545 16.211-27.732l0.127-0.083 297.753-209.856-114.363-332.062c-1.356-3.823-2.14-8.232-2.14-12.824 0-12.816 6.104-24.206 15.563-31.422l0.096-0.070c5.913-5.322 13.556-8.829 21.991-9.588l0.147-0.011c9.263 0.701 17.658 3.918 24.649 8.961l-0.142-0.098 290.483 207.038 290.483-207.038c6.807-5.047 15.229-8.284 24.374-8.857l0.132-0.007c8.688 0.56 16.438 4.176 22.272 9.773l-0.012-0.012c9.602 7.187 15.75 18.533 15.75 31.315 0 4.66-0.817 9.13-2.316 13.273l0.086-0.272-114.159 331.898 295.139 211.694 7.148 6.167c7.108 6.72 11.823 15.905 12.772 26.182l0.012 0.163c-1.204 22.063-19.388 39.497-41.643 39.497-0.078 0-0.156 0-0.234-0.001h0.012z" />
-<glyph unicode="&#xe91a;" glyph-name="star-1" horiz-adv-x="1095" d="M264.124-64l-3.988 0.315c-45.874 4.728-81.349 43.172-81.349 89.9 0 9.949 1.608 19.523 4.579 28.476l-0.183-0.638 89.58 260.661-235.092 165.554c-19.618 13.599-33.145 34.797-36.332 59.244l-0.046 0.43c-0.823 4.244-1.294 9.125-1.294 14.115 0 0.018 0 0.036 0 0.054v-0.003c0.197 48.36 39.308 87.52 87.63 87.796h289.579l86.747 258.842c12.356 34.779 44.982 59.235 83.32 59.235 37.789 0 70.029-23.761 82.593-57.157l0.201-0.608 87.272-260.311h287.525c0.011 0 0.025 0 0.038 0 47.863 0 86.99-37.407 89.741-84.58l0.011-0.243v-3.848l-0.315-3.883c-2.124-22.565-12.304-42.418-27.594-56.944l-0.039-0.036-11.963-10.074-233.098-167.233 89.755-261.011c3.161-8.633 4.99-18.602 4.99-28.997 0-27.516-12.812-52.041-32.795-67.933l-0.177-0.136c-13.364-11.803-30.658-19.438-49.692-20.728l-0.258-0.014-3.183-0.21-3.148 0.175c-18.973 1.079-36.226 7.647-50.416 18.125l0.256-0.181-229.565 163.77-230.369-164.12c-13.682-9.851-30.475-16.214-48.672-17.473l-0.298-0.017zM812.414 19.949v-0.28zM282.243 20.124v0zM838.403 39.502v0zM139.39 536.968l258.003-181.889-97.94-285.006 247.929 176.642 247.649-176.502-97.94 284.586 254.015 182.169h-309.246l-94.442 282.243-94.722-282.243zM1004.972 536.968v0zM97.346 566.595l0.56-0.42z" />
-<glyph unicode="&#xe91b;" glyph-name="thumbs-up" horiz-adv-x="910" d="M662.613 598.059c-7.552 20.181 201.344 206.72 79.531 357.888-28.501 35.328-125.227-169.259-262.528-261.845-75.776-51.2-252.075-159.872-252.075-219.989v-389.461c0-72.32 279.552-148.864 491.989-148.864 77.867 0 190.677 487.851 190.677 565.333s-240.128 76.459-247.467 96.725zM170.624 592.64c-0.681 0.010-1.486 0.016-2.292 0.016-93.126 0-168.619-75.493-168.619-168.619 0-3.187 0.088-6.354 0.263-9.498l-0.019 0.437v-275.797c-0.161-2.71-0.252-5.878-0.252-9.068 0-90.015 72.972-162.987 162.987-162.987 2.79 0 5.564 0.070 8.32 0.209l-0.387-0.016c37.376 0-56.875 32.555-56.875 128.555v362.667c0 100.565 94.251 134.187 56.875 134.187z" />
-<glyph unicode="&#xe91c;" glyph-name="time" d="M511.488 960c-282.55-0.292-511.488-229.41-511.488-512 0-282.77 229.23-512 512-512s512 229.23 512 512v0c0 0.076 0 0.166 0 0.257 0 282.628-229.116 511.744-511.744 511.744-0.27 0-0.54 0-0.81-0.001h0.042zM512 38.4c-226.216 0-409.6 183.384-409.6 409.6s183.384 409.6 409.6 409.6c226.216 0 409.6-183.384 409.6-409.6v0c0-226.216-183.384-409.6-409.6-409.6v0zM537.6 704h-76.8v-307.2l268.8-161.28 38.4 63.147-230.4 136.533z" />
-<glyph unicode="&#xe91d;" glyph-name="trophy" horiz-adv-x="1152" d="M1104.017 831.982h-207.987v80.017c0 26.51-21.491 48.001-48.001 48.001v0h-544.040c-26.51 0-48.001-21.491-48.001-48.001v0-80.017h-207.987c-26.51 0-48.001-21.491-48.001-48.001v0-111.986c7.076-85.462 54.363-158.548 122.682-200.96l1.112-0.643c61.778-44.226 136.678-74.099 217.854-83.23l2.133-0.195c34.389-59.486 80.159-108.69 134.709-145.998l1.518-0.98v-144.002h-96.001c-3.854 0.457-8.318 0.718-12.843 0.718-62.746 0-113.776-50.163-115.172-112.574l-0.002-0.13v-24c0-13.255 10.745-24 24-24v0h592.041c13.255 0 24 10.745 24 24v0 24c-1.399 62.54-52.429 112.704-115.175 112.704-4.525 0-8.989-0.261-13.378-0.768l0.535 0.050h-96.001v144.002c56.068 38.356 101.826 87.64 135.041 145.086l1.137 2.132c83.314 9.166 158.252 38.973 221.451 84.147l-1.416-0.962c69.366 43.121 116.621 116.171 123.729 200.646l0.065 0.957v111.986c0 26.51-21.491 48.001-48.001 48.001v0zM198.627 574.41c-35.829 20.914-61.682 55.601-70.437 96.621l-0.172 0.964v32.016h128.402c1.638-61.997 10.873-121.145 26.808-177.479l-1.223 5.061c-31.815 11.002-59.407 25.499-84.329 43.47l0.951-0.653zM1024 671.995c-9.695-41.665-35.309-76.091-69.932-97.202l-0.677-0.383c-24.040-17.319-51.713-31.817-81.346-42.129l-2.271-0.688c14.711 51.273 23.946 110.421 25.564 171.467l0.020 0.952h128.594z" />
-<glyph unicode="&#xe91e;" glyph-name="puzzle" d="M384 960c-0.789 0.017-1.719 0.027-2.651 0.027-34.738 0-66.285-13.665-89.558-35.914l0.049 0.046c-22.202-23.224-35.867-54.77-35.867-89.509 0-0.932 0.010-1.862 0.029-2.789l-0.002 0.138c5.836-34.821 18.412-65.879 36.393-93.049l-0.553 0.889c2.672-8.237 4.213-17.715 4.213-27.553 0-2.918-0.136-5.803-0.401-8.652l0.027 0.365h-295.68v-768h295.68c0.053 1.37 0.084 2.978 0.084 4.594 0 11.101-1.431 21.868-4.119 32.126l0.196-0.88c-17.428 26.281-30.005 57.34-35.644 90.756l-0.196 1.404c-0.017 0.789-0.027 1.719-0.027 2.651 0 34.738 13.665 66.285 35.914 89.558l-0.046-0.049c23.224 22.202 54.77 35.867 89.509 35.867 0.932 0 1.862-0.010 2.789-0.029l-0.138 0.002c0.789 0.017 1.719 0.027 2.651 0.027 34.738 0 66.285-13.665 89.558-35.914l-0.049 0.046c22.202-23.224 35.867-54.77 35.867-89.509 0-0.932-0.010-1.862-0.029-2.789l0.002 0.138c-5.836-34.821-18.412-65.879-36.393-93.049l0.553 0.889c-2.672-8.237-4.213-17.715-4.213-27.553 0-2.918 0.136-5.803 0.401-8.652l-0.027 0.365h295.68v295.68c1.37 0.053 2.978 0.084 4.594 0.084 11.101 0 21.868-1.431 32.126-4.119l-0.88 0.196c26.281-17.428 57.34-30.005 90.756-35.644l1.404-0.196c70.692 0 128 57.308 128 128s-57.308 128-128 128v0c-34.821-5.836-65.879-18.412-93.049-36.393l0.889 0.553c-8.237-2.672-17.715-4.213-27.553-4.213-2.918 0-5.803 0.136-8.652 0.401l0.365-0.027v295.68h-295.68c-0.053 1.37-0.084 2.978-0.084 4.594 0 11.101 1.431 21.868 4.119 32.126l-0.196-0.88c17.428 26.281 30.005 57.34 35.644 90.756l0.196 1.404c0.017 0.789 0.027 1.719 0.027 2.651 0 34.738-13.665 66.285-35.914 89.558l0.046-0.049c-23.224 22.202-54.77 35.867-89.509 35.867-0.932 0-1.862-0.010-2.789-0.029l0.138 0.002z" />
-<glyph unicode="&#xe91f;" glyph-name="top" d="M563.115 736.768l407.851-408.107c13.137-12.992 21.272-31.018 21.272-50.943 0-19.756-7.997-37.645-20.932-50.605l-68.138-68.138c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l-289.532 289.788-289.195-289.195c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-0.213 0.299-68.267 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l408.231 408.316c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z" />
-<glyph unicode="&#xe920;" glyph-name="delet" horiz-adv-x="783" d="M587.199 904.076l-55.924 55.924h-279.618l-55.924-55.924h-195.733v-111.847h782.932v111.847zM33.107 89.492c1.405-85.070 70.697-153.493 155.97-153.493 0.217 0 0.434 0 0.65 0.001h403.362c0.182-0.001 0.398-0.001 0.614-0.001 85.338 0 154.671 68.528 155.971 153.557l0.001 0.122v647.895h-716.569zM144.954 627.888h493.023v-538.023c-0.295-24.483-20.211-44.217-44.736-44.217-0.001 0-0.002 0-0.003 0h-403.21c-0.101-0.001-0.22-0.001-0.34-0.001-24.499 0-44.399 19.692-44.735 44.112v0.032zM288.939 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0zM493.993 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0z" />
+<glyph unicode="&#xe90f;" glyph-name="delet" horiz-adv-x="783" d="M587.199 904.076l-55.924 55.924h-279.618l-55.924-55.924h-195.733v-111.847h782.932v111.847zM33.107 89.492c1.405-85.070 70.697-153.493 155.97-153.493 0.217 0 0.434 0 0.65 0.001h403.362c0.182-0.001 0.398-0.001 0.614-0.001 85.338 0 154.671 68.528 155.971 153.557l0.001 0.122v647.895h-716.569zM144.954 627.888h493.023v-538.023c-0.295-24.483-20.211-44.217-44.736-44.217-0.001 0-0.002 0-0.003 0h-403.21c-0.101-0.001-0.22-0.001-0.34-0.001-24.499 0-44.399 19.692-44.735 44.112v0.032zM288.939 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0zM493.993 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0z" />
+<glyph unicode="&#xe910;" glyph-name="down" d="M563.115 105.771l407.851 408.107c13.086 12.984 21.186 30.975 21.186 50.858 0 19.714-7.963 37.568-20.848 50.521l-68.136 68.136c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l-289.532-289.617-289.195 289.195c-13.008 13.118-31.038 21.24-50.965 21.24-19.778 0-37.688-8.001-50.669-20.943l-0.297-0.297-67.968-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l408.231-408.316c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z" />
+<glyph unicode="&#xe911;" glyph-name="edit" d="M864 960c88.366 0 160-71.634 160-160 0-36.2-12.022-69.593-32.292-96.402l0.292 0.402-64-64-224 224 64 64c26.324 19.976 59.637 32 95.758 32 0.085 0 0.17 0 0.255 0h-0.013zM64 224l-64-288 288 64 592.171 592-224.171 224.128zM715.563 596.437l-448-448-55.168 55.125 448 448z" />
+<glyph unicode="&#xe912;" glyph-name="eye-1" horiz-adv-x="1142" d="M1123.235 38.654l-217.634 208.847c5.132-1.805 11.050-2.848 17.211-2.848 15.851 0 30.089 6.902 39.875 17.864l0.046 0.052c37.481 38.161 71.036 80.412 99.866 125.951l1.835 3.103c5.666 8.976 9.029 19.899 9.029 31.606 0 11.056-2.999 21.412-8.227 30.299l0.153-0.28c-7.952 13.359-194.813 327.802-528.499 327.802h-1.312c-35.996-0.005-71.127-3.696-105.040-10.716l3.34 0.578c-18.092-3.787-32.895-15.391-40.954-31.036l-0.156-0.333-212.306 203.798c-10.7 10.287-25.264 16.622-41.308 16.622-32.938 0-59.64-26.702-59.64-59.64 0-16.894 7.024-32.148 18.312-42.999l0.020-0.019 162.768-156.208c-5.287-1.648-9.884-3.809-14.111-6.501l0.235 0.14c-95.97-62.868-175.328-142.911-235.543-236.445l-1.89-3.135c-5.835-9.056-9.303-20.115-9.303-31.985 0-11.035 2.997-21.371 8.222-30.236l-0.152 0.279c7.952-13.359 194.813-327.802 529.175-327.802 107.604 0.9 207.542 32.95 291.456 87.555l-2.1-1.281c1.312 0.835 2.385 1.908 3.618 2.863l210.398-201.929c10.7-10.287 25.264-16.622 41.308-16.622 32.938 0 59.64 26.702 59.64 59.64 0 16.894-7.024 32.148-18.312 42.999l-0.020 0.019zM536.729 661.777c210.716 0 354.679-168.573 405.529-238.546-20.464-28.603-41.631-53.756-64.584-77.15l0.097 0.1c-10.193-10.583-16.471-24.997-16.471-40.878 0-6.315 0.993-12.399 2.831-18.103l-0.116 0.417-385.213 369.747c17.213 2.809 37.053 4.414 57.267 4.414 0.232 0 0.464 0 0.696-0.001h-0.036zM480.591 454.242c6.937 5.309 12.58 11.943 16.621 19.556l0.156 0.323 89.972-86.354c-14.804-12.070-33.904-19.382-54.711-19.382-7.266 0-14.323 0.892-21.069 2.571l0.598-0.126c-21.583 3.776-39.081 18.284-47.003 37.713l-0.149 0.414c-0.942 3.344-1.484 7.185-1.484 11.153 0 13.911 6.658 26.266 16.961 34.054l0.107 0.078zM536.729 184.685c-210.716 0-354.4 168.215-405.211 238.546 49.32 68.027 109.037 125.034 177.432 169.904l2.551 1.571c11.947 7.883 20.761 19.68 24.668 33.535l0.101 0.418 78.482-75.301c-2.135-1.142-3.89-2.209-5.584-3.359l0.217 0.139c-39.593-30.204-64.883-77.409-64.883-130.521 0-16.497 2.44-32.424 6.979-47.441l-0.301 1.159c21.213-61.143 72.589-106.713 135.851-119.32l1.154-0.192c13.578-3.209 29.168-5.048 45.187-5.048 51.658 0 98.848 19.131 134.872 50.694l-0.235-0.202c1.923 1.788 3.692 3.67 5.327 5.665l0.080 0.1 67.389-64.686c-58.645-34.055-128.851-54.577-203.762-55.657l-0.314-0.004z" />
+<glyph unicode="&#xe913;" glyph-name="eye" horiz-adv-x="1352" d="M1343.806 481.543c-9.762 19.575-244.11 478.457-667.948 478.457s-658.136-458.883-667.948-478.457c-4.994-9.78-7.92-21.332-7.92-33.568s2.926-23.787 8.117-33.994l-0.197 0.427c10.013-19.575 244.11-478.407 667.948-478.407s658.186 458.832 667.948 478.407c4.994 9.78 7.92 21.332 7.92 33.568s-2.926 23.787-8.117 33.994l0.197-0.427zM675.858 86.040c-272.446 0-457.030 266.138-514.553 361.809 57.523 95.671 242.107 361.809 514.553 361.809s457.13-266.288 514.553-361.809c-57.523-95.521-242.157-361.659-514.553-361.659zM675.858 748.381c-165.896 0-300.381-134.485-300.381-300.381s134.485-300.381 300.381-300.381c165.896 0 300.381 134.485 300.381 300.381v0c-0.199 165.816-134.565 300.182-300.362 300.381h-0.020zM675.858 297.809c-82.948 0-150.191 67.243-150.191 150.191s67.243 150.191 150.191 150.191c82.948 0 150.191-67.243 150.191-150.191v0c0-82.948-67.243-150.191-150.191-150.191v0z" />
+<glyph unicode="&#xe914;" glyph-name="flag" horiz-adv-x="1008" d="M470.315 580.139v-136.192c52.181-11.819 98.603-31.189 147.2-44.587v136.405c-52.011 11.605-98.773 30.976-147.2 44.416zM916.907 826.112c-67.939-35.792-147.729-58.874-232.376-63.923l-1.608-0.077c-107.008 0.213-195.584 69.76-330.368 69.76-0.457 0.002-0.998 0.003-1.539 0.003-48.265 0-94.476-8.794-137.118-24.867l2.678 0.885c4.705 11.905 7.433 25.695 7.433 40.122 0 61.856-50.144 112-112 112s-112-50.144-112-112c0-37.882 18.807-71.371 47.593-91.64l0.355-0.237v-772.267c0-0.038 0-0.083 0-0.128 0-26.439 21.433-47.872 47.872-47.872 0.045 0 0.090 0 0.135 0h31.993c0.038 0 0.083 0 0.128 0 26.439 0 47.872 21.433 47.872 47.872 0 0.045 0 0.090 0 0.135v-0.007 188.928c64.268 28.012 139.144 44.31 217.827 44.31 3.851 0 7.693-0.039 11.525-0.117l-0.573 0.009c107.179 0 195.584-69.589 330.368-69.589 92.324 0.765 177.356 31.352 246.099 82.581l-1.107-0.789c16.771 11.705 27.605 30.909 27.605 52.644 0 0.047 0 0.094 0 0.141v-0.007 486.144c-0.078 35.287-28.702 63.863-64 63.863-9.72 0-18.935-2.167-27.186-6.044l0.391 0.165zM323.157 308.992c-54.473-5.68-104.346-17.389-151.58-34.589l4.38 1.394v140.8c42.966 16.959 92.83 29.258 144.754 34.612l2.446 0.204zM911.957 577.792c-42.344-20.263-91.614-36.787-143.125-47.106l-4.075-0.681v-141.867c55.26 7.286 105.051 25.69 148.773 52.924l-1.573-0.913v-140.8c-41.573-28.653-91.64-48.031-145.739-54.055l-1.461-0.132v142.976c-14.605-2.234-31.455-3.51-48.603-3.51-35.177 0-69.1 5.37-100.994 15.334l2.396-0.645v-134.912c-39.685 15.094-88.92 29.775-139.395 41.183l-7.805 1.483v136.875c-28.906 6.694-62.098 10.532-96.186 10.532-17.976 0-35.702-1.067-53.12-3.141l2.106 0.204v140.032c-55.565-9.583-104.997-24.104-151.88-43.532l4.68 1.718v140.8c42.614 19.83 92.097 35.166 143.91 43.55l3.29 0.439v-142.976c14.417 2.165 31.054 3.401 47.98 3.401 35.4 0 69.537-5.408 101.63-15.442l-2.41 0.649v134.741c39.858-15.224 89.098-29.908 139.605-41.235l7.595-1.431v-136.704c26.239-6.45 56.363-10.149 87.35-10.149 21.13 0 41.859 1.72 62.054 5.028l-2.204-0.298v143.872c55.763 10.757 105.071 26.328 151.746 46.79l-4.546-1.777z" />
+<glyph unicode="&#xe915;" glyph-name="information" d="M460.771 601.604h102.293v102.251h-102.293zM511.917 38.251c-0.012 0-0.027 0-0.041 0-226.23 0-409.625 183.395-409.625 409.625s183.395 409.625 409.625 409.625c226.215 0 409.601-183.372 409.625-409.581v-0.002c0-226.23-183.395-409.625-409.625-409.625v0zM511.876 960.207c-282.717-0.071-511.876-229.274-511.876-512 0-282.77 229.23-512 512-512 282.697 0 511.882 229.113 512 511.782v0.011c0 282.77-229.23 512-512 512v0zM460.854 191.979h102.21v307.25h-102.21z" />
+<glyph unicode="&#xe916;" glyph-name="left" horiz-adv-x="661" d="M22.52 393.406l435.159-434.886c13.85-13.942 33.032-22.572 54.23-22.572s40.38 8.63 54.226 22.567l72.295 72.295c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-308.504 308.413 308.365 308.365c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-0.003 0.003-71.973 72.792c-13.85 13.942-33.032 22.572-54.23 22.572s-40.38-8.63-54.226-22.567l-435.027-434.936c-14.154-13.904-22.927-33.246-22.927-54.637 0-21.234 8.643-40.449 22.604-54.319l0.004-0.004z" />
+<glyph unicode="&#xe917;" glyph-name="phone" horiz-adv-x="652" d="M558.549 959.531l-465.451 0.469c-51.358-0.145-92.954-41.74-93.099-93.085v-837.817c0.145-51.358 41.74-92.954 93.085-93.099h465.465c51.358 0.145 92.954 41.74 93.099 93.085v837.817c-0.194 51.199-41.744 92.629-92.97 92.629-0.045 0-0.090 0-0.136 0h0.007zM558.549 122.197h-465.451v651.605h465.451z" />
+<glyph unicode="&#xe918;" glyph-name="puzzle" d="M384 960c-0.789 0.017-1.719 0.027-2.651 0.027-34.738 0-66.285-13.665-89.558-35.914l0.049 0.046c-22.202-23.224-35.867-54.77-35.867-89.509 0-0.932 0.010-1.862 0.029-2.789l-0.002 0.138c5.836-34.821 18.412-65.879 36.393-93.049l-0.553 0.889c2.672-8.237 4.213-17.715 4.213-27.553 0-2.918-0.136-5.803-0.401-8.652l0.027 0.365h-295.68v-768h295.68c0.053 1.37 0.084 2.978 0.084 4.594 0 11.101-1.431 21.868-4.119 32.126l0.196-0.88c-17.428 26.281-30.005 57.34-35.644 90.756l-0.196 1.404c-0.017 0.789-0.027 1.719-0.027 2.651 0 34.738 13.665 66.285 35.914 89.558l-0.046-0.049c23.224 22.202 54.77 35.867 89.509 35.867 0.932 0 1.862-0.010 2.789-0.029l-0.138 0.002c0.789 0.017 1.719 0.027 2.651 0.027 34.738 0 66.285-13.665 89.558-35.914l-0.049 0.046c22.202-23.224 35.867-54.77 35.867-89.509 0-0.932-0.010-1.862-0.029-2.789l0.002 0.138c-5.836-34.821-18.412-65.879-36.393-93.049l0.553 0.889c-2.672-8.237-4.213-17.715-4.213-27.553 0-2.918 0.136-5.803 0.401-8.652l-0.027 0.365h295.68v295.68c1.37 0.053 2.978 0.084 4.594 0.084 11.101 0 21.868-1.431 32.126-4.119l-0.88 0.196c26.281-17.428 57.34-30.005 90.756-35.644l1.404-0.196c70.692 0 128 57.308 128 128s-57.308 128-128 128v0c-34.821-5.836-65.879-18.412-93.049-36.393l0.889 0.553c-8.237-2.672-17.715-4.213-27.553-4.213-2.918 0-5.803 0.136-8.652 0.401l0.365-0.027v295.68h-295.68c-0.053 1.37-0.084 2.978-0.084 4.594 0 11.101 1.431 21.868 4.119 32.126l-0.196-0.88c17.428 26.281 30.005 57.34 35.644 90.756l0.196 1.404c0.017 0.789 0.027 1.719 0.027 2.651 0 34.738-13.665 66.285-35.914 89.558l0.046-0.049c-23.224 22.202-54.77 35.867-89.509 35.867-0.932 0-1.862-0.010-2.789-0.029l0.138 0.002z" />
+<glyph unicode="&#xe919;" glyph-name="right" horiz-adv-x="661" d="M638.368 393.381l-435.042-434.86c-13.855-13.932-33.037-22.554-54.232-22.554s-40.377 8.622-54.229 22.55l-72.298 72.298c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l308.381 308.381-308.378 308.378c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l0.003 0.003 71.976 72.795c13.855 13.932 33.037 22.554 54.232 22.554s40.377-8.622 54.229-22.55l435.045-434.726c14.1-13.896 22.836-33.203 22.836-54.549 0-21.189-8.607-40.368-22.515-54.232l-0.002-0.002z" />
+<glyph unicode="&#xe91a;" glyph-name="school" horiz-adv-x="1252" d="M227.579 380.884v-227.579l398.211-217.305 398.211 217.305v227.579l-398.211-217.358zM625.789 960l-625.789-341.316 625.789-341.316 512 279.311v-393.1h113.789v455.105z" />
+<glyph unicode="&#xe91b;" glyph-name="search" d="M1009.922 74.686l-199.391 199.391c-8.672 8.647-20.639 13.993-33.854 13.993-0.096 0-0.192 0-0.288-0.001h-32.577c54.858 69.783 87.982 158.908 87.982 255.769 0 229.618-186.142 415.76-415.76 415.76s-415.76-186.142-415.76-415.76c0-229.618 186.142-415.76 415.76-415.76 96.861 0 185.986 33.123 256.666 88.661l-0.897-0.679v-32.464c0-0.081-0.001-0.177-0.001-0.273 0-13.216 5.346-25.182 13.994-33.855l199.39-199.39c8.657-8.711 20.645-14.103 33.893-14.103s25.236 5.392 33.891 14.1l56.611 56.611c8.774 8.732 14.204 20.817 14.204 34.171 0 13.184-5.292 25.131-13.869 33.834l0.006-0.006zM415.973 287.984c-141.361 0-255.957 114.596-255.957 255.957s114.596 255.957 255.957 255.957c141.361 0 255.957-114.596 255.957-255.957v0c-0.049-141.325-114.626-255.872-255.957-255.872v0z" />
+<glyph unicode="&#xe91c;" glyph-name="star-1" horiz-adv-x="1095" d="M264.124-64l-3.988 0.315c-45.874 4.728-81.349 43.172-81.349 89.9 0 9.949 1.608 19.523 4.579 28.476l-0.183-0.638 89.58 260.661-235.092 165.554c-19.618 13.599-33.145 34.797-36.332 59.244l-0.046 0.43c-0.823 4.244-1.294 9.125-1.294 14.115 0 0.018 0 0.036 0 0.054v-0.003c0.197 48.36 39.308 87.52 87.63 87.796h289.579l86.747 258.842c12.356 34.779 44.982 59.235 83.32 59.235 37.789 0 70.029-23.761 82.593-57.157l0.201-0.608 87.272-260.311h287.525c0.011 0 0.025 0 0.038 0 47.863 0 86.99-37.407 89.741-84.58l0.011-0.243v-3.848l-0.315-3.883c-2.124-22.565-12.304-42.418-27.594-56.944l-0.039-0.036-11.963-10.074-233.098-167.233 89.755-261.011c3.161-8.633 4.99-18.602 4.99-28.997 0-27.516-12.812-52.041-32.795-67.933l-0.177-0.136c-13.364-11.803-30.658-19.438-49.692-20.728l-0.258-0.014-3.183-0.21-3.148 0.175c-18.973 1.079-36.226 7.647-50.416 18.125l0.256-0.181-229.565 163.77-230.369-164.12c-13.682-9.851-30.475-16.214-48.672-17.473l-0.298-0.017zM812.414 19.949v-0.28zM282.243 20.124v0zM838.403 39.502v0zM139.39 536.968l258.003-181.889-97.94-285.006 247.929 176.642 247.649-176.502-97.94 284.586 254.015 182.169h-309.246l-94.442 282.243-94.722-282.243zM1004.972 536.968v0zM97.346 566.595l0.56-0.42z" />
+<glyph unicode="&#xe91d;" glyph-name="star" horiz-adv-x="1103" d="M1060.923 605.515h-362.082l-110.034 328.386c-5.769 15.366-20.337 26.102-37.413 26.102s-31.644-10.737-37.322-25.828l-0.091-0.275-110.034-328.386h-364.574c-21.717-0.069-39.304-17.656-39.374-39.367v-0.007c0-0.051-0.001-0.111-0.001-0.172 0-2.3 0.268-4.537 0.775-6.682l-0.039 0.196c1.082-11.588 7.245-21.545 16.211-27.732l0.127-0.083 297.753-209.856-114.363-332.062c-1.356-3.823-2.14-8.232-2.14-12.824 0-12.816 6.104-24.206 15.563-31.422l0.096-0.070c5.913-5.322 13.556-8.829 21.991-9.588l0.147-0.011c9.263 0.701 17.658 3.918 24.649 8.961l-0.142-0.098 290.483 207.038 290.483-207.038c6.807-5.047 15.229-8.284 24.374-8.857l0.132-0.007c8.688 0.56 16.438 4.176 22.272 9.773l-0.012-0.012c9.602 7.187 15.75 18.533 15.75 31.315 0 4.66-0.817 9.13-2.316 13.273l0.086-0.272-114.159 331.898 295.139 211.694 7.148 6.167c7.108 6.72 11.823 15.905 12.772 26.182l0.012 0.163c-1.204 22.063-19.388 39.497-41.643 39.497-0.078 0-0.156 0-0.234-0.001h0.012z" />
+<glyph unicode="&#xe91e;" glyph-name="thumbs-up" horiz-adv-x="910" d="M662.613 598.059c-7.552 20.181 201.344 206.72 79.531 357.888-28.501 35.328-125.227-169.259-262.528-261.845-75.776-51.2-252.075-159.872-252.075-219.989v-389.461c0-72.32 279.552-148.864 491.989-148.864 77.867 0 190.677 487.851 190.677 565.333s-240.128 76.459-247.467 96.725zM170.624 592.64c-0.681 0.010-1.486 0.016-2.292 0.016-93.126 0-168.619-75.493-168.619-168.619 0-3.187 0.088-6.354 0.263-9.498l-0.019 0.437v-275.797c-0.161-2.71-0.252-5.878-0.252-9.068 0-90.015 72.972-162.987 162.987-162.987 2.79 0 5.564 0.070 8.32 0.209l-0.387-0.016c37.376 0-56.875 32.555-56.875 128.555v362.667c0 100.565 94.251 134.187 56.875 134.187z" />
+<glyph unicode="&#xe91f;" glyph-name="time" d="M511.488 960c-282.55-0.292-511.488-229.41-511.488-512 0-282.77 229.23-512 512-512s512 229.23 512 512v0c0 0.076 0 0.166 0 0.257 0 282.628-229.116 511.744-511.744 511.744-0.27 0-0.54 0-0.81-0.001h0.042zM512 38.4c-226.216 0-409.6 183.384-409.6 409.6s183.384 409.6 409.6 409.6c226.216 0 409.6-183.384 409.6-409.6v0c0-226.216-183.384-409.6-409.6-409.6v0zM537.6 704h-76.8v-307.2l268.8-161.28 38.4 63.147-230.4 136.533z" />
+<glyph unicode="&#xe920;" glyph-name="top" d="M563.115 736.768l407.851-408.107c13.137-12.992 21.272-31.018 21.272-50.943 0-19.756-7.997-37.645-20.932-50.605l-68.138-68.138c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l-289.532 289.788-289.195-289.195c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-0.213 0.299-68.267 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l408.231 408.316c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z" />
+<glyph unicode="&#xe921;" glyph-name="trophy" horiz-adv-x="1152" d="M1104.017 831.982h-207.987v80.017c0 26.51-21.491 48.001-48.001 48.001v0h-544.040c-26.51 0-48.001-21.491-48.001-48.001v0-80.017h-207.987c-26.51 0-48.001-21.491-48.001-48.001v0-111.986c7.076-85.462 54.363-158.548 122.682-200.96l1.112-0.643c61.778-44.226 136.678-74.099 217.854-83.23l2.133-0.195c34.389-59.486 80.159-108.69 134.709-145.998l1.518-0.98v-144.002h-96.001c-3.854 0.457-8.318 0.718-12.843 0.718-62.746 0-113.776-50.163-115.172-112.574l-0.002-0.13v-24c0-13.255 10.745-24 24-24v0h592.041c13.255 0 24 10.745 24 24v0 24c-1.399 62.54-52.429 112.704-115.175 112.704-4.525 0-8.989-0.261-13.378-0.768l0.535 0.050h-96.001v144.002c56.068 38.356 101.826 87.64 135.041 145.086l1.137 2.132c83.314 9.166 158.252 38.973 221.451 84.147l-1.416-0.962c69.366 43.121 116.621 116.171 123.729 200.646l0.065 0.957v111.986c0 26.51-21.491 48.001-48.001 48.001v0zM198.627 574.41c-35.829 20.914-61.682 55.601-70.437 96.621l-0.172 0.964v32.016h128.402c1.638-61.997 10.873-121.145 26.808-177.479l-1.223 5.061c-31.815 11.002-59.407 25.499-84.329 43.47l0.951-0.653zM1024 671.995c-9.695-41.665-35.309-76.091-69.932-97.202l-0.677-0.383c-24.040-17.319-51.713-31.817-81.346-42.129l-2.271-0.688c14.711 51.273 23.946 110.421 25.564 171.467l0.020 0.952h128.594z" />
+<glyph unicode="&#xe922;" glyph-name="sort-decrease" d="M482.987 159.915h115.371c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-115.371c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM244.395 842.923c-5.317 5.071-12.534 8.192-20.48 8.192s-15.163-3.121-20.492-8.203l0.012 0.011-143.701-173.056c-5.035-5.211-8.137-12.317-8.137-20.148 0-15.764 12.572-28.592 28.237-29.003l0.038-0.001h86.357v-548.181c0-0.001 0-0.001 0-0.002 0-15.835 12.837-28.672 28.672-28.672 0.12 0 0.24 0.001 0.36 0.002h57.326c0.101-0.001 0.221-0.002 0.341-0.002 15.835 0 28.672 12.837 28.672 28.672 0 0.001 0 0.001 0 0.002v0 546.133h86.357c0.001 0 0.001 0 0.002 0 15.835 0 28.672 12.837 28.672 28.672 0 0.12-0.001 0.24-0.002 0.36v-0.018c-0.093 7.822-3.197 14.902-8.203 20.15l0.011-0.012zM482.987 620.715h345.771c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-345.771c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 390.315h230.741c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-230.741c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 851.115h461.141c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-461.141c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672z" />
+<glyph unicode="&#xe923;" glyph-name="sort-add" d="M482.987 851.115h115.371c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-115.371c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 620.715h230.741c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-230.741c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 159.915h461.141c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-461.141c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 390.315h345.771c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-345.771c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM367.957 275.285h-86.357v548.181c0 0.001 0 0.001 0 0.002 0 15.835-12.837 28.672-28.672 28.672-0.12 0-0.24-0.001-0.36-0.002h-57.326c-0.101 0.001-0.221 0.002-0.341 0.002-15.835 0-28.672-12.837-28.672-28.672 0-0.001 0-0.001 0-0.002v0-546.133h-86.357c-15.876-0.193-28.672-13.108-28.672-29.011 0-0.001 0-0.001 0-0.002v0c0-0.005 0-0.011 0-0.017 0-7.894 3.268-15.026 8.526-20.114l0.008-0.007 145.067-175.104c5.264-5.050 12.423-8.16 20.309-8.16s15.045 3.11 20.319 8.169l-0.010-0.010 144.043 173.056c5.21 5.192 8.433 12.374 8.433 20.309s-3.223 15.117-8.432 20.309l-0.001 0.001c-5.098 5.284-12.242 8.566-20.153 8.566-0.475 0-0.948-0.012-1.417-0.035l0.066 0.003z" />
+<glyph unicode="&#xe924;" glyph-name="expand" d="M769.024 444.928c-28.277 0-51.2-22.923-51.2-51.2v0-266.581c-0.191-20.659-16.888-37.355-37.528-37.547h-489.149c-20.736 0-37.547 16.81-37.547 37.547v0 489.131c0.571 20.291 17.156 36.523 37.533 36.523 0.005 0 0.010 0 0.015 0h266.581c28.277 0 51.2 22.923 51.2 51.2s-22.923 51.2-51.2 51.2v0h-266.581c-77.212-0.194-139.753-62.734-139.947-139.928v-488.126c0.194-77.212 62.734-139.753 139.928-139.947h489.15c76.772 0.771 138.733 63.091 138.923 139.928v266.599c0 0.003 0 0.007 0 0.010 0 27.917-22.343 50.615-50.122 51.189l-0.054 0.001zM969.045 876.373v0c-5.53 12.604-15.385 22.459-27.646 27.855l-0.344 0.135c-5.708 2.654-12.373 4.272-19.397 4.436l-0.059 0.001h-266.581c-28.277 0-51.2-22.923-51.2-51.2s22.923-51.2 51.2-51.2v0h143.019l-401.408-401.408c-9.335-9.225-15.116-22.028-15.116-36.181s5.781-26.956 15.111-36.176l0.005-0.005c9.263-9.252 22.054-14.974 36.181-14.974s26.918 5.722 36.182 14.974l401.407 401.407v-143.019c0-28.277 22.923-51.2 51.2-51.2s51.2 22.923 51.2 51.2v0 266.581c-0.029 6.778-1.406 13.226-3.877 19.101l0.122-0.328z" />
+<glyph unicode="&#xe925;" glyph-name="sex-female" d="M793.941 584.533c3.545 16.844 5.574 36.198 5.574 56.026 0 157.031-127.299 284.331-284.331 284.331-142.597 0-260.676-104.971-281.179-241.856l-0.192-1.562c-2.833-14.767-4.453-31.752-4.453-49.114 0-53.505 15.388-103.416 41.981-145.548l-0.664 1.126c41.637-71.349 112.064-122.023 194.943-136.296l1.665-0.237v-74.069h-149.845c-0.607 0.027-1.319 0.043-2.035 0.043-26.769 0-48.469-21.7-48.469-48.469 0-8.664 2.273-16.798 6.256-23.836l-0.126 0.241c8.178-14.971 23.811-24.956 41.777-24.956 0.673 0 1.343 0.014 2.009 0.042l-0.095-0.003h153.941v-57.344c0-32.085 0-64.512 0-96.597 0-0.060 0-0.132 0-0.203 0-13.24 5.346-25.231 13.997-33.932l-0.002 0.002c8.546-9.046 20.625-14.677 34.019-14.677 0.040 0 0.080 0 0.121 0h-0.006c0.001 0 0.003 0 0.005 0 26.529 0 48.080 21.313 48.464 47.75v0.036c0 22.869 0 45.739 0 68.267v87.381h153.259c0.924-0.164 1.987-0.258 3.072-0.258s2.148 0.094 3.182 0.274l-0.11-0.016c25.517 1.545 45.626 22.617 45.626 48.386 0 14.226-6.129 27.021-15.89 35.888l-0.040 0.036c-8.301 7.658-19.435 12.353-31.666 12.353-0.868 0-1.73-0.024-2.587-0.070l0.119 0.005c-36.523 0-72.704 0-109.227 0h-44.373v75.776c115.769 23.213 205.016 114.415 225.036 229.387l0.244 1.695zM704.171 635.733c0.001-0.273 0.002-0.597 0.002-0.92 0-51.896-21.29-98.82-55.611-132.513l-0.028-0.028c-34.195-34.070-81.368-55.135-133.461-55.135s-99.267 21.064-133.467 55.14l0.006-0.006c-34.070 34.195-55.135 81.368-55.135 133.461s21.064 99.267 55.14 133.467l-0.006-0.006c33.592 33.54 79.971 54.282 131.195 54.282 0.677 0 1.353-0.004 2.028-0.011l-0.103 0.001c0.001 0 0.002 0 0.003 0 103.888 0 188.173-83.927 188.754-187.678v-0.055z" />
+<glyph unicode="&#xe926;" glyph-name="sex-male" d="M565.248 556.885v189.781l137.899-138.24c2.383-2.598 5.074-4.855 8.030-6.731l0.162-0.096c7.571-5.13 16.909-8.19 26.961-8.19 3.507 0 6.926 0.372 10.221 1.080l-0.318-0.057c13.076 2.557 24.025 10.155 30.95 20.643l0.111 0.179c5.394 7.775 8.618 17.412 8.618 27.801 0 14.575-6.344 27.668-16.42 36.669l-0.048 0.042-219.819 219.819c-1.695 2.13-3.484 4.027-5.418 5.765l-0.043 0.038c-8.628 7.35-19.905 11.822-32.226 11.822-1.633 0-3.248-0.079-4.841-0.232l0.203 0.016c-13.699-0.917-25.744-7.317-34.079-17.002l-0.054-0.064-216.405-216.405c-3.559-3.176-6.796-6.522-9.776-10.089l-0.122-0.151c-5.953-8.072-9.528-18.216-9.528-29.195 0-14.889 6.574-28.242 16.978-37.315l0.059-0.050c8.443-7.322 19.539-11.784 31.678-11.784 1.465 0 2.915 0.065 4.347 0.192l-0.185-0.013c13.664 0.478 25.785 6.705 34.082 16.323l0.051 0.061 136.533 136.533v-190.805c-137.566-25.119-240.475-144.041-240.475-286.998 0-144.662 105.377-264.711 243.558-287.575l1.695-0.232c14.016-2.329 30.205-3.692 46.701-3.754h0.062c160.99 0 291.499 130.508 291.499 291.499 0 142.407-102.118 260.963-237.121 286.436l-1.813 0.284zM671.744 156.843l-13.312-16.725-7.509-9.216c-34.834-35.13-83.115-56.879-136.476-56.879-47.528 0-91.026 17.254-124.572 45.84l0.27-0.224c-43.547 33.976-71.285 86.461-71.285 145.424 0 21.257 3.605 41.672 10.237 60.666l-0.392-1.29c20.237 73.614 82.804 128.246 159.267 136.462l0.818 0.071h51.883c94.474-13.866 166.186-94.355 166.186-191.594 0-41.636-13.148-80.202-35.519-111.771l0.405 0.602z" />
 </font></defs></svg>
\ No newline at end of file
diff --git a/PAMapp/assets/icon/fonts/icomoon.ttf b/PAMapp/assets/icon/fonts/icomoon.ttf
index 6d32264..858ca63 100644
--- a/PAMapp/assets/icon/fonts/icomoon.ttf
+++ b/PAMapp/assets/icon/fonts/icomoon.ttf
Binary files differ
diff --git a/PAMapp/assets/icon/fonts/icomoon.woff b/PAMapp/assets/icon/fonts/icomoon.woff
index 36eacb1..687d895 100644
--- a/PAMapp/assets/icon/fonts/icomoon.woff
+++ b/PAMapp/assets/icon/fonts/icomoon.woff
Binary files differ
diff --git a/PAMapp/assets/icon/selection.json b/PAMapp/assets/icon/selection.json
index 3d2fb59..56c7e88 100644
--- a/PAMapp/assets/icon/selection.json
+++ b/PAMapp/assets/icon/selection.json
@@ -1 +1 @@
-{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M587.199 55.924l-55.924-55.924h-279.618l-55.924 55.924h-195.733v111.847h782.932v-111.847z","M33.107 870.508c1.405 85.070 70.697 153.493 155.97 153.493 0.217 0 0.434-0 0.65-0.001l-0.034 0h403.396c0.182 0.001 0.398 0.001 0.614 0.001 85.338 0 154.671-68.528 155.971-153.557l0.001-0.122v-647.895h-716.569zM144.954 332.112h493.023v538.023c-0.295 24.483-20.211 44.217-44.736 44.217-0.001 0-0.002-0-0.003-0l-403.21 0c-0.101 0.001-0.22 0.001-0.34 0.001-24.499 0-44.399-19.692-44.735-44.112l-0-0.032z","M288.939 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z","M493.993 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z"],"attrs":[{},{},{},{}],"width":783,"grid":0,"tags":["delet"],"isMulticolor":false,"isMulticolor2":false},"attrs":[{},{},{},{}],"properties":{"order":38,"id":33,"name":"delet","prevSize":32,"code":59680},"setIdx":0,"setId":0,"iconIdx":0},{"icon":{"paths":["M563.115 223.232l407.851 408.107c13.137 12.992 21.272 31.018 21.272 50.943 0 19.756-7.997 37.645-20.932 50.605l0.001-0.001-68.139 68.139c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-289.536-289.792-289.195 289.195c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-0.213-0.299-68.267-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l-0.004 0.004 408.235-408.32c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["top"]},"attrs":[{}],"properties":{"order":37,"id":32,"name":"top","prevSize":32,"code":59679},"setIdx":0,"setId":0,"iconIdx":1},{"icon":{"paths":["M384 0c-0.789-0.017-1.719-0.027-2.651-0.027-34.738 0-66.285 13.665-89.558 35.914l0.049-0.046c-22.202 23.224-35.867 54.77-35.867 89.509 0 0.932 0.010 1.862 0.029 2.789l-0.002-0.138c5.836 34.821 18.412 65.879 36.393 93.049l-0.553-0.889c2.672 8.237 4.213 17.715 4.213 27.553 0 2.918-0.136 5.803-0.401 8.652l0.027-0.365h-295.68v768h295.68c0.053-1.37 0.084-2.978 0.084-4.594 0-11.101-1.431-21.868-4.119-32.126l0.196 0.88c-17.428-26.281-30.005-57.34-35.644-90.756l-0.196-1.404c-0.017-0.789-0.027-1.719-0.027-2.651 0-34.738 13.665-66.285 35.914-89.558l-0.046 0.049c23.224-22.202 54.77-35.867 89.509-35.867 0.932 0 1.862 0.010 2.789 0.029l-0.138-0.002c0.789-0.017 1.719-0.027 2.651-0.027 34.738 0 66.285 13.665 89.558 35.914l-0.049-0.046c22.202 23.224 35.867 54.77 35.867 89.509 0 0.932-0.010 1.862-0.029 2.789l0.002-0.138c-5.836 34.821-18.412 65.879-36.393 93.049l0.553-0.889c-2.672 8.237-4.213 17.715-4.213 27.553 0 2.918 0.136 5.803 0.401 8.652l-0.027-0.365h295.68v-295.68c1.37-0.053 2.978-0.084 4.594-0.084 11.101 0 21.868 1.431 32.126 4.119l-0.88-0.196c26.281 17.428 57.34 30.005 90.756 35.644l1.404 0.196c70.692 0 128-57.308 128-128s-57.308-128-128-128v0c-34.821 5.836-65.879 18.412-93.049 36.393l0.889-0.553c-8.237 2.672-17.715 4.213-27.553 4.213-2.918 0-5.803-0.136-8.652-0.401l0.365 0.027v-295.68h-295.68c-0.053-1.37-0.084-2.978-0.084-4.594 0-11.101 1.431-21.868 4.119-32.126l-0.196 0.88c17.428-26.281 30.005-57.34 35.644-90.756l0.196-1.404c0.017-0.789 0.027-1.719 0.027-2.651 0-34.738-13.665-66.285-35.914-89.558l0.046 0.049c-23.224-22.202-54.77-35.867-89.509-35.867-0.932 0-1.862 0.010-2.789 0.029l0.138-0.002z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["puzzle"]},"attrs":[{}],"properties":{"order":35,"id":31,"name":"puzzle","prevSize":32,"code":59678},"setIdx":0,"setId":0,"iconIdx":2},{"icon":{"paths":["M563.115 854.229l407.851-408.107c13.086-12.984 21.186-30.975 21.186-50.858 0-19.714-7.963-37.568-20.848-50.521l0.003 0.003-68.139-68.139c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-289.536 289.621-289.195-289.195c-13.008-13.118-31.038-21.24-50.965-21.24-19.778 0-37.688 8.001-50.669 20.943l0.002-0.002-0.299 0.299-67.968 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l-0.004-0.004 408.235 408.32c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["down"]},"attrs":[{}],"properties":{"order":5,"id":30,"name":"down","prevSize":32,"code":59648},"setIdx":0,"setId":0,"iconIdx":3},{"icon":{"paths":["M944.305 432.195h-352.501v-352.501c-0.083-44.019-35.777-79.674-79.803-79.695l-0.002-0c-43.994 0.083-79.632 35.735-79.695 79.725l-0 0.006v352.464h-352.537c-44.055 0-79.768 35.713-79.768 79.768s35.713 79.768 79.768 79.768v0h352.501v352.574c0 44.055 35.713 79.768 79.768 79.768s79.768-35.713 79.768-79.768l-0 0v-352.574h352.501c44.055 0 79.768-35.713 79.768-79.768s-35.713-79.768-79.768-79.768l0 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["add"]},"attrs":[{}],"properties":{"order":6,"id":29,"name":"add","prevSize":32,"code":59649},"setIdx":0,"setId":0,"iconIdx":4},{"icon":{"paths":["M358.4 0c-0.076-0-0.166-0-0.256-0-197.797 0-358.144 160.347-358.144 358.144 0 0.090 0 0.18 0 0.27l-0-0.014c0 268.8 358.4 665.6 358.4 665.6s358.4-396.8 358.4-665.6c0-0.076 0-0.166 0-0.256 0-197.797-160.347-358.144-358.144-358.144-0.090 0-0.18 0-0.27 0l0.014-0zM358.4 486.4c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128h0z"],"attrs":[{}],"width":717,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["address"]},"attrs":[{}],"properties":{"order":11,"id":28,"name":"address","prevSize":32,"code":59650},"setIdx":0,"setId":0,"iconIdx":5},{"icon":{"paths":["M447.993 511.981c141.38 0 255.991-114.611 255.991-255.991s-114.611-255.991-255.991-255.991c-141.38 0-255.991 114.611-255.991 255.991v-0c0 141.38 114.611 255.991 255.991 255.991v-0zM639.585 577.164l-95.609 382.81-63.988-272.006 63.988-111.998h-191.965l63.988 111.998-63.988 272.006-95.609-382.773c-142.815 6.542-256.155 123.796-256.401 267.577l-0 0.024v179.197h895.986v-179.197c-0.246-143.806-113.586-261.059-255.814-267.58l-0.587-0.021z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["agent"]},"attrs":[{}],"properties":{"order":13,"id":27,"name":"agent","prevSize":32,"code":59651},"setIdx":0,"setId":0,"iconIdx":6},{"icon":{"paths":["M889.022 7.054l-831.526 383.772c-34.358 15.411-57.857 49.317-57.857 88.711 0 53.291 43.002 96.539 96.2 96.936l0.038 0h351.649v351.801c0.219 53.372 43.536 96.553 96.938 96.553 39.559 0 73.583-23.696 88.654-57.668l0.245-0.618 383.621-831.564c3.826-10.169 6.041-21.922 6.041-34.192 0-55.109-44.674-99.783-99.783-99.783-12.281 0-24.044 2.219-34.909 6.277l0.689-0.226z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["arrow"]},"attrs":[{}],"properties":{"order":14,"id":26,"name":"arrow","prevSize":32,"code":59652},"setIdx":0,"setId":0,"iconIdx":7},{"icon":{"paths":["M448.963 503.181c138.95 0 251.59-112.641 251.59-251.59s-112.641-251.59-251.59-251.59v-0c-138.95 0-251.59 112.641-251.59 251.59s112.641 251.59 251.59 251.59v0zM448.963 119.488v0c72.958-0 132.103 59.144 132.103 132.103s-59.144 132.103-132.103 132.103c-72.958 0-132.103-59.144-132.103-132.103 0-0.013 0-0.026 0-0.039l-0 0.002c-0-72.938 59.128-132.065 132.065-132.065 0.013 0 0.026 0 0.039 0l-0.002-0z","M448.963 566.069c-167.938 0-448.963 50.013-448.963 217.355v240.576h893.721v-240.576c0-167.305-276.82-217.355-444.758-217.355zM774.233 904.475h-654.931v-121.051c0-40.263 142.671-97.83 329.475-97.83v0c186.804 0 325.27 57.567 325.27 97.83z"],"attrs":[{},{}],"width":894,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["avatar"]},"attrs":[{},{}],"properties":{"order":15,"id":25,"name":"avatar","prevSize":32,"code":59653},"setIdx":0,"setId":0,"iconIdx":8},{"icon":{"paths":["M908.486 692.817c-1.1-0.834-112.139-84.872-112.139-362.886 0-182.216-147.715-329.931-329.931-329.931s-329.931 147.715-329.931 329.931v0c0 278.014-111.039 362.052-111.191 362.242-15.359 10.347-25.326 27.674-25.326 47.328 0 31.414 25.465 56.881 56.878 56.885l819.14 0c25.031-0.194 46.179-16.601 53.474-39.229l0.112-0.401c1.696-5.184 2.675-11.15 2.675-17.344 0-19.089-9.291-36.008-23.598-46.482l-0.162-0.113zM174.901 682.616c47.923-94.131 76-205.282 76-322.99 0-10.443-0.221-20.835-0.659-31.17l0.050 1.475c0-119.383 96.779-216.162 216.162-216.162s216.162 96.779 216.162 216.162l0 0c-0.387 8.856-0.608 19.244-0.608 29.684 0 117.708 28.062 228.862 77.862 327.136l-1.9-4.135z","M573.853 872.459c-8.181-4.825-18.026-7.675-28.536-7.675-20.904 0-39.175 11.276-49.061 28.077l-0.145 0.266c-6.013 10.266-16.989 17.051-29.55 17.051-6.311 0-12.222-1.713-17.293-4.699l0.16 0.087c-5.181-3.025-9.376-7.22-12.314-12.241l-0.086-0.16c-10.022-17.142-28.338-28.474-49.3-28.474-31.434 0-56.916 25.482-56.916 56.916 0 10.472 2.828 20.283 7.762 28.711l-0.145-0.269c26.074 44.41 73.596 73.753 127.972 73.753s101.897-29.344 127.594-73.059l0.377-0.694c4.808-8.17 7.648-17.998 7.648-28.489 0-20.831-11.197-39.047-27.901-48.958l-0.263-0.144z"],"attrs":[{},{}],"width":932,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bell"]},"attrs":[{},{}],"properties":{"order":16,"id":24,"name":"bell","prevSize":32,"code":59654},"setIdx":0,"setId":0,"iconIdx":9},{"icon":{"paths":["M307.2 460.8h-102.4v102.4h102.4zM512 460.8h-102.4v102.4h102.4zM716.8 460.8h-102.4v102.4h102.4zM819.2 102.4h-51.2v-102.4h-102.4v102.4h-409.6v-102.4h-102.4v102.4h-51.2c-56.277 0.024-101.889 45.651-101.889 101.931 0 0.165 0 0.33 0.001 0.495l-0-0.025-0.512 716.8c0 56.554 45.846 102.4 102.4 102.4v0h716.8c56.486-0.169 102.231-45.914 102.4-102.384l0-0.016v-716.8c-0.169-56.486-45.914-102.231-102.384-102.4l-0.016-0zM819.2 921.6h-716.8v-563.2h716.8z"],"attrs":[{}],"width":922,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["calender"]},"attrs":[{}],"properties":{"order":17,"id":23,"name":"calender","prevSize":32,"code":59655},"setIdx":0,"setId":0,"iconIdx":10},{"icon":{"paths":["M910.222 113.778v796.444h-796.444v-796.444h796.444zM910.222 0h-796.444c-62.76 0.193-113.584 51.018-113.778 113.759l-0 0.019v796.444c0.193 62.76 51.018 113.584 113.759 113.778l0.019 0h796.444c62.76-0.193 113.584-51.018 113.778-113.759l0-0.019v-796.444c-0.193-62.76-51.018-113.584-113.759-113.778l-0.019-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["checkbox"]},"attrs":[{}],"properties":{"order":18,"id":22,"name":"checkbox","prevSize":32,"code":59656},"setIdx":0,"setId":0,"iconIdx":11},{"icon":{"paths":["M910.222 0h-796.444c-62.838 0-113.778 50.94-113.778 113.778v0 796.444c0 62.838 50.94 113.778 113.778 113.778v0h796.444c62.838 0 113.778-50.94 113.778-113.778v0-796.444c0-62.838-50.94-113.778-113.778-113.778v0zM398.222 796.444l-284.444-284.444 80.213-80.213 204.231 203.662 431.787-431.787 80.213 80.782z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["checkbox-1"]},"attrs":[{}],"properties":{"order":19,"id":21,"name":"checkbox-1","prevSize":32,"code":59657},"setIdx":0,"setId":0,"iconIdx":12},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512h-0zM276.821 547.072l279.723 279.723c8.937 8.992 21.312 14.557 34.987 14.557s26.050-5.565 34.984-14.554l0.002-0.002 35.115-35.115c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-209.749-209.749 209.749-209.749c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-35.115-35.115c-8.937-8.992-21.312-14.557-34.987-14.557s-26.050 5.565-34.984 14.554l-0.002 0.002-279.723 279.765c-8.993 8.976-14.557 21.385-14.557 35.093s5.564 26.118 14.556 35.093l0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle-left"]},"attrs":[{}],"properties":{"order":20,"id":20,"name":"circle-left","prevSize":32,"code":59658},"setIdx":0,"setId":0,"iconIdx":13},{"icon":{"paths":["M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512v0c0 282.77 229.23 512 512 512v0zM747.136 547.115l-279.723 279.723c-8.937 8.992-21.312 14.557-34.987 14.557s-26.050-5.565-34.984-14.554l-0.002-0.002-35.115-35.115c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 209.749-209.749-209.792-209.792c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 35.115-35.115c8.937-8.992 21.312-14.557 34.987-14.557s26.050 5.565 34.984 14.554l0.002 0.002 279.723 279.723c9.019 8.98 14.6 21.406 14.6 35.136 0 13.709-5.564 26.118-14.556 35.093l-0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle-right"]},"attrs":[{}],"properties":{"order":21,"id":19,"name":"circle-right","prevSize":32,"code":59659},"setIdx":0,"setId":0,"iconIdx":14},{"icon":{"paths":["M843.123 30.996l-331.098 331.098-331.098-331.098c-19.185-19.146-45.668-30.985-74.916-30.985s-55.731 11.839-74.918 30.987l0.002-0.002c-19.117 19.18-30.937 45.643-30.937 74.868s11.82 55.687 30.94 74.87l-0.003-0.003 331.050 331.098-331.050 331.244c-19.191 19.173-31.063 45.67-31.063 74.94 0 58.504 47.427 105.93 105.93 105.93 29.234 0 55.702-11.842 74.868-30.991l-0.001 0.001 331.098-331.098 331.196 331.147c19.046 18.46 45.049 29.839 73.71 29.839 58.521 0 105.961-47.44 105.961-105.961 0-28.661-11.379-54.663-29.865-73.737l0.027 0.028-331.196-331.196 331.098-331.098c18.46-19.046 29.839-45.049 29.839-73.71 0-58.521-47.44-105.961-105.961-105.961-28.661 0-54.663 11.379-73.737 29.865l0.028-0.027z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["close"]},"attrs":[{}],"properties":{"order":22,"id":18,"name":"close","prevSize":32,"code":59660},"setIdx":0,"setId":0,"iconIdx":15},{"icon":{"paths":["M895.851 0h-767.872c-70.681 0-127.979 57.298-127.979 127.979v0 575.904c0 70.681 57.298 127.979 127.979 127.979v0h191.968v167.993c-0 0.025-0 0.056-0 0.086 0 13.288 10.772 24.060 24.060 24.060 5.399 0 10.382-1.778 14.397-4.781l-0.063 0.045 249.558-187.403h287.952c70.681 0 127.979-57.298 127.979-127.979v0-575.904c0-70.681-57.298-127.979-127.979-127.979l0 0zM604.699 575.904h-371.821v-127.979h371.821zM791.42 296.697h-558.84v-127.979h558.84z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["comment"]},"attrs":[{}],"properties":{"order":23,"id":17,"name":"comment","prevSize":32,"code":59661},"setIdx":0,"setId":0,"iconIdx":16},{"icon":{"paths":["M646.741 485.035v-323.371l-161.707-161.664-161.664 161.664v107.819h-323.371v754.517h970.112v-538.965zM215.595 916.224h-107.819v-107.819h107.819zM215.595 700.629h-107.819v-107.776h107.819zM215.595 485.035h-107.819v-107.776h107.819zM538.965 916.181h-107.819v-107.776h107.776zM538.965 700.587h-107.819v-107.733h107.776zM538.965 484.992h-107.819v-107.733h107.776zM538.965 269.397h-107.819v-107.733h107.776zM862.336 916.139h-107.819v-107.733h107.776zM862.336 700.544h-107.819v-107.691h107.776z"],"attrs":[{}],"width":970,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["company"]},"attrs":[{}],"properties":{"order":7,"id":16,"name":"company","prevSize":32,"code":59662},"setIdx":0,"setId":0,"iconIdx":17},{"icon":{"paths":["M864 0c88.366 0 160 71.634 160 160 0 36.2-12.022 69.593-32.292 96.402l0.292-0.402-64 64-224-224 64-64c26.324-19.976 59.637-32 95.758-32 0.085 0 0.17 0 0.255 0l-0.013-0zM64 736l-64 288 288-64 592.171-592-224.171-224.128zM715.563 363.563l-448 448-55.168-55.125 448-448z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["edit"]},"attrs":[{}],"properties":{"order":8,"id":14,"name":"edit","prevSize":32,"code":59663},"setIdx":0,"setId":0,"iconIdx":18},{"icon":{"paths":["M1343.806 478.457c-9.762-19.575-244.11-478.457-667.948-478.457s-658.136 458.883-667.948 478.457c-4.994 9.78-7.92 21.332-7.92 33.568s2.926 23.787 8.117 33.994l-0.197-0.427c10.013 19.575 244.11 478.407 667.948 478.407s658.186-458.832 667.948-478.407c4.994-9.78 7.92-21.332 7.92-33.568s-2.926-23.787-8.117-33.994l0.197 0.427zM675.858 873.96c-272.446 0-457.030-266.138-514.553-361.809 57.523-95.671 242.107-361.809 514.553-361.809s457.13 266.288 514.553 361.809c-57.523 95.521-242.157 361.659-514.553 361.659z","M675.858 211.619c-165.896 0-300.381 134.485-300.381 300.381s134.485 300.381 300.381 300.381c165.896 0 300.381-134.485 300.381-300.381v0c-0.199-165.816-134.565-300.182-300.362-300.381l-0.020-0zM675.858 662.191c-82.948 0-150.191-67.243-150.191-150.191s67.243-150.191 150.191-150.191c82.948 0 150.191 67.243 150.191 150.191v0c0 82.948-67.243 150.191-150.191 150.191v0z"],"attrs":[{},{}],"width":1352,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eye"]},"attrs":[{},{}],"properties":{"order":34,"id":13,"name":"eye","prevSize":32,"code":59664},"setIdx":0,"setId":0,"iconIdx":19},{"icon":{"paths":["M1123.235 921.346l-217.634-208.847c5.132 1.805 11.050 2.848 17.211 2.848 15.851 0 30.089-6.902 39.875-17.864l0.046-0.052c37.481-38.161 71.036-80.412 99.866-125.951l1.835-3.103c5.666-8.976 9.029-19.899 9.029-31.606 0-11.056-2.999-21.412-8.227-30.299l0.153 0.28c-7.952-13.359-194.813-327.802-528.499-327.802h-1.312c-35.996 0.005-71.127 3.696-105.040 10.716l3.34-0.578c-18.092 3.787-32.895 15.391-40.954 31.036l-0.156 0.333-212.306-203.798c-10.7-10.287-25.264-16.622-41.308-16.622-32.938 0-59.64 26.702-59.64 59.64 0 16.894 7.024 32.148 18.312 42.999l0.020 0.019 162.768 156.208c-5.287 1.648-9.884 3.809-14.111 6.501l0.235-0.14c-95.97 62.868-175.328 142.911-235.543 236.445l-1.89 3.135c-5.835 9.056-9.303 20.115-9.303 31.985 0 11.035 2.997 21.371 8.222 30.236l-0.152-0.279c7.952 13.359 194.813 327.802 529.175 327.802 107.604-0.9 207.542-32.95 291.456-87.555l-2.1 1.281c1.312-0.835 2.385-1.908 3.618-2.863l210.398 201.929c10.7 10.287 25.264 16.622 41.308 16.622 32.938 0 59.64-26.702 59.64-59.64 0-16.894-7.024-32.148-18.312-42.999l-0.020-0.019zM536.729 298.223c210.716 0 354.679 168.573 405.529 238.546-20.464 28.603-41.631 53.756-64.584 77.15l0.097-0.1c-10.193 10.583-16.471 24.997-16.471 40.878 0 6.315 0.993 12.399 2.831 18.103l-0.116-0.417-385.213-369.747c17.213-2.809 37.053-4.414 57.267-4.414 0.232 0 0.464 0 0.696 0.001l-0.036-0zM480.591 505.758c6.937-5.309 12.58-11.943 16.621-19.556l0.156-0.323 89.972 86.354c-14.804 12.070-33.904 19.382-54.711 19.382-7.266 0-14.323-0.892-21.069-2.571l0.598 0.126c-21.583-3.776-39.081-18.284-47.003-37.713l-0.149-0.414c-0.942-3.344-1.484-7.185-1.484-11.153 0-13.911 6.658-26.266 16.961-34.054l0.107-0.078zM536.729 775.315c-210.716 0-354.4-168.215-405.211-238.546 49.32-68.027 109.037-125.034 177.432-169.904l2.551-1.571c11.947-7.883 20.761-19.68 24.668-33.535l0.101-0.418 78.482 75.301c-2.135 1.142-3.89 2.209-5.584 3.359l0.217-0.139c-39.593 30.204-64.883 77.409-64.883 130.521 0 16.497 2.44 32.424 6.979 47.441l-0.301-1.159c21.213 61.143 72.589 106.713 135.851 119.32l1.154 0.192c13.578 3.209 29.168 5.048 45.187 5.048 51.658 0 98.848-19.131 134.872-50.694l-0.235 0.202c1.923-1.788 3.692-3.67 5.327-5.665l0.080-0.1 67.389 64.686c-58.645 34.055-128.851 54.577-203.762 55.657l-0.314 0.004z"],"attrs":[{}],"width":1142,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eye-1"]},"attrs":[{}],"properties":{"order":24,"id":12,"name":"eye-1","prevSize":32,"code":59665},"setIdx":0,"setId":0,"iconIdx":20},{"icon":{"paths":["M470.315 379.861v136.192c52.181 11.819 98.603 31.189 147.2 44.587v-136.405c-52.011-11.605-98.773-30.976-147.2-44.416zM916.907 133.888c-67.939 35.792-147.729 58.874-232.376 63.923l-1.608 0.077c-107.008-0.213-195.584-69.76-330.368-69.76-0.457-0.002-0.998-0.003-1.539-0.003-48.265 0-94.476 8.794-137.118 24.867l2.678-0.885c4.705-11.905 7.433-25.695 7.433-40.122 0-61.856-50.144-112-112-112s-112 50.144-112 112c0 37.882 18.807 71.371 47.593 91.64l0.355 0.237v772.267c-0 0.038-0 0.083-0 0.128 0 26.439 21.433 47.872 47.872 47.872 0.045 0 0.090-0 0.135-0l-0.007 0h32c0.038 0 0.083 0 0.128 0 26.439 0 47.872-21.433 47.872-47.872 0-0.045-0-0.090-0-0.135l0 0.007v-188.928c64.268-28.012 139.144-44.31 217.827-44.31 3.851 0 7.693 0.039 11.525 0.117l-0.573-0.009c107.179 0 195.584 69.589 330.368 69.589 92.324-0.765 177.356-31.352 246.099-82.581l-1.107 0.789c16.771-11.705 27.605-30.909 27.605-52.644 0-0.047-0-0.094-0-0.141l0 0.007v-486.144c-0.078-35.287-28.702-63.863-64-63.863-9.72 0-18.935 2.167-27.186 6.044l0.391-0.165zM323.157 651.008c-54.473 5.68-104.346 17.389-151.58 34.589l4.38-1.394v-140.8c42.966-16.959 92.83-29.258 144.754-34.612l2.446-0.204zM911.957 382.208c-42.344 20.263-91.614 36.787-143.125 47.106l-4.075 0.681v141.867c55.26-7.286 105.051-25.69 148.773-52.924l-1.573 0.913v140.8c-41.573 28.653-91.64 48.031-145.739 54.055l-1.461 0.132v-142.976c-14.605 2.234-31.455 3.51-48.603 3.51-35.177 0-69.1-5.37-100.994-15.334l2.396 0.645v134.912c-39.685-15.094-88.92-29.775-139.395-41.183l-7.805-1.483v-136.875c-28.906-6.694-62.098-10.532-96.186-10.532-17.976 0-35.702 1.067-53.12 3.141l2.106-0.204v-140.032c-55.565 9.583-104.997 24.104-151.88 43.532l4.68-1.718v-140.8c42.614-19.83 92.097-35.166 143.91-43.55l3.29-0.439v142.976c14.417-2.165 31.054-3.401 47.98-3.401 35.4 0 69.537 5.408 101.63 15.442l-2.41-0.649v-134.741c39.858 15.224 89.098 29.908 139.605 41.235l7.595 1.431v136.704c26.239 6.45 56.363 10.149 87.35 10.149 21.13 0 41.859-1.72 62.054-5.028l-2.204 0.298v-143.872c55.763-10.757 105.071-26.328 151.746-46.79l-4.546 1.777z"],"attrs":[{}],"width":1008,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["flag"]},"attrs":[{}],"properties":{"order":25,"id":11,"name":"flag","prevSize":32,"code":59666},"setIdx":0,"setId":0,"iconIdx":21},{"icon":{"paths":["M460.771 358.396h102.293v-102.251h-102.293zM511.917 921.749c-0.012 0-0.027 0-0.041 0-226.23 0-409.625-183.395-409.625-409.625s183.395-409.625 409.625-409.625c226.215 0 409.601 183.372 409.625 409.581l0 0.002c0 226.23-183.395 409.625-409.625 409.625v0zM511.876-0.207c-282.717 0.071-511.876 229.274-511.876 512 0 282.77 229.23 512 512 512 282.697 0 511.882-229.113 512-511.782l0-0.011c0-282.77-229.23-512-512-512v0zM460.854 768.021h102.21v-307.25h-102.21z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["information"]},"attrs":[{}],"properties":{"order":26,"id":10,"name":"information","prevSize":32,"code":59667},"setIdx":0,"setId":0,"iconIdx":22},{"icon":{"paths":["M22.52 566.594l435.159 434.886c13.85 13.942 33.032 22.572 54.23 22.572s40.38-8.63 54.226-22.567l0.004-0.004 72.291-72.291c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-308.501-308.41 308.365-308.365c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-71.973-72.792c-13.85-13.942-33.032-22.572-54.23-22.572s-40.38 8.63-54.226 22.567l-0.004 0.004-435.023 434.932c-14.154 13.904-22.927 33.246-22.927 54.637 0 21.234 8.643 40.449 22.604 54.319l0.004 0.004z"],"attrs":[{}],"width":661,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["left"]},"attrs":[{}],"properties":{"order":27,"id":9,"name":"left","prevSize":32,"code":59668},"setIdx":0,"setId":0,"iconIdx":23},{"icon":{"paths":["M558.549 0.469l-465.451-0.469c-51.358 0.145-92.954 41.74-93.099 93.085l-0 0.014v837.803c0.145 51.358 41.74 92.954 93.085 93.099l0.014 0h465.451c51.358-0.145 92.954-41.74 93.099-93.085l0-0.014v-837.803c-0.194-51.199-41.744-92.629-92.97-92.629-0.045 0-0.090 0-0.136 0l0.007-0zM558.549 837.803h-465.451v-651.605h465.451z"],"attrs":[{}],"width":652,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["phone"]},"attrs":[{}],"properties":{"order":28,"id":8,"name":"phone","prevSize":32,"code":59669},"setIdx":0,"setId":0,"iconIdx":24},{"icon":{"paths":["M638.368 566.619l-435.042 434.86c-13.855 13.932-33.037 22.554-54.232 22.554s-40.377-8.622-54.229-22.55l-0.003-0.003-72.295-72.295c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 308.378-308.378-308.378-308.378c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 71.976-72.795c13.855-13.932 33.037-22.554 54.232-22.554s40.377 8.622 54.229 22.55l0.003 0.003 435.042 434.723c14.1 13.896 22.836 33.203 22.836 54.549 0 21.189-8.607 40.368-22.515 54.232l-0.002 0.002z"],"attrs":[{}],"width":661,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["right"]},"attrs":[{}],"properties":{"order":29,"id":7,"name":"right","prevSize":32,"code":59670},"setIdx":0,"setId":0,"iconIdx":25},{"icon":{"paths":["M227.579 579.116v227.579l398.211 217.305 398.211-217.305v-227.579l-398.211 217.358zM625.789-0l-625.789 341.316 625.789 341.316 512-279.311v393.1h113.789v-455.105z"],"attrs":[{}],"width":1252,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["school"]},"attrs":[{}],"properties":{"order":30,"id":6,"name":"school","prevSize":32,"code":59671},"setIdx":0,"setId":0,"iconIdx":26},{"icon":{"paths":["M1009.922 885.314l-199.391-199.391c-8.672-8.647-20.639-13.993-33.854-13.993-0.096 0-0.192 0-0.288 0.001l0.015-0h-32.592c54.858-69.783 87.982-158.908 87.982-255.769 0-229.618-186.142-415.76-415.76-415.76s-415.76 186.142-415.76 415.76c0 229.618 186.142 415.76 415.76 415.76 96.861 0 185.986-33.123 256.666-88.661l-0.897 0.679v32.464c-0 0.081-0.001 0.177-0.001 0.273 0 13.216 5.346 25.182 13.994 33.855l-0.001-0.001 199.391 199.391c8.657 8.711 20.645 14.103 33.893 14.103s25.236-5.392 33.891-14.1l0.002-0.002 56.609-56.609c8.774-8.732 14.204-20.817 14.204-34.171 0-13.184-5.292-25.131-13.869-33.834l0.006 0.006zM415.973 672.016c-141.361 0-255.957-114.596-255.957-255.957s114.596-255.957 255.957-255.957c141.361 0 255.957 114.596 255.957 255.957v0c-0.049 141.325-114.626 255.872-255.957 255.872l-0-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["search"]},"attrs":[{}],"properties":{"order":31,"id":5,"name":"search","prevSize":32,"code":59672},"setIdx":0,"setId":0,"iconIdx":27},{"icon":{"paths":["M1060.923 354.485h-362.082l-110.034-328.386c-5.769-15.366-20.337-26.102-37.413-26.102s-31.644 10.737-37.322 25.828l-0.091 0.275-110.034 328.386h-364.574c-21.717 0.069-39.304 17.656-39.374 39.367l-0 0.007c-0 0.051-0.001 0.111-0.001 0.172 0 2.3 0.268 4.537 0.775 6.682l-0.039-0.196c1.082 11.588 7.245 21.545 16.211 27.732l0.127 0.083 297.753 209.856-114.363 332.062c-1.356 3.823-2.14 8.232-2.14 12.824 0 12.816 6.104 24.206 15.563 31.422l0.096 0.070c5.913 5.322 13.556 8.829 21.991 9.588l0.147 0.011c9.263-0.701 17.658-3.918 24.649-8.961l-0.142 0.098 290.483-207.038 290.483 207.038c6.807 5.047 15.229 8.284 24.374 8.857l0.132 0.007c8.688-0.56 16.438-4.176 22.272-9.773l-0.012 0.012c9.602-7.187 15.75-18.533 15.75-31.315 0-4.66-0.817-9.13-2.316-13.273l0.086 0.272-114.159-331.898 295.139-211.694 7.148-6.167c7.108-6.72 11.823-15.905 12.772-26.182l0.012-0.163c-1.204-22.063-19.388-39.497-41.643-39.497-0.078 0-0.156 0-0.234 0.001l0.012-0z"],"attrs":[{}],"width":1103,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["star"]},"attrs":[{}],"properties":{"order":32,"id":4,"name":"star","prevSize":32,"code":59673},"setIdx":0,"setId":0,"iconIdx":28},{"icon":{"paths":["M264.124 1024l-3.988-0.315c-45.874-4.728-81.349-43.172-81.349-89.9 0-9.949 1.608-19.523 4.579-28.476l-0.183 0.638 89.58-260.661-235.092-165.554c-19.618-13.599-33.145-34.797-36.332-59.244l-0.046-0.43c-0.823-4.244-1.294-9.125-1.294-14.115 0-0.018 0-0.036 0-0.054l-0 0.003c0.197-48.36 39.308-87.52 87.63-87.796l0.026-0h289.553l86.747-258.842c12.356-34.779 44.982-59.235 83.32-59.235 37.789 0 70.029 23.761 82.593 57.157l0.201 0.608 87.272 260.311h287.525c0.011-0 0.025-0 0.038-0 47.863 0 86.99 37.407 89.741 84.58l0.011 0.243v3.848l-0.315 3.883c-2.124 22.565-12.304 42.418-27.594 56.944l-0.039 0.036-11.963 10.074-233.098 167.233 89.755 261.011c3.161 8.633 4.99 18.602 4.99 28.997 0 27.516-12.812 52.041-32.795 67.933l-0.177 0.136c-13.364 11.803-30.658 19.438-49.692 20.728l-0.258 0.014-3.183 0.21-3.148-0.175c-18.973-1.079-36.226-7.647-50.416-18.125l0.256 0.181-229.565-163.77-230.369 164.12c-13.682 9.851-30.475 16.214-48.672 17.473l-0.298 0.017zM812.414 940.051v0.28zM282.243 939.876v0zM838.403 920.498v0zM139.39 423.032l258.003 181.889-97.94 285.006 247.929-176.642 247.649 176.502-97.94-284.586 254.015-182.169h-309.246l-94.442-282.243-94.722 282.243zM1004.972 423.032v0zM97.346 393.405l0.56 0.42z"],"attrs":[{}],"width":1095,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["star-1"]},"attrs":[{}],"properties":{"order":33,"id":3,"name":"star-1","prevSize":32,"code":59674},"setIdx":0,"setId":0,"iconIdx":29},{"icon":{"paths":["M662.613 361.941c-7.552-20.181 201.344-206.72 79.531-357.888-28.501-35.328-125.227 169.259-262.528 261.845-75.776 51.2-252.075 159.872-252.075 219.989v389.461c0 72.32 279.552 148.864 491.989 148.864 77.867 0 190.677-487.851 190.677-565.333s-240.128-76.459-247.467-96.725zM170.624 367.36c-0.681-0.010-1.486-0.016-2.292-0.016-93.126 0-168.619 75.493-168.619 168.619 0 3.187 0.088 6.354 0.263 9.498l-0.019-0.437v275.797c-0.161 2.71-0.252 5.878-0.252 9.068 0 90.015 72.972 162.987 162.987 162.987 2.79 0 5.564-0.070 8.32-0.209l-0.387 0.016c37.376 0-56.875-32.555-56.875-128.555v-362.667c0-100.565 94.251-134.187 56.875-134.187z"],"attrs":[{}],"width":910,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["thumbs-up"]},"attrs":[{}],"properties":{"order":12,"id":2,"name":"thumbs-up","prevSize":32,"code":59675},"setIdx":0,"setId":0,"iconIdx":30},{"icon":{"paths":["M511.488 0c-282.55 0.292-511.488 229.41-511.488 512 0 282.77 229.23 512 512 512s512-229.23 512-512l-0 0c0-0.076 0-0.166 0-0.257 0-282.628-229.116-511.744-511.744-511.744-0.27 0-0.54 0-0.81 0.001l0.042-0zM512 921.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM537.6 256h-76.8v307.2l268.8 161.28 38.4-63.147-230.4-136.533z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["time"]},"attrs":[{}],"properties":{"order":9,"id":1,"name":"time","prevSize":32,"code":59676},"setIdx":0,"setId":0,"iconIdx":31},{"icon":{"paths":["M1104.017 128.018h-207.987v-80.017c0-26.51-21.491-48.001-48.001-48.001v0h-544.040c-26.51 0-48.001 21.491-48.001 48.001v0 80.017h-207.987c-26.51 0-48.001 21.491-48.001 48.001v0 111.986c7.076 85.462 54.363 158.548 122.682 200.96l1.112 0.643c61.778 44.226 136.678 74.099 217.854 83.23l2.133 0.195c34.389 59.486 80.159 108.69 134.709 145.998l1.518 0.98v144.002h-96.001c-3.854-0.457-8.318-0.718-12.843-0.718-62.746 0-113.776 50.163-115.172 112.574l-0.002 0.13v24c0 13.255 10.745 24 24 24v0h592.041c13.255 0 24-10.745 24-24v0-24c-1.399-62.54-52.429-112.704-115.175-112.704-4.525 0-8.989 0.261-13.378 0.768l0.535-0.050h-96.001v-144.002c56.068-38.356 101.826-87.64 135.041-145.086l1.137-2.132c83.314-9.166 158.252-38.973 221.451-84.147l-1.416 0.962c69.366-43.121 116.621-116.171 123.729-200.646l0.065-0.957v-111.986c0-26.51-21.491-48.001-48.001-48.001v0zM198.627 385.59c-35.829-20.914-61.682-55.601-70.437-96.621l-0.172-0.964v-32.016h128.402c1.638 61.997 10.873 121.145 26.808 177.479l-1.223-5.061c-31.815-11.002-59.407-25.499-84.329-43.47l0.951 0.653zM1024 288.005c-9.695 41.665-35.309 76.091-69.932 97.202l-0.677 0.383c-24.040 17.319-51.713 31.817-81.346 42.129l-2.271 0.688c14.711-51.273 23.946-110.421 25.564-171.467l0.020-0.952h128.594z"],"attrs":[{}],"width":1152,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["trophy"]},"attrs":[{}],"properties":{"order":10,"id":0,"name":"trophy","prevSize":32,"code":59677},"setIdx":0,"setId":0,"iconIdx":32}],"height":1024,"metadata":{"name":"icomoon"},"preferences":{"showGlyphs":true,"showCodes":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"icomoon","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"name":"icomoon","classSelector":".icon"},"historySize":50,"gridSize":16}}
\ No newline at end of file
+{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M482.987 800.085h115.371c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-115.371c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M244.395 117.077c-5.317-5.071-12.534-8.192-20.48-8.192s-15.163 3.121-20.492 8.203l0.012-0.011-143.701 173.056c-5.035 5.211-8.137 12.317-8.137 20.148 0 15.764 12.572 28.592 28.237 29.003l0.038 0.001h86.357v548.181c-0 0.001-0 0.001-0 0.002 0 15.835 12.837 28.672 28.672 28.672 0.12 0 0.24-0.001 0.36-0.002l-0.018 0h57.344c0.101 0.001 0.221 0.002 0.341 0.002 15.835 0 28.672-12.837 28.672-28.672 0-0.001-0-0.001-0-0.002l0 0v-546.133h86.357c0.001 0 0.001 0 0.002 0 15.835 0 28.672-12.837 28.672-28.672 0-0.12-0.001-0.24-0.002-0.36l0 0.018c-0.093-7.822-3.197-14.902-8.203-20.15l0.011 0.012z","M482.987 339.285h345.771c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-345.771c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 569.685h230.741c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-230.741c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 108.885h461.141c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-461.141c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z"],"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort-decrease"]},"attrs":[{},{},{},{},{}],"properties":{"order":2,"id":38,"name":"sort-decrease","prevSize":32,"code":59682},"setIdx":0,"setId":2,"iconIdx":0},{"icon":{"paths":["M482.987 108.885h115.371c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-115.371c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 339.285h230.741c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-230.741c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 800.085h461.141c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-461.141c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 569.685h345.771c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-345.771c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M367.957 684.715h-86.357v-548.181c0-0.001 0-0.001 0-0.002 0-15.835-12.837-28.672-28.672-28.672-0.12 0-0.24 0.001-0.36 0.002l0.018-0h-57.344c-0.101-0.001-0.221-0.002-0.341-0.002-15.835 0-28.672 12.837-28.672 28.672 0 0.001 0 0.001 0 0.002l-0-0v546.133h-86.357c-15.876 0.193-28.672 13.108-28.672 29.011 0 0.001 0 0.001 0 0.002l-0-0c-0 0.005-0 0.011-0 0.017 0 7.894 3.268 15.026 8.526 20.114l0.008 0.007 145.067 175.104c5.264 5.050 12.423 8.16 20.309 8.16s15.045-3.11 20.319-8.169l-0.010 0.010 144.043-173.056c5.21-5.192 8.433-12.374 8.433-20.309s-3.223-15.117-8.432-20.309l-0.001-0.001c-5.098-5.284-12.242-8.566-20.153-8.566-0.475 0-0.948 0.012-1.417 0.035l0.066-0.003z"],"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort-add"]},"attrs":[{},{},{},{},{}],"properties":{"order":3,"id":37,"name":"sort-add","prevSize":32,"code":59683},"setIdx":0,"setId":2,"iconIdx":1},{"icon":{"paths":["M769.024 515.072c-28.277 0-51.2 22.923-51.2 51.2v0 266.581c-0.191 20.659-16.888 37.355-37.528 37.547l-0.018 0h-489.131c-20.736 0-37.547-16.81-37.547-37.547v0-489.131c0.571-20.291 17.156-36.523 37.533-36.523 0.005 0 0.010 0 0.015 0l266.581-0c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-266.581c-77.212 0.194-139.753 62.734-139.947 139.928l-0 0.019v488.107c0.194 77.212 62.734 139.753 139.928 139.947l0.019 0h489.131c76.772-0.771 138.733-63.091 138.923-139.928l0-0.018v-266.581c0-0.003 0-0.007 0-0.010 0-27.917-22.343-50.615-50.122-51.189l-0.054-0.001z","M969.045 83.627v0c-5.53-12.604-15.385-22.459-27.646-27.855l-0.344-0.135c-5.708-2.654-12.373-4.272-19.397-4.436l-0.059-0.001h-266.581c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h143.019l-401.408 401.408c-9.335 9.225-15.116 22.028-15.116 36.181s5.781 26.956 15.111 36.176l0.005 0.005c9.263 9.252 22.054 14.974 36.181 14.974s26.918-5.722 36.182-14.974l-0.001 0.001 401.408-401.408v143.019c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-266.581c-0.029-6.778-1.406-13.226-3.877-19.101l0.122 0.328z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["expand"]},"attrs":[{},{}],"properties":{"order":4,"id":36,"name":"expand","prevSize":32,"code":59684},"setIdx":0,"setId":2,"iconIdx":2},{"icon":{"paths":["M793.941 375.467c3.545-16.844 5.574-36.198 5.574-56.026 0-157.031-127.299-284.331-284.331-284.331-142.597 0-260.676 104.971-281.179 241.856l-0.192 1.562c-2.833 14.767-4.453 31.752-4.453 49.114 0 53.505 15.388 103.416 41.981 145.548l-0.664-1.126c41.637 71.349 112.064 122.023 194.943 136.296l1.665 0.237v74.069h-149.845c-0.607-0.027-1.319-0.043-2.035-0.043-26.769 0-48.469 21.7-48.469 48.469 0 8.664 2.273 16.798 6.256 23.836l-0.126-0.241c8.178 14.971 23.811 24.956 41.777 24.956 0.673 0 1.343-0.014 2.009-0.042l-0.095 0.003h153.941v57.344c0 32.085 0 64.512 0 96.597-0 0.060-0 0.132-0 0.203 0 13.24 5.346 25.231 13.997 33.932l-0.002-0.002c8.546 9.046 20.625 14.677 34.019 14.677 0.040 0 0.080-0 0.121-0l-0.006 0c0.001 0 0.003 0 0.005 0 26.529 0 48.080-21.313 48.464-47.75l0-0.036c0-22.869 0-45.739 0-68.267v-87.381h153.259c0.924 0.164 1.987 0.258 3.072 0.258s2.148-0.094 3.182-0.274l-0.11 0.016c25.517-1.545 45.626-22.617 45.626-48.386 0-14.226-6.129-27.021-15.89-35.888l-0.040-0.036c-8.301-7.658-19.435-12.353-31.666-12.353-0.868 0-1.73 0.024-2.587 0.070l0.119-0.005c-36.523 0-72.704 0-109.227 0h-44.373v-75.776c115.769-23.213 205.016-114.415 225.036-229.387l0.244-1.695zM704.171 324.267c0.001 0.273 0.002 0.597 0.002 0.92 0 51.896-21.29 98.82-55.611 132.513l-0.028 0.028c-34.195 34.070-81.368 55.135-133.461 55.135s-99.267-21.064-133.467-55.14l0.006 0.006c-34.070-34.195-55.135-81.368-55.135-133.461s21.064-99.267 55.14-133.467l-0.006 0.006c33.592-33.54 79.971-54.282 131.195-54.282 0.677 0 1.353 0.004 2.028 0.011l-0.103-0.001c0.001-0 0.002-0 0.003-0 103.888 0 188.173 83.927 188.754 187.678l0 0.055z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sex-female"]},"attrs":[{}],"properties":{"order":5,"id":35,"name":"sex-female","prevSize":32,"code":59685},"setIdx":0,"setId":2,"iconIdx":3},{"icon":{"paths":["M565.248 403.115v-189.781l137.899 138.24c2.383 2.598 5.074 4.855 8.030 6.731l0.162 0.096c7.571 5.13 16.909 8.19 26.961 8.19 3.507 0 6.926-0.372 10.221-1.080l-0.318 0.057c13.076-2.557 24.025-10.155 30.95-20.643l0.111-0.179c5.394-7.775 8.618-17.412 8.618-27.801 0-14.575-6.344-27.668-16.42-36.669l-0.048-0.042-219.819-219.819c-1.695-2.13-3.484-4.027-5.418-5.765l-0.043-0.038c-8.628-7.35-19.905-11.822-32.226-11.822-1.633 0-3.248 0.079-4.841 0.232l0.203-0.016c-13.699 0.917-25.744 7.317-34.079 17.002l-0.054 0.064-216.405 216.405c-3.559 3.176-6.796 6.522-9.776 10.089l-0.122 0.151c-5.953 8.072-9.528 18.216-9.528 29.195 0 14.889 6.574 28.242 16.978 37.315l0.059 0.050c8.443 7.322 19.539 11.784 31.678 11.784 1.465 0 2.915-0.065 4.347-0.192l-0.185 0.013c13.664-0.478 25.785-6.705 34.082-16.323l0.051-0.061 136.533-136.533v190.805c-137.566 25.119-240.475 144.041-240.475 286.998 0 144.662 105.377 264.711 243.558 287.575l1.695 0.232c14.016 2.329 30.205 3.692 46.701 3.754l0.062 0c160.99 0 291.499-130.508 291.499-291.499 0-142.407-102.118-260.963-237.121-286.436l-1.813-0.284zM671.744 803.157l-13.312 16.725-7.509 9.216c-34.834 35.13-83.115 56.879-136.476 56.879-47.528 0-91.026-17.254-124.572-45.84l0.27 0.224c-43.547-33.976-71.285-86.461-71.285-145.424 0-21.257 3.605-41.672 10.237-60.666l-0.392 1.29c20.237-73.614 82.804-128.246 159.267-136.462l0.818-0.071h51.883c94.474 13.866 166.186 94.355 166.186 191.594 0 41.636-13.148 80.202-35.519 111.771l0.405-0.602z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sex-male"]},"attrs":[{}],"properties":{"order":6,"id":34,"name":"sex-male","prevSize":32,"code":59686},"setIdx":0,"setId":2,"iconIdx":4},{"icon":{"paths":["M947.023 423.724h-834.737c-42.513 0-76.977 34.464-76.977 76.977s34.464 76.977 76.977 76.977h834.737c42.513 0 76.977-34.464 76.977-76.977s-34.464-76.977-76.977-76.977h0z"],"width":1059,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["decrease"],"grid":0},"attrs":[{}],"properties":{"order":2,"id":0,"name":"decrease","prevSize":32,"code":59648},"setIdx":0,"setId":2,"iconIdx":5},{"icon":{"paths":["M944.305 432.195h-352.501v-352.501c-0.083-44.019-35.777-79.674-79.803-79.695l-0.002-0c-43.994 0.083-79.632 35.735-79.695 79.725l-0 0.006v352.464h-352.537c-44.055 0-79.768 35.713-79.768 79.768s35.713 79.768 79.768 79.768v0h352.501v352.574c0 44.055 35.713 79.768 79.768 79.768s79.768-35.713 79.768-79.768l-0 0v-352.574h352.501c44.055 0 79.768-35.713 79.768-79.768s-35.713-79.768-79.768-79.768l0 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["add"],"grid":0},"attrs":[{}],"properties":{"order":3,"id":1,"name":"add","prevSize":32,"code":59649},"setIdx":0,"setId":2,"iconIdx":6},{"icon":{"paths":["M358.4 0c-0.076-0-0.166-0-0.256-0-197.797 0-358.144 160.347-358.144 358.144 0 0.090 0 0.18 0 0.27l-0-0.014c0 268.8 358.4 665.6 358.4 665.6s358.4-396.8 358.4-665.6c0-0.076 0-0.166 0-0.256 0-197.797-160.347-358.144-358.144-358.144-0.090 0-0.18 0-0.27 0l0.014-0zM358.4 486.4c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128h0z"],"width":717,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["address"],"grid":0},"attrs":[{}],"properties":{"order":4,"id":2,"name":"address","prevSize":32,"code":59650},"setIdx":0,"setId":2,"iconIdx":7},{"icon":{"paths":["M447.993 511.981c141.38 0 255.991-114.611 255.991-255.991s-114.611-255.991-255.991-255.991c-141.38 0-255.991 114.611-255.991 255.991v-0c0 141.38 114.611 255.991 255.991 255.991v-0zM639.585 577.164l-95.609 382.81-63.988-272.006 63.988-111.998h-191.965l63.988 111.998-63.988 272.006-95.609-382.773c-142.815 6.542-256.155 123.796-256.401 267.577l-0 0.024v179.197h895.986v-179.197c-0.246-143.806-113.586-261.059-255.814-267.58l-0.587-0.021z"],"width":896,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["agent"],"grid":0},"attrs":[{}],"properties":{"order":5,"id":3,"name":"agent","prevSize":32,"code":59651},"setIdx":0,"setId":2,"iconIdx":8},{"icon":{"paths":["M889.022 7.054l-831.526 383.772c-34.358 15.411-57.857 49.317-57.857 88.711 0 53.291 43.002 96.539 96.2 96.936l0.038 0h351.649v351.801c0.219 53.372 43.536 96.553 96.938 96.553 39.559 0 73.583-23.696 88.654-57.668l0.245-0.618 383.621-831.564c3.826-10.169 6.041-21.922 6.041-34.192 0-55.109-44.674-99.783-99.783-99.783-12.281 0-24.044 2.219-34.909 6.277l0.689-0.226z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["arrow"],"grid":0},"attrs":[{}],"properties":{"order":14,"id":4,"name":"arrow","prevSize":32,"code":59652},"setIdx":0,"setId":2,"iconIdx":9},{"icon":{"paths":["M448.963 503.181c138.95 0 251.59-112.641 251.59-251.59s-112.641-251.59-251.59-251.59v-0c-138.95 0-251.59 112.641-251.59 251.59s112.641 251.59 251.59 251.59v0zM448.963 119.488v0c72.958-0 132.103 59.144 132.103 132.103s-59.144 132.103-132.103 132.103c-72.958 0-132.103-59.144-132.103-132.103 0-0.013 0-0.026 0-0.039l-0 0.002c-0-72.938 59.128-132.065 132.065-132.065 0.013 0 0.026 0 0.039 0l-0.002-0z","M448.963 566.069c-167.938 0-448.963 50.013-448.963 217.355v240.576h893.721v-240.576c0-167.305-276.82-217.355-444.758-217.355zM774.233 904.475h-654.931v-121.051c0-40.263 142.671-97.83 329.475-97.83v0c186.804 0 325.27 57.567 325.27 97.83z"],"width":894,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{}]},"tags":["avatar"],"grid":0},"attrs":[{},{}],"properties":{"order":15,"id":5,"name":"avatar","prevSize":32,"code":59653},"setIdx":0,"setId":2,"iconIdx":10},{"icon":{"paths":["M908.486 692.817c-1.1-0.834-112.139-84.872-112.139-362.886 0-182.216-147.715-329.931-329.931-329.931s-329.931 147.715-329.931 329.931v0c0 278.014-111.039 362.052-111.191 362.242-15.359 10.347-25.326 27.674-25.326 47.328 0 31.414 25.465 56.881 56.878 56.885l819.14 0c25.031-0.194 46.179-16.601 53.474-39.229l0.112-0.401c1.696-5.184 2.675-11.15 2.675-17.344 0-19.089-9.291-36.008-23.598-46.482l-0.162-0.113zM174.901 682.616c47.923-94.131 76-205.282 76-322.99 0-10.443-0.221-20.835-0.659-31.17l0.050 1.475c0-119.383 96.779-216.162 216.162-216.162s216.162 96.779 216.162 216.162l0 0c-0.387 8.856-0.608 19.244-0.608 29.684 0 117.708 28.062 228.862 77.862 327.136l-1.9-4.135z","M573.853 872.459c-8.181-4.825-18.026-7.675-28.536-7.675-20.904 0-39.175 11.276-49.061 28.077l-0.145 0.266c-6.013 10.266-16.989 17.051-29.55 17.051-6.311 0-12.222-1.713-17.293-4.699l0.16 0.087c-5.181-3.025-9.376-7.22-12.314-12.241l-0.086-0.16c-10.022-17.142-28.338-28.474-49.3-28.474-31.434 0-56.916 25.482-56.916 56.916 0 10.472 2.828 20.283 7.762 28.711l-0.145-0.269c26.074 44.41 73.596 73.753 127.972 73.753s101.897-29.344 127.594-73.059l0.377-0.694c4.808-8.17 7.648-17.998 7.648-28.489 0-20.831-11.197-39.047-27.901-48.958l-0.263-0.144z"],"width":932,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{}]},"tags":["bell"],"grid":0},"attrs":[{},{}],"properties":{"order":16,"id":6,"name":"bell","prevSize":32,"code":59654},"setIdx":0,"setId":2,"iconIdx":11},{"icon":{"paths":["M307.2 460.8h-102.4v102.4h102.4zM512 460.8h-102.4v102.4h102.4zM716.8 460.8h-102.4v102.4h102.4zM819.2 102.4h-51.2v-102.4h-102.4v102.4h-409.6v-102.4h-102.4v102.4h-51.2c-56.277 0.024-101.889 45.651-101.889 101.931 0 0.165 0 0.33 0.001 0.495l-0-0.025-0.512 716.8c0 56.554 45.846 102.4 102.4 102.4v0h716.8c56.486-0.169 102.231-45.914 102.4-102.384l0-0.016v-716.8c-0.169-56.486-45.914-102.231-102.384-102.4l-0.016-0zM819.2 921.6h-716.8v-563.2h716.8z"],"width":922,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["calender"],"grid":0},"attrs":[{}],"properties":{"order":17,"id":7,"name":"calender","prevSize":32,"code":59655},"setIdx":0,"setId":2,"iconIdx":12},{"icon":{"paths":["M910.222 0h-796.444c-62.838 0-113.778 50.94-113.778 113.778v0 796.444c0 62.838 50.94 113.778 113.778 113.778v0h796.444c62.838 0 113.778-50.94 113.778-113.778v0-796.444c0-62.838-50.94-113.778-113.778-113.778v0zM398.222 796.444l-284.444-284.444 80.213-80.213 204.231 203.662 431.787-431.787 80.213 80.782z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["checkbox-1"],"grid":0},"attrs":[{}],"properties":{"order":18,"id":8,"name":"checkbox-1","prevSize":32,"code":59656},"setIdx":0,"setId":2,"iconIdx":13},{"icon":{"paths":["M910.222 113.778v796.444h-796.444v-796.444h796.444zM910.222 0h-796.444c-62.76 0.193-113.584 51.018-113.778 113.759l-0 0.019v796.444c0.193 62.76 51.018 113.584 113.759 113.778l0.019 0h796.444c62.76-0.193 113.584-51.018 113.778-113.759l0-0.019v-796.444c-0.193-62.76-51.018-113.584-113.759-113.778l-0.019-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["checkbox"],"grid":0},"attrs":[{}],"properties":{"order":19,"id":9,"name":"checkbox","prevSize":32,"code":59657},"setIdx":0,"setId":2,"iconIdx":14},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512h-0zM276.821 547.072l279.723 279.723c8.937 8.992 21.312 14.557 34.987 14.557s26.050-5.565 34.984-14.554l0.002-0.002 35.115-35.115c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-209.749-209.749 209.749-209.749c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-35.115-35.115c-8.937-8.992-21.312-14.557-34.987-14.557s-26.050 5.565-34.984 14.554l-0.002 0.002-279.723 279.765c-8.993 8.976-14.557 21.385-14.557 35.093s5.564 26.118 14.556 35.093l0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["circle-left"],"grid":0},"attrs":[{}],"properties":{"order":20,"id":10,"name":"circle-left","prevSize":32,"code":59658},"setIdx":0,"setId":2,"iconIdx":15},{"icon":{"paths":["M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512v0c0 282.77 229.23 512 512 512v0zM747.136 547.115l-279.723 279.723c-8.937 8.992-21.312 14.557-34.987 14.557s-26.050-5.565-34.984-14.554l-0.002-0.002-35.115-35.115c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 209.749-209.749-209.792-209.792c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 35.115-35.115c8.937-8.992 21.312-14.557 34.987-14.557s26.050 5.565 34.984 14.554l0.002 0.002 279.723 279.723c9.019 8.98 14.6 21.406 14.6 35.136 0 13.709-5.564 26.118-14.556 35.093l-0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["circle-right"],"grid":0},"attrs":[{}],"properties":{"order":21,"id":11,"name":"circle-right","prevSize":32,"code":59659},"setIdx":0,"setId":2,"iconIdx":16},{"icon":{"paths":["M843.123 30.996l-331.098 331.098-331.098-331.098c-19.185-19.146-45.668-30.985-74.916-30.985s-55.731 11.839-74.918 30.987l0.002-0.002c-19.117 19.18-30.937 45.643-30.937 74.868s11.82 55.687 30.94 74.87l-0.003-0.003 331.050 331.098-331.050 331.244c-19.191 19.173-31.063 45.67-31.063 74.94 0 58.504 47.427 105.93 105.93 105.93 29.234 0 55.702-11.842 74.868-30.991l-0.001 0.001 331.098-331.098 331.196 331.147c19.046 18.46 45.049 29.839 73.71 29.839 58.521 0 105.961-47.44 105.961-105.961 0-28.661-11.379-54.663-29.865-73.737l0.027 0.028-331.196-331.196 331.098-331.098c18.46-19.046 29.839-45.049 29.839-73.71 0-58.521-47.44-105.961-105.961-105.961-28.661 0-54.663 11.379-73.737 29.865l0.028-0.027z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["close"],"grid":0},"attrs":[{}],"properties":{"order":22,"id":12,"name":"close","prevSize":32,"code":59660},"setIdx":0,"setId":2,"iconIdx":17},{"icon":{"paths":["M895.851 0h-767.872c-70.681 0-127.979 57.298-127.979 127.979v0 575.904c0 70.681 57.298 127.979 127.979 127.979v0h191.968v167.993c-0 0.025-0 0.056-0 0.086 0 13.288 10.772 24.060 24.060 24.060 5.399 0 10.382-1.778 14.397-4.781l-0.063 0.045 249.558-187.403h287.952c70.681 0 127.979-57.298 127.979-127.979v0-575.904c0-70.681-57.298-127.979-127.979-127.979l0 0zM604.699 575.904h-371.821v-127.979h371.821zM791.42 296.697h-558.84v-127.979h558.84z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["comment"],"grid":0},"attrs":[{}],"properties":{"order":23,"id":13,"name":"comment","prevSize":32,"code":59661},"setIdx":0,"setId":2,"iconIdx":18},{"icon":{"paths":["M646.741 485.035v-323.371l-161.707-161.664-161.664 161.664v107.819h-323.371v754.517h970.112v-538.965zM215.595 916.224h-107.819v-107.819h107.819zM215.595 700.629h-107.819v-107.776h107.819zM215.595 485.035h-107.819v-107.776h107.819zM538.965 916.181h-107.819v-107.776h107.776zM538.965 700.587h-107.819v-107.733h107.776zM538.965 484.992h-107.819v-107.733h107.776zM538.965 269.397h-107.819v-107.733h107.776zM862.336 916.139h-107.819v-107.733h107.776zM862.336 700.544h-107.819v-107.691h107.776z"],"width":970,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["company"],"grid":0},"attrs":[{}],"properties":{"order":24,"id":14,"name":"company","prevSize":32,"code":59662},"setIdx":0,"setId":2,"iconIdx":19},{"icon":{"paths":["M587.199 55.924l-55.924-55.924h-279.618l-55.924 55.924h-195.733v111.847h782.932v-111.847z","M33.107 870.508c1.405 85.070 70.697 153.493 155.97 153.493 0.217 0 0.434-0 0.65-0.001l-0.034 0h403.396c0.182 0.001 0.398 0.001 0.614 0.001 85.338 0 154.671-68.528 155.971-153.557l0.001-0.122v-647.895h-716.569zM144.954 332.112h493.023v538.023c-0.295 24.483-20.211 44.217-44.736 44.217-0.001 0-0.002-0-0.003-0l-403.21 0c-0.101 0.001-0.22 0.001-0.34 0.001-24.499 0-44.399-19.692-44.735-44.112l-0-0.032z","M288.939 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z","M493.993 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z"],"width":783,"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{},{},{}]},"tags":["delet"],"grid":0},"attrs":[{},{},{},{}],"properties":{"order":6,"id":15,"name":"delet","prevSize":32,"code":59663},"setIdx":0,"setId":2,"iconIdx":20},{"icon":{"paths":["M563.115 854.229l407.851-408.107c13.086-12.984 21.186-30.975 21.186-50.858 0-19.714-7.963-37.568-20.848-50.521l0.003 0.003-68.139-68.139c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-289.536 289.621-289.195-289.195c-13.008-13.118-31.038-21.24-50.965-21.24-19.778 0-37.688 8.001-50.669 20.943l0.002-0.002-0.299 0.299-67.968 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l-0.004-0.004 408.235 408.32c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["down"],"grid":0},"attrs":[{}],"properties":{"order":7,"id":16,"name":"down","prevSize":32,"code":59664},"setIdx":0,"setId":2,"iconIdx":21},{"icon":{"paths":["M864 0c88.366 0 160 71.634 160 160 0 36.2-12.022 69.593-32.292 96.402l0.292-0.402-64 64-224-224 64-64c26.324-19.976 59.637-32 95.758-32 0.085 0 0.17 0 0.255 0l-0.013-0zM64 736l-64 288 288-64 592.171-592-224.171-224.128zM715.563 363.563l-448 448-55.168-55.125 448-448z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["edit"],"grid":0},"attrs":[{}],"properties":{"order":8,"id":17,"name":"edit","prevSize":32,"code":59665},"setIdx":0,"setId":2,"iconIdx":22},{"icon":{"paths":["M1123.235 921.346l-217.634-208.847c5.132 1.805 11.050 2.848 17.211 2.848 15.851 0 30.089-6.902 39.875-17.864l0.046-0.052c37.481-38.161 71.036-80.412 99.866-125.951l1.835-3.103c5.666-8.976 9.029-19.899 9.029-31.606 0-11.056-2.999-21.412-8.227-30.299l0.153 0.28c-7.952-13.359-194.813-327.802-528.499-327.802h-1.312c-35.996 0.005-71.127 3.696-105.040 10.716l3.34-0.578c-18.092 3.787-32.895 15.391-40.954 31.036l-0.156 0.333-212.306-203.798c-10.7-10.287-25.264-16.622-41.308-16.622-32.938 0-59.64 26.702-59.64 59.64 0 16.894 7.024 32.148 18.312 42.999l0.020 0.019 162.768 156.208c-5.287 1.648-9.884 3.809-14.111 6.501l0.235-0.14c-95.97 62.868-175.328 142.911-235.543 236.445l-1.89 3.135c-5.835 9.056-9.303 20.115-9.303 31.985 0 11.035 2.997 21.371 8.222 30.236l-0.152-0.279c7.952 13.359 194.813 327.802 529.175 327.802 107.604-0.9 207.542-32.95 291.456-87.555l-2.1 1.281c1.312-0.835 2.385-1.908 3.618-2.863l210.398 201.929c10.7 10.287 25.264 16.622 41.308 16.622 32.938 0 59.64-26.702 59.64-59.64 0-16.894-7.024-32.148-18.312-42.999l-0.020-0.019zM536.729 298.223c210.716 0 354.679 168.573 405.529 238.546-20.464 28.603-41.631 53.756-64.584 77.15l0.097-0.1c-10.193 10.583-16.471 24.997-16.471 40.878 0 6.315 0.993 12.399 2.831 18.103l-0.116-0.417-385.213-369.747c17.213-2.809 37.053-4.414 57.267-4.414 0.232 0 0.464 0 0.696 0.001l-0.036-0zM480.591 505.758c6.937-5.309 12.58-11.943 16.621-19.556l0.156-0.323 89.972 86.354c-14.804 12.070-33.904 19.382-54.711 19.382-7.266 0-14.323-0.892-21.069-2.571l0.598 0.126c-21.583-3.776-39.081-18.284-47.003-37.713l-0.149-0.414c-0.942-3.344-1.484-7.185-1.484-11.153 0-13.911 6.658-26.266 16.961-34.054l0.107-0.078zM536.729 775.315c-210.716 0-354.4-168.215-405.211-238.546 49.32-68.027 109.037-125.034 177.432-169.904l2.551-1.571c11.947-7.883 20.761-19.68 24.668-33.535l0.101-0.418 78.482 75.301c-2.135 1.142-3.89 2.209-5.584 3.359l0.217-0.139c-39.593 30.204-64.883 77.409-64.883 130.521 0 16.497 2.44 32.424 6.979 47.441l-0.301-1.159c21.213 61.143 72.589 106.713 135.851 119.32l1.154 0.192c13.578 3.209 29.168 5.048 45.187 5.048 51.658 0 98.848-19.131 134.872-50.694l-0.235 0.202c1.923-1.788 3.692-3.67 5.327-5.665l0.080-0.1 67.389 64.686c-58.645 34.055-128.851 54.577-203.762 55.657l-0.314 0.004z"],"width":1142,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["eye-1"],"grid":0},"attrs":[{}],"properties":{"order":9,"id":18,"name":"eye-1","prevSize":32,"code":59666},"setIdx":0,"setId":2,"iconIdx":23},{"icon":{"paths":["M1343.806 478.457c-9.762-19.575-244.11-478.457-667.948-478.457s-658.136 458.883-667.948 478.457c-4.994 9.78-7.92 21.332-7.92 33.568s2.926 23.787 8.117 33.994l-0.197-0.427c10.013 19.575 244.11 478.407 667.948 478.407s658.186-458.832 667.948-478.407c4.994-9.78 7.92-21.332 7.92-33.568s-2.926-23.787-8.117-33.994l0.197 0.427zM675.858 873.96c-272.446 0-457.030-266.138-514.553-361.809 57.523-95.671 242.107-361.809 514.553-361.809s457.13 266.288 514.553 361.809c-57.523 95.521-242.157 361.659-514.553 361.659z","M675.858 211.619c-165.896 0-300.381 134.485-300.381 300.381s134.485 300.381 300.381 300.381c165.896 0 300.381-134.485 300.381-300.381v0c-0.199-165.816-134.565-300.182-300.362-300.381l-0.020-0zM675.858 662.191c-82.948 0-150.191-67.243-150.191-150.191s67.243-150.191 150.191-150.191c82.948 0 150.191 67.243 150.191 150.191v0c0 82.948-67.243 150.191-150.191 150.191v0z"],"width":1352,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{}]},"tags":["eye"],"grid":0},"attrs":[{},{}],"properties":{"order":25,"id":19,"name":"eye","prevSize":32,"code":59667},"setIdx":0,"setId":2,"iconIdx":24},{"icon":{"paths":["M470.315 379.861v136.192c52.181 11.819 98.603 31.189 147.2 44.587v-136.405c-52.011-11.605-98.773-30.976-147.2-44.416zM916.907 133.888c-67.939 35.792-147.729 58.874-232.376 63.923l-1.608 0.077c-107.008-0.213-195.584-69.76-330.368-69.76-0.457-0.002-0.998-0.003-1.539-0.003-48.265 0-94.476 8.794-137.118 24.867l2.678-0.885c4.705-11.905 7.433-25.695 7.433-40.122 0-61.856-50.144-112-112-112s-112 50.144-112 112c0 37.882 18.807 71.371 47.593 91.64l0.355 0.237v772.267c-0 0.038-0 0.083-0 0.128 0 26.439 21.433 47.872 47.872 47.872 0.045 0 0.090-0 0.135-0l-0.007 0h32c0.038 0 0.083 0 0.128 0 26.439 0 47.872-21.433 47.872-47.872 0-0.045-0-0.090-0-0.135l0 0.007v-188.928c64.268-28.012 139.144-44.31 217.827-44.31 3.851 0 7.693 0.039 11.525 0.117l-0.573-0.009c107.179 0 195.584 69.589 330.368 69.589 92.324-0.765 177.356-31.352 246.099-82.581l-1.107 0.789c16.771-11.705 27.605-30.909 27.605-52.644 0-0.047-0-0.094-0-0.141l0 0.007v-486.144c-0.078-35.287-28.702-63.863-64-63.863-9.72 0-18.935 2.167-27.186 6.044l0.391-0.165zM323.157 651.008c-54.473 5.68-104.346 17.389-151.58 34.589l4.38-1.394v-140.8c42.966-16.959 92.83-29.258 144.754-34.612l2.446-0.204zM911.957 382.208c-42.344 20.263-91.614 36.787-143.125 47.106l-4.075 0.681v141.867c55.26-7.286 105.051-25.69 148.773-52.924l-1.573 0.913v140.8c-41.573 28.653-91.64 48.031-145.739 54.055l-1.461 0.132v-142.976c-14.605 2.234-31.455 3.51-48.603 3.51-35.177 0-69.1-5.37-100.994-15.334l2.396 0.645v134.912c-39.685-15.094-88.92-29.775-139.395-41.183l-7.805-1.483v-136.875c-28.906-6.694-62.098-10.532-96.186-10.532-17.976 0-35.702 1.067-53.12 3.141l2.106-0.204v-140.032c-55.565 9.583-104.997 24.104-151.88 43.532l4.68-1.718v-140.8c42.614-19.83 92.097-35.166 143.91-43.55l3.29-0.439v142.976c14.417-2.165 31.054-3.401 47.98-3.401 35.4 0 69.537 5.408 101.63 15.442l-2.41-0.649v-134.741c39.858 15.224 89.098 29.908 139.605 41.235l7.595 1.431v136.704c26.239 6.45 56.363 10.149 87.35 10.149 21.13 0 41.859-1.72 62.054-5.028l-2.204 0.298v-143.872c55.763-10.757 105.071-26.328 151.746-46.79l-4.546 1.777z"],"width":1008,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["flag"],"grid":0},"attrs":[{}],"properties":{"order":26,"id":20,"name":"flag","prevSize":32,"code":59668},"setIdx":0,"setId":2,"iconIdx":25},{"icon":{"paths":["M460.771 358.396h102.293v-102.251h-102.293zM511.917 921.749c-0.012 0-0.027 0-0.041 0-226.23 0-409.625-183.395-409.625-409.625s183.395-409.625 409.625-409.625c226.215 0 409.601 183.372 409.625 409.581l0 0.002c0 226.23-183.395 409.625-409.625 409.625v0zM511.876-0.207c-282.717 0.071-511.876 229.274-511.876 512 0 282.77 229.23 512 512 512 282.697 0 511.882-229.113 512-511.782l0-0.011c0-282.77-229.23-512-512-512v0zM460.854 768.021h102.21v-307.25h-102.21z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["information"],"grid":0},"attrs":[{}],"properties":{"order":27,"id":21,"name":"information","prevSize":32,"code":59669},"setIdx":0,"setId":2,"iconIdx":26},{"icon":{"paths":["M22.52 566.594l435.159 434.886c13.85 13.942 33.032 22.572 54.23 22.572s40.38-8.63 54.226-22.567l0.004-0.004 72.291-72.291c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-308.501-308.41 308.365-308.365c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-71.973-72.792c-13.85-13.942-33.032-22.572-54.23-22.572s-40.38 8.63-54.226 22.567l-0.004 0.004-435.023 434.932c-14.154 13.904-22.927 33.246-22.927 54.637 0 21.234 8.643 40.449 22.604 54.319l0.004 0.004z"],"width":661,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["left"],"grid":0},"attrs":[{}],"properties":{"order":28,"id":22,"name":"left","prevSize":32,"code":59670},"setIdx":0,"setId":2,"iconIdx":27},{"icon":{"paths":["M558.549 0.469l-465.451-0.469c-51.358 0.145-92.954 41.74-93.099 93.085l-0 0.014v837.803c0.145 51.358 41.74 92.954 93.085 93.099l0.014 0h465.451c51.358-0.145 92.954-41.74 93.099-93.085l0-0.014v-837.803c-0.194-51.199-41.744-92.629-92.97-92.629-0.045 0-0.090 0-0.136 0l0.007-0zM558.549 837.803h-465.451v-651.605h465.451z"],"width":652,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["phone"],"grid":0},"attrs":[{}],"properties":{"order":29,"id":23,"name":"phone","prevSize":32,"code":59671},"setIdx":0,"setId":2,"iconIdx":28},{"icon":{"paths":["M384 0c-0.789-0.017-1.719-0.027-2.651-0.027-34.738 0-66.285 13.665-89.558 35.914l0.049-0.046c-22.202 23.224-35.867 54.77-35.867 89.509 0 0.932 0.010 1.862 0.029 2.789l-0.002-0.138c5.836 34.821 18.412 65.879 36.393 93.049l-0.553-0.889c2.672 8.237 4.213 17.715 4.213 27.553 0 2.918-0.136 5.803-0.401 8.652l0.027-0.365h-295.68v768h295.68c0.053-1.37 0.084-2.978 0.084-4.594 0-11.101-1.431-21.868-4.119-32.126l0.196 0.88c-17.428-26.281-30.005-57.34-35.644-90.756l-0.196-1.404c-0.017-0.789-0.027-1.719-0.027-2.651 0-34.738 13.665-66.285 35.914-89.558l-0.046 0.049c23.224-22.202 54.77-35.867 89.509-35.867 0.932 0 1.862 0.010 2.789 0.029l-0.138-0.002c0.789-0.017 1.719-0.027 2.651-0.027 34.738 0 66.285 13.665 89.558 35.914l-0.049-0.046c22.202 23.224 35.867 54.77 35.867 89.509 0 0.932-0.010 1.862-0.029 2.789l0.002-0.138c-5.836 34.821-18.412 65.879-36.393 93.049l0.553-0.889c-2.672 8.237-4.213 17.715-4.213 27.553 0 2.918 0.136 5.803 0.401 8.652l-0.027-0.365h295.68v-295.68c1.37-0.053 2.978-0.084 4.594-0.084 11.101 0 21.868 1.431 32.126 4.119l-0.88-0.196c26.281 17.428 57.34 30.005 90.756 35.644l1.404 0.196c70.692 0 128-57.308 128-128s-57.308-128-128-128v0c-34.821 5.836-65.879 18.412-93.049 36.393l0.889-0.553c-8.237 2.672-17.715 4.213-27.553 4.213-2.918 0-5.803-0.136-8.652-0.401l0.365 0.027v-295.68h-295.68c-0.053-1.37-0.084-2.978-0.084-4.594 0-11.101 1.431-21.868 4.119-32.126l-0.196 0.88c17.428-26.281 30.005-57.34 35.644-90.756l0.196-1.404c0.017-0.789 0.027-1.719 0.027-2.651 0-34.738-13.665-66.285-35.914-89.558l0.046 0.049c-23.224-22.202-54.77-35.867-89.509-35.867-0.932 0-1.862 0.010-2.789 0.029l0.138-0.002z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["puzzle"],"grid":0},"attrs":[{}],"properties":{"order":30,"id":24,"name":"puzzle","prevSize":32,"code":59672},"setIdx":0,"setId":2,"iconIdx":29},{"icon":{"paths":["M638.368 566.619l-435.042 434.86c-13.855 13.932-33.037 22.554-54.232 22.554s-40.377-8.622-54.229-22.55l-0.003-0.003-72.295-72.295c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 308.378-308.378-308.378-308.378c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 71.976-72.795c13.855-13.932 33.037-22.554 54.232-22.554s40.377 8.622 54.229 22.55l0.003 0.003 435.042 434.723c14.1 13.896 22.836 33.203 22.836 54.549 0 21.189-8.607 40.368-22.515 54.232l-0.002 0.002z"],"width":661,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["right"],"grid":0},"attrs":[{}],"properties":{"order":31,"id":25,"name":"right","prevSize":32,"code":59673},"setIdx":0,"setId":2,"iconIdx":30},{"icon":{"paths":["M227.579 579.116v227.579l398.211 217.305 398.211-217.305v-227.579l-398.211 217.358zM625.789-0l-625.789 341.316 625.789 341.316 512-279.311v393.1h113.789v-455.105z"],"width":1252,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["school"],"grid":0},"attrs":[{}],"properties":{"order":32,"id":26,"name":"school","prevSize":32,"code":59674},"setIdx":0,"setId":2,"iconIdx":31},{"icon":{"paths":["M1009.922 885.314l-199.391-199.391c-8.672-8.647-20.639-13.993-33.854-13.993-0.096 0-0.192 0-0.288 0.001l0.015-0h-32.592c54.858-69.783 87.982-158.908 87.982-255.769 0-229.618-186.142-415.76-415.76-415.76s-415.76 186.142-415.76 415.76c0 229.618 186.142 415.76 415.76 415.76 96.861 0 185.986-33.123 256.666-88.661l-0.897 0.679v32.464c-0 0.081-0.001 0.177-0.001 0.273 0 13.216 5.346 25.182 13.994 33.855l-0.001-0.001 199.391 199.391c8.657 8.711 20.645 14.103 33.893 14.103s25.236-5.392 33.891-14.1l0.002-0.002 56.609-56.609c8.774-8.732 14.204-20.817 14.204-34.171 0-13.184-5.292-25.131-13.869-33.834l0.006 0.006zM415.973 672.016c-141.361 0-255.957-114.596-255.957-255.957s114.596-255.957 255.957-255.957c141.361 0 255.957 114.596 255.957 255.957v0c-0.049 141.325-114.626 255.872-255.957 255.872l-0-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["search"],"grid":0},"attrs":[{}],"properties":{"order":33,"id":27,"name":"search","prevSize":32,"code":59675},"setIdx":0,"setId":2,"iconIdx":32},{"icon":{"paths":["M264.124 1024l-3.988-0.315c-45.874-4.728-81.349-43.172-81.349-89.9 0-9.949 1.608-19.523 4.579-28.476l-0.183 0.638 89.58-260.661-235.092-165.554c-19.618-13.599-33.145-34.797-36.332-59.244l-0.046-0.43c-0.823-4.244-1.294-9.125-1.294-14.115 0-0.018 0-0.036 0-0.054l-0 0.003c0.197-48.36 39.308-87.52 87.63-87.796l0.026-0h289.553l86.747-258.842c12.356-34.779 44.982-59.235 83.32-59.235 37.789 0 70.029 23.761 82.593 57.157l0.201 0.608 87.272 260.311h287.525c0.011-0 0.025-0 0.038-0 47.863 0 86.99 37.407 89.741 84.58l0.011 0.243v3.848l-0.315 3.883c-2.124 22.565-12.304 42.418-27.594 56.944l-0.039 0.036-11.963 10.074-233.098 167.233 89.755 261.011c3.161 8.633 4.99 18.602 4.99 28.997 0 27.516-12.812 52.041-32.795 67.933l-0.177 0.136c-13.364 11.803-30.658 19.438-49.692 20.728l-0.258 0.014-3.183 0.21-3.148-0.175c-18.973-1.079-36.226-7.647-50.416-18.125l0.256 0.181-229.565-163.77-230.369 164.12c-13.682 9.851-30.475 16.214-48.672 17.473l-0.298 0.017zM812.414 940.051v0.28zM282.243 939.876v0zM838.403 920.498v0zM139.39 423.032l258.003 181.889-97.94 285.006 247.929-176.642 247.649 176.502-97.94-284.586 254.015-182.169h-309.246l-94.442-282.243-94.722 282.243zM1004.972 423.032v0zM97.346 393.405l0.56 0.42z"],"width":1095,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["star-1"],"grid":0},"attrs":[{}],"properties":{"order":34,"id":28,"name":"star-1","prevSize":32,"code":59676},"setIdx":0,"setId":2,"iconIdx":33},{"icon":{"paths":["M1060.923 354.485h-362.082l-110.034-328.386c-5.769-15.366-20.337-26.102-37.413-26.102s-31.644 10.737-37.322 25.828l-0.091 0.275-110.034 328.386h-364.574c-21.717 0.069-39.304 17.656-39.374 39.367l-0 0.007c-0 0.051-0.001 0.111-0.001 0.172 0 2.3 0.268 4.537 0.775 6.682l-0.039-0.196c1.082 11.588 7.245 21.545 16.211 27.732l0.127 0.083 297.753 209.856-114.363 332.062c-1.356 3.823-2.14 8.232-2.14 12.824 0 12.816 6.104 24.206 15.563 31.422l0.096 0.070c5.913 5.322 13.556 8.829 21.991 9.588l0.147 0.011c9.263-0.701 17.658-3.918 24.649-8.961l-0.142 0.098 290.483-207.038 290.483 207.038c6.807 5.047 15.229 8.284 24.374 8.857l0.132 0.007c8.688-0.56 16.438-4.176 22.272-9.773l-0.012 0.012c9.602-7.187 15.75-18.533 15.75-31.315 0-4.66-0.817-9.13-2.316-13.273l0.086 0.272-114.159-331.898 295.139-211.694 7.148-6.167c7.108-6.72 11.823-15.905 12.772-26.182l0.012-0.163c-1.204-22.063-19.388-39.497-41.643-39.497-0.078 0-0.156 0-0.234 0.001l0.012-0z"],"width":1103,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["star"],"grid":0},"attrs":[{}],"properties":{"order":35,"id":29,"name":"star","prevSize":32,"code":59677},"setIdx":0,"setId":2,"iconIdx":34},{"icon":{"paths":["M662.613 361.941c-7.552-20.181 201.344-206.72 79.531-357.888-28.501-35.328-125.227 169.259-262.528 261.845-75.776 51.2-252.075 159.872-252.075 219.989v389.461c0 72.32 279.552 148.864 491.989 148.864 77.867 0 190.677-487.851 190.677-565.333s-240.128-76.459-247.467-96.725zM170.624 367.36c-0.681-0.010-1.486-0.016-2.292-0.016-93.126 0-168.619 75.493-168.619 168.619 0 3.187 0.088 6.354 0.263 9.498l-0.019-0.437v275.797c-0.161 2.71-0.252 5.878-0.252 9.068 0 90.015 72.972 162.987 162.987 162.987 2.79 0 5.564-0.070 8.32-0.209l-0.387 0.016c37.376 0-56.875-32.555-56.875-128.555v-362.667c0-100.565 94.251-134.187 56.875-134.187z"],"width":910,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["thumbs-up"],"grid":0},"attrs":[{}],"properties":{"order":10,"id":30,"name":"thumbs-up","prevSize":32,"code":59678},"setIdx":0,"setId":2,"iconIdx":35},{"icon":{"paths":["M511.488 0c-282.55 0.292-511.488 229.41-511.488 512 0 282.77 229.23 512 512 512s512-229.23 512-512l-0 0c0-0.076 0-0.166 0-0.257 0-282.628-229.116-511.744-511.744-511.744-0.27 0-0.54 0-0.81 0.001l0.042-0zM512 921.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM537.6 256h-76.8v307.2l268.8 161.28 38.4-63.147-230.4-136.533z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["time"],"grid":0},"attrs":[{}],"properties":{"order":11,"id":31,"name":"time","prevSize":32,"code":59679},"setIdx":0,"setId":2,"iconIdx":36},{"icon":{"paths":["M563.115 223.232l407.851 408.107c13.137 12.992 21.272 31.018 21.272 50.943 0 19.756-7.997 37.645-20.932 50.605l0.001-0.001-68.139 68.139c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-289.536-289.792-289.195 289.195c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-0.213-0.299-68.267-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l-0.004 0.004 408.235-408.32c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["top"],"grid":0},"attrs":[{}],"properties":{"order":12,"id":32,"name":"top","prevSize":32,"code":59680},"setIdx":0,"setId":2,"iconIdx":37},{"icon":{"paths":["M1104.017 128.018h-207.987v-80.017c0-26.51-21.491-48.001-48.001-48.001v0h-544.040c-26.51 0-48.001 21.491-48.001 48.001v0 80.017h-207.987c-26.51 0-48.001 21.491-48.001 48.001v0 111.986c7.076 85.462 54.363 158.548 122.682 200.96l1.112 0.643c61.778 44.226 136.678 74.099 217.854 83.23l2.133 0.195c34.389 59.486 80.159 108.69 134.709 145.998l1.518 0.98v144.002h-96.001c-3.854-0.457-8.318-0.718-12.843-0.718-62.746 0-113.776 50.163-115.172 112.574l-0.002 0.13v24c0 13.255 10.745 24 24 24v0h592.041c13.255 0 24-10.745 24-24v0-24c-1.399-62.54-52.429-112.704-115.175-112.704-4.525 0-8.989 0.261-13.378 0.768l0.535-0.050h-96.001v-144.002c56.068-38.356 101.826-87.64 135.041-145.086l1.137-2.132c83.314-9.166 158.252-38.973 221.451-84.147l-1.416 0.962c69.366-43.121 116.621-116.171 123.729-200.646l0.065-0.957v-111.986c0-26.51-21.491-48.001-48.001-48.001v0zM198.627 385.59c-35.829-20.914-61.682-55.601-70.437-96.621l-0.172-0.964v-32.016h128.402c1.638 61.997 10.873 121.145 26.808 177.479l-1.223-5.061c-31.815-11.002-59.407-25.499-84.329-43.47l0.951 0.653zM1024 288.005c-9.695 41.665-35.309 76.091-69.932 97.202l-0.677 0.383c-24.040 17.319-51.713 31.817-81.346 42.129l-2.271 0.688c14.711-51.273 23.946-110.421 25.564-171.467l0.020-0.952h128.594z"],"width":1152,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["trophy"],"grid":0},"attrs":[{}],"properties":{"order":13,"id":33,"name":"trophy","prevSize":32,"code":59681},"setIdx":0,"setId":2,"iconIdx":38}],"height":1024,"metadata":{"name":"icomoon"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"icomoon"},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon"},"historySize":50,"showCodes":true,"gridSize":16}}
\ No newline at end of file
diff --git a/PAMapp/assets/icon/style.css b/PAMapp/assets/icon/style.css
index f3e477c..1d5c85e 100644
--- a/PAMapp/assets/icon/style.css
+++ b/PAMapp/assets/icon/style.css
@@ -1,10 +1,10 @@
 @font-face {
   font-family: 'icomoon';
-  src:  url('fonts/icomoon.eot?vt1g0j');
-  src:  url('fonts/icomoon.eot?vt1g0j#iefix') format('embedded-opentype'),
-    url('fonts/icomoon.ttf?vt1g0j') format('truetype'),
-    url('fonts/icomoon.woff?vt1g0j') format('woff'),
-    url('fonts/icomoon.svg?vt1g0j#icomoon') format('svg');
+  src:  url('fonts/icomoon.eot?xbg0m9');
+  src:  url('fonts/icomoon.eot?xbg0m9#iefix') format('embedded-opentype'),
+    url('fonts/icomoon.ttf?xbg0m9') format('truetype'),
+    url('fonts/icomoon.woff?xbg0m9') format('woff'),
+    url('fonts/icomoon.svg?xbg0m9#icomoon') format('svg');
   font-weight: normal;
   font-style: normal;
   font-display: block;
@@ -25,16 +25,22 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
-.icon-delet:before {
-  content: "\e920";
+.icon-sort-decrease:before {
+  content: "\e922";
 }
-.icon-top:before {
-  content: "\e91f";
+.icon-sort-add:before {
+  content: "\e923";
 }
-.icon-puzzle:before {
-  content: "\e91e";
+.icon-expand:before {
+  content: "\e924";
 }
-.icon-down:before {
+.icon-sex-female:before {
+  content: "\e925";
+}
+.icon-sex-male:before {
+  content: "\e926";
+}
+.icon-decrease:before {
   content: "\e900";
 }
 .icon-add:before {
@@ -58,10 +64,10 @@
 .icon-calender:before {
   content: "\e907";
 }
-.icon-checkbox:before {
+.icon-checkbox-1:before {
   content: "\e908";
 }
-.icon-checkbox-1:before {
+.icon-checkbox:before {
   content: "\e909";
 }
 .icon-circle-left:before {
@@ -79,48 +85,60 @@
 .icon-company:before {
   content: "\e90e";
 }
-.icon-edit:before {
+.icon-delet:before {
   content: "\e90f";
 }
-.icon-eye:before {
+.icon-down:before {
   content: "\e910";
 }
-.icon-eye-1:before {
+.icon-edit:before {
   content: "\e911";
 }
-.icon-flag:before {
+.icon-eye-1:before {
   content: "\e912";
 }
-.icon-information:before {
+.icon-eye:before {
   content: "\e913";
 }
-.icon-left:before {
+.icon-flag:before {
   content: "\e914";
 }
-.icon-phone:before {
+.icon-information:before {
   content: "\e915";
 }
-.icon-right:before {
+.icon-left:before {
   content: "\e916";
 }
-.icon-school:before {
+.icon-phone:before {
   content: "\e917";
 }
-.icon-search:before {
+.icon-puzzle:before {
   content: "\e918";
 }
-.icon-star:before {
+.icon-right:before {
   content: "\e919";
 }
-.icon-star-1:before {
+.icon-school:before {
   content: "\e91a";
 }
-.icon-thumbs-up:before {
+.icon-search:before {
   content: "\e91b";
 }
-.icon-time:before {
+.icon-star-1:before {
   content: "\e91c";
 }
-.icon-trophy:before {
+.icon-star:before {
   content: "\e91d";
 }
+.icon-thumbs-up:before {
+  content: "\e91e";
+}
+.icon-time:before {
+  content: "\e91f";
+}
+.icon-top:before {
+  content: "\e920";
+}
+.icon-trophy:before {
+  content: "\e921";
+}
diff --git a/PAMapp/assets/images/appointment/avatar_bg.svg b/PAMapp/assets/images/appointment/avatar_bg.svg
new file mode 100644
index 0000000..88abc04
--- /dev/null
+++ b/PAMapp/assets/images/appointment/avatar_bg.svg
@@ -0,0 +1,9 @@
+<svg id="Component_29" data-name="Component 29" xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">
+  <circle id="Ellipse_726" data-name="Ellipse 726" cx="50" cy="50" r="50" fill="#feecdc"/>
+  <g id="Group_3685" data-name="Group 3685" transform="translate(-4269 -1812)">
+    <circle id="Ellipse_723" data-name="Ellipse 723" cx="50" cy="50" r="50" transform="translate(4269 1812)" fill="#feecdc"/>
+    <path id="Intersection_4" data-name="Intersection 4" d="M8376.456,8861.851v-2.594c0-14.428,24.235-18.738,38.724-18.738s38.367,4.313,38.367,18.738v2.59A49.9,49.9,0,0,1,8415.013,8880H8415A49.892,49.892,0,0,1,8376.456,8861.851Zm17.021-48.454a21.7,21.7,0,0,1,21.7-21.686h.014a21.693,21.693,0,1,1-21.716,21.686Z" transform="translate(-4095.456 -6968)" fill="#d0d0ce" opacity="0.789"/>
+    <circle id="Ellipse_724" data-name="Ellipse 724" cx="15" cy="15" r="15" transform="translate(4334 1882)" fill="none"/>
+    <path id="female" d="M14.817,13.279l1.116,1.11c.457.457.92.914,1.377,1.383a.856.856,0,0,1-1.235,1.187c-.665-.653-1.324-1.318-1.983-1.977l-.516-.522a.938.938,0,0,1-.107.16l-2.339,2.339a.837.837,0,0,1-.867.231.813.813,0,0,1-.594-.641.843.843,0,0,1,.261-.819l2.321-2.315a.771.771,0,0,1,.125-.095l-1.395-1.4a5.9,5.9,0,0,1-5.028.968,5.734,5.734,0,0,1-3.383-2.333,5.936,5.936,0,1,1,9.669.107l1.431,1.4c.071-.083.142-.184.231-.273.736-.736,1.466-1.472,2.208-2.2A.859.859,0,1,1,17.3,10.822l-1.6,1.6C15.4,12.7,15.114,12.965,14.817,13.279ZM11.683,7.124a4.244,4.244,0,1,0-4.256,4.232A4.244,4.244,0,0,0,11.683,7.124Z" transform="matrix(0.719, 0.695, -0.695, 0.719, 4348.543, 1882.728)" fill="none"/>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/index_banner2_mob.svg b/PAMapp/assets/images/index_banner2_mob.svg
new file mode 100644
index 0000000..8fe913a
--- /dev/null
+++ b/PAMapp/assets/images/index_banner2_mob.svg
@@ -0,0 +1,331 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375" height="260" viewBox="0 0 375 260">
+  <defs>
+    <clipPath id="clip-path">
+      <rect id="Rectangle_4130" data-name="Rectangle 4130" width="375" height="260" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-2">
+      <rect id="Rectangle_4117" data-name="Rectangle 4117" width="6.086" height="2.169" transform="translate(0 1.24) rotate(-11.752)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-4">
+      <rect id="Rectangle_4119" data-name="Rectangle 4119" width="2.898" height="3.398" transform="translate(0 0.918) rotate(-18.469)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-6">
+      <rect id="Rectangle_4127" data-name="Rectangle 4127" width="6.738" height="2.401" transform="translate(0 0.219) rotate(-1.865)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-7">
+      <rect id="Rectangle_4126" data-name="Rectangle 4126" width="6.737" height="2.401" transform="translate(0 0.219) rotate(-1.865)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-8">
+      <rect id="Rectangle_4129" data-name="Rectangle 4129" width="3.762" height="3.208" transform="matrix(0.32, -0.948, 0.948, 0.32, 0, 3.564)" fill="none"/>
+    </clipPath>
+  </defs>
+  <g id="index_banner2_mob" transform="translate(-1 2)">
+    <g id="Group_3756" data-name="Group 3756" transform="translate(1 -2)" clip-path="url(#clip-path)">
+      <g id="Group_3755" data-name="Group 3755" transform="translate(-122.288 -3)">
+        <rect id="Rectangle_4115" data-name="Rectangle 4115" width="255.5" height="398" transform="translate(118.288 255.5) rotate(-90)" fill="#f2c75c"/>
+        <g id="Group_1432" data-name="Group 1432" transform="translate(117.563 5.098)" opacity="0.3">
+          <g id="Group_1431" data-name="Group 1431" transform="translate(30 -27)">
+            <g id="Group_1428" data-name="Group 1428">
+              <path id="Path_694" data-name="Path 694" d="M51.063,244.1l-11.35-9.312,9.312-11.35,11.35,9.312Zm-10.135-9.432,10.015,8.216,8.217-10.015-10.015-8.216Z" transform="translate(-53.631 -137.82)" fill="#a89968"/>
+              <path id="Path_695" data-name="Path 695" d="M10.931,93.483-8.451,77.576l15.9-19.382L26.834,74.1ZM-6.376,77.376l17.1,14.031L24.758,74.3,7.655,60.273Z" transform="translate(8.451 -32.195)" fill="#a89968"/>
+              <path id="Path_696" data-name="Path 696" d="M183.038,23.894a8.849,8.849,0,1,1,8.849-8.849h0A8.849,8.849,0,0,1,183.038,23.894Zm0-16.222a7.373,7.373,0,1,0,7.373,7.373h0a7.373,7.373,0,0,0-7.372-7.374h0Z" transform="translate(-82.869 -6.197)" fill="#a89968"/>
+              <path id="Path_697" data-name="Path 697" d="M727.219,258.719a8.849,8.849,0,1,1,8.849-8.848h0A8.849,8.849,0,0,1,727.219,258.719Zm0-16.222a7.374,7.374,0,1,0,7.374,7.374,7.374,7.374,0,0,0-7.374-7.374h0Z" transform="translate(-354.96 -123.61)" fill="#a89968"/>
+            </g>
+            <g id="Group_1429" data-name="Group 1429" transform="translate(315.079 25.559)">
+              <circle id="Ellipse_323" data-name="Ellipse 323" cx="16.98" cy="16.98" r="16.98" transform="translate(2.616 1.359)" fill="#f2c75c" opacity="0.5" style="isolation: isolate"/>
+              <path id="Path_4975" data-name="Path 4975" d="M639,91.9a17.3,17.3,0,1,1,17.3-17.3A17.314,17.314,0,0,1,639,91.9Zm0-34.3a17,17,0,1,0,17,17,17.02,17.02,0,0,0-17-17Z" transform="translate(-621.707 -57.314)" fill="#f2c75c"/>
+            </g>
+            <g id="Group_1430" data-name="Group 1430" transform="translate(261.107 13.48)">
+              <path id="Path_4959" data-name="Path 4959" d="M542.974,54.066l-1.69,4.312,14.065,46.006,3.419,1.34Z" transform="translate(-527.523 -43.612)" fill="#a89968"/>
+              <path id="Path_4960" data-name="Path 4960" d="M549.057,38.556l-1.69,4.312L564.541,99.04l3.418,1.34Z" transform="translate(-530.565 -35.856)" fill="#a89968"/>
+              <path id="Path_4961" data-name="Path 4961" d="M536.893,69.578l-1.69,4.313,10.956,35.838,3.419,1.34Z" transform="translate(-524.482 -51.368)" fill="#a89968"/>
+              <path id="Path_4962" data-name="Path 4962" d="M557.324,34.5l-3.419-1.34,20.054,65.594,3.419,1.34Z" transform="translate(-533.833 -33.157)" fill="#a89968"/>
+              <path id="Path_4963" data-name="Path 4963" d="M518.587,125.763l3.418,1.34-3.359-10.99-1.691,4.312Z" transform="translate(-515.359 -74.635)" fill="#a89968"/>
+              <path id="Path_4964" data-name="Path 4964" d="M524.729,100.6l-1.69,4.313,4.74,15.5,3.419,1.341Z" transform="translate(-518.401 -66.88)" fill="#a89968"/>
+              <path id="Path_4965" data-name="Path 4965" d="M530.812,85.09,529.121,89.4l7.848,25.671,3.419,1.34Z" transform="translate(-521.442 -59.123)" fill="#a89968"/>
+              <path id="Path_4966" data-name="Path 4966" d="M569.624,39.32l-3.419-1.341,20.054,65.595,3.419,1.341Z" transform="translate(-539.984 -35.568)" fill="#a89968"/>
+              <path id="Path_4967" data-name="Path 4967" d="M652.495,72.384l.193-.492-.391-.153Z" transform="translate(-583.03 -52.448)" fill="#a89968"/>
+              <path id="Path_4968" data-name="Path 4968" d="M643.417,68.257,640,66.916,643.3,77.729l1.691-4.312Z" transform="translate(-576.88 -50.036)" fill="#a89968"/>
+              <path id="Path_4969" data-name="Path 4969" d="M631.12,63.434,627.7,62.093l6.414,20.98,1.69-4.312Z" transform="translate(-570.732 -47.625)" fill="#a89968"/>
+              <path id="Path_4970" data-name="Path 4970" d="M514.008,131.625l-.246.626.5.2Z" transform="translate(-513.762 -82.391)" fill="#a89968"/>
+              <path id="Path_4971" data-name="Path 4971" d="M594.22,48.965l-3.418-1.34,15.74,51.481,1.69-4.312Z" transform="translate(-552.282 -40.391)" fill="#a89968"/>
+              <path id="Path_4972" data-name="Path 4972" d="M618.819,58.611,615.4,57.27l9.523,31.148,1.69-4.312Z" transform="translate(-564.582 -45.214)" fill="#a89968"/>
+              <path id="Path_4973" data-name="Path 4973" d="M581.921,44.143,578.5,42.8l18.848,61.649,1.691-4.311Z" transform="translate(-546.132 -37.979)" fill="#a89968"/>
+              <path id="Path_4974" data-name="Path 4974" d="M606.52,53.789l-3.419-1.34,12.631,41.314,1.691-4.312Z" transform="translate(-558.432 -42.803)" fill="#a89968"/>
+            </g>
+          </g>
+        </g>
+        <path id="Path_7126" data-name="Path 7126" d="M-17.833,365.587c-23.71-18.11-37.464-66.341,34.457-88.278,14.519-2.706,43.01-7.388,70.173,5.509s68.28,4.028,94.55-12.932,85.263-79.18,224.058-77.792,180.109,80.467,153.542,168.787S109.41,462.776-17.833,365.587Z" transform="translate(140.237 -92.036)" fill="#e0d9c2"/>
+        <path id="Path_7126-2" data-name="Path 7126" d="M35.451,414.4S51.592,471.629-6.738,466.8c-7.085-.586-14.883-2.654-23.876-15.443s-29.341-13.667-45.021-6.877-56.621,37.746-117.877,14.393-60.824-81.508-28.08-134.7S-6.484,334.49,35.451,414.4Z" transform="translate(243.576 -148.292)" fill="#e0d9c2"/>
+        <g id="Group_3691" data-name="Group 3691" transform="translate(128.788 146.821)">
+          <path id="Path_8374" data-name="Path 8374" d="M107.4,485.784s4.834,20.862,5.343,40.706a306,306,0,0,1-1.781,38.926s5.851,3.562,5.851,5.6-4.07,1.272-5.342,1.272-7.632-2.29-8.4-4.58-11.194-74.544-11.194-80.65-1.018,81.413-1.018,81.413,0,6.106-5.088,7.887-3.816-4.325-2.545-6.615c0,0-9.413-49.1-10.94-68.438s8.142-18.827,16.538-20.608S102.821,479.169,107.4,485.784Z" transform="translate(-43.065 -382.697)" fill="#67737a"/>
+          <path id="Path_8375" data-name="Path 8375" d="M132.466,360.829s-.254-5.089-1.781-7.887c0,0-2.544-4.834-2.544-6.361a7.328,7.328,0,0,0-1.018-2.8c-.763-1.018-2.29-2.544-2.035-3.562,0,0-.255-.763,1.018-.763a3.467,3.467,0,0,1,2.289,1.272,1.342,1.342,0,0,0,1.781-.763c.509-1.272,1.527-2.035,4.579-1.018s5.089,3.307,4.834,5.343a36.882,36.882,0,0,1-3.053,8.9c-1.018,1.781,0,4.579.509,5.852S133.483,361.846,132.466,360.829Z" transform="translate(-69.53 -312.059)" fill="#feecdc"/>
+          <path id="Path_8376" data-name="Path 8376" d="M72.818,319.5c0-.028-.005-.056-.008-.084-1.271-10.386-9.479-17.927-18.332-16.843s-15,10.381-13.729,20.767c.005.043.013.085.019.128-1.318-.151-4.113-.075-2.687,3.641,1.161,3.024,3.223,3.184,4.583,2.893,2.819,5.973,8.182,10,14.1,10.268.1,1.591-1.057,2.946-2.808,5.185,0,0,3.081,8.745,10.555,8.456s7.285-12.4,7.285-12.4-4.6-1.393-6.5-3.682a18.015,18.015,0,0,0,7.253-11.471c1.371-.1,3.174-.836,3.554-3.9C76.574,318.7,74.128,319.058,72.818,319.5Z" transform="translate(-25.843 -294.056)" fill="#feecdc"/>
+          <path id="Path_8377" data-name="Path 8377" d="M39.606,321.7l.255,1.781s-3.181.636-3.944-.127-3.434-7.251,1.4-14.375,26.332-10.558,32.946-1.908c4.68,6.12,2.8,10.176,2.29,11.7-.254.764-1.526.764-2.035.764,0,0-.255-2.036-.763-4.326,0,0-1.272-6.106-5.343-6.106-5.088,0-21.371,4.071-23.406,5.343S39.1,318.393,39.606,321.7Z" transform="translate(-24.246 -293.794)" fill="#221e1f"/>
+          <path id="Path_8378" data-name="Path 8378" d="M32.732,315.329s-2.8-7.124.509-11.194,25.837-12.071,34.29-4.128c0,0,.311-3.5-1.979-5.031,0,0,6.614-.763,6.36-2.8s-2.289-2.29-5.6-2.29-4.071-1.272-4.071-1.272-5.343-4.325-9.668-2.544a112.516,112.516,0,0,1-14.5,4.325c-1.526.254-10.431,3.307-10.685,11.194S28.407,315.075,32.732,315.329Z" transform="translate(-20.679 -285.642)" fill="#67737a"/>
+          <path id="Path_8379" data-name="Path 8379" d="M42.208,380.336s1.527,2.035,7.378,1.272a14,14,0,0,0,8.9-4.833s19.59-1.781,25.7,17.046,9.413,51.392,8.65,55.463c0,0-.255,1.781-1.526,2.036,0,0-14.247,1.272-16.029,1.272s-3.816.254-4.325-.764.128-3.943.128-3.943V437.707s-8.905,2.8-15.265,2.544c0,0,1.272,12.466,1.018,13.993s-.509,1.527-2.29,1.781c0,0-19.081,2.29-20.862,2.544s-2.035.255-2.035-1.526-.254-9.159-.254-11.7c0,0-11.194-6.36-13.993-10.685s-4.325-8.142-2.8-12.212,5.851-20.862,8.4-26.714S34.957,380.464,42.208,380.336Z" transform="translate(-14 -331.186)" fill="#f09491"/>
+          <path id="Path_8380" data-name="Path 8380" d="M136.689,379.6s4.834-2.8,9.414-2.544a23.471,23.471,0,0,1,2.035,2.29c.509.763,13.484,28.24,8.65,32.82,0,0-2.29,3.307-9.159,2.035S135.671,381.128,136.689,379.6Z" transform="translate(-75.28 -331.341)" fill="#e78b88"/>
+          <path id="Path_8381" data-name="Path 8381" d="M61.861,334.712a4.1,4.1,0,0,1,3.043-.633" transform="translate(-37.931 -309.824)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+          <g id="Group_3679" data-name="Group 3679" transform="translate(25.267 27.521)">
+            <path id="Path_8382" data-name="Path 8382" d="M65.072,340.9a2.963,2.963,0,0,1,2.617.187" transform="translate(-64.803 -340.684)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+            <path id="Path_8383" data-name="Path 8383" d="M64.534,342.352a4.1,4.1,0,0,1,2.989-.852" transform="translate(-64.534 -341.077)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+          </g>
+          <path id="Path_8384" data-name="Path 8384" d="M85.954,329.7A4.1,4.1,0,0,1,89,329.067" transform="translate(-49.977 -307.318)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+          <g id="Group_3684" data-name="Group 3684" transform="translate(31.403 36.565)" opacity="0.8">
+            <g id="Group_3683" data-name="Group 3683">
+              <g id="Group_3682" data-name="Group 3682" clip-path="url(#clip-path-2)">
+                <g id="Group_3681" data-name="Group 3681">
+                  <g id="Group_3680" data-name="Group 3680" clip-path="url(#clip-path-2)">
+                    <path id="Path_8385" data-name="Path 8385" d="M76.807,360.011s1.616,1.88,3.421,1.5,2.538-2.744,2.538-2.744" transform="translate(-76.807 -358.771)" fill="#db727c"/>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <g id="Group_3689" data-name="Group 3689" transform="translate(31.581 29.922)" opacity="0.8">
+            <g id="Group_3688" data-name="Group 3688">
+              <g id="Group_3687" data-name="Group 3687" clip-path="url(#clip-path-4)">
+                <g id="Group_3686" data-name="Group 3686">
+                  <g id="Group_3685" data-name="Group 3685" clip-path="url(#clip-path-4)">
+                    <path id="Path_8386" data-name="Path 8386" d="M80.473,346.4s1.5,1.807,1.2,2.4-2.109.933-2.109.933" transform="translate(-78.364 -345.944)" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <path id="Path_8387" data-name="Path 8387" d="M89.044,335.141a1.088,1.088,0,1,1-1.286-.844,1.088,1.088,0,0,1,1.286.844" transform="translate(-50.445 -309.958)" fill="#221e1f"/>
+          <g id="Group_3690" data-name="Group 3690" transform="translate(29.012 7.213)">
+            <path id="Path_8388" data-name="Path 8388" d="M141.729,348.07a1.947,1.947,0,0,1-.813-.178L117,336.952a1.957,1.957,0,1,1,1.629-3.559l23.915,10.94a1.958,1.958,0,0,1-.815,3.738Z" transform="translate(-93.941 -316.641)" fill="#72502b"/>
+            <path id="Path_8389" data-name="Path 8389" d="M85.34,326.7a13.316,13.316,0,1,1,13.316-13.316A13.331,13.331,0,0,1,85.34,326.7Zm0-23.152a9.836,9.836,0,1,0,9.836,9.836A9.847,9.847,0,0,0,85.34,303.547Z" transform="translate(-72.024 -300.068)" fill="#d1232e"/>
+          </g>
+          <path id="Path_8390" data-name="Path 8390" d="M139.064,336.379a2.59,2.59,0,0,0-3.307.255c-1.526,1.526-3.307,3.816-2.289,4.834,0,0-.255,1.526,1.017,1.526,0,0,0,1.526,2.29,1.272,0,0,.763,1.781,3.053.254,0,0,3.307-2.544,3.053-4.579S139.064,336.379,139.064,336.379Z" transform="translate(-73.584 -310.762)" fill="#feecdc"/>
+        </g>
+        <g id="Group_3716" data-name="Group 3716" transform="translate(199.147 119.483)" opacity="0.5">
+          <g id="Group_3692" data-name="Group 3692" transform="translate(49.086)">
+            <path id="Path_8391" data-name="Path 8391" d="M218.144,225.36a1.724,1.724,0,0,0-.2.658h19.993q.026-.387.049-.778l.117.019a1.968,1.968,0,0,0-.039-1.426,29.471,29.471,0,0,0-.084-6.067,2.98,2.98,0,0,0-2.267-2.38,14.307,14.307,0,0,1-4.56-1.542,4.175,4.175,0,0,0-.2-.724.826.826,0,0,1-.094.19c-.02.035-.044.074-.072.116,0-.243,0-.476,0-.685a10.769,10.769,0,0,0,.929-2.552c.049,0,1.022-.39,1.158-.923.167-.631,1.067-1.344,1.02-1.814-.021-.209-.246-.366-.494-.492a.212.212,0,0,0,.041-.075,7.039,7.039,0,0,0,.226-4.194c.525-.681.986-1.884.68-1.7a4.955,4.955,0,0,1-2.38.34c-2.068-2.068-7.812-1.57-7.812-1.57s-2.049.21-2.616,4.517v.907c.029.559.128.364.371,1.244.088.319.154.454.2.474l-.008.323c-.227,4.42,1.088,4.885,1.628,5.7-.049.321-.1.711-.145,1.1.048.078.108.174.181.286-.03-.031-.058-.061-.083-.088-.106-.134-.165-.206-.165-.206,0,.045-.009.09-.014.134-.309.518-1.378,1.163-4.236,2.372-2.947,1.247-1.535,5.171-1.535,5.171S218.824,224.227,218.144,225.36Z" transform="translate(-215.976 -198.018)" fill="#fff" opacity="0.5"/>
+            <path id="Path_8392" data-name="Path 8392" d="M215.083,221.738a1.717,1.717,0,0,0-.2.658h19.993q.025-.386.049-.778l.117.018a1.968,1.968,0,0,0-.039-1.426,29.431,29.431,0,0,0-.084-6.066,2.981,2.981,0,0,0-2.267-2.381,14.308,14.308,0,0,1-4.56-1.541,4.166,4.166,0,0,0-.2-.724.825.825,0,0,1-.094.19c-.02.034-.044.073-.071.116,0-.243,0-.476,0-.685a10.747,10.747,0,0,0,.929-2.552c.049,0,1.022-.39,1.158-.923.167-.631,1.067-1.344,1.02-1.814-.021-.209-.246-.367-.494-.492a.215.215,0,0,0,.04-.075,7.047,7.047,0,0,0,.227-4.194c.524-.681.986-1.884.68-1.7a4.957,4.957,0,0,1-2.381.34c-2.068-2.068-7.812-1.57-7.812-1.57s-2.049.209-2.616,4.517v.907c.03.559.128.364.371,1.244.088.319.155.454.2.474l-.008.322c-.227,4.421,1.088,4.885,1.628,5.7-.05.321-.1.71-.146,1.1.048.077.108.174.181.286-.03-.031-.058-.061-.083-.089-.106-.134-.165-.205-.165-.205,0,.045-.009.089-.013.134-.31.518-1.378,1.163-4.236,2.372-2.947,1.247-1.535,5.171-1.535,5.171S215.762,220.6,215.083,221.738Z" transform="translate(-214.343 -196.086)" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4"/>
+          </g>
+          <g id="Group_3693" data-name="Group 3693" transform="translate(0 8.596)">
+            <path id="Path_8393" data-name="Path 8393" d="M115.39,232.1a16.311,16.311,0,0,0,1.942-3.8,3.856,3.856,0,0,0,.326.321,5.737,5.737,0,0,0,3.978,2.97,1.647,1.647,0,0,1-.509.985c-.009-.034-.016-.062-.022-.084s-.113,0-.124,0a.806.806,0,0,0-.125.125c0,.017-.006.035-.01.052a13.743,13.743,0,0,0-7.577,7.967h20.843a16.611,16.611,0,0,0-.063-2.239c-.391-3.9-5.827-5.518-7.088-5.842,0-.021-.007-.042-.012-.063,0,0-.283-.054-.3-.028a.519.519,0,0,1-.01.1,5.238,5.238,0,0,1-1.891-1.463,6.405,6.405,0,0,0,3.055-3.735h.033c-.043.447-.085.763-.085.763a3.25,3.25,0,0,0,.317-.774c.441-.056.937-.331,1.158-1.213.242-.968-.179-1.207-.609-1.224.011-.064.017-.1.017-.1a8.391,8.391,0,0,0-.331-4.748c-2.65-4.417-7.509-2.871-7.509-2.871a5.944,5.944,0,0,0-5.185,4.185,1.19,1.19,0,0,0-1.551.784c-1.1,2.429-.884,4.637.221,5.962A7.1,7.1,0,0,1,115.39,232.1Zm2.012-3.987q.114.249.246.485a1.576,1.576,0,0,1-.272-.417Z" transform="translate(-111.346 -215.802)" fill="#fff" opacity="0.5"/>
+            <path id="Path_8394" data-name="Path 8394" d="M111.266,229.677a16.32,16.32,0,0,0,1.942-3.8,3.652,3.652,0,0,0,.326.322,5.736,5.736,0,0,0,3.978,2.97,1.644,1.644,0,0,1-.509.985c-.009-.033-.016-.062-.022-.084s-.113,0-.124,0a.783.783,0,0,0-.125.124c0,.018-.007.035-.01.053a13.74,13.74,0,0,0-7.577,7.967h20.843a16.535,16.535,0,0,0-.063-2.239c-.39-3.9-5.827-5.518-7.088-5.842l-.012-.063s-.283-.054-.3-.028a.524.524,0,0,1-.01.1,5.236,5.236,0,0,1-1.89-1.463,6.405,6.405,0,0,0,3.055-3.735h.033c-.044.447-.085.763-.085.763a3.271,3.271,0,0,0,.317-.774c.441-.056.937-.331,1.158-1.214.242-.968-.179-1.206-.609-1.224.011-.063.017-.1.017-.1a8.391,8.391,0,0,0-.331-4.748c-2.65-4.416-7.508-2.871-7.508-2.871a5.944,5.944,0,0,0-5.185,4.184,1.191,1.191,0,0,0-1.551.784c-1.1,2.429-.883,4.638.221,5.963A7.1,7.1,0,0,1,111.266,229.677Zm2.011-3.987q.115.249.246.485a1.576,1.576,0,0,1-.271-.417Z" transform="translate(-109.146 -214.508)" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
+          </g>
+          <g id="Group_3694" data-name="Group 3694" transform="translate(20.193 25.386)">
+            <path id="Path_8395" data-name="Path 8395" d="M191.573,289.678c-.046-2.952-.126-7.538-1.251-10.124,0,0-.29-1.017-2.76-1.743,0,0-5.9-4.036-9.593-3.8l0-.016-.011.017-.073,0c-.119-.489-.25-.976-.366-1.376a6.266,6.266,0,0,0,.664-3.768c-.055-.335.478.048.64-.589.312-1.194.987-3.655.084-4.13-.056-.028-.1-.047-.138-.066-.026.187-.055.372-.085.553.03-.182.059-.367.085-.553a16.762,16.762,0,0,0,.2-3.1c-.381-5.719-4.153-5.01-4.153-5.01s-.56-2.387-4.323-1.78c-1.381.216-6.937,3.959-5.085,5.811.145.145-2.682,1.131-1.082,4.426.23.472.458,1.083.71,1.689h0c-.281.453.084,1.893.7,3.4a1.868,1.868,0,0,0,1.184.948,13.812,13.812,0,0,0,1.6,3.091c.038.266.077.562.114.872-.042-.049-.079-.1-.11-.136a1.069,1.069,0,0,1-.15-.226,5.455,5.455,0,0,0-.1.549,15.916,15.916,0,0,0-8.9,4.923,3.6,3.6,0,0,0-2.033,2.18,50.734,50.734,0,0,0,.123,7.944Z" transform="translate(-154.992 -252.419)" fill="#fff" opacity="0.75"/>
+            <path id="Path_8396" data-name="Path 8396" d="M186.754,286.064c-.046-2.952-.126-7.538-1.251-10.123,0,0-.291-1.017-2.76-1.744,0,0-5.9-4.036-9.592-3.8l0-.016-.011.017-.074,0c-.118-.489-.25-.976-.366-1.375a6.265,6.265,0,0,0,.664-3.768c-.055-.335.479.049.64-.589.312-1.195.987-3.655.084-4.13-.056-.028-.1-.047-.138-.066-.027.187-.055.372-.086.553.031-.182.059-.367.085-.553a16.722,16.722,0,0,0,.2-3.1c-.381-5.719-4.153-5.01-4.153-5.01s-.56-2.387-4.322-1.78c-1.382.216-6.937,3.959-5.085,5.811.146.145-2.682,1.131-1.081,4.426.23.472.457,1.083.709,1.689h0c-.281.453.083,1.893.7,3.4a1.869,1.869,0,0,0,1.185.948,13.8,13.8,0,0,0,1.6,3.091c.038.265.078.562.115.872-.042-.049-.079-.1-.11-.136a1.072,1.072,0,0,1-.151-.226,5.322,5.322,0,0,0-.1.549,15.915,15.915,0,0,0-8.9,4.923,3.6,3.6,0,0,0-2.034,2.179,50.694,50.694,0,0,0,.123,7.944Z" transform="translate(-152.421 -250.491)" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
+          </g>
+          <g id="Group_3701" data-name="Group 3701" transform="translate(51.018 18.575)" opacity="0.5">
+            <g id="Group_3696" data-name="Group 3696">
+              <path id="Path_8397" data-name="Path 8397" d="M221.184,235.941l.747,1.512a.085.085,0,0,0,.063.046l1.669.242a.084.084,0,0,1,.047.144l-1.208,1.177a.085.085,0,0,0-.024.075l.285,1.662a.084.084,0,0,1-.122.089l-1.493-.784a.083.083,0,0,0-.078,0l-1.493.784a.084.084,0,0,1-.122-.089l.285-1.662a.084.084,0,0,0-.024-.075l-1.208-1.177a.084.084,0,0,1,.047-.144l1.669-.242a.085.085,0,0,0,.063-.046l.746-1.512A.084.084,0,0,1,221.184,235.941Z" transform="translate(-218.482 -235.895)" fill="#ffc301"/>
+              <g id="Group_3695" data-name="Group 3695" transform="translate(0.34 0.396)">
+                <path id="Path_8398" data-name="Path 8398" d="M221.5,236.744l-.665,1.288a.223.223,0,0,1-.178.12l-1.444.132,1.525.071a.222.222,0,0,0,.219-.145Z" transform="translate(-219.211 -236.744)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8399" data-name="Path 8399" d="M220.6,242.628l-.033.191a.084.084,0,0,0,.122.089l1.493-.784a.083.083,0,0,1,.078,0l1.493.784a.084.084,0,0,0,.122-.089l-.285-1.662a.085.085,0,0,1,.024-.075l1.208-1.177a.084.084,0,0,0-.047-.144l-.559-.081A6.445,6.445,0,0,1,220.6,242.628Z" transform="translate(-219.592 -237.914)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3698" data-name="Group 3698" transform="translate(5.996)">
+              <path id="Path_8400" data-name="Path 8400" d="M234.035,235.941l.746,1.512a.085.085,0,0,0,.063.046l1.669.242a.084.084,0,0,1,.047.144l-1.208,1.177a.083.083,0,0,0-.024.075l.285,1.662a.084.084,0,0,1-.122.089L234,240.1a.083.083,0,0,0-.078,0l-1.493.784a.084.084,0,0,1-.122-.089l.285-1.662a.085.085,0,0,0-.024-.075l-1.208-1.177a.084.084,0,0,1,.047-.144l1.669-.242a.085.085,0,0,0,.063-.046l.747-1.512A.084.084,0,0,1,234.035,235.941Z" transform="translate(-231.333 -235.895)" fill="#ffc301"/>
+              <g id="Group_3697" data-name="Group 3697" transform="translate(0.34 0.396)">
+                <path id="Path_8401" data-name="Path 8401" d="M234.348,236.744l-.665,1.288a.222.222,0,0,1-.177.12l-1.444.132,1.526.071a.222.222,0,0,0,.219-.145Z" transform="translate(-232.061 -236.744)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8402" data-name="Path 8402" d="M233.448,242.628l-.033.191a.084.084,0,0,0,.122.089l1.493-.784a.083.083,0,0,1,.078,0l1.493.784a.084.084,0,0,0,.122-.089l-.285-1.662a.084.084,0,0,1,.024-.075l1.208-1.177a.084.084,0,0,0-.047-.144l-.559-.081A6.447,6.447,0,0,1,233.448,242.628Z" transform="translate(-232.443 -237.914)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3700" data-name="Group 3700" transform="translate(11.992)">
+              <path id="Path_8403" data-name="Path 8403" d="M246.885,235.941l.746,1.512a.086.086,0,0,0,.063.046l1.669.242a.084.084,0,0,1,.047.144l-1.208,1.177a.084.084,0,0,0-.024.075l.285,1.662a.084.084,0,0,1-.122.089l-1.493-.784a.083.083,0,0,0-.078,0l-1.493.784a.084.084,0,0,1-.122-.089l.285-1.662a.083.083,0,0,0-.024-.075l-1.208-1.177a.084.084,0,0,1,.047-.144l1.669-.242a.086.086,0,0,0,.063-.046l.746-1.512A.084.084,0,0,1,246.885,235.941Z" transform="translate(-244.183 -235.895)" fill="#ffc301"/>
+              <g id="Group_3699" data-name="Group 3699" transform="translate(0.34 0.396)">
+                <path id="Path_8404" data-name="Path 8404" d="M247.2,236.744l-.665,1.288a.224.224,0,0,1-.178.12l-1.444.132,1.526.071a.222.222,0,0,0,.219-.145Z" transform="translate(-244.911 -236.744)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8405" data-name="Path 8405" d="M246.3,242.628l-.033.191a.084.084,0,0,0,.122.089l1.493-.784a.083.083,0,0,1,.078,0l1.493.784a.084.084,0,0,0,.122-.089l-.285-1.662a.084.084,0,0,1,.024-.075l1.208-1.177a.084.084,0,0,0-.047-.144l-.559-.081A6.446,6.446,0,0,1,246.3,242.628Z" transform="translate(-245.293 -237.914)" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3708" data-name="Group 3708" transform="translate(5.809 28.037)" opacity="0.5">
+            <g id="Group_3703" data-name="Group 3703">
+              <path id="Path_8406" data-name="Path 8406" d="M123.372,256.2l.491,1a.056.056,0,0,0,.042.03l1.1.16a.055.055,0,0,1,.031.094l-.795.775a.056.056,0,0,0-.016.049l.188,1.094a.055.055,0,0,1-.08.058l-.982-.516a.055.055,0,0,0-.051,0l-.982.516a.056.056,0,0,1-.081-.058l.188-1.094a.055.055,0,0,0-.016-.049l-.794-.775a.055.055,0,0,1,.03-.094l1.1-.16a.056.056,0,0,0,.042-.03l.491-1A.055.055,0,0,1,123.372,256.2Z" transform="translate(-121.595 -256.173)" fill="#ffc301"/>
+              <g id="Group_3702" data-name="Group 3702" transform="translate(0.224 0.261)">
+                <path id="Path_8407" data-name="Path 8407" d="M123.578,256.732l-.438.847a.146.146,0,0,1-.117.079l-.95.087,1,.047a.146.146,0,0,0,.144-.1Z" transform="translate(-122.074 -256.732)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8408" data-name="Path 8408" d="M122.986,260.6l-.022.126a.056.056,0,0,0,.081.058l.982-.516a.055.055,0,0,1,.051,0l.982.516a.055.055,0,0,0,.08-.058l-.188-1.094a.056.056,0,0,1,.016-.049l.795-.775a.055.055,0,0,0-.031-.094l-.368-.054A4.241,4.241,0,0,1,122.986,260.6Z" transform="translate(-122.325 -257.502)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3705" data-name="Group 3705" transform="translate(3.945)">
+              <path id="Path_8409" data-name="Path 8409" d="M131.827,256.2l.491,1a.055.055,0,0,0,.042.03l1.1.16a.055.055,0,0,1,.031.094l-.795.775a.056.056,0,0,0-.016.049l.188,1.094a.055.055,0,0,1-.08.058l-.982-.516a.056.056,0,0,0-.052,0l-.982.516a.056.056,0,0,1-.081-.058l.188-1.094a.055.055,0,0,0-.016-.049l-.795-.775a.055.055,0,0,1,.031-.094l1.1-.16a.057.057,0,0,0,.042-.03l.491-1A.055.055,0,0,1,131.827,256.2Z" transform="translate(-130.049 -256.173)" fill="#ffc301"/>
+              <g id="Group_3704" data-name="Group 3704" transform="translate(0.223 0.261)">
+                <path id="Path_8410" data-name="Path 8410" d="M132.033,256.732l-.438.847a.146.146,0,0,1-.117.079l-.951.087,1,.047a.146.146,0,0,0,.144-.1Z" transform="translate(-130.528 -256.732)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8411" data-name="Path 8411" d="M131.441,260.6l-.022.126a.056.056,0,0,0,.081.058l.982-.516a.056.056,0,0,1,.052,0l.982.516a.055.055,0,0,0,.08-.058l-.188-1.094a.056.056,0,0,1,.016-.049l.795-.775a.055.055,0,0,0-.031-.094l-.368-.054A4.241,4.241,0,0,1,131.441,260.6Z" transform="translate(-130.78 -257.502)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3707" data-name="Group 3707" transform="translate(7.89)">
+              <path id="Path_8412" data-name="Path 8412" d="M140.282,256.2l.491,1a.057.057,0,0,0,.042.03l1.1.16a.055.055,0,0,1,.031.094l-.795.775a.055.055,0,0,0-.016.049l.188,1.094a.055.055,0,0,1-.081.058l-.982-.516a.056.056,0,0,0-.052,0l-.982.516a.055.055,0,0,1-.081-.058l.188-1.094a.055.055,0,0,0-.016-.049l-.795-.775a.055.055,0,0,1,.031-.094l1.1-.16a.057.057,0,0,0,.042-.03l.491-1A.055.055,0,0,1,140.282,256.2Z" transform="translate(-138.504 -256.173)" fill="#ffc301"/>
+              <g id="Group_3706" data-name="Group 3706" transform="translate(0.223 0.261)">
+                <path id="Path_8413" data-name="Path 8413" d="M140.488,256.732l-.438.847a.146.146,0,0,1-.117.079l-.95.087,1,.047a.147.147,0,0,0,.145-.1Z" transform="translate(-138.983 -256.732)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8414" data-name="Path 8414" d="M139.9,260.6l-.021.126a.055.055,0,0,0,.081.058l.982-.516a.056.056,0,0,1,.052,0l.982.516a.055.055,0,0,0,.081-.058l-.188-1.094a.055.055,0,0,1,.016-.049l.795-.775a.055.055,0,0,0-.031-.094l-.368-.054A4.241,4.241,0,0,1,139.9,260.6Z" transform="translate(-139.234 -257.502)" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3715" data-name="Group 3715" transform="translate(27.187 52.219)" opacity="0.5">
+            <g id="Group_3710" data-name="Group 3710">
+              <path id="Path_8415" data-name="Path 8415" d="M170.563,308.052l.871,1.765a.1.1,0,0,0,.074.054l1.948.283a.1.1,0,0,1,.054.168L172.1,311.7a.1.1,0,0,0-.028.087l.333,1.939a.1.1,0,0,1-.143.1l-1.742-.916a.1.1,0,0,0-.092,0l-1.742.916a.1.1,0,0,1-.142-.1l.332-1.939a.1.1,0,0,0-.028-.087l-1.409-1.374a.1.1,0,0,1,.055-.168l1.947-.283a.1.1,0,0,0,.074-.054l.871-1.765A.1.1,0,0,1,170.563,308.052Z" transform="translate(-167.41 -307.997)" fill="#ffc301"/>
+              <g id="Group_3709" data-name="Group 3709" transform="translate(0.397 0.462)">
+                <path id="Path_8416" data-name="Path 8416" d="M170.929,308.988l-.776,1.5a.259.259,0,0,1-.207.14l-1.685.154,1.78.083a.26.26,0,0,0,.256-.169Z" transform="translate(-168.26 -308.988)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8417" data-name="Path 8417" d="M169.878,315.855l-.038.223a.1.1,0,0,0,.142.1l1.742-.916a.1.1,0,0,1,.092,0l1.742.916a.1.1,0,0,0,.143-.1l-.333-1.939a.1.1,0,0,1,.028-.087l1.409-1.374a.1.1,0,0,0-.054-.168l-.652-.1A7.521,7.521,0,0,1,169.878,315.855Z" transform="translate(-168.706 -310.354)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3712" data-name="Group 3712" transform="translate(6.997)">
+              <path id="Path_8418" data-name="Path 8418" d="M185.559,308.052l.871,1.765a.1.1,0,0,0,.074.054l1.947.283a.1.1,0,0,1,.055.168L187.1,311.7a.1.1,0,0,0-.028.087l.333,1.939a.1.1,0,0,1-.143.1l-1.742-.916a.1.1,0,0,0-.091,0l-1.742.916a.1.1,0,0,1-.143-.1l.333-1.939a.1.1,0,0,0-.028-.087l-1.409-1.374a.1.1,0,0,1,.055-.168l1.948-.283a.1.1,0,0,0,.074-.054l.871-1.765A.1.1,0,0,1,185.559,308.052Z" transform="translate(-182.406 -307.997)" fill="#ffc301"/>
+              <g id="Group_3711" data-name="Group 3711" transform="translate(0.397 0.462)">
+                <path id="Path_8419" data-name="Path 8419" d="M185.925,308.988l-.776,1.5a.26.26,0,0,1-.207.14l-1.685.154,1.781.083a.259.259,0,0,0,.256-.169Z" transform="translate(-183.256 -308.988)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8420" data-name="Path 8420" d="M184.875,315.855l-.038.223a.1.1,0,0,0,.143.1l1.742-.916a.1.1,0,0,1,.091,0l1.742.916a.1.1,0,0,0,.143-.1l-.333-1.939a.1.1,0,0,1,.028-.087l1.409-1.374a.1.1,0,0,0-.055-.168l-.652-.1A7.52,7.52,0,0,1,184.875,315.855Z" transform="translate(-183.702 -310.354)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3714" data-name="Group 3714" transform="translate(13.995)">
+              <path id="Path_8421" data-name="Path 8421" d="M200.556,308.052l.871,1.765a.1.1,0,0,0,.074.054l1.948.283a.1.1,0,0,1,.055.168l-1.409,1.374a.1.1,0,0,0-.028.087l.333,1.939a.1.1,0,0,1-.143.1l-1.742-.916a.1.1,0,0,0-.091,0l-1.742.916a.1.1,0,0,1-.143-.1l.333-1.939a.1.1,0,0,0-.028-.087l-1.409-1.374a.1.1,0,0,1,.055-.168l1.947-.283a.1.1,0,0,0,.074-.054l.871-1.765A.1.1,0,0,1,200.556,308.052Z" transform="translate(-197.403 -307.997)" fill="#ffc301"/>
+              <g id="Group_3713" data-name="Group 3713" transform="translate(0.397 0.462)">
+                <path id="Path_8422" data-name="Path 8422" d="M200.922,308.988l-.776,1.5a.259.259,0,0,1-.207.14l-1.685.154,1.78.083a.259.259,0,0,0,.256-.169Z" transform="translate(-198.253 -308.988)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8423" data-name="Path 8423" d="M199.872,315.855l-.038.223a.1.1,0,0,0,.143.1l1.742-.916a.1.1,0,0,1,.091,0l1.742.916a.1.1,0,0,0,.143-.1l-.333-1.939a.1.1,0,0,1,.028-.087l1.409-1.374a.1.1,0,0,0-.055-.168l-.652-.1A7.52,7.52,0,0,1,199.872,315.855Z" transform="translate(-198.699 -310.354)" fill="#f3b411"/>
+            </g>
+          </g>
+        </g>
+        <g id="Group_3742" data-name="Group 3742" transform="translate(275.574 159.787)" opacity="0.5">
+          <g id="Group_3727" data-name="Group 3727" transform="translate(67.583 68.424)">
+            <g id="Group_3718" data-name="Group 3718" transform="translate(29.097 8.709)">
+              <path id="Path_8424" data-name="Path 8424" d="M504.49,465.9l.982,1.991a.112.112,0,0,0,.083.061l2.2.319a.111.111,0,0,1,.061.19l-1.59,1.55a.111.111,0,0,0-.032.1l.375,2.188a.111.111,0,0,1-.161.117l-1.966-1.033a.111.111,0,0,0-.1,0l-1.966,1.033a.111.111,0,0,1-.161-.117l.375-2.188a.109.109,0,0,0-.032-.1l-1.59-1.55a.111.111,0,0,1,.062-.19l2.2-.319a.11.11,0,0,0,.083-.061l.983-1.991A.111.111,0,0,1,504.49,465.9Z" transform="translate(-500.932 -465.84)" fill="#ffc301"/>
+              <g id="Group_3717" data-name="Group 3717" transform="translate(0.447 0.522)">
+                <path id="Path_8425" data-name="Path 8425" d="M504.838,466.884l-.876,1.7a.293.293,0,0,1-.233.157l-1.9.174,2.009.094a.293.293,0,0,0,.289-.191Z" transform="translate(-501.827 -466.884)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8426" data-name="Path 8426" d="M503.534,474.374l-.043.251a.111.111,0,0,0,.161.117l1.966-1.033a.111.111,0,0,1,.1,0l1.965,1.033a.111.111,0,0,0,.161-.117l-.375-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.111.111,0,0,0-.062-.19l-.736-.107A8.487,8.487,0,0,1,503.534,474.374Z" transform="translate(-502.211 -468.166)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3720" data-name="Group 3720" transform="translate(19.959 11.12)">
+              <path id="Path_8427" data-name="Path 8427" d="M485.178,470.707l.7,1.411a.08.08,0,0,0,.059.043l1.557.226a.079.079,0,0,1,.044.135l-1.128,1.1a.078.078,0,0,0-.022.069l.266,1.552a.079.079,0,0,1-.114.083l-1.393-.733a.08.08,0,0,0-.074,0l-1.393.733a.079.079,0,0,1-.114-.083l.266-1.552a.078.078,0,0,0-.022-.069l-1.128-1.1a.079.079,0,0,1,.044-.135l1.558-.226a.08.08,0,0,0,.059-.043l.7-1.411A.079.079,0,0,1,485.178,470.707Z" transform="translate(-482.656 -470.663)" fill="#ffc301"/>
+              <g id="Group_3719" data-name="Group 3719" transform="translate(0.317 0.37)">
+                <path id="Path_8428" data-name="Path 8428" d="M485.424,471.4l-.621,1.2a.208.208,0,0,1-.165.111l-1.348.123,1.424.066a.208.208,0,0,0,.2-.135Z" transform="translate(-483.29 -471.403)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8429" data-name="Path 8429" d="M484.5,476.712l-.03.178a.079.079,0,0,0,.114.083l1.393-.733a.08.08,0,0,1,.073,0l1.393.733a.079.079,0,0,0,.114-.083l-.266-1.552a.078.078,0,0,1,.022-.069l1.128-1.1a.079.079,0,0,0-.044-.135l-.522-.076A6.018,6.018,0,0,1,484.5,476.712Z" transform="translate(-483.562 -472.312)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3722" data-name="Group 3722" transform="translate(0 8.314)">
+              <path id="Path_8430" data-name="Path 8430" d="M444.85,465.087l.583,1.183a.068.068,0,0,0,.05.036l1.3.189a.066.066,0,0,1,.036.112l-.944.921a.067.067,0,0,0-.019.059l.223,1.3a.066.066,0,0,1-.1.069l-1.167-.613a.067.067,0,0,0-.062,0l-1.167.613a.066.066,0,0,1-.1-.069l.223-1.3a.067.067,0,0,0-.019-.059l-.945-.921a.066.066,0,0,1,.036-.112l1.3-.189a.066.066,0,0,0,.049-.036l.584-1.183A.066.066,0,0,1,444.85,465.087Z" transform="translate(-442.737 -465.051)" fill="#ffc301"/>
+              <g id="Group_3721" data-name="Group 3721" transform="translate(0.265 0.31)">
+                <path id="Path_8431" data-name="Path 8431" d="M445.057,465.671l-.52,1.008a.176.176,0,0,1-.139.093l-1.13.1,1.193.055a.173.173,0,0,0,.171-.113Z" transform="translate(-443.268 -465.671)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8432" data-name="Path 8432" d="M444.282,470.119l-.025.149a.066.066,0,0,0,.1.07l1.167-.614a.067.067,0,0,1,.061,0l1.168.614a.066.066,0,0,0,.1-.07l-.223-1.3a.067.067,0,0,1,.019-.059l.944-.921a.066.066,0,0,0-.036-.112l-.437-.064A5.039,5.039,0,0,1,444.282,470.119Z" transform="translate(-443.497 -466.432)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3724" data-name="Group 3724" transform="translate(10.919 10.69)">
+              <path id="Path_8433" data-name="Path 8433" d="M466.689,469.839l.583,1.182a.067.067,0,0,0,.05.036l1.3.19a.066.066,0,0,1,.037.112l-.944.921a.066.066,0,0,0-.019.058l.223,1.3a.066.066,0,0,1-.1.07l-1.167-.614a.067.067,0,0,0-.061,0l-1.167.614a.066.066,0,0,1-.1-.07l.223-1.3a.066.066,0,0,0-.019-.058l-.945-.921a.066.066,0,0,1,.036-.112l1.305-.19a.065.065,0,0,0,.049-.036l.584-1.182A.066.066,0,0,1,466.689,469.839Z" transform="translate(-464.576 -469.803)" fill="#ffc301"/>
+              <g id="Group_3723" data-name="Group 3723" transform="translate(0.265 0.31)">
+                <path id="Path_8434" data-name="Path 8434" d="M466.9,470.422l-.52,1.008a.176.176,0,0,1-.139.094l-1.13.1,1.193.056a.173.173,0,0,0,.171-.114Z" transform="translate(-465.107 -470.422)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8435" data-name="Path 8435" d="M466.121,474.87l-.026.15a.066.066,0,0,0,.1.069l1.167-.613a.067.067,0,0,1,.061,0l1.168.613a.066.066,0,0,0,.1-.069l-.223-1.3a.066.066,0,0,1,.019-.059l.945-.921a.066.066,0,0,0-.037-.113l-.437-.063A5.039,5.039,0,0,1,466.121,474.87Z" transform="translate(-465.336 -471.184)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3726" data-name="Group 3726" transform="translate(40.988)">
+              <path id="Path_8436" data-name="Path 8436" d="M530.188,448.518l1.512,3.064a.171.171,0,0,0,.128.094l3.381.491a.171.171,0,0,1,.095.292l-2.446,2.385a.171.171,0,0,0-.049.151l.577,3.367a.171.171,0,0,1-.248.18l-3.025-1.59a.172.172,0,0,0-.159,0l-3.024,1.59a.171.171,0,0,1-.248-.18l.578-3.367a.172.172,0,0,0-.049-.151l-2.447-2.385a.171.171,0,0,1,.094-.292l3.381-.491a.171.171,0,0,0,.129-.094l1.512-3.064A.171.171,0,0,1,530.188,448.518Z" transform="translate(-524.712 -448.422)" fill="#ffc301"/>
+              <g id="Group_3725" data-name="Group 3725" transform="translate(0.689 0.803)">
+                <path id="Path_8437" data-name="Path 8437" d="M530.723,450.028l-1.348,2.61a.45.45,0,0,1-.36.242l-2.925.267,3.091.145a.452.452,0,0,0,.444-.295Z" transform="translate(-526.09 -450.028)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8438" data-name="Path 8438" d="M528.717,461.553l-.067.387a.171.171,0,0,0,.248.18l3.024-1.59a.172.172,0,0,1,.159,0l3.025,1.59a.171.171,0,0,0,.248-.18l-.577-3.367a.171.171,0,0,1,.049-.151l2.446-2.385a.171.171,0,0,0-.095-.292l-1.132-.164A13.061,13.061,0,0,1,528.717,461.553Z" transform="translate(-526.68 -452.002)" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3740" data-name="Group 3740" transform="translate(28.949)">
+            <g id="Group_3729" data-name="Group 3729" transform="translate(0 18.701)">
+              <path id="Path_8439" data-name="Path 8439" d="M368.511,349.029l.84,1.7a.1.1,0,0,0,.072.052l1.878.273a.1.1,0,0,1,.053.162l-1.36,1.325a.1.1,0,0,0-.027.084l.321,1.871a.1.1,0,0,1-.138.1l-1.68-.883a.1.1,0,0,0-.089,0l-1.68.883a.1.1,0,0,1-.138-.1l.321-1.871a.1.1,0,0,0-.027-.084l-1.359-1.325a.1.1,0,0,1,.053-.162l1.878-.273a.1.1,0,0,0,.072-.052l.84-1.7A.1.1,0,0,1,368.511,349.029Z" transform="translate(-365.469 -348.976)" fill="#ffc301"/>
+              <g id="Group_3728" data-name="Group 3728" transform="translate(0.383 0.446)">
+                <path id="Path_8440" data-name="Path 8440" d="M368.809,349.868l-.749,1.451a.251.251,0,0,1-.2.134l-1.625.148,1.717.08a.251.251,0,0,0,.247-.164Z" transform="translate(-366.234 -349.868)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8441" data-name="Path 8441" d="M367.694,356.272l-.037.215a.1.1,0,0,0,.138.1l1.68-.884a.1.1,0,0,1,.089,0l1.68.884a.1.1,0,0,0,.138-.1l-.321-1.871a.1.1,0,0,1,.027-.084l1.36-1.325a.1.1,0,0,0-.053-.162l-.629-.091A7.257,7.257,0,0,1,367.694,356.272Z" transform="translate(-366.562 -350.965)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3731" data-name="Group 3731" transform="translate(0.781 9.853)">
+              <path id="Path_8442" data-name="Path 8442" d="M371.917,331.392l.319,2.529a.126.126,0,0,0,.068.1l2.264,1.171a.128.128,0,0,1,0,.229l-2.306,1.084a.129.129,0,0,0-.071.095l-.414,2.514a.127.127,0,0,1-.219.066l-1.744-1.858a.127.127,0,0,0-.112-.039l-2.519.383a.127.127,0,0,1-.131-.187l1.228-2.233a.127.127,0,0,0,0-.118l-1.143-2.277a.127.127,0,0,1,.138-.182l2.5.478a.129.129,0,0,0,.114-.035l1.813-1.791A.127.127,0,0,1,371.917,331.392Z" transform="translate(-367.031 -331.28)" fill="#ffc301"/>
+              <g id="Group_3730" data-name="Group 3730" transform="translate(0.58 0.573)">
+                <path id="Path_8443" data-name="Path 8443" d="M372.216,332.426l-1.586,1.512a.337.337,0,0,1-.312.083l-2.128-.525,2.143.856a.337.337,0,0,0,.385-.1Z" transform="translate(-368.19 -332.426)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8444" data-name="Path 8444" d="M367.188,340.734l-.142.257a.127.127,0,0,0,.131.187l2.519-.383a.127.127,0,0,1,.112.039l1.744,1.858a.127.127,0,0,0,.219-.066l.414-2.514a.129.129,0,0,1,.071-.095l2.306-1.084a.128.128,0,0,0,0-.229l-.759-.392A9.74,9.74,0,0,1,367.188,340.734Z" transform="translate(-367.031 -334.796)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3733" data-name="Group 3733" transform="translate(3.211 28.069)">
+              <path id="Path_8445" data-name="Path 8445" d="M373.649,367.744l.486.984a.055.055,0,0,0,.042.03l1.086.158a.055.055,0,0,1,.03.093l-.785.766a.055.055,0,0,0-.016.048l.186,1.082a.055.055,0,0,1-.079.058l-.971-.51a.054.054,0,0,0-.051,0l-.971.51a.055.055,0,0,1-.08-.058l.185-1.082a.055.055,0,0,0-.016-.048l-.786-.766a.055.055,0,0,1,.03-.093l1.086-.158a.054.054,0,0,0,.041-.03l.486-.984A.055.055,0,0,1,373.649,367.744Z" transform="translate(-371.891 -367.713)" fill="#ffc301"/>
+              <g id="Group_3732" data-name="Group 3732" transform="translate(0.221 0.258)">
+                <path id="Path_8446" data-name="Path 8446" d="M373.821,368.229l-.433.838a.143.143,0,0,1-.115.077l-.94.086.993.047a.145.145,0,0,0,.143-.095Z" transform="translate(-372.333 -368.229)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8447" data-name="Path 8447" d="M373.177,371.93l-.021.125a.055.055,0,0,0,.08.058l.971-.51a.054.054,0,0,1,.051,0l.971.51a.055.055,0,0,0,.079-.058l-.186-1.082a.055.055,0,0,1,.016-.048l.785-.766a.055.055,0,0,0-.03-.093l-.364-.053A4.192,4.192,0,0,1,373.177,371.93Z" transform="translate(-372.523 -368.863)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3735" data-name="Group 3735" transform="translate(8.6 40.627)">
+              <path id="Path_8448" data-name="Path 8448" d="M383.518,392.843l.234.475a.026.026,0,0,0,.02.015l.525.076a.027.027,0,0,1,.014.045l-.379.37a.028.028,0,0,0-.008.023l.089.523a.026.026,0,0,1-.038.027l-.469-.246a.026.026,0,0,0-.024,0l-.469.246a.026.026,0,0,1-.039-.027l.09-.523a.027.027,0,0,0-.008-.023l-.379-.37a.027.027,0,0,1,.014-.045l.525-.076a.025.025,0,0,0,.02-.015l.234-.475A.027.027,0,0,1,383.518,392.843Z" transform="translate(-382.669 -392.829)" fill="#ffc301"/>
+              <g id="Group_3734" data-name="Group 3734" transform="translate(0.107 0.124)">
+                <path id="Path_8449" data-name="Path 8449" d="M383.6,393.077l-.209.4a.07.07,0,0,1-.056.038l-.453.042.479.022a.07.07,0,0,0,.069-.046Z" transform="translate(-382.883 -393.077)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8450" data-name="Path 8450" d="M383.29,394.864l-.01.06a.026.026,0,0,0,.038.027l.469-.246a.026.026,0,0,1,.025,0l.469.246a.026.026,0,0,0,.039-.027l-.09-.523a.028.028,0,0,1,.008-.023l.38-.37a.027.027,0,0,0-.015-.045l-.175-.026A2.023,2.023,0,0,1,383.29,394.864Z" transform="translate(-382.974 -393.383)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3737" data-name="Group 3737" transform="translate(5.846 35.765)">
+              <path id="Path_8451" data-name="Path 8451" d="M378.7,383.131l.424.86a.048.048,0,0,0,.036.027l.949.138a.048.048,0,0,1,.027.081l-.687.669a.048.048,0,0,0-.014.043l.162.945a.048.048,0,0,1-.07.051l-.849-.447a.047.047,0,0,0-.044,0l-.849.447a.048.048,0,0,1-.07-.051l.162-.945a.048.048,0,0,0-.014-.043l-.686-.669a.048.048,0,0,1,.027-.081l.949-.138a.048.048,0,0,0,.036-.027l.424-.86A.048.048,0,0,1,378.7,383.131Z" transform="translate(-377.161 -383.105)" fill="#ffc301"/>
+              <g id="Group_3736" data-name="Group 3736" transform="translate(0.193 0.225)">
+                <path id="Path_8452" data-name="Path 8452" d="M378.848,383.555l-.378.733a.127.127,0,0,1-.1.068l-.822.075.868.04a.127.127,0,0,0,.125-.083Z" transform="translate(-377.547 -383.555)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8453" data-name="Path 8453" d="M378.285,386.791l-.018.109a.048.048,0,0,0,.069.051l.849-.447a.047.047,0,0,1,.044,0l.849.447a.048.048,0,0,0,.069-.051l-.162-.945a.048.048,0,0,1,.013-.043l.687-.669a.048.048,0,0,0-.026-.081l-.318-.047A3.665,3.665,0,0,1,378.285,386.791Z" transform="translate(-377.713 -384.109)" fill="#f3b411"/>
+            </g>
+            <g id="Group_3739" data-name="Group 3739" transform="translate(4.945)">
+              <path id="Path_8454" data-name="Path 8454" d="M377.785,311.6l2.322,1.6a.142.142,0,0,0,.13.016l2.634-1.007a.14.14,0,0,1,.185.171l-.8,2.7a.142.142,0,0,0,.025.129l1.771,2.194a.14.14,0,0,1-.106.229l-2.819.072a.142.142,0,0,0-.115.064l-1.539,2.362a.141.141,0,0,1-.251-.03l-.939-2.659a.14.14,0,0,0-.1-.089l-2.723-.734a.141.141,0,0,1-.049-.248l2.239-1.715a.141.141,0,0,0,.055-.119l-.143-2.816A.141.141,0,0,1,377.785,311.6Z" transform="translate(-375.36 -311.574)" fill="#ffc301"/>
+              <g id="Group_3738" data-name="Group 3738" transform="translate(0.518 0.597)">
+                <path id="Path_8455" data-name="Path 8455" d="M378.477,312.768l.08,2.422a.374.374,0,0,1-.161.32l-2,1.37,2.285-1.14a.373.373,0,0,0,.2-.391Z" transform="translate(-376.395 -312.768)" fill="#ffd253"/>
+              </g>
+              <path id="Path_8456" data-name="Path 8456" d="M382.867,320.419l.108.306a.141.141,0,0,0,.251.03l1.539-2.362a.142.142,0,0,1,.115-.064l2.818-.071a.141.141,0,0,0,.106-.229l-1.771-2.194a.141.141,0,0,1-.026-.128l.8-2.7a.14.14,0,0,0-.185-.172l-.883.337A10.775,10.775,0,0,1,382.867,320.419Z" transform="translate(-379.113 -312.198)" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3741" data-name="Group 3741" transform="translate(0 0.632)">
+            <path id="Path_8457" data-name="Path 8457" d="M410.027,315.48a14.448,14.448,0,0,0-11.461,23.248l-.285,1.485-.414,2.161a.318.318,0,0,0,.417.36l2.079-.722,1.159-.4a14.45,14.45,0,1,0,8.506-26.13Z" transform="translate(-351.574 -314.16)" fill="#e7e7e7"/>
+            <path id="Path_8458" data-name="Path 8458" d="M330.022,318.9l-1.244.12-.784.076-4.361-5.812a1.125,1.125,0,0,0-1.575-.224L308.021,323.6a1.125,1.125,0,0,0-.224,1.575l5.807,7.738a1.125,1.125,0,0,0,1.575.225L329.215,322.6a1.125,1.125,0,0,0,.225-1.575l-.054-.072.3-.658.518-1.138A.181.181,0,0,0,330.022,318.9Z" transform="translate(-307.571 -312.839)" fill="#e7e7e7"/>
+            <rect id="Rectangle_4120" data-name="Rectangle 4120" width="9.225" height="1.575" transform="translate(2.803 11.108) rotate(-36.241)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4121" data-name="Rectangle 4121" width="6.525" height="1.575" transform="translate(4.466 13.376) rotate(-36.241)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4122" data-name="Rectangle 4122" width="8.775" height="1.575" transform="translate(6.195 15.735) rotate(-36.241)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4123" data-name="Rectangle 4123" width="11.68" height="2.771" transform="translate(51.607 9.148) rotate(-1.042)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4124" data-name="Rectangle 4124" width="11.482" height="2.771" transform="translate(51.697 14.096) rotate(-1.042)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4125" data-name="Rectangle 4125" width="11.68" height="2.771" transform="translate(51.79 19.242) rotate(-1.042)" fill="#9d9c9c"/>
+          </g>
+          <path id="Path_8459" data-name="Path 8459" d="M490.2,328.137a3.64,3.64,0,0,0,2.319,2.923.892.892,0,0,1-.032,1.668l-7.9,1.053a2.427,2.427,0,0,0-2.085,2.726s.6,5.428.924,6.931c.255,1.188,1.745.746,2.169.277a4.212,4.212,0,0,1,2.454-1.7,3.276,3.276,0,1,1,.865,6.494,4.881,4.881,0,0,1-2.5-.71c-1.053-.427-2.307-.333-2.383.193-.064.441,1.13,8.483,1.13,8.483a2.427,2.427,0,0,0,2.726,2.085l7.9-1.053c.652.035.989.725.6.99a3.638,3.638,0,1,0,3.829-.028c-.522-.38-.65-1.342-.252-1.518l8.125-1.082a2.426,2.426,0,0,0,2.085-2.725l-1-7.53a1.3,1.3,0,0,0-2.266-.389,3.277,3.277,0,1,1-.82-4.08c.732.574,2.486.314,2.461-.223-.062-1.385-1.031-7.743-1.031-7.743a2.426,2.426,0,0,0-2.726-2.085s-6.358.969-8.125,1.082c-.505.033-.414-1.78-.121-2.121a3.639,3.639,0,1,0-6.346-1.913Z" transform="translate(-395.029 -317.795)" fill="#9d9c9c"/>
+          <path id="Path_8460" data-name="Path 8460" d="M407.331,413.824a3.812,3.812,0,0,0,3.649-1.4.935.935,0,0,1,1.658.554l-1.421,8.228a2.542,2.542,0,0,0,2.072,2.938s5.616,1.1,7.22,1.247c1.268.117,1.292-1.511.956-2.083a4.412,4.412,0,0,1-.936-2.987,3.432,3.432,0,0,1,6.764,1.168,5.115,5.115,0,0,1-1.492,2.277c-.757.919-1.055,2.2-.552,2.444.42.2,8.835,1.526,8.835,1.526a2.543,2.543,0,0,0,2.938-2.073l1.421-8.231c.24-.641,1.035-.762,1.177-.29a3.812,3.812,0,1,0,1.171-3.837c-.544.4-1.546.229-1.6-.224l1.461-8.462a2.542,2.542,0,0,0-2.073-2.938l-7.842-1.354c-1.324-.1-1.626,1.654-1.1,2.144a3.433,3.433,0,1,1-4.335-.457c.8-.552,1.092-2.387.548-2.531-1.4-.372-8.064-1.393-8.064-1.393a2.542,2.542,0,0,0-2.938,2.073s-1.022,6.66-1.462,8.462c-.126.515-1.91-.144-2.159-.543a3.812,3.812,0,1,0-3.9,5.745Z" transform="translate(-355.868 -354.812)" fill="#e7e7e7"/>
+        </g>
+        <g id="Group_3754" data-name="Group 3754" transform="translate(416.951 141.302)">
+          <path id="Path_8461" data-name="Path 8461" d="M622.332,384.722s-2.3-8.133-4.588-8.221-7.448,4.783-8.307,13.092-6.018,24.643-2.865,30.947S612.3,432,622.9,427.7s14.04-7.736,14.9-10.888a4.523,4.523,0,0,0-.286-1.146c-.287-.859-1.719-4.3-4.012-4.3s-6.3,1.432-8.6,2.293C624.911,413.663,626.63,399.049,622.332,384.722Z" transform="translate(-597.944 -325.552)" fill="#dbdbdb"/>
+          <path id="Path_8462" data-name="Path 8462" d="M615.751,310.052c-1.365-3.156-2.606-9.149-.084-14.636,3.977-8.655,11.033-20.691,25.029-20.811s28.059,15.743,27.107,23.832c-.822,6.987-1.6,11.341-10.277,15.094s-27.921,4.427-35.286,2.145A12.687,12.687,0,0,1,615.751,310.052Z" transform="translate(-602.269 -274.604)" fill="#42210b"/>
+          <path id="Path_8463" data-name="Path 8463" d="M646.667,282.049c9.858.566,17.311,10.4,16.648,21.962,0,.048-.008.094-.011.142,1.445-.26,4.539-.376,3.227,3.83-1.068,3.423-3.333,3.747-4.856,3.523-2.688,6.8-6.782,9.546-13.357,12.011,0,1.765,2.016,2.995,4.109,5.343,0,0-4.909,10.4-13.186,10.618s-6.951-12.673-6.951-12.673a18.533,18.533,0,0,0,5.343-4.521c-4.521-1.233-9.194-7.148-10.114-12.583C624.368,291.077,636.81,281.484,646.667,282.049Z" transform="translate(-608.673 -278.315)" fill="#feecdc"/>
+          <path id="Path_8464" data-name="Path 8464" d="M660.468,314.931a.2.2,0,0,1-.121.011,4.338,4.338,0,0,0-3.156.809.206.206,0,0,1-.269-.311,4.733,4.733,0,0,1,3.512-.9.205.205,0,0,1,.034.391Z" transform="translate(-623.589 -294.545)" fill="#221e1f"/>
+          <path id="Path_8465" data-name="Path 8465" d="M633.14,318.684a.207.207,0,0,1-.167-.027,4.336,4.336,0,0,0-3.231-.413.2.2,0,0,1-.262-.126.205.205,0,0,1,.126-.262,4.727,4.727,0,0,1,3.595.46.205.205,0,0,1-.061.369Z" transform="translate(-609.897 -296.145)" fill="#221e1f"/>
+          <g id="Group_3747" data-name="Group 3747" transform="translate(26.062 36.867)" opacity="0.8">
+            <g id="Group_3746" data-name="Group 3746">
+              <g id="Group_3745" data-name="Group 3745" clip-path="url(#clip-path-6)">
+                <g id="Group_3744" data-name="Group 3744" transform="translate(0)">
+                  <g id="Group_3743" data-name="Group 3743" clip-path="url(#clip-path-7)">
+                    <path id="Path_8466" data-name="Path 8466" d="M649.182,348.339s-1.249,2.443-3.289,2.51-3.446-2.291-3.446-2.291" transform="translate(-642.448 -348.339)" fill="#db727c"/>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <g id="Group_3752" data-name="Group 3752" transform="translate(24.807 28.982)" opacity="0.8">
+            <g id="Group_3751" data-name="Group 3751">
+              <g id="Group_3750" data-name="Group 3750" clip-path="url(#clip-path-8)">
+                <g id="Group_3749" data-name="Group 3749">
+                  <g id="Group_3748" data-name="Group 3748" clip-path="url(#clip-path-8)">
+                    <path id="Path_8467" data-name="Path 8467" d="M642.378,333.586s-1.661,2-1.339,2.648,2.332,1.04,2.332,1.04" transform="translate(-640.469 -333.077)" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <path id="Path_8468" data-name="Path 8468" d="M632.654,326.768a1.2,1.2,0,1,0,.706-1.549,1.2,1.2,0,0,0-.706,1.549" transform="translate(-611.451 -299.873)" fill="#221e1f"/>
+          <path id="Path_8469" data-name="Path 8469" d="M658.941,326.326a1.2,1.2,0,1,0,.706-1.549,1.2,1.2,0,0,0-.706,1.549" transform="translate(-624.595 -299.652)" fill="#221e1f"/>
+          <path id="Path_8470" data-name="Path 8470" d="M626.262,293.969a12.962,12.962,0,0,1,6.164-2.877,11.5,11.5,0,0,1,5.047-6.441s-3.814,5.009-3.814,6.441c0,0,5.1-.735,7.4.411,0,0,2.147-6.852,5.013-7.711,0,0-2.579,5.445-2.579,8.31l2.293.573s3.439-6.3,3.439-7.164c0,0-.573,6.591-1.433,7.737,0,0,5.731,1.719,7.737,4.012a53.646,53.646,0,0,0,.573-6.877s6.591,14.327-.573,23.5c0,0,6.3-6.3,7.164-10.029s.859-16.62-7.737-21.2c-7.677-4.094-16.047-3.725-20.058-.573S623.472,296.36,626.262,293.969Z" transform="translate(-607.987 -277.122)" fill="#42210b"/>
+          <path id="Path_8471" data-name="Path 8471" d="M617.124,382.27s0-11.1,8.63-13.151c0,0,1.208,8.648,6.366,9.508,0,0,6.591,1.72,10.6-3.725,0,0,1.432-2.865,4.3-2.579s9.742,0,9.169,11.462-6.018,29.513-2.866,38.97,12.322,33.525,13.468,49.858.573,15.474.573,15.474,0,1.432-3.152,1.432-38.4.286-47.28-2.005c0,0-5.158.286-4.584-3.725s1.432-47.28,4.3-60.461a51.919,51.919,0,0,0,1.432-9.169C618.366,409.286,614.832,393.445,617.124,382.27Z" transform="translate(-601.315 -321.861)" fill="#e7e7e7"/>
+          <path id="Path_8472" data-name="Path 8472" d="M642.958,436.334s-4.5-2.214-6.377-4.845c0,0-3.281-4.45-4.664-5.036,0,0-5.5-.5-6.874-.467s-2.5.774-2.9,4.277,3.274,6.63,5.228,7.152a12.765,12.765,0,0,0,5.754,0c2.053-.353,5.309,1.9,6.242,2.9S643.441,437.762,642.958,436.334Z" transform="translate(-606.219 -350.294)" fill="#feecdc"/>
+          <path id="Path_8473" data-name="Path 8473" d="M668.253,389.654s2.3-8.133,4.587-8.221,7.448,4.783,8.307,13.092,6.018,24.642,2.865,30.947-5.731,11.462-16.333,7.164-14.04-7.737-14.9-10.888c0,0-4.013-4.105-3.727-4.965s1.817-4.52,4.109-4.52,10.219,5.473,12.512,6.333C665.674,418.595,663.955,403.981,668.253,389.654Z" transform="translate(-619.682 -328.018)" fill="#dbdbdb"/>
+          <path id="Path_8474" data-name="Path 8474" d="M665.332,372.088s-7.45,6.877-9.456,7.45a2.1,2.1,0,0,0,.286,1.719c.573.86,2.579,4.585,4.872,4.012s2.006,0,2.866.573,2.005,1.719,4.011-1.147,5.731-7.737,8.6-8.6c0,0,0-.286-1.433-.859a15.96,15.96,0,0,0-7.736-2.006A4.885,4.885,0,0,0,665.332,372.088Z" transform="translate(-623.065 -323.346)" fill="#f09491"/>
+          <path id="Path_8475" data-name="Path 8475" d="M633.414,368.382s3.145,7.882,4.523,9.092c0,0,.432.8-.414.947a4.394,4.394,0,0,0-2.853,1.961c-.928,1.329-3.449,3.522-6.193-2.1s-.405-7.2,1.137-8.351S633.032,367.868,633.414,368.382Z" transform="translate(-608.767 -321.419)" fill="#f09491"/>
+          <path id="Path_8476" data-name="Path 8476" d="M649.245,373.579c-.316,0-.608-.018-.881-.045-2.941-.294-5.708-5.429-5.824-5.648l.362-.193c.028.052,2.78,5.159,5.5,5.432,1.8.179,4.486-.062,9.312-3.556l.241.333C653.74,372.956,651.094,373.579,649.245,373.579Z" transform="translate(-616.433 -321.148)" fill="#42210b"/>
+          <circle id="Ellipse_706" data-name="Ellipse 706" cx="0.573" cy="0.573" r="0.573" transform="translate(31.379 52.18)" fill="#d1232e"/>
+          <g id="Group_3753" data-name="Group 3753" transform="translate(9.229 67.81)">
+            <path id="Path_8477" data-name="Path 8477" d="M614.643,413.346s-2.127,3.812.424,3.5c0,0,.159,1.314,2.019.645a2.142,2.142,0,0,0,2.657.567c1.86-.669,1.047-3.712,1.047-3.712S616.45,412.238,614.643,413.346Z" transform="translate(-611.297 -411.624)" fill="#feecdc"/>
+            <path id="Path_8478" data-name="Path 8478" d="M618.212,413.332s-1.492-3.066-4.542-3.1-2.287-.024-3.821.722-1.429,1.608.422,1.578,4.226-.636,5.313.836S618.2,414.1,618.212,413.332Z" transform="translate(-608.783 -410.224)" fill="#feecdc"/>
+          </g>
+          <path id="Path_8479" data-name="Path 8479" d="M614.372,421.8l-2.625,4.443a1.3,1.3,0,0,1-1.714.681l-18.919-8.154a1.3,1.3,0,0,1-.681-1.714l3.517-4.281a1.3,1.3,0,0,1,1.714-.681l18.027,7.991A1.3,1.3,0,0,1,614.372,421.8Z" transform="translate(-590.325 -343.297)" fill="#42210b"/>
+          <path id="Path_8480" data-name="Path 8480" d="M602.56,414.675l-6.076-2.694c-.661-.285-1.429-.391-1.714.271l-3.516,4.281a1.3,1.3,0,0,0,.681,1.714l13.319,5.74A39.988,39.988,0,0,1,602.56,414.675Z" transform="translate(-590.736 -343.181)" fill="#fff" opacity="0.17"/>
+          <path id="Path_8481" data-name="Path 8481" d="M616.456,435.4s-2.464-3.475.311-2.56,3.456,2.44,3.456,2.44,8.076,2.426,7.161,5.2S619.954,439.864,616.456,435.4Z" transform="translate(-602.886 -353.644)" fill="#feecdc"/>
+        </g>
+        <path id="Path_6895" data-name="Path 6895" d="M375.317,505.811V483.157s-95.445,5.664-186.5,6.535S-1.128,476.622-1.128,476.622v29.185Z" transform="translate(122.352 -234.311)" fill="#f8f9fa"/>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/index_banner2_web.svg b/PAMapp/assets/images/index_banner2_web.svg
new file mode 100644
index 0000000..1e0fbfb
--- /dev/null
+++ b/PAMapp/assets/images/index_banner2_web.svg
@@ -0,0 +1,362 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1444" height="570.018" viewBox="0 0 1444 570.018">
+  <defs>
+    <clipPath id="clip-path">
+      <path id="Path_8159" data-name="Path 8159" d="M1442,549s-538.678,16.635-730,16C541.74,564.435-2,549-2,549V-5H1442Z" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-2">
+      <rect id="Rectangle_4084" data-name="Rectangle 4084" width="12.172" height="4.338" transform="matrix(0.979, -0.204, 0.204, 0.979, 410.688, 423.908)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-4">
+      <rect id="Rectangle_4086" data-name="Rectangle 4086" width="5.796" height="6.796" transform="translate(411.044 409.978) rotate(-18.469)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-6">
+      <rect id="Rectangle_4088" data-name="Rectangle 4088" width="13.476" height="4.802" transform="matrix(0.999, -0.033, 0.033, 0.999, 976.332, 411.432)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-7">
+      <rect id="Rectangle_4087" data-name="Rectangle 4087" width="13.474" height="4.802" transform="matrix(0.999, -0.033, 0.033, 0.999, 976.332, 411.432)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-8">
+      <rect id="Rectangle_4090" data-name="Rectangle 4090" width="7.528" height="6.42" transform="translate(973.822 402.352) rotate(-71.348)" fill="none"/>
+    </clipPath>
+  </defs>
+  <g id="index_banner2_web" transform="translate(2 5)">
+    <g id="Group_3495" data-name="Group 3495" clip-path="url(#clip-path)">
+      <g id="Group_3494" data-name="Group 3494">
+        <rect id="Rectangle_4115" data-name="Rectangle 4115" width="1496" height="561.656" transform="translate(-11 -27)" fill="#f2c75c"/>
+        <g id="Group_1432" data-name="Group 1432" opacity="0.3">
+          <g id="Group_1431" data-name="Group 1431">
+            <g id="Group_1428" data-name="Group 1428">
+              <path id="Path_694" data-name="Path 694" d="M380.648,240.412l-22.7-18.624,18.624-22.7,22.7,18.624Zm-20.27-18.864,20.03,16.432,16.434-20.03-20.03-16.432Z" fill="#a89968"/>
+              <path id="Path_695" data-name="Path 695" d="M424.548,150.428l-38.764-31.814,31.8-38.764,38.77,31.812Zm-34.614-32.214,34.2,28.062L452.2,112.062,418,84.008Z" fill="#a89968"/>
+              <path id="Path_696" data-name="Path 696" d="M586.122,63.246a17.7,17.7,0,1,1,17.7-17.7h0A17.7,17.7,0,0,1,586.122,63.246Zm0-32.444a14.746,14.746,0,1,0,14.746,14.746h0A14.746,14.746,0,0,0,586.124,30.8h0Z" fill="#a89968"/>
+              <path id="Path_697" data-name="Path 697" d="M1130.3,298.07a17.7,17.7,0,1,1,17.7-17.7v0h0A17.7,17.7,0,0,1,1130.3,298.07Zm0-32.444a14.748,14.748,0,1,0,14.748,14.748,14.748,14.748,0,0,0-14.748-14.748Z" fill="#a89968"/>
+            </g>
+            <g id="Group_1429" data-name="Group 1429">
+              <circle id="Ellipse_323" data-name="Ellipse 323" cx="33.96" cy="33.96" r="33.96" transform="translate(1021.174 81.688)" fill="#f2c75c" opacity="0.5" style="isolation: isolate"/>
+              <path id="Path_4975" data-name="Path 4975" d="M1050.528,148.142a34.6,34.6,0,1,1,34.6-34.6h0A34.627,34.627,0,0,1,1050.528,148.142Zm0-68.6a34,34,0,1,0,34,34A34,34,0,0,0,1050.528,79.542Z" fill="#f2c75c"/>
+            </g>
+            <g id="Group_1430" data-name="Group 1430">
+              <path id="Path_4959" data-name="Path 4959" d="M938.9,75.72l-3.38,8.624,28.13,92.012,6.838,2.68Z" fill="#a89968"/>
+              <path id="Path_4960" data-name="Path 4960" d="M944.982,60.212l-3.38,8.624L975.95,181.18l6.836,2.68Z" fill="#a89968"/>
+              <path id="Path_4961" data-name="Path 4961" d="M932.82,91.232l-3.38,8.626,21.912,71.676,6.838,2.68Z" fill="#a89968"/>
+              <path id="Path_4962" data-name="Path 4962" d="M954.98,57.5l-6.838-2.68L988.25,186.006l6.838,2.68Z" fill="#a89968"/>
+              <path id="Path_4963" data-name="Path 4963" d="M914.454,157.068l6.836,2.68-6.718-21.98-3.382,8.624Z" fill="#a89968"/>
+              <path id="Path_4964" data-name="Path 4964" d="M920.654,122.252l-3.38,8.626,9.48,31,6.838,2.682Z" fill="#a89968"/>
+              <path id="Path_4965" data-name="Path 4965" d="M926.738,106.746l-3.382,8.62,15.7,51.342,6.838,2.68Z" fill="#a89968"/>
+              <path id="Path_4966" data-name="Path 4966" d="M967.278,62.316l-6.838-2.682,40.108,131.19,6.838,2.682Z" fill="#a89968"/>
+              <path id="Path_4967" data-name="Path 4967" d="M1046.928,94.684l.386-.984-.782-.306Z" fill="#a89968"/>
+              <path id="Path_4968" data-name="Path 4968" d="M1041.072,91.254l-6.834-2.682,6.6,21.626,3.382-8.624Z" fill="#a89968"/>
+              <path id="Path_4969" data-name="Path 4969" d="M1028.774,86.43l-6.84-2.682,12.828,41.96,3.38-8.624Z" fill="#a89968"/>
+              <path id="Path_4970" data-name="Path 4970" d="M908.49,153.28,908,154.532l1,.4Z" fill="#a89968"/>
+              <path id="Path_4971" data-name="Path 4971" d="M991.874,71.96l-6.836-2.68,31.48,102.962,3.38-8.624Z" fill="#a89968"/>
+              <path id="Path_4972" data-name="Path 4972" d="M1016.472,81.606l-6.838-2.682,19.046,62.3,3.38-8.624Z" fill="#a89968"/>
+              <path id="Path_4973" data-name="Path 4973" d="M979.576,67.14l-6.842-2.686,37.7,123.3,3.382-8.622Z" fill="#a89968"/>
+              <path id="Path_4974" data-name="Path 4974" d="M1004.174,76.784l-6.838-2.68,25.262,82.628,3.382-8.624Z" fill="#a89968"/>
+            </g>
+          </g>
+        </g>
+        <path id="Path_7126" data-name="Path 7126" d="M335.114,570.758c-47.42-36.22-74.928-132.682,68.914-176.556,29.038-5.412,86.02-14.776,140.346,11.018s136.56,8.056,189.1-25.864S904,221,1181.59,223.772c86.747.868,271.935,29.19,322.41,56.228,111.045,59.483,21.2,159.906-15.326,281.346C1435.54,737.986,589.6,765.136,335.114,570.758Z" fill="#e0d9c2"/>
+        <path id="Path_7126-2" data-name="Path 7126-2" d="M648.36,555.872s32.282,114.458-84.378,104.8c-14.17-1.172-29.766-5.308-47.752-30.886s-58.682-27.334-90.042-13.754S52.512,688.706-70,642-255.488,511.384-190,405c16.186-26.294,260-90,418.916-68.718C361.736,354.069,585.22,435.554,648.36,555.872Z" fill="#e0d9c2"/>
+        <g id="Group_3691" data-name="Group 3691">
+          <path id="Path_8374" data-name="Path 8374" d="M476.552,554.472s9.668,41.724,10.686,81.412a611.993,611.993,0,0,1-3.562,77.852s11.7,7.124,11.7,11.2-8.14,2.544-10.684,2.544-15.264-4.58-16.8-9.16-22.388-149.088-22.388-161.3-2.036,162.826-2.036,162.826,0,12.212-10.176,15.774-7.632-8.65-5.09-13.23c0,0-18.826-98.2-21.88-136.876S422.608,547.86,439.4,544.3,467.394,541.242,476.552,554.472Z" fill="#67737a"/>
+          <path id="Path_8375" data-name="Path 8375" d="M473.754,445.838s-.508-10.178-3.562-15.774c0,0-5.088-9.668-5.088-12.722a14.66,14.66,0,0,0-2.036-5.6c-1.526-2.036-4.58-5.088-4.07-7.124,0,0-.51-1.526,2.036-1.526a6.932,6.932,0,0,1,4.578,2.544,2.683,2.683,0,0,0,3.52-1.42c.015-.035.029-.07.042-.106,1.018-2.544,3.054-4.07,9.158-2.036S488.51,408.688,488,412.76a73.75,73.75,0,0,1-6.106,17.8c-2.036,3.562,0,9.158,1.018,11.7S475.788,447.872,473.754,445.838Z" fill="#feecdc"/>
+          <path id="Path_8376" data-name="Path 8376" d="M441.832,399.186a1.6,1.6,0,0,0-.016-.168c-2.542-20.772-18.958-35.854-36.664-33.686s-30,20.762-27.458,41.534c.01.086.026.17.038.256-2.636-.3-8.226-.15-5.374,7.282,2.322,6.048,6.446,6.368,9.166,5.786,5.638,11.946,16.364,20,28.2,20.536.2,3.182-2.114,5.892-5.616,10.37,0,0,6.162,17.49,21.11,16.912s14.57-24.8,14.57-24.8-9.2-2.786-13-7.364A36.024,36.024,0,0,0,441.294,412.9c2.742-.2,6.348-1.672,7.108-7.8C449.344,397.586,444.452,398.3,441.832,399.186Z" fill="#feecdc"/>
+          <path id="Path_8377" data-name="Path 8377" d="M378.6,404.11l.51,3.562s-6.362,1.272-7.888-.254-6.868-14.5,2.8-28.75,52.664-21.116,65.892-3.816c9.36,12.24,5.6,20.352,4.58,23.4-.508,1.528-3.052,1.528-4.07,1.528,0,0-.51-4.072-1.526-8.652,0,0-2.544-12.212-10.686-12.212-10.176,0-42.742,8.142-46.812,10.686S377.59,397.5,378.6,404.11Z" fill="#221e1f"/>
+          <path id="Path_8378" data-name="Path 8378" d="M371.988,407.672s-5.6-14.248,1.018-22.388,51.674-24.142,68.58-8.256c0,0,.622-7-3.958-10.062,0,0,13.228-1.526,12.72-5.6s-4.578-4.58-11.2-4.58-8.142-2.544-8.142-2.544-10.686-8.65-19.336-5.088a224.9,224.9,0,0,1-29,8.65c-3.052.508-20.862,6.614-21.37,22.388S363.338,407.164,371.988,407.672Z" fill="#67737a"/>
+          <path id="Path_8379" data-name="Path 8379" d="M404.3,446.6s3.054,4.07,14.756,2.544a28,28,0,0,0,17.8-9.666s39.18-3.562,51.4,34.092,18.826,102.784,17.3,110.926c0,0-.51,3.562-3.052,4.072,0,0-28.494,2.544-32.058,2.544s-37.906,6.358-41.468,6.866c0,0-38.162,4.58-41.724,5.088s-4.07.51-4.07-3.052-.508-18.318-.508-23.4c0,0-22.388-12.72-27.986-21.37s-8.65-16.284-5.6-24.424,11.7-41.724,16.8-53.428S389.8,446.854,404.3,446.6Z" fill="#f09491"/>
+          <path id="Path_8380" data-name="Path 8380" d="M470.7,444.816s9.668-5.6,18.828-5.088a47.025,47.025,0,0,1,4.07,4.58c1.018,1.526,26.968,56.48,17.3,65.64,0,0-4.58,6.614-18.318,4.07S468.664,447.872,470.7,444.816Z" fill="#e78b88"/>
+          <path id="Path_8381" data-name="Path 8381" d="M395.742,398.074a8.2,8.2,0,0,1,6.086-1.266" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+          <g id="Group_3679" data-name="Group 3679">
+            <path id="Path_8382" data-name="Path 8382" d="M398.954,403.772a5.929,5.929,0,0,1,5.234.374" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+            <path id="Path_8383" data-name="Path 8383" d="M398.416,405.89a8.205,8.205,0,0,1,5.978-1.7" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+          </g>
+          <path id="Path_8384" data-name="Path 8384" d="M419.836,393.062a8.2,8.2,0,0,1,6.092-1.266" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+          <g id="Group_3684" data-name="Group 3684" opacity="0.8">
+            <g id="Group_3683" data-name="Group 3683">
+              <g id="Group_3481" data-name="Group 3481">
+                <g id="Group_3480" data-name="Group 3480" clip-path="url(#clip-path-2)">
+                  <g id="Group_3682" data-name="Group 3682">
+                    <g id="Group_3681" data-name="Group 3681">
+                      <g id="Group_3479" data-name="Group 3479">
+                        <g id="Group_3478" data-name="Group 3478" clip-path="url(#clip-path-2)">
+                          <g id="Group_3680" data-name="Group 3680">
+                            <path id="Path_8385" data-name="Path 8385" d="M410.688,423.908s3.232,3.76,6.842,3,5.076-5.488,5.076-5.488" fill="#db727c"/>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <g id="Group_3689" data-name="Group 3689" opacity="0.8">
+            <g id="Group_3688" data-name="Group 3688">
+              <g id="Group_3485" data-name="Group 3485">
+                <g id="Group_3484" data-name="Group 3484" clip-path="url(#clip-path-4)">
+                  <g id="Group_3687" data-name="Group 3687">
+                    <g id="Group_3686" data-name="Group 3686">
+                      <g id="Group_3483" data-name="Group 3483">
+                        <g id="Group_3482" data-name="Group 3482" clip-path="url(#clip-path-4)">
+                          <g id="Group_3685" data-name="Group 3685">
+                            <path id="Path_8386" data-name="Path 8386" d="M415.262,409.054s3,3.614,2.4,4.8-4.218,1.866-4.218,1.866" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <path id="Path_8387" data-name="Path 8387" d="M425.08,398.664a2.176,2.176,0,1,1-2.573-1.688h0a2.175,2.175,0,0,1,2.572,1.688" fill="#221e1f"/>
+          <g id="Group_3690" data-name="Group 3690">
+            <path id="Path_8388" data-name="Path 8388" d="M501.482,425.582a3.886,3.886,0,0,1-1.626-.356l-47.832-21.88a3.914,3.914,0,0,1,3.258-7.118l47.83,21.88a3.916,3.916,0,0,1-1.63,7.476Z" fill="#72502b"/>
+            <path id="Path_8389" data-name="Path 8389" d="M432.538,415.988a26.632,26.632,0,1,1,26.632-26.632A26.632,26.632,0,0,1,432.538,415.988Zm0-46.3a19.672,19.672,0,1,0,19.672,19.672h0a19.694,19.694,0,0,0-19.672-19.674Z" fill="#d1232e"/>
+          </g>
+          <path id="Path_8390" data-name="Path 8390" d="M478.842,399.532a5.181,5.181,0,0,0-6.614.51c-3.052,3.052-6.614,7.632-4.578,9.668,0,0-.51,3.052,2.034,3.052,0,0,0,3.052,4.58,2.544,0,0,1.526,3.562,6.106.508,0,0,6.614-5.088,6.106-9.158S478.842,399.532,478.842,399.532Z" fill="#feecdc"/>
+        </g>
+        <g id="Group_3716" data-name="Group 3716" opacity="0.5">
+          <g id="Group_3692" data-name="Group 3692">
+            <path id="Path_8391" data-name="Path 8391" d="M591.108,317.306a3.466,3.466,0,0,0-.4,1.316h39.986q.053-.774.1-1.556l.234.038a3.933,3.933,0,0,0-.078-2.852,58.869,58.869,0,0,0-.168-12.134,5.96,5.96,0,0,0-4.534-4.76,28.6,28.6,0,0,1-9.12-3.084,8.263,8.263,0,0,0-.4-1.448,1.642,1.642,0,0,1-.188.38c-.04.07-.088.148-.144.232v-1.37a21.481,21.481,0,0,0,1.858-5.1c.1,0,2.044-.78,2.316-1.846.334-1.262,2.134-2.688,2.04-3.628-.042-.418-.492-.732-.988-.984a.4.4,0,0,0,.082-.15,14.072,14.072,0,0,0,.452-8.388c1.05-1.362,1.972-3.768,1.36-3.4a9.9,9.9,0,0,1-4.76.68c-4.136-4.136-15.624-3.14-15.624-3.14s-4.1.42-5.232,9.034v1.814c.058,1.118.256.728.742,2.488.176.638.308.908.4.948l-.016.646c-.454,8.84,2.176,9.77,3.256,11.4-.1.642-.2,1.422-.29,2.2.1.156.216.348.362.572-.06-.062-.116-.122-.166-.176-.212-.268-.33-.412-.33-.412a2.384,2.384,0,0,1-.028.268c-.618,1.036-2.756,2.326-8.472,4.744-5.894,2.494-3.07,10.342-3.07,10.342S592.468,315.04,591.108,317.306Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+            <path id="Path_8392" data-name="Path 8392" d="M588.252,313.926a3.46,3.46,0,0,0-.4,1.316h39.986q.051-.771.1-1.556l.234.036a3.932,3.932,0,0,0-.078-2.852,58.849,58.849,0,0,0-.168-12.132,5.962,5.962,0,0,0-4.534-4.762,28.618,28.618,0,0,1-9.12-3.082,8.286,8.286,0,0,0-.4-1.448,1.642,1.642,0,0,1-.188.38c-.04.068-.088.146-.142.232v-1.37a21.482,21.482,0,0,0,1.858-5.1c.1,0,2.044-.78,2.316-1.846.334-1.262,2.134-2.688,2.04-3.628-.042-.418-.492-.734-.988-.984a.411.411,0,0,0,.08-.15,14.088,14.088,0,0,0,.454-8.388c1.048-1.362,1.972-3.768,1.36-3.4a9.911,9.911,0,0,1-4.762.68c-4.136-4.136-15.624-3.14-15.624-3.14s-4.1.418-5.232,9.034v1.814c.06,1.118.256.728.742,2.488.176.638.31.908.4.948l-.016.644c-.454,8.842,2.176,9.77,3.256,11.4-.1.642-.2,1.42-.292,2.2.1.154.216.348.362.572-.06-.062-.116-.122-.166-.178-.212-.268-.33-.41-.33-.41,0,.09-.018.178-.026.268-.62,1.036-2.756,2.326-8.472,4.744-5.894,2.494-3.07,10.342-3.07,10.342S589.61,311.65,588.252,313.926Z" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4"/>
+          </g>
+          <g id="Group_3693" data-name="Group 3693">
+            <path id="Path_8393" data-name="Path 8393" d="M496.688,312.41a32.592,32.592,0,0,0,3.884-7.6,7.9,7.9,0,0,0,.652.642,11.473,11.473,0,0,0,7.956,5.94,3.288,3.288,0,0,1-1.018,1.97c-.018-.068-.032-.124-.044-.168s-.226,0-.248,0a1.642,1.642,0,0,0-.25.25.478.478,0,0,1-.02.1,27.49,27.49,0,0,0-15.154,15.934h41.686a33.145,33.145,0,0,0-.126-4.478c-.782-7.8-11.654-11.036-14.176-11.684a.563.563,0,0,0-.024-.126s-.566-.108-.6-.056a1.036,1.036,0,0,1-.02.2,10.476,10.476,0,0,1-3.782-2.926,12.805,12.805,0,0,0,6.11-7.47h.066c-.086.894-.17,1.526-.17,1.526a6.465,6.465,0,0,0,.634-1.548c.882-.112,1.874-.662,2.316-2.426.484-1.936-.358-2.414-1.218-2.448.022-.128.034-.2.034-.2a16.774,16.774,0,0,0-.662-9.5c-5.3-8.834-15.018-5.742-15.018-5.742a11.889,11.889,0,0,0-10.37,8.37,2.379,2.379,0,0,0-3.052,1.418c-.018.049-.035.1-.05.15-2.2,4.858-1.768,9.274.442,11.924A14.2,14.2,0,0,1,496.688,312.41Zm4.024-7.974q.228.5.492.97a3.155,3.155,0,0,1-.544-.834Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+            <path id="Path_8394" data-name="Path 8394" d="M492.84,310.152a32.593,32.593,0,0,0,3.884-7.6,7.479,7.479,0,0,0,.652.644,11.47,11.47,0,0,0,7.956,5.94,3.283,3.283,0,0,1-1.018,1.97c-.018-.066-.032-.124-.044-.168s-.226,0-.248,0a1.584,1.584,0,0,0-.25.248.661.661,0,0,1-.02.106A27.482,27.482,0,0,0,488.6,327.226h41.686a32.977,32.977,0,0,0-.126-4.478c-.78-7.8-11.654-11.036-14.176-11.684l-.024-.126s-.566-.108-.6-.056a1.036,1.036,0,0,1-.02.2,10.48,10.48,0,0,1-3.78-2.926,12.809,12.809,0,0,0,6.11-7.47h.066c-.088.894-.17,1.526-.17,1.526a6.525,6.525,0,0,0,.634-1.548c.882-.112,1.874-.662,2.316-2.428.484-1.936-.358-2.412-1.218-2.448.022-.126.034-.2.034-.2a16.774,16.774,0,0,0-.662-9.5c-5.3-8.832-15.016-5.742-15.016-5.742a11.889,11.889,0,0,0-10.37,8.368,2.382,2.382,0,0,0-3.054,1.422c-.017.048-.033.1-.048.146-2.2,4.858-1.766,9.276.442,11.926A14.194,14.194,0,0,1,492.84,310.152Zm4.022-7.974q.231.5.492.97a3.174,3.174,0,0,1-.542-.834Z" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
+          </g>
+          <g id="Group_3694" data-name="Group 3694">
+            <path id="Path_8395" data-name="Path 8395" d="M602.148,387.912c-.092-5.9-.252-15.076-2.5-20.248,0,0-.58-2.034-5.52-3.486,0,0-11.8-8.072-19.186-7.6v-.032l-.022.034h-.146c-.238-.978-.5-1.952-.732-2.752a12.527,12.527,0,0,0,1.328-7.536c-.11-.67.956.1,1.28-1.178.624-2.388,1.974-7.31.168-8.26-.112-.056-.2-.094-.276-.132-.052.374-.11.744-.17,1.106.06-.364.118-.734.17-1.106a33.505,33.505,0,0,0,.4-6.2c-.762-11.438-8.306-10.02-8.306-10.02s-1.12-4.774-8.646-3.56c-2.762.432-13.874,7.918-10.17,11.622.29.29-5.364,2.262-2.164,8.852.46.944.916,2.166,1.42,3.378h0c-.562.906.168,3.786,1.4,6.8a3.736,3.736,0,0,0,2.368,1.9,27.614,27.614,0,0,0,3.2,6.182c.076.532.154,1.124.228,1.744-.084-.1-.158-.2-.22-.272a2.179,2.179,0,0,1-.3-.452,11.09,11.09,0,0,0-.2,1.1,31.838,31.838,0,0,0-17.8,9.846,7.2,7.2,0,0,0-4.066,4.36,101.541,101.541,0,0,0,.246,15.888Z" fill="#fff" opacity="0.75" style="isolation: isolate"/>
+            <path id="Path_8396" data-name="Path 8396" d="M597.652,384.54c-.092-5.9-.252-15.076-2.5-20.246,0,0-.582-2.034-5.52-3.488,0,0-11.8-8.072-19.184-7.6v-.032l-.022.034h-.148c-.236-.978-.5-1.952-.732-2.75a12.527,12.527,0,0,0,1.328-7.536c-.11-.67.958.1,1.28-1.178.624-2.39,1.974-7.31.168-8.26-.112-.056-.2-.094-.276-.132-.054.374-.11.744-.172,1.106.062-.364.118-.734.17-1.106a33.337,33.337,0,0,0,.4-6.2c-.762-11.438-8.306-10.02-8.306-10.02s-1.12-4.774-8.644-3.56c-2.764.432-13.874,7.918-10.17,11.622.292.29-5.364,2.262-2.162,8.852.46.944.914,2.166,1.418,3.378h0c-.562.906.166,3.786,1.4,6.8a3.739,3.739,0,0,0,2.37,1.9,27.614,27.614,0,0,0,3.2,6.182c.076.53.156,1.124.23,1.744-.084-.1-.158-.2-.22-.272a2.149,2.149,0,0,1-.3-.452,11.036,11.036,0,0,0-.2,1.1,31.838,31.838,0,0,0-17.8,9.846,7.2,7.2,0,0,0-4.068,4.358,101.542,101.542,0,0,0,.246,15.888Z" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
+          </g>
+          <g id="Group_3701" data-name="Group 3701" opacity="0.5">
+            <g id="Group_3696" data-name="Group 3696">
+              <path id="Path_8397" data-name="Path 8397" d="M596.04,299.864l1.494,3.024a.171.171,0,0,0,.126.092l3.338.484a.169.169,0,0,1,.145.189.164.164,0,0,1-.051.1l-2.416,2.354a.173.173,0,0,0-.048.15l.57,3.324a.168.168,0,0,1-.244.178l-2.986-1.568a.166.166,0,0,0-.156,0l-2.986,1.568a.168.168,0,0,1-.227-.07.175.175,0,0,1-.017-.108l.57-3.324a.167.167,0,0,0-.048-.15l-2.416-2.354a.169.169,0,0,1,.094-.288l3.338-.484a.168.168,0,0,0,.126-.092l1.492-3.024a.169.169,0,0,1,.225-.077A.164.164,0,0,1,596.04,299.864Z" fill="#ffc301"/>
+              <g id="Group_3695" data-name="Group 3695">
+                <path id="Path_8398" data-name="Path 8398" d="M595.894,300.564l-1.33,2.576a.444.444,0,0,1-.356.24l-2.888.264,3.05.142a.443.443,0,0,0,.438-.29Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8399" data-name="Path 8399" d="M592.652,309.2l-.066.382a.168.168,0,0,0,.136.2.162.162,0,0,0,.108-.017l2.986-1.568a.166.166,0,0,1,.156,0l2.986,1.568a.167.167,0,0,0,.227-.07.162.162,0,0,0,.017-.108l-.57-3.324a.173.173,0,0,1,.048-.15l2.416-2.354a.168.168,0,0,0,.006-.237.17.17,0,0,0-.1-.051l-1.118-.162A12.882,12.882,0,0,1,592.652,309.2Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3698" data-name="Group 3698">
+              <path id="Path_8400" data-name="Path 8400" d="M608.032,299.864l1.492,3.024a.171.171,0,0,0,.126.092l3.338.484a.169.169,0,0,1,.145.189.164.164,0,0,1-.051.1l-2.416,2.354a.167.167,0,0,0-.048.15l.57,3.324a.168.168,0,0,1-.244.178l-2.982-1.576a.166.166,0,0,0-.156,0l-2.986,1.568a.168.168,0,0,1-.227-.07.175.175,0,0,1-.017-.108l.57-3.324a.167.167,0,0,0-.048-.15l-2.416-2.354a.169.169,0,0,1,.094-.288l3.338-.484a.167.167,0,0,0,.126-.092l1.494-3.024a.168.168,0,0,1,.3.008Z" fill="#ffc301"/>
+              <g id="Group_3697" data-name="Group 3697">
+                <path id="Path_8401" data-name="Path 8401" d="M607.882,300.564l-1.33,2.576a.441.441,0,0,1-.354.24l-2.888.264,3.052.142a.443.443,0,0,0,.438-.29Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8402" data-name="Path 8402" d="M604.638,309.2l-.066.382a.168.168,0,0,0,.136.2.162.162,0,0,0,.108-.017l2.986-1.568a.166.166,0,0,1,.156,0l2.986,1.568a.167.167,0,0,0,.227-.07.162.162,0,0,0,.017-.108l-.57-3.324a.167.167,0,0,1,.048-.15l2.416-2.354a.168.168,0,0,0,.006-.237.17.17,0,0,0-.1-.051l-1.118-.162A12.89,12.89,0,0,1,604.638,309.2Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3700" data-name="Group 3700">
+              <path id="Path_8403" data-name="Path 8403" d="M620.024,299.864l1.492,3.024a.174.174,0,0,0,.126.092l3.338.484a.169.169,0,0,1,.145.189.164.164,0,0,1-.051.1l-2.416,2.354a.17.17,0,0,0-.048.15l.57,3.324a.168.168,0,0,1-.244.178l-2.986-1.568a.166.166,0,0,0-.156,0l-2.986,1.568a.168.168,0,0,1-.227-.07.175.175,0,0,1-.017-.108l.57-3.324a.162.162,0,0,0-.048-.15l-2.416-2.354a.169.169,0,0,1,.094-.288l3.338-.484a.17.17,0,0,0,.126-.092l1.492-3.024a.168.168,0,0,1,.3,0Z" fill="#ffc301"/>
+              <g id="Group_3699" data-name="Group 3699">
+                <path id="Path_8404" data-name="Path 8404" d="M619.878,300.564l-1.33,2.576a.445.445,0,0,1-.356.24l-2.888.264,3.052.142a.443.443,0,0,0,.438-.29Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8405" data-name="Path 8405" d="M616.634,309.2l-.066.382a.168.168,0,0,0,.136.2.162.162,0,0,0,.108-.017l2.986-1.568a.166.166,0,0,1,.156,0l2.986,1.568a.167.167,0,0,0,.227-.07.162.162,0,0,0,.017-.108l-.57-3.324a.167.167,0,0,1,.048-.15l2.416-2.354a.168.168,0,0,0,.006-.237.17.17,0,0,0-.1-.051l-1.118-.162A12.886,12.886,0,0,1,616.634,309.2Z" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3708" data-name="Group 3708" opacity="0.5">
+            <g id="Group_3703" data-name="Group 3703">
+              <path id="Path_8406" data-name="Path 8406" d="M503.772,318.75l.982,2a.111.111,0,0,0,.084.06l2.2.32a.11.11,0,0,1,.1.124.107.107,0,0,1-.033.064l-1.59,1.55a.112.112,0,0,0-.032.1l.376,2.188a.109.109,0,0,1-.089.127.1.1,0,0,1-.071-.011l-1.964-1.032a.114.114,0,0,0-.1,0l-1.964,1.032a.11.11,0,0,1-.15-.048.115.115,0,0,1-.012-.068l.376-2.188a.107.107,0,0,0-.032-.1l-1.588-1.55a.11.11,0,0,1,.06-.188l2.2-.32a.11.11,0,0,0,.084-.06l.982-2a.111.111,0,0,1,.151-.037A.109.109,0,0,1,503.772,318.75Z" fill="#ffc301"/>
+              <g id="Group_3702" data-name="Group 3702">
+                <path id="Path_8407" data-name="Path 8407" d="M503.674,319.218l-.876,1.694a.29.29,0,0,1-.234.158l-1.9.174,2,.094a.291.291,0,0,0,.288-.2Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8408" data-name="Path 8408" d="M501.54,324.892l-.044.252a.112.112,0,0,0,.1.127.1.1,0,0,0,.067-.011l1.964-1.032a.114.114,0,0,1,.1,0l1.964,1.032a.11.11,0,0,0,.149-.045.1.1,0,0,0,.011-.071l-.376-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.109.109,0,0,0,0-.155.113.113,0,0,0-.065-.033l-.736-.108A8.479,8.479,0,0,1,501.54,324.892Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3705" data-name="Group 3705">
+              <path id="Path_8409" data-name="Path 8409" d="M511.664,318.75l.982,2a.111.111,0,0,0,.084.06l2.2.32a.11.11,0,0,1,.1.124.108.108,0,0,1-.033.064l-1.59,1.55a.112.112,0,0,0-.032.1l.376,2.188a.109.109,0,0,1-.089.127.1.1,0,0,1-.071-.011l-1.964-1.032a.112.112,0,0,0-.1,0l-1.964,1.032a.11.11,0,0,1-.15-.048.115.115,0,0,1-.012-.068l.376-2.188a.107.107,0,0,0-.032-.1l-1.59-1.55a.11.11,0,0,1,0-.155.113.113,0,0,1,.064-.033l2.2-.32a.11.11,0,0,0,.084-.06l.982-2a.111.111,0,0,1,.151-.039A.1.1,0,0,1,511.664,318.75Z" fill="#ffc301"/>
+              <g id="Group_3704" data-name="Group 3704">
+                <path id="Path_8410" data-name="Path 8410" d="M511.564,319.218l-.876,1.694a.29.29,0,0,1-.234.158l-1.9.174,2,.094a.291.291,0,0,0,.288-.2Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8411" data-name="Path 8411" d="M509.43,324.892l-.044.252a.113.113,0,0,0,.1.127.1.1,0,0,0,.067-.011l1.964-1.032a.112.112,0,0,1,.1,0l1.964,1.032a.11.11,0,0,0,.149-.045.1.1,0,0,0,.011-.071l-.376-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.109.109,0,0,0,0-.155.116.116,0,0,0-.065-.033l-.736-.108A8.483,8.483,0,0,1,509.43,324.892Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3707" data-name="Group 3707">
+              <path id="Path_8412" data-name="Path 8412" d="M519.554,318.75l.982,2a.111.111,0,0,0,.084.06l2.2.32a.11.11,0,0,1,.095.124.107.107,0,0,1-.033.064l-1.59,1.55a.112.112,0,0,0-.032.1l.376,2.188a.109.109,0,0,1-.088.128.107.107,0,0,1-.074-.012l-1.964-1.032a.112.112,0,0,0-.1,0l-1.964,1.032a.109.109,0,0,1-.149-.042.111.111,0,0,1-.013-.074l.376-2.188a.107.107,0,0,0-.032-.1l-1.59-1.55a.11.11,0,0,1,0-.155.114.114,0,0,1,.064-.033l2.2-.32a.11.11,0,0,0,.084-.06l.982-2a.11.11,0,0,1,.15-.042A.113.113,0,0,1,519.554,318.75Z" fill="#ffc301"/>
+              <g id="Group_3706" data-name="Group 3706">
+                <path id="Path_8413" data-name="Path 8413" d="M519.454,319.218l-.876,1.694a.29.29,0,0,1-.234.158l-1.9.174,2,.094a.293.293,0,0,0,.29-.2Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8414" data-name="Path 8414" d="M517.33,324.892l-.042.252a.11.11,0,0,0,.088.128.105.105,0,0,0,.074-.012l1.964-1.032a.112.112,0,0,1,.1,0l1.964,1.032a.11.11,0,0,0,.15-.042.105.105,0,0,0,.012-.074l-.376-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.109.109,0,0,0,0-.155.116.116,0,0,0-.065-.033l-.736-.108A8.48,8.48,0,0,1,517.33,324.892Z" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3715" data-name="Group 3715" opacity="0.5">
+            <g id="Group_3710" data-name="Group 3710">
+              <path id="Path_8415" data-name="Path 8415" d="M549.28,367.17l1.742,3.53a.2.2,0,0,0,.148.108l3.9.566a.2.2,0,0,1,.108.336l-2.82,2.756a.2.2,0,0,0-.056.174l.666,3.878a.2.2,0,0,1-.286.2l-3.484-1.832a.2.2,0,0,0-.184,0l-3.484,1.832a.2.2,0,0,1-.266-.1.205.205,0,0,1-.018-.1l.664-3.878a.2.2,0,0,0-.056-.174l-2.818-2.748a.2.2,0,0,1,.005-.283.211.211,0,0,1,.105-.053l3.894-.566a.2.2,0,0,0,.148-.108l1.742-3.53a.2.2,0,0,1,.268-.09A.2.2,0,0,1,549.28,367.17Z" fill="#ffc301"/>
+              <g id="Group_3709" data-name="Group 3709">
+                <path id="Path_8416" data-name="Path 8416" d="M549.106,367.984l-1.552,3a.517.517,0,0,1-.414.28l-3.37.308,3.56.166a.52.52,0,0,0,.512-.338Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8417" data-name="Path 8417" d="M545.318,378.062l-.076.446a.2.2,0,0,0,.181.218.193.193,0,0,0,.1-.018l3.484-1.832a.2.2,0,0,1,.184,0l3.484,1.832a.2.2,0,0,0,.267-.093.188.188,0,0,0,.019-.107l-.666-3.878a.2.2,0,0,1,.056-.174l2.818-2.748a.2.2,0,0,0,0-.283.2.2,0,0,0-.1-.053l-1.3-.2A15.04,15.04,0,0,1,545.318,378.062Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3712" data-name="Group 3712">
+              <path id="Path_8418" data-name="Path 8418" d="M563.274,367.17l1.742,3.53a.2.2,0,0,0,.148.108l3.894.566a.2.2,0,0,1,.11.336l-2.812,2.756a.2.2,0,0,0-.056.174l.666,3.878a.2.2,0,0,1-.286.2l-3.484-1.832a.2.2,0,0,0-.182,0l-3.484,1.832a.2.2,0,0,1-.267-.093.207.207,0,0,1-.019-.107l.666-3.878a.2.2,0,0,0-.056-.174l-2.818-2.748a.2.2,0,0,1,.005-.283.21.21,0,0,1,.1-.053l3.9-.566a.2.2,0,0,0,.148-.108l1.742-3.53a.2.2,0,0,1,.342-.008Z" fill="#ffc301"/>
+              <g id="Group_3711" data-name="Group 3711">
+                <path id="Path_8419" data-name="Path 8419" d="M563.1,367.984l-1.552,3a.518.518,0,0,1-.414.28l-3.37.308,3.562.166a.516.516,0,0,0,.512-.338Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8420" data-name="Path 8420" d="M559.314,378.062l-.076.446a.2.2,0,0,0,.179.219.2.2,0,0,0,.107-.019l3.484-1.832a.2.2,0,0,1,.182,0l3.484,1.832a.2.2,0,0,0,.268-.093.2.2,0,0,0,.018-.107l-.666-3.878a.2.2,0,0,1,.056-.174l2.818-2.748a.2.2,0,0,0-.005-.283.2.2,0,0,0-.105-.053l-1.3-.2A15.036,15.036,0,0,1,559.314,378.062Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3714" data-name="Group 3714">
+              <path id="Path_8421" data-name="Path 8421" d="M577.27,367.17l1.742,3.53a.2.2,0,0,0,.148.108l3.9.566a.2.2,0,0,1,.11.336l-2.818,2.748a.2.2,0,0,0-.056.174l.666,3.878a.2.2,0,0,1-.286.2l-3.484-1.832a.2.2,0,0,0-.182,0l-3.484,1.832a.2.2,0,0,1-.267-.093.206.206,0,0,1-.019-.107l.666-3.878a.2.2,0,0,0-.056-.174l-2.818-2.748a.2.2,0,0,1,.005-.283.21.21,0,0,1,.1-.053l3.894-.566a.2.2,0,0,0,.148-.108l1.742-3.53a.2.2,0,0,1,.348,0Z" fill="#ffc301"/>
+              <g id="Group_3713" data-name="Group 3713">
+                <path id="Path_8422" data-name="Path 8422" d="M577.1,367.984l-1.552,3a.518.518,0,0,1-.414.28l-3.37.308,3.56.166a.515.515,0,0,0,.512-.338Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8423" data-name="Path 8423" d="M573.31,378.062l-.076.446a.2.2,0,0,0,.179.219.2.2,0,0,0,.107-.019L577,376.876a.2.2,0,0,1,.182,0l3.484,1.832a.2.2,0,0,0,.267-.093.188.188,0,0,0,.019-.107l-.666-3.878a.2.2,0,0,1,.056-.174l2.818-2.748a.2.2,0,0,0-.005-.283.2.2,0,0,0-.1-.053l-1.3-.2A15.036,15.036,0,0,1,573.31,378.062Z" fill="#f3b411"/>
+            </g>
+          </g>
+        </g>
+        <g id="Group_3742" data-name="Group 3742" opacity="0.5">
+          <g id="Group_3727" data-name="Group 3727">
+            <g id="Group_3718" data-name="Group 3718">
+              <path id="Path_8424" data-name="Path 8424" d="M841.93,497.616l1.964,3.982a.225.225,0,0,0,.166.122l4.4.638a.222.222,0,0,1,.188.252.218.218,0,0,1-.066.128l-3.18,3.1a.225.225,0,0,0-.064.2l.75,4.376a.221.221,0,0,1-.181.256.216.216,0,0,1-.141-.022l-3.932-2.066a.22.22,0,0,0-.2,0l-3.932,2.066a.222.222,0,0,1-.322-.234l.75-4.376a.217.217,0,0,0-.064-.2l-3.18-3.1a.222.222,0,0,1-.006-.314.226.226,0,0,1,.13-.066l4.4-.638a.217.217,0,0,0,.166-.122l1.966-3.982a.222.222,0,0,1,.388,0Z" fill="#ffc301"/>
+              <g id="Group_3717" data-name="Group 3717">
+                <path id="Path_8425" data-name="Path 8425" d="M841.73,498.54l-1.752,3.4a.584.584,0,0,1-.466.314l-3.8.348,4.018.188a.584.584,0,0,0,.578-.382Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8426" data-name="Path 8426" d="M837.46,509.912l-.086.5a.224.224,0,0,0,.182.257.22.22,0,0,0,.14-.023l3.932-2.066a.227.227,0,0,1,.2,0l3.93,2.066a.223.223,0,0,0,.3-.093.216.216,0,0,0,.022-.141l-.75-4.376a.225.225,0,0,1,.064-.2l3.18-3.1a.221.221,0,0,0,.007-.314.226.226,0,0,0-.131-.066l-1.472-.214A16.97,16.97,0,0,1,837.46,509.912Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3720" data-name="Group 3720">
+              <path id="Path_8427" data-name="Path 8427" d="M821.582,502.406l1.4,2.822a.161.161,0,0,0,.118.086l3.114.452a.158.158,0,0,1,.135.179.152.152,0,0,1-.047.091l-2.256,2.2a.16.16,0,0,0-.044.138l.532,3.1a.157.157,0,0,1-.228.166l-2.786-1.466a.161.161,0,0,0-.148,0l-2.786,1.466a.158.158,0,0,1-.228-.166l.532-3.1a.155.155,0,0,0-.044-.138l-2.256-2.2a.159.159,0,0,1,.088-.27l3.116-.452a.159.159,0,0,0,.118-.086l1.4-2.822a.158.158,0,0,1,.27,0Z" fill="#ffc301"/>
+              <g id="Group_3719" data-name="Group 3719">
+                <path id="Path_8428" data-name="Path 8428" d="M821.44,503.052l-1.242,2.4a.415.415,0,0,1-.33.222l-2.7.246,2.848.132a.414.414,0,0,0,.4-.27Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8429" data-name="Path 8429" d="M818.414,511.118l-.06.356a.159.159,0,0,0,.131.182.156.156,0,0,0,.1-.016l2.786-1.466a.163.163,0,0,1,.146,0l2.786,1.466a.157.157,0,0,0,.228-.166l-.532-3.1a.16.16,0,0,1,.044-.138l2.256-2.2a.157.157,0,0,0,0-.223.155.155,0,0,0-.092-.047l-1.044-.152A12.034,12.034,0,0,1,818.414,511.118Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3722" data-name="Group 3722">
+              <path id="Path_8430" data-name="Path 8430" d="M780.846,496.778l1.166,2.366a.133.133,0,0,0,.1.072l2.6.378a.131.131,0,0,1,.072.224L782.9,501.66a.136.136,0,0,0-.038.118l.446,2.6a.132.132,0,0,1-.1.156.13.13,0,0,1-.1-.018l-2.334-1.226a.136.136,0,0,0-.124,0l-2.334,1.226a.132.132,0,0,1-.2-.138l.446-2.6a.133.133,0,0,0-.038-.118l-1.89-1.842a.13.13,0,0,1,0-.186.133.133,0,0,1,.072-.038l2.6-.378a.129.129,0,0,0,.1-.072l1.168-2.366a.139.139,0,1,1,.278,0Z" fill="#ffc301"/>
+              <g id="Group_3721" data-name="Group 3721">
+                <path id="Path_8431" data-name="Path 8431" d="M780.728,497.326l-1.04,2.016a.351.351,0,0,1-.278.186l-2.26.2,2.386.11a.345.345,0,0,0,.342-.226Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8432" data-name="Path 8432" d="M778.19,504.08l-.05.3a.133.133,0,0,0,.1.158.13.13,0,0,0,.1-.018l2.334-1.228a.138.138,0,0,1,.122,0l2.336,1.228a.133.133,0,0,0,.183-.04.129.129,0,0,0,.017-.1l-.446-2.6a.136.136,0,0,1,.038-.118l1.888-1.842a.13.13,0,0,0,0-.186.136.136,0,0,0-.073-.038l-.874-.128A10.076,10.076,0,0,1,778.19,504.08Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3724" data-name="Group 3724">
+              <path id="Path_8433" data-name="Path 8433" d="M802.684,501.53l1.166,2.364a.133.133,0,0,0,.1.072l2.6.38a.131.131,0,0,1,.074.224l-1.888,1.842a.132.132,0,0,0-.038.116l.446,2.6a.132.132,0,0,1-.2.14l-2.334-1.228a.138.138,0,0,0-.122,0l-2.334,1.228a.13.13,0,0,1-.182-.04.134.134,0,0,1-.018-.1l.446-2.6a.132.132,0,0,0-.038-.116l-1.89-1.842a.13.13,0,0,1,0-.186.134.134,0,0,1,.072-.038l2.61-.38a.127.127,0,0,0,.1-.072l1.168-2.364a.132.132,0,0,1,.264,0Z" fill="#ffc301"/>
+              <g id="Group_3723" data-name="Group 3723">
+                <path id="Path_8434" data-name="Path 8434" d="M802.574,502.078l-1.04,2.016a.349.349,0,0,1-.278.188l-2.26.2,2.386.112a.345.345,0,0,0,.342-.228Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8435" data-name="Path 8435" d="M800.028,508.83l-.052.3a.133.133,0,0,0,.1.156.127.127,0,0,0,.1-.018l2.334-1.226a.138.138,0,0,1,.122,0l2.336,1.226a.133.133,0,0,0,.183-.041.131.131,0,0,0,.017-.1l-.446-2.6a.136.136,0,0,1,.038-.118l1.89-1.842a.132.132,0,0,0-.074-.226l-.874-.126A10.076,10.076,0,0,1,800.028,508.83Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3726" data-name="Group 3726">
+              <path id="Path_8436" data-name="Path 8436" d="M869.548,480.27l3.024,6.128a.343.343,0,0,0,.256.188l6.762.982a.341.341,0,0,1,.19.584l-4.892,4.77a.343.343,0,0,0-.1.3l1.154,6.734a.342.342,0,0,1-.28.395.346.346,0,0,1-.216-.035l-6.05-3.18a.344.344,0,0,0-.318,0l-6.048,3.18a.343.343,0,0,1-.5-.36l1.156-6.734a.343.343,0,0,0-.1-.3l-4.894-4.77a.341.341,0,0,1-.007-.483.336.336,0,0,1,.2-.1l6.762-.982a.339.339,0,0,0,.258-.188l3.024-6.128a.343.343,0,0,1,.457-.159A.336.336,0,0,1,869.548,480.27Z" fill="#ffc301"/>
+              <g id="Group_3725" data-name="Group 3725">
+                <path id="Path_8437" data-name="Path 8437" d="M869.24,481.684l-2.7,5.22a.9.9,0,0,1-.72.484l-5.85.534,6.182.29a.9.9,0,0,0,.888-.59Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8438" data-name="Path 8438" d="M862.67,499.18l-.134.774a.342.342,0,0,0,.28.394.337.337,0,0,0,.216-.034l6.048-3.18a.344.344,0,0,1,.318,0l6.05,3.18a.342.342,0,0,0,.462-.144.336.336,0,0,0,.034-.216l-1.154-6.734a.343.343,0,0,1,.1-.3l4.892-4.77a.343.343,0,0,0-.19-.584l-2.264-.328A26.117,26.117,0,0,1,862.67,499.18Z" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3740" data-name="Group 3740">
+            <g id="Group_3729" data-name="Group 3729">
+              <path id="Path_8439" data-name="Path 8439" d="M705.436,380.738l1.68,3.4a.2.2,0,0,0,.144.1l3.756.546a.2.2,0,0,1,.148.241.187.187,0,0,1-.042.083l-2.72,2.65a.2.2,0,0,0-.054.168l.642,3.742a.2.2,0,0,1-.184.215.208.208,0,0,1-.092-.015l-3.36-1.766a.2.2,0,0,0-.178,0l-3.36,1.766a.2.2,0,0,1-.261-.108.206.206,0,0,1-.015-.092l.642-3.742a.2.2,0,0,0-.054-.168l-2.718-2.65a.2.2,0,0,1,.023-.282.218.218,0,0,1,.083-.042l3.756-.546a.2.2,0,0,0,.144-.1l1.68-3.4a.2.2,0,0,1,.276-.064A.2.2,0,0,1,705.436,380.738Z" fill="#ffc301"/>
+              <g id="Group_3728" data-name="Group 3728">
+                <path id="Path_8440" data-name="Path 8440" d="M705.268,381.524l-1.5,2.9a.5.5,0,0,1-.4.268l-3.25.3,3.434.16a.5.5,0,0,0,.494-.328Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8441" data-name="Path 8441" d="M701.616,391.246l-.074.43a.2.2,0,0,0,.276.2l3.36-1.768a.2.2,0,0,1,.178,0l3.36,1.768a.2.2,0,0,0,.262-.108.192.192,0,0,0,.014-.092l-.642-3.742a.2.2,0,0,1,.054-.168l2.72-2.65a.2.2,0,0,0-.023-.282.21.21,0,0,0-.083-.042l-1.258-.182A14.514,14.514,0,0,1,701.616,391.246Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3731" data-name="Group 3731">
+              <path id="Path_8442" data-name="Path 8442" d="M710.686,363.16l.638,5.058a.254.254,0,0,0,.136.2l4.528,2.342a.255.255,0,0,1,0,.458l-4.612,2.168a.262.262,0,0,0-.142.19l-.828,5.028a.253.253,0,0,1-.29.211.257.257,0,0,1-.148-.079l-3.488-3.716a.257.257,0,0,0-.224-.078l-5.038.766a.253.253,0,0,1-.29-.211.257.257,0,0,1,.028-.163l2.456-4.466a.253.253,0,0,0,0-.236l-2.286-4.554a.254.254,0,0,1,.276-.364l5,.956a.259.259,0,0,0,.228-.07l3.626-3.582a.255.255,0,0,1,.43.142Z" fill="#ffc301"/>
+              <g id="Group_3730" data-name="Group 3730">
+                <path id="Path_8443" data-name="Path 8443" d="M710.126,364.082l-3.172,3.024a.672.672,0,0,1-.624.166l-4.256-1.05,4.286,1.712a.674.674,0,0,0,.77-.2Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8444" data-name="Path 8444" d="M701.228,374.812l-.284.514a.253.253,0,0,0,.262.374l5.038-.766a.257.257,0,0,1,.224.078l3.488,3.716a.253.253,0,0,0,.438-.132l.828-5.028a.262.262,0,0,1,.142-.19l4.612-2.168a.256.256,0,0,0,0-.458l-1.518-.784A19.476,19.476,0,0,1,701.228,374.812Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3733" data-name="Group 3733">
+              <path id="Path_8445" data-name="Path 8445" d="M709.29,399.43l.972,1.968a.111.111,0,0,0,.084.06l2.172.316a.111.111,0,0,1,.091.127.113.113,0,0,1-.031.059l-1.57,1.532a.114.114,0,0,0-.032.1l.372,2.164a.109.109,0,0,1-.09.126.107.107,0,0,1-.068-.01l-1.942-1.02a.108.108,0,0,0-.1,0l-1.942,1.02a.11.11,0,0,1-.16-.116l.37-2.164a.108.108,0,0,0-.032-.1l-1.572-1.532a.11.11,0,0,1,0-.155.107.107,0,0,1,.059-.031l2.172-.316a.1.1,0,0,0,.082-.06l.972-1.968a.11.11,0,0,1,.149-.045A.108.108,0,0,1,709.29,399.43Z" fill="#ffc301"/>
+              <g id="Group_3732" data-name="Group 3732">
+                <path id="Path_8446" data-name="Path 8446" d="M709.192,399.884l-.866,1.676a.284.284,0,0,1-.23.154l-1.88.172,1.986.094a.289.289,0,0,0,.286-.19Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8447" data-name="Path 8447" d="M707.082,405.5l-.042.25a.11.11,0,0,0,.09.127.1.1,0,0,0,.07-.011l1.942-1.02a.108.108,0,0,1,.1,0l1.942,1.02a.11.11,0,0,0,.158-.116l-.372-2.164a.114.114,0,0,1,.032-.1l1.57-1.532a.109.109,0,0,0,0-.155.112.112,0,0,0-.06-.031l-.728-.106A8.382,8.382,0,0,1,707.082,405.5Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3735" data-name="Group 3735">
+              <path id="Path_8448" data-name="Path 8448" d="M718.25,424.512l.468.95a.053.053,0,0,0,.04.03l1.05.152a.054.054,0,0,1,.042.064.051.051,0,0,1-.014.026l-.758.74a.056.056,0,0,0-.016.046l.178,1.046a.051.051,0,0,1-.043.06.048.048,0,0,1-.033-.006l-.938-.492a.051.051,0,0,0-.048,0l-.938.492a.052.052,0,0,1-.071-.017.053.053,0,0,1-.007-.037l.18-1.046a.05.05,0,0,0-.016-.046l-.758-.74a.055.055,0,0,1,0-.076.06.06,0,0,1,.026-.014l1.05-.152a.048.048,0,0,0,.04-.03l.468-.95a.055.055,0,0,1,.073-.023A.051.051,0,0,1,718.25,424.512Z" fill="#ffc301"/>
+              <g id="Group_3734" data-name="Group 3734">
+                <path id="Path_8449" data-name="Path 8449" d="M718.2,424.732l-.418.8a.138.138,0,0,1-.112.076l-.906.084.958.044a.139.139,0,0,0,.138-.092Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8450" data-name="Path 8450" d="M717.184,427.446l-.02.12a.053.053,0,0,0,.043.06.047.047,0,0,0,.033-.006l.938-.492a.055.055,0,0,1,.05,0l.938.492a.051.051,0,0,0,.078-.054l-.18-1.046a.056.056,0,0,1,.016-.046l.76-.74a.054.054,0,0,0,0-.076.057.057,0,0,0-.028-.014l-.35-.052A4.043,4.043,0,0,1,717.184,427.446Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3737" data-name="Group 3737">
+              <path id="Path_8451" data-name="Path 8451" d="M714.122,414.812l.848,1.72a.1.1,0,0,0,.072.054l1.9.276a.1.1,0,0,1,.081.11.094.094,0,0,1-.027.052l-1.374,1.338a.1.1,0,0,0-.028.086l.324,1.89a.1.1,0,0,1-.14.1l-1.7-.894a.1.1,0,0,0-.088,0l-1.7.894a.1.1,0,0,1-.13-.039.1.1,0,0,1-.01-.063l.324-1.89a.1.1,0,0,0-.028-.086l-1.372-1.338a.1.1,0,0,1,.054-.162l1.9-.276a.094.094,0,0,0,.072-.054l.848-1.72a.1.1,0,0,1,.128-.046A.094.094,0,0,1,714.122,414.812Z" fill="#ffc301"/>
+              <g id="Group_3736" data-name="Group 3736">
+                <path id="Path_8452" data-name="Path 8452" d="M714.032,415.21l-.756,1.466a.251.251,0,0,1-.2.136l-1.644.15,1.736.08a.253.253,0,0,0,.25-.166Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8453" data-name="Path 8453" d="M712.188,420.124l-.036.218a.1.1,0,0,0,.079.111.086.086,0,0,0,.059-.009l1.7-.894a.1.1,0,0,1,.088,0l1.7.894a.1.1,0,0,0,.129-.042.089.089,0,0,0,.009-.06l-.324-1.89a.1.1,0,0,1,.026-.086l1.374-1.338a.1.1,0,0,0,0-.136.1.1,0,0,0-.051-.026l-.636-.094A7.329,7.329,0,0,1,712.188,420.124Z" fill="#f3b411"/>
+            </g>
+            <g id="Group_3739" data-name="Group 3739">
+              <path id="Path_8454" data-name="Path 8454" d="M714.092,343.282l4.644,3.2a.281.281,0,0,0,.26.032l5.268-2.014a.281.281,0,0,1,.363.159.274.274,0,0,1,.007.183l-1.6,5.4a.288.288,0,0,0,.05.258l3.542,4.388a.28.28,0,0,1-.212.458l-5.638.144a.286.286,0,0,0-.23.128l-3.078,4.724a.282.282,0,0,1-.5-.06l-1.878-5.318a.281.281,0,0,0-.2-.178l-5.446-1.468a.281.281,0,0,1-.2-.346.284.284,0,0,1,.1-.15l4.478-3.43a.279.279,0,0,0,.11-.238l-.286-5.632a.282.282,0,0,1,.446-.24Z" fill="#ffc301"/>
+              <g id="Group_3738" data-name="Group 3738">
+                <path id="Path_8455" data-name="Path 8455" d="M714.442,344.424l.16,4.844a.746.746,0,0,1-.322.64l-4,2.74,4.57-2.28a.745.745,0,0,0,.4-.782Z" fill="#ffd253"/>
+              </g>
+              <path id="Path_8456" data-name="Path 8456" d="M716.75,359.672l.216.612a.282.282,0,0,0,.36.172.277.277,0,0,0,.142-.112l3.078-4.724a.285.285,0,0,1,.23-.128l5.636-.142a.282.282,0,0,0,.212-.458l-3.542-4.388a.284.284,0,0,1-.052-.256l1.6-5.4a.281.281,0,0,0-.183-.351.286.286,0,0,0-.187.007l-1.766.674A21.544,21.544,0,0,1,716.75,359.672Z" fill="#f3b411"/>
+            </g>
+          </g>
+          <g id="Group_3741" data-name="Group 3741">
+            <path id="Path_8457" data-name="Path 8457" d="M758.36,347.134a28.9,28.9,0,0,0-22.922,46.5l-.57,2.97-.828,4.322a.636.636,0,0,0,.834.72l4.158-1.444,2.318-.8a28.9,28.9,0,1,0,17.012-52.26Z" fill="#e7e7e7"/>
+            <path id="Path_8458" data-name="Path 8458" d="M686.356,356.616l-2.488.24-1.568.152-8.722-11.624a2.25,2.25,0,0,0-3.15-.448l-28.074,21.08a2.25,2.25,0,0,0-.448,3.15l11.614,15.476a2.25,2.25,0,0,0,3.15.45h0l28.072-21.076a2.25,2.25,0,0,0,.45-3.15h0l-.108-.144.6-1.316,1.036-2.276a.362.362,0,0,0-.173-.481A.369.369,0,0,0,686.356,356.616Z" fill="#e7e7e7"/>
+            <rect id="Rectangle_4120" data-name="Rectangle 4120" width="18.45" height="3.15" transform="translate(647.06 366.71) rotate(-36.241)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4121" data-name="Rectangle 4121" width="13.05" height="3.15" transform="translate(650.386 371.246) rotate(-36.241)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4122" data-name="Rectangle 4122" width="17.55" height="3.15" transform="translate(653.844 375.964) rotate(-36.241)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4123" data-name="Rectangle 4123" width="23.36" height="5.542" transform="translate(744.668 362.79) rotate(-1.042)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4124" data-name="Rectangle 4124" width="22.964" height="5.542" transform="translate(744.848 372.686) rotate(-1.042)" fill="#9d9c9c"/>
+            <rect id="Rectangle_4125" data-name="Rectangle 4125" width="23.36" height="5.542" transform="translate(745.034 382.978) rotate(-1.042)" fill="#9d9c9c"/>
+          </g>
+          <path id="Path_8459" data-name="Path 8459" d="M831.8,363.914a7.281,7.281,0,0,0,4.638,5.846,1.784,1.784,0,0,1-.064,3.336l-15.8,2.106a4.854,4.854,0,0,0-4.17,5.452s1.2,10.856,1.848,13.862c.51,2.376,3.49,1.492,4.338.554a8.426,8.426,0,0,1,4.908-3.4,6.552,6.552,0,0,1,1.914,12.964c-.061.009-.122.017-.184.024a9.761,9.761,0,0,1-5-1.42c-2.106-.854-4.614-.666-4.766.386-.128.882,2.26,16.966,2.26,16.966a4.855,4.855,0,0,0,5.452,4.17l15.8-2.106c1.3.07,1.979,1.45,1.2,1.98a7.276,7.276,0,1,0,7.659-.056c-1.044-.76-1.3-2.684-.505-3.036l16.25-2.164a4.852,4.852,0,0,0,4.171-5.449h0l-2-15.06a2.6,2.6,0,0,0-4.532-.778,6.554,6.554,0,1,1-1.64-8.16c1.464,1.148,4.972.628,4.922-.446-.124-2.77-2.062-15.486-2.062-15.486a4.852,4.852,0,0,0-5.449-4.17h0s-12.716,1.938-16.25,2.164c-1.01.066-.828-3.56-.242-4.242a7.278,7.278,0,1,0-12.692-3.826Z" fill="#9d9c9c"/>
+          <path id="Path_8460" data-name="Path 8460" d="M744.38,461.254a7.623,7.623,0,0,0,7.3-2.8,1.87,1.87,0,0,1,3.316,1.108l-2.842,16.456a5.084,5.084,0,0,0,4.144,5.876h0s11.232,2.2,14.44,2.494c2.536.234,2.584-3.022,1.912-4.166a8.825,8.825,0,0,1-1.872-5.974,6.864,6.864,0,0,1,13.528,2.336h0a10.223,10.223,0,0,1-2.984,4.554c-1.514,1.838-2.11,4.4-1.1,4.888.84.4,17.67,3.052,17.67,3.052a5.086,5.086,0,0,0,5.876-4.146L806.6,468.47c.48-1.282,2.07-1.524,2.354-.58a7.623,7.623,0,1,0,2.342-7.674c-1.088.8-3.092.458-3.2-.448l2.922-16.924a5.083,5.083,0,0,0-4.144-5.875h0l-15.684-2.708c-2.648-.2-3.252,3.308-2.2,4.288a6.865,6.865,0,1,1-8.67-.914c1.6-1.1,2.184-4.774,1.1-5.062-2.8-.744-16.128-2.786-16.128-2.786a5.083,5.083,0,0,0-5.875,4.144v0s-2.044,13.32-2.924,16.924c-.252,1.03-3.82-.288-4.318-1.086a7.624,7.624,0,1,0-7.8,11.49Z" fill="#e7e7e7"/>
+        </g>
+        <g id="Group_3754" data-name="Group 3754">
+          <path id="Path_8461" data-name="Path 8461" d="M972.984,455.6s-4.6-16.266-9.176-16.442-14.9,9.566-16.614,26.184-12.036,49.286-5.73,61.894,11.456,22.92,32.656,14.32,28.08-15.472,29.8-21.776a8.99,8.99,0,0,0-.572-2.292c-.574-1.718-3.438-8.6-8.024-8.6s-12.6,2.864-17.2,4.586C978.142,513.482,981.58,484.254,972.984,455.6Z" fill="#dbdbdb"/>
+          <path id="Path_8462" data-name="Path 8462" d="M951.172,408.156c-2.73-6.312-5.212-18.3-.168-29.272,7.954-17.31,22.066-41.382,50.058-41.622s56.118,31.486,54.214,47.664c-1.644,13.974-3.2,22.682-20.554,30.188s-55.842,8.854-70.572,4.29A25.373,25.373,0,0,1,951.172,408.156Z" fill="#42210b"/>
+          <path id="Path_8463" data-name="Path 8463" d="M1000.2,344.728c19.716,1.132,34.622,20.8,33.3,43.924,0,.1-.016.188-.022.284,2.89-.52,9.078-.752,6.454,7.66-2.136,6.846-6.666,7.494-9.712,7.046-5.376,13.6-13.564,19.092-26.714,24.022,0,3.53,4.032,5.99,8.218,10.686,0,0-9.818,20.8-26.372,21.236s-13.9-25.346-13.9-25.346a37.051,37.051,0,0,0,10.686-9.042c-9.041-2.466-18.387-14.3-20.228-25.166C955.6,362.784,980.482,343.6,1000.2,344.728Z" fill="#feecdc"/>
+          <path id="Path_8464" data-name="Path 8464" d="M997.966,378.032a.4.4,0,0,1-.242.022,8.678,8.678,0,0,0-6.312,1.618.412.412,0,0,1-.538-.622,9.471,9.471,0,0,1,7.025-1.8.41.41,0,0,1,.068.782Z" fill="#221e1f"/>
+          <path id="Path_8465" data-name="Path 8465" d="M970.694,382.338a.412.412,0,0,1-.334-.054,8.674,8.674,0,0,0-6.462-.826.4.4,0,0,1-.516-.23l-.008-.022a.411.411,0,0,1,.25-.523h0a9.452,9.452,0,0,1,7.19.92.41.41,0,0,1-.122.738Z" fill="#221e1f"/>
+          <g id="Group_3747" data-name="Group 3747" opacity="0.8">
+            <g id="Group_3746" data-name="Group 3746">
+              <g id="Group_3489" data-name="Group 3489">
+                <g id="Group_3488" data-name="Group 3488" clip-path="url(#clip-path-6)">
+                  <g id="Group_3745" data-name="Group 3745">
+                    <g id="Group_3744" data-name="Group 3744">
+                      <g id="Group_3487" data-name="Group 3487">
+                        <g id="Group_3486" data-name="Group 3486" clip-path="url(#clip-path-7)">
+                          <g id="Group_3743" data-name="Group 3743">
+                            <path id="Path_8466" data-name="Path 8466" d="M989.8,410.994s-2.5,4.886-6.578,5.02-6.892-4.582-6.892-4.582" fill="#db727c"/>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <g id="Group_3752" data-name="Group 3752" opacity="0.8">
+            <g id="Group_3751" data-name="Group 3751">
+              <g id="Group_3493" data-name="Group 3493">
+                <g id="Group_3492" data-name="Group 3492" clip-path="url(#clip-path-8)">
+                  <g id="Group_3750" data-name="Group 3750">
+                    <g id="Group_3749" data-name="Group 3749">
+                      <g id="Group_3491" data-name="Group 3491">
+                        <g id="Group_3490" data-name="Group 3490" clip-path="url(#clip-path-8)">
+                          <g id="Group_3748" data-name="Group 3748">
+                            <path id="Path_8467" data-name="Path 8467" d="M977.64,396.242s-3.322,4-2.678,5.3,4.664,2.08,4.664,2.08" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+            </g>
+          </g>
+          <path id="Path_8468" data-name="Path 8468" d="M966.614,391.05a2.434,2.434,0,1,0-.005-.014l.005.014" fill="#221e1f"/>
+          <path id="Path_8469" data-name="Path 8469" d="M992.9,390.608a2.436,2.436,0,1,0-.005-.014l.005.014" fill="#221e1f"/>
+          <path id="Path_8470" data-name="Path 8470" d="M960.758,370.954a25.926,25.926,0,0,1,12.328-5.754,23,23,0,0,1,10.094-12.882s-7.628,10.018-7.628,12.882c0,0,10.2-1.47,14.8.822,0,0,4.294-13.7,10.026-15.422,0,0-5.158,10.89-5.158,16.62l4.586,1.146s6.879-12.6,6.879-14.328c0,0-1.146,13.182-2.866,15.474,0,0,11.462,3.438,15.474,8.024a107.54,107.54,0,0,0,1.146-13.754s13.182,28.654-1.146,47c0,0,12.6-12.6,14.328-20.058s1.718-33.24-15.474-42.4c-15.354-8.188-32.094-7.45-40.116-1.146S955.178,375.736,960.758,370.954Z" fill="#42210b"/>
+          <path id="Path_8471" data-name="Path 8471" d="M955.826,458.078s0-22.2,17.26-26.3c0,0,2.416,17.3,12.732,19.016,0,0,13.182,3.44,21.2-7.45,0,0,2.864-5.73,8.6-5.158s19.484,0,18.338,22.924-12.036,59.026-5.732,77.94,24.644,67.05,26.936,99.716,1.146,30.948,1.146,30.948,0,2.864-6.3,2.864-76.8.572-94.56-4.01c0,0-10.316.572-9.168-7.45s2.864-94.56,8.6-120.922a103.814,103.814,0,0,0,2.864-18.338C958.31,512.11,951.242,480.428,955.826,458.078Z" fill="#e7e7e7"/>
+          <path id="Path_8472" data-name="Path 8472" d="M997.686,509.34s-9-4.428-12.754-9.69c0,0-6.562-8.9-9.328-10.072,0,0-11-1-13.748-.934s-5,1.548-5.8,8.554,6.548,13.26,10.456,14.3a25.526,25.526,0,0,0,11.508,0c4.106-.706,10.618,3.8,12.484,5.8S998.652,512.2,997.686,509.34Z" fill="#feecdc"/>
+          <path id="Path_8473" data-name="Path 8473" d="M1021.35,460.532s4.6-16.266,9.174-16.442,14.9,9.566,16.614,26.184,12.036,49.284,5.73,61.894-11.462,22.924-32.666,14.328-28.08-15.474-29.8-21.776c0,0-8.026-8.21-7.454-9.93s3.634-9.04,8.218-9.04,20.438,10.946,25.024,12.666C1016.192,518.414,1012.754,489.186,1021.35,460.532Z" fill="#dbdbdb"/>
+          <path id="Path_8474" data-name="Path 8474" d="M1008.742,434.744s-14.9,13.754-18.912,14.9a4.2,4.2,0,0,0,.572,3.438c1.146,1.72,5.158,9.17,9.744,8.024s4.012,0,5.732,1.146,4.01,3.438,8.022-2.294,11.462-15.474,17.2-17.2c0,0,0-.572-2.866-1.718a31.922,31.922,0,0,0-15.472-4.012A9.77,9.77,0,0,0,1008.742,434.744Z" fill="#f09491"/>
+          <path id="Path_8475" data-name="Path 8475" d="M973.5,431.186s6.29,15.764,9.046,18.184c0,0,.864,1.6-.828,1.894a8.792,8.792,0,0,0-5.706,3.922c-1.856,2.658-6.9,7.044-12.386-4.2s-.81-14.4,2.274-16.7S972.738,430.158,973.5,431.186Z" fill="#f09491"/>
+          <path id="Path_8476" data-name="Path 8476" d="M989.832,442.122c-.632,0-1.216-.036-1.762-.09-5.882-.588-11.416-10.858-11.648-11.3l.724-.386c.056.1,5.561,10.318,11,10.864,3.6.358,8.972-.124,18.624-7.112l.483.666C998.822,440.876,993.53,442.122,989.832,442.122Z" fill="#42210b"/>
+          <circle id="Ellipse_706" data-name="Ellipse 706" cx="1.146" cy="1.146" r="1.146" transform="translate(986.966 441.62)" fill="#d1232e"/>
+          <g id="Group_3753" data-name="Group 3753">
+            <path id="Path_8477" data-name="Path 8477" d="M949.358,476.324s-4.254,7.624.848,7c0,0,.318,2.628,4.038,1.29a4.283,4.283,0,0,0,5.314,1.134c3.72-1.338,2.094-7.424,2.094-7.424S952.972,474.108,949.358,476.324Z" fill="#feecdc"/>
+            <path id="Path_8478" data-name="Path 8478" d="M961.524,479.1s-2.984-6.132-9.084-6.2-4.574-.048-7.642,1.444-2.858,3.216.844,3.156,8.452-1.272,10.626,1.672S961.5,480.632,961.524,479.1Z" fill="#feecdc"/>
+          </g>
+          <path id="Path_8479" data-name="Path 8479" d="M972.3,494.266l-5.25,8.886a2.6,2.6,0,0,1-3.412,1.369l-.016-.007-37.838-16.308a2.6,2.6,0,0,1-1.368-3.413l.006-.015,7.034-8.562a2.6,2.6,0,0,1,3.413-1.368l.015.006,36.054,15.982a2.6,2.6,0,0,1,1.37,3.413Z" fill="#42210b"/>
+          <path id="Path_8480" data-name="Path 8480" d="M947.856,480.248,935.7,474.86c-1.322-.57-2.858-.782-3.428.542l-7.032,8.562a2.6,2.6,0,0,0,1.347,3.422l.015.006,26.638,11.48A79.986,79.986,0,0,1,947.856,480.248Z" fill="#fff" opacity="0.17" style="isolation: isolate"/>
+          <path id="Path_8481" data-name="Path 8481" d="M951.348,500.772s-4.928-6.95.622-5.12,6.912,4.88,6.912,4.88,16.152,4.852,14.322,10.4S958.344,509.7,951.348,500.772Z" fill="#feecdc"/>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/index_banner_web.svg b/PAMapp/assets/images/index_banner_web.svg
index 7809c43..6409994 100644
--- a/PAMapp/assets/images/index_banner_web.svg
+++ b/PAMapp/assets/images/index_banner_web.svg
@@ -1 +1,193 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1440 590"><defs><clipPath id="a"><path d="M1441,551s-538.68,16.64-730,16C540.74,566.43-3,551-3,551V-3H1441Z" fill="none"/></clipPath><clipPath id="b"><rect x="410.03" y="173.42" width="621" height="399.04" fill="none"/></clipPath><clipPath id="c"><rect x="511.43" y="435.03" width="13.3" height="4.74" transform="translate(-68.19 96.79) rotate(-10.02)" fill="none"/></clipPath><clipPath id="e"><rect x="512.87" y="423.49" width="6.33" height="7.42" transform="translate(-66.45 96.28) rotate(-10.02)" fill="none"/></clipPath><clipPath id="g"><rect x="641.82" y="411.94" width="15.82" height="5.64" transform="translate(-62.24 119.35) rotate(-10.02)" fill="none"/></clipPath><clipPath id="i"><rect x="643.53" y="395.32" width="7.54" height="8.83" transform="translate(-59.67 118.7) rotate(-10.02)" fill="none"/></clipPath><clipPath id="k"><rect x="893.06" y="411.94" width="15.82" height="5.64" transform="translate(-13.85 31.52) rotate(-1.99)" fill="none"/></clipPath><clipPath id="m"><rect x="892.75" y="396.08" width="8.83" height="5.12" transform="translate(348.54 1212.79) rotate(-79.98)" fill="none"/></clipPath><clipPath id="o"><rect x="774.24" y="404.67" width="15.82" height="5.64" transform="translate(-71.69 186.66) rotate(-13.02)" fill="none"/></clipPath><clipPath id="q"><rect x="782.24" y="388.84" width="5.12" height="8.83" transform="translate(-56.44 142.52) rotate(-10.02)" fill="none"/></clipPath></defs><g clip-path="url(#a)"><rect x="-2" width="1442.53" height="572.46" fill="#f09491"/><path d="M251.89,300.54l-19.33-15.86,15.86-19.32,19.33,15.85Zm-17.26-16.06,17.06,14,14-17.05-17.06-14Z" fill="#e87722"/><path d="M227.88,218.92l-19.33-15.86,15.86-19.33,19.32,15.86Zm-17.26-16.06,17,14,14-17.06-17-14Z" fill="#f09491"/><path d="M470.26,175.69a8.83,8.83,0,1,1,8.82-8.82h0A8.82,8.82,0,0,1,470.26,175.69Zm0-16.17a7.35,7.35,0,1,0,7.35,7.35h0a7.36,7.36,0,0,0-7.35-7.36h0Z" fill="#f2c75c"/><path d="M1223.73,291.77a8.83,8.83,0,1,1,8.82-8.82h0A8.82,8.82,0,0,1,1223.73,291.77Zm0-16.18a7.36,7.36,0,1,0,7.35,7.36,7.36,7.36,0,0,0-7.35-7.36Z" fill="#e87722"/><circle cx="1131.2" cy="201.67" r="16.93" fill="#f2c75c" opacity="0.5" style="isolation:isolate"/><path d="M1128.91,217.87a17.25,17.25,0,1,1,17.24-17.25A17.27,17.27,0,0,1,1128.91,217.87Zm0-34.2a17,17,0,1,0,16.95,17,17,17,0,0,0-16.95-17Z" fill="#f2c75c"/><path d="M1034.88,190.8l-2.35,6,19.56,64,4.75,1.86Z" fill="#e87722"/><path d="M1039.11,180l-2.35,6,23.88,78.1,4.75,1.87Z" fill="#e87722"/><path d="M1030.65,201.59l-2.35,6,15.24,49.82,4.75,1.87Z" fill="#e87722"/><path d="M1046.06,178.13l-4.75-1.86,27.88,91.2,4.75,1.86Z" fill="#e87722"/><path d="M1017.89,247.35l4.75,1.86L1018,233.94l-2.35,6Z" fill="#e87722"/><path d="M1022.2,223.15l-2.35,6,6.59,21.55,4.75,1.87Z" fill="#e87722"/><path d="M1026.43,212.37l-2.35,6,10.91,35.7,4.75,1.86Z" fill="#e87722"/><path d="M1054.61,181.48l-4.76-1.86,27.89,91.2,4.75,1.86Z" fill="#e87722"/><path d="M1110,204l.27-.69-.54-.21Z" fill="#e87722"/><path d="M1105.91,201.6l-4.75-1.87,4.59,15,2.35-6Z" fill="#e87722"/><path d="M1097.36,198.25l-4.76-1.87,8.92,29.17,2.35-6Z" fill="#e87722"/><path d="M1013.74,244.72l-.34.87.69.27Z" fill="#e87722"/><path d="M1071.71,188.19l-4.75-1.87,21.88,71.58,2.35-6Z" fill="#e87722"/><path d="M1088.81,194.89l-4.76-1.86,13.24,43.3,2.35-6Z" fill="#e87722"/><path d="M1063.16,184.84l-4.75-1.87,26.2,85.71,2.35-6Z" fill="#e87722"/><path d="M1080.26,191.54l-4.75-1.86,17.56,57.44,2.35-6Z" fill="#e87722"/><path d="M313.16,292.58l-1.63,4.17,13.6,44.49,3.31,1.3Z" fill="#e87722"/><path d="M316.1,285.08l-1.63,4.17,16.61,54.33,3.3,1.29Z" fill="#e87722"/><path d="M310.22,300.08l-1.63,4.17,10.59,34.66,3.31,1.3Z" fill="#e87722"/><path d="M320.94,283.77l-3.31-1.3L337,345.91l3.31,1.3Z" fill="#e87722"/><path d="M301.34,331.92l3.31,1.29-3.25-10.63-1.64,4.17Z" fill="#e87722"/><path d="M304.34,315.08l-1.64,4.17,4.59,15,3.3,1.3Z" fill="#e87722"/><path d="M307.28,307.58l-1.64,4.17,7.6,24.83,3.3,1.3Z" fill="#e87722"/><path d="M326.88,286.1l-3.3-1.3L343,348.24l3.31,1.3Z" fill="#e87722"/><path d="M365.4,301.75l.19-.47-.38-.15Z" fill="#e87722"/><path d="M362.57,300.09l-3.31-1.3,3.2,10.46,1.63-4.17Z" fill="#e87722"/><path d="M356.62,297.76l-3.31-1.3,6.21,20.29,1.63-4.17Z" fill="#e87722"/><path d="M298.45,330.09l-.23.6.47.19Z" fill="#e87722"/><path d="M338.78,290.76l-3.31-1.29,15.22,49.79,1.64-4.17Z" fill="#e87722"/><path d="M350.67,295.43l-3.3-1.3,9.21,30.12,1.63-4.17Z" fill="#e87722"/><path d="M332.83,288.43l-3.31-1.3,18.23,59.63,1.64-4.17Z" fill="#e87722"/><path d="M344.73,293.1l-3.31-1.3,12.22,39.95,1.63-4.17Z" fill="#e87722"/><g clip-path="url(#b)"><circle cx="708.48" cy="540.51" r="231.28" fill="#fff" opacity="0.25" style="isolation:isolate"/><circle cx="708.48" cy="540.51" r="194.26" fill="#fff" opacity="0.5" style="isolation:isolate"/><circle cx="708.48" cy="617.13" r="144.5" fill="#fff" opacity="0.75" style="isolation:isolate"/><path d="M875.43,569.36A687.49,687.49,0,0,0,850.36,659l60.77,2.28,5.31-23.55,6.08,25.07s63.82,0,63.8-.76c-1.68-91.15-25.23-95.71-25.23-95.71Z" fill="#a7a6a6"/><path d="M872.38,575.43l-2.28,5.32s25.92,13,53.94,10.64A111.1,111.1,0,0,0,971,576.19l-3.8-6.07s-23.54,13.67-46.33,14.43C897.29,585.34,872.38,575.43,872.38,575.43Z" fill="#72502b"/><path d="M934.12,429.21s4.56,5.32,31.9,11.4c0,0,11.4,1.52,15.2,15.95s-2.28,85.07-3.8,94.95-9.12,18.23-19,16c0,0-14.44,11.39-49.38,11.39l-35.32-8,1.14-17.09s-22.79-10.64-23.55-14.44-7.59-24.3-3-31.9S843,462.64,843,462.64s-6.84-6.08,12.91-14.44,26.75-12.68,28.57-16.21c0,0,7.13,11.66,14,13.94s13.67.75,21.27-4.56A124.11,124.11,0,0,0,934.12,429.21Z" fill="#a7a8aa"/><path d="M877.54,363.51c1.52-5.32,3.15-1.25,5.11-4.86,4.33-7.85-4,7,26.94,8.07s26.39-15.82,28-5.2c1.13,7.32,1.55,37.31,4,33.39,2-3.21,3.3-8.15,4.51-13,.86,1.05,7.45,2.49,7.75,5.49s-5.72,7.92-6.84,12.15c-.91,3.58-7.43,6.2-7.76,6.19-.35.71-2.71,12-6.23,17.1,0,3,0,6.76.17,10.37C931,436,923.7,443.16,905,447.83h-7.81a109.81,109.81,0,0,1-12.36-16.35c.29-2.62.64-5.23,1-7.38-3.62-5.44-12.43-8.55-10.91-38.17l.38-14.82" fill="#e2b690"/><path d="M917,554.75l-14.2,15L893,550.88s-3-74.46,3.31-85.75c-.57-1.2-4.22-7.68-6.54-11.75l2.5-1.93c7.49-5.77,6.51-5.15,6.51-5.15-.19-.09,2.46-.66,2.27-.76,0,0,4.56,1.52,7.6,0,.68-.34.83.71.76.76s.77.07,4.32,3.77c1.11,1.13,2.38,2.55,3.93,4.41a57.16,57.16,0,0,0-8.34,9.76c6.5,8.5,9.52,82.32,9.52,82.32Z" fill="#db232e"/><path d="M907.46,445.94s1.94,1.26,9.44,7l2.5,1.92c2,1.53,4.39,3.33,7.11,5.43,2.62-1.26,13.73-18.57,7.64-34.9a5,5,0,0,1-.63,1.27c-1.78,3.07-7.89,11.2-25.6,18.85-.18.09-.27.3-.46.39" fill="#fff"/><path d="M884.11,465.15c2.88-3.74,5.4-6.78,7.4-9.15,1.55-1.85,2.82-3.28,3.93-4.41,3.55-3.7,4.89-5.28,4.89-5.28s.83-.71.75-.76c-7.57-6-13.44-10.27-15.61-12.76-.71-.9-1.11-1.38-1.11-1.38-1.72,17.35-3.11,33.12-.25,33.74" fill="#fff"/><path d="M871.08,372.24c.2,3.75.86,2.44,2.49,8.34,1.45,5.29,2.07,3.11,2.07,0,0-6.08,3.35-13.87,5.31-17.47,4.34-7.85-2.35,2.53,28.64,3.59s27.63-.65,29.3,10c1.13,7.31.3,22.14,2.73,18.22,1.94-3.21,2.69-7.47,4.66-12,.91-2.1,3.68,3.36,4.56.76,6.08-18.16.86-27.25,1.52-28.1,3.51-4.57,6.6-12.63,4.55-11.4-3.79,2.28-15.19,3-15.95,2.28-13.86-13.86-52.35-10.52-52.35-10.52s-13.73,1.41-17.53,30.27Z" fill="#221e1f"/><path d="M909.82,502.13s25.82,11.39,40.25,21.27c0,0-2.28,31.15-19.75,34.18,0,0-15.19-17.46-19.75-23.54,0,0-6.07-9.88-11.39-12.16Z" fill="#a7a8aa"/><path d="M861.2,497.58s4.56-9.88,21.27-5.32c0,0,8.36.76,14.43,5.32l3,1.51s3,19.75-1.52,20.51l-8.35-.76S881,516.57,876.4,512s-8.36-3-12.16-3h-6.07S856.65,503.65,861.2,497.58Z" fill="#e2b690"/><path d="M898.13,498a49.61,49.61,0,0,1,1,8.67s.76,6.84-1.51,10.64a8.52,8.52,0,0,1-4,2.22,35.38,35.38,0,0,0,7.8,3.85s4.56-2.28,6.08-5.31l-3-3,3,.76s3-7.59,2.28-13.67Z" fill="#a7a8aa"/><path d="M932.08,492s-57,15.91-72.78,23.43c0,0,12.08,27.71,28.87,33.42,0,0,32.76-20.15,38.21-25.45,0,0,7.53-8.81,13.14-10.24Z" fill="#a7a8aa"/><path d="M980.81,495s-3-10.46-20.19-8.55c0,0-8.37-.55-15.08,3l-3.24,1s-6.06,19.05-1.68,20.5l8.37.55s9.36-.84,14.57-4.64,8.72-1.7,12.48-1.11l6,.94S984.37,501.75,980.81,495Z" fill="#e2b690"/><path d="M944.27,489.75a50.25,50.25,0,0,0-2.39,8.4s-1.81,6.64-.15,10.75a8.38,8.38,0,0,0,3.61,2.81,35,35,0,0,1-8.31,2.6s-4.14-3-5.17-6.19l3.47-2.53-3.12.28s-1.82-8-.13-13.87Z" fill="#fff"/><path d="M496.53,566.32s-9.87,20.51-13.67,31.15-4.56,55.44-4.56,55.44,66.84,16,101,0c0,0-.76-48.61-6.84-57.73s-15.19-31.9-15.19-31.9l-35.7,3.8Z" fill="#67737a"/><path d="M488.44,401.36s-17.54-21.59-24.28-6.75-5.4,28.33,1.35,36.43,6.74,22.93,6.74,24.28S493.83,421.59,488.44,401.36Z" fill="#221e1f"/><path d="M550.42,411.66v-.19c0-22.72-15.71-41.14-35.08-41.14s-35.07,18.42-35.07,41.14v.28c-2.8-.67-8.85-1.24-6.75,7.14,1.7,6.83,6.11,7.72,9.11,7.45,4.5,13.62,15,23.72,27.7,25.86-.2,3.45-3.06,6.07-7.42,10.43,0,0,4.33,19.67,20.52,21s19-24.81,19-24.81-9.55-4.22-13-9.66c8.53-4.37,15.28-12.6,18.66-22.81,3,.14,7.07-1,8.7-7.48C558.73,410.92,553.36,411.05,550.42,411.66Z" fill="#feecdc"/><path d="M490.46,391.24s-8.09,12.14-8.09,16.19c0,0-2.27,21.73,4.26,27.05A28.09,28.09,0,0,1,477,410.12s-6.75-1.35-5.4-12.14,10.8-32.38,33.73-33.73c0,0,29.68-9.44,45.87,17.54,0,0,6.07,15.52,2,29,0,0-2.7,16.18-5.4,20.23,0,0,2-15.51.68-20.91s-1.35-16.19-13.49-25.63c0,0,1.35,6.74-1.35,12.14,0,0,0,1.35-4,1.35s-25,.68-31,2.7c-1.32.44-4,2.7-5.39-1.35Z" fill="#221e1f"/><path d="M506.4,458.46a25.45,25.45,0,0,0,5.32,7.59c3.92,3.93,9.12,7.6,14.43,7.6,2.28,0,5.45-.79,10.85-3.49l5.31,105.14s-27.57,6.15-46.45-6c0,0,0-16.19-4.05-25.63L454,536.94s2.69-12.55,2.69-16.19C456.74,501.86,476.73,469.25,506.4,458.46Z" fill="#a7a8aa"/><path d="M541.35,457.7s42.19,9.09,44.89,36.07-6.74,60.71-18.88,67.45l-8.1,1.35V568s-16.19,10.79-28.33,8.09l-2.7-9.44s-25.63-5.4-33.72-10.8,2.7-14.84,2.7-14.84l33.72-9.44-6.29-57.89S538.65,467.14,541.35,457.7Z" fill="#d0d0ce"/><path d="M458.08,531.54s41.83-18.89,89-4l1.35,12.14s-49.91,18.89-74.2,14.84S450,536.94,458.08,531.54Z" fill="#a7a8aa"/><path d="M538.82,483.65c-8.73-9.22-13.3-10.66-13.3-10.66.16-.08.4-.24.56-.32,11.06-5.69,14-11.54,14.82-14.11a4,4,0,0,0,.16-1c.08-.16,1.81.18,1.81.18,2.41,11.13-2.29,25.3-4,25.95" fill="#fff"/><path d="M522.71,473c-.8.32-5.37,2.32-13.3,10.66-1.67-.64-6.08-14-3.76-25.19a4.55,4.55,0,0,1,.76-.76c.07,0,.73-.11.76,0,.4,1.65,2.25,8.53,15.54,15.29" fill="#fff"/><path d="M547.12,527.81l1.35,11.82s8.83-3.69,11.11-12c0,0-1.58-8.28-7.59-2.28C551,526.27,550.61,528,547.12,527.81Z" fill="#feecdc"/><path d="M495.47,409.22a9,9,0,0,1,6.79.24" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M522.54,406.19a8.91,8.91,0,0,1,6.05-3.09" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#c)"><g clip-path="url(#c)"><path d="M511.11,436.22s3.41,4.21,7.38,3.51,5.72-5.82,5.72-5.82" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#e)"><g clip-path="url(#e)"><path d="M514,424.31s-1,5,.19,5.85,5-.4,5-.4" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M505,415.57a2.38,2.38,0,1,1-2.76-1.93h0a2.38,2.38,0,0,1,2.75,1.93" fill="#221e1f"/><path d="M527.67,411.56a2.38,2.38,0,1,1-2.76-1.93h0a2.38,2.38,0,0,1,2.76,1.93" fill="#221e1f"/><path d="M706.63,562.52a689.16,689.16,0,0,1,25.06,89.64l-60.76,2.27-5.33-23.54L659.53,656s-63.81,0-63.81-.76c0-22,9.11-91.91,9.11-91.91Z" fill="#a7a6a6"/><path d="M623.83,424.28s-28.11,3.79-47.1,25.82c0,0-9.11,3.8-10.63,11.4s0,62.28,6.08,70.64,10.63,9.87,14.43,9.11L598,539l6.08,29.62s30.39,7.6,47.86,7.6,50.89-6.08,56.21-10.64l7.59-31.9L737,526.83s9.12-1.52,8.36-12.92.76-46.33-6.84-63.81c0,0-1.52-5.31-14.43-9.11,0,0-31.35-21.45-50.62-19.84a17.85,17.85,0,0,1-3.31,18.32c-7.6,9.11-19,9.87-28.11,5.31S623.83,424.28,623.83,424.28Z" fill="#1b365d"/><path d="M678.38,391.17c-.84,3.33-3.63,1.34-3.34,3.08a32.81,32.81,0,0,1-3.47,19.7c.6,2.09,1.29,4.64,1.91,7.19A109,109,0,0,1,663.32,439l-7.74,1c-19.16-2.23-27.29-8.4-29.88-10.83-.26-3.61-.74-7.32-1.16-10.31-4.15-4.63-7.94-15.5-8.37-16.16-.32.05-4.84-1.53-6.2-5-3.22-7.9-5.13-15.43-3.65-17.8,1.82,4.61,3.79,9.34,6.14,12.28,2.91,3.58-.53-26.22-.35-33.63.29-10.74-2.17,6.6,28.49,1.56s20.37-18.69,25.68-11.46c2.4,3.33,7.22,37.88,8.73,34.11a64.13,64.13,0,0,0,3.1-13.53l.72.34c4.72,2.49,1.19,15.35-.44,21.59" fill="#feecdc"/><path d="M670.93,547.33,658.77,564l-12.15-17.46s-1.22-74.93,3.57-86.93c-.72-1.12-5.18-7.08-8-10.81l2.23-2.24c6.69-6.68,8.46-8.19,8.46-8.19l-.59-.2,7.8.26-.13.14a29.28,29.28,0,0,1,5.58,3.87c1.24,1,2.68,2.23,4.45,3.86a57.72,57.72,0,0,0-7,10.75c7.53,7.61,8.71,81.89,8.71,81.89" fill="#db232e"/><path d="M652.88,438.41s-1.77,1.5-8.46,8.19l-2.23,2.23c-1.77,1.77-3.93,3.86-6.36,6.29-2.75-.91-16-16.65-12.06-33.63a5.53,5.53,0,0,0,.79,1.18c2.16,2.82,9.18,10.23,27.73,15.54l.59.2" fill="#fff"/><path d="M678.51,454.46c-3.35-3.34-6.23-6-8.52-8.12-1.77-1.64-3.22-2.89-4.46-3.87A29.34,29.34,0,0,0,660,438.6l.13-.13A109.14,109.14,0,0,0,673,422.54c.59-1,.92-1.51.92-1.51,3.93,17,7.34,32.45,4.59,33.43" fill="#fff"/><path d="M679.16,353.05a87.72,87.72,0,0,1-1.06,16.19A63.88,63.88,0,0,1,675,382.76c-1.51,3.77-5.1-23.15-7.5-26.47-5.31-7.23,3.68-1.2-26.92,3.83s-27.48,2.9-27.77,13.64c-.18,7.4,2.55,22-.37,18.43-2.34-2.94-4.31-7.66-6.14-12.28-1.31-3.17-2.5-6.36-3.71-8.83-8.36-17.23,6.42-22.38,5.66-23.15-9.68-9.68,19.36-29.25,26.59-30.38,19.67-3.17,22.6,9.31,22.6,9.31s19.72-3.71,21.71,26.2" fill="#221e1f"/><path d="M701.69,484.66s-8.36-1.52-16,9.88l-8.36,1.52s-2.28,14.43,1.52,15.19l17.47-9.88Z" fill="#feecdc"/><path d="M629.53,489.22s34.94-3,47.09,6.08c0,0-3,14.43,4.56,19.75s1.52,24.3,1.52,24.3-27.35,3-46.33,0l-12.92-2.27,2.28-21.27Z" fill="#1b365d"/><path d="M625.35,529.86s-.76,5.43.76,8c0,0-7.6-1.19-9.88-1.95,0,0-7.59.76-8.35-.76s1.52-3,1.52-3S622.31,531.38,625.35,529.86Z" fill="#feecdc"/><path d="M709.66,568.6l2.28,5.32s-25.82,9.87-53.93,10.63-55.45-6.84-55.45-6.84l.66-6.06s31.24,8.34,54,6.82C680.76,576.91,709.66,568.6,709.66,568.6Z" fill="#72502b"/><path d="M622.9,378.3a10.61,10.61,0,0,1,8.07.42" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M655.11,374.85a10.68,10.68,0,0,1,7.07-3.92" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#g)"><g clip-path="url(#g)"><path d="M641.44,413.36s4.06,5,8.78,4.18,6.81-6.93,6.81-6.93" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#i)"><g clip-path="url(#i)"><path d="M644.85,396.3s-1.18,6,.22,7,6-.48,6-.48" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M634.11,385.9a2.83,2.83,0,1,1-3.28-2.29h0a2.82,2.82,0,0,1,3.28,2.29" fill="#221e1f"/><path d="M661.14,381.12a2.83,2.83,0,1,1-3.28-2.29h0a2.83,2.83,0,0,1,3.28,2.29" fill="#221e1f"/><path d="M810.69,442.51c-3.8-.76-.76,0-10.63-5.32-6.83-3.68-7.48-11-7.24-15.14,12-7.79,18.76-23.41,15.79-39.74-3.84-21-22.34-35.31-41.32-31.85S736,373.79,739.85,394.84c2.89,15.82,14.06,27.81,27.49,31.31a10.85,10.85,0,0,1,2.33,6.48c0,7.6-7.59,6.08-7.59,6.08l7.59,15.19c9.12,12.15,36.46,12.91,44.06,9.88S814.49,443.27,810.69,442.51Z" fill="#feecdc"/><path d="M773.09,354s15.19-3,19,6.84a32,32,0,0,0,10.64,14.43s9.11,8.36,6.07,23.55c0,0-3,5.32,0,4.56,0,0,6.84,2.28,12.92-6.08s5.31-17.47.75-18.23-12.91-7.6-12.15-11.4.76-9.87-4.56-13.67-12.15-19-29.62-15.95c0,0-5.32,0-6.84,3,0,0-19-5.32-30.38,10.64,0,0-3,4.55-8.36,19a16,16,0,0,1-6.83,9.11c-5.32,3-14.44,5.32-15.2,16.71s8.36,11.4,10.64,11.4c0,0-9.12,9.11-1.52,18.23s12.15,4.55,14.43,2.28,3-1.52,5.32-.76,9.88,1.51,12.91-6.08,0-11.39-3.79-14.43S742,395,744.23,389.71s3.79-7.6,9.11-9.87,6.08-5.32,6.08-8.36S757.14,354.77,767,354C767,354,770.81,355.53,773.09,354Z" fill="#221e1f"/><path d="M765.75,438.69A28.58,28.58,0,0,1,759,438c-2.28-.76-6.84-3-9.88,3s-19,41-6.83,57.73c0,0,6.07,3.8,9.11-2.28a9.79,9.79,0,0,1,13-4.6,9.68,9.68,0,0,1,1.39.81c4.55,3,.75,40.26-6.08,58.49s-22,50.89-14.43,81.27L751.44,662l96.47-2.28s12.16-29.63,5.32-57-23.55-49.37-23.55-61.53-3-20.51-.76-29.62c0,0,1.9-4.94,1.9-7.22,0,0,8.35,4.56,13.67,2.28,0,0,5.32-3,3-9.87,0,0,7.6,1.52,7.6-4.56,0,0,.76-1.52-1.52-3.8s-9.88-12.15-11.4-15.95-19-28.11-27.34-31.9c0,0-4.3-1.1-6.33,1.35,0,0-.51.93.25,3.21s3.8,14.43,0,14.43-26.59,1.52-32.66-4.55a38.17,38.17,0,0,1-8.36-12.16S766.76,439.06,765.75,438.69Z" fill="#ed1b2e"/><path d="M776.13,499.09a96.16,96.16,0,0,1-12.2-7.16s-6.79-3.47-11.35,1.85a21.34,21.34,0,0,1-3,4.55s-1.52,2.28-3.8,1.52c0,0,6.84,24.31,16,29.63,0,0-5.32,3.8,6.08,9.11a16.37,16.37,0,0,0,4.56.76,22.26,22.26,0,0,1,6.83,1.52c2.28.76,17.47,8.36,33.42,6.84s27.35-7.6,28.87-12.16c0,0,3.8-2.27,3.8-5.31,0,0-.76-3.8.76-5.32s3.8-9.12,1.52-21.27c0,0-2.31,5.19-9.51,3.36l-7.2-2.6s-2.28,10.64-3.8,11.4c0,0-29.63-6.84-38-6.08,0,0-7.6,0-10.64-3S776.13,499.09,776.13,499.09Z" fill="#feecdc"/><ellipse cx="787.9" cy="447.06" rx="2.28" ry="3.04" transform="translate(-106.49 303.13) rotate(-20.43)" fill="#f1f1f1"/><path d="M784.81,444.77c-6.95,0-13.2-5.1-16.55-8.45a.39.39,0,0,1,0-.54.37.37,0,0,1,.52,0c3.74,3.74,11.19,9.74,19,7.88,6-1.44,8.82-8.81,8.84-8.88a.37.37,0,0,1,.49-.22.36.36,0,0,1,.22.48h0c-.12.32-3,7.83-9.38,9.36A14.17,14.17,0,0,1,784.81,444.77Z" fill="#f1f1f1"/><path d="M927.8,378.3a10.71,10.71,0,0,0-8.07.42" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M895.58,374.86a9.73,9.73,0,0,0-3.15-2.66,9.52,9.52,0,0,0-3.91-1.26" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#k)"><g clip-path="url(#k)"><path d="M908.78,411.67s-2.92,5.74-7.71,5.91-8.1-5.36-8.1-5.36" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#m)"><g clip-path="url(#m)"><path d="M896.62,394.67s-2.46,5.35-1.86,6.68,3.89,1.26,3.89,1.26" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M916.59,385.9a2.83,2.83,0,1,0,3.28-2.29h0a2.82,2.82,0,0,0-3.27,2.29h0" fill="#221e1f"/><path d="M889.56,381.13a2.83,2.83,0,1,0,3.28-2.3h0a2.83,2.83,0,0,0-3.28,2.3h0" fill="#221e1f"/><path d="M754.69,377.09a10.65,10.65,0,0,1,8.07.43" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M786.91,373.65a10.62,10.62,0,0,1,7.07-3.92" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#o)"><g clip-path="url(#o)"><path d="M773.8,406.52s4.31,4.8,9,3.72,6.44-7.28,6.44-7.28" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#q)"><g clip-path="url(#q)"><path d="M785.36,389.28s2.46,5.34,1.86,6.68-3.9,1.26-3.9,1.26" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M765.9,384.7a2.83,2.83,0,1,1-3.27-2.3h0a2.82,2.82,0,0,1,3.27,2.3h0" fill="#221e1f"/><path d="M792.93,379.92a2.83,2.83,0,1,1-3.28-2.29h0a2.82,2.82,0,0,1,3.27,2.29h0" fill="#221e1f"/></g></g></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1442" height="569.228" viewBox="0 0 1442 569.228">
+  <defs>
+    <clipPath id="clip-path">
+      <path id="Path_7025" data-name="Path 7025" d="M1439,550.233S901.066,566.85,710.011,566.211C539.987,565.641-3,550.233-3,550.233V-3H1439Z" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-2">
+      <rect id="Rectangle_3402" data-name="Rectangle 3402" width="620.14" height="398.487" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-3">
+      <rect id="Rectangle_3394" data-name="Rectangle 3394" width="13.282" height="4.733" transform="translate(0 2.311) rotate(-10.02)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-4">
+      <rect id="Rectangle_3395" data-name="Rectangle 3395" width="6.321" height="7.41" transform="translate(0 1.1) rotate(-10.02)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-5">
+      <rect id="Rectangle_3396" data-name="Rectangle 3396" width="15.798" height="5.632" transform="translate(0 2.749) rotate(-10.02)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-6">
+      <rect id="Rectangle_3397" data-name="Rectangle 3397" width="7.53" height="8.818" transform="translate(0 1.31) rotate(-10.02)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-7">
+      <rect id="Rectangle_3398" data-name="Rectangle 3398" width="15.798" height="5.632" transform="translate(0 0.549) rotate(-1.99)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-8">
+      <rect id="Rectangle_3399" data-name="Rectangle 3399" width="8.818" height="5.113" transform="translate(0 8.683) rotate(-79.98)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-9">
+      <rect id="Rectangle_3400" data-name="Rectangle 3400" width="15.798" height="5.632" transform="translate(0 3.559) rotate(-13.02)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-10">
+      <rect id="Rectangle_3401" data-name="Rectangle 3401" width="5.113" height="8.818" transform="translate(0 0.89) rotate(-10.02)" fill="none"/>
+    </clipPath>
+  </defs>
+  <g id="index_banner_web" transform="translate(3 3)" clip-path="url(#clip-path)">
+    <rect id="Rectangle_3393" data-name="Rectangle 3393" width="1440.532" height="571.667" transform="translate(-2.001 -0.004)" fill="#f09491"/>
+    <path id="Path_6924" data-name="Path 6924" d="M251.863,300.491l-19.3-15.838L248.4,265.36l19.3,15.828Zm-17.236-16.038,17.036,13.981,13.981-17.026-17.036-13.981Z" transform="translate(-0.326 -0.372)" fill="#e87722"/>
+    <path id="Path_6925" data-name="Path 6925" d="M227.853,218.871l-19.3-15.838,15.838-19.3,19.293,15.838Zm-17.236-16.038,16.976,13.981,13.981-17.036L224.6,185.8Z" transform="translate(-0.293 -0.259)" fill="#f09491"/>
+    <path id="Path_6926" data-name="Path 6926" d="M470.248,175.666a8.818,8.818,0,1,1,8.808-8.808h0a8.808,8.808,0,0,1-8.808,8.808Zm0-16.148a7.34,7.34,0,1,0,7.34,7.34h0a7.35,7.35,0,0,0-7.34-7.35h0Z" transform="translate(-0.643 -0.223)" fill="#f2c75c"/>
+    <path id="Path_6927" data-name="Path 6927" d="M1223.718,291.746a8.818,8.818,0,1,1,8.807-8.808h0A8.808,8.808,0,0,1,1223.718,291.746Zm0-16.158a7.35,7.35,0,1,0,7.34,7.35A7.35,7.35,0,0,0,1223.718,275.588Z" transform="translate(-1.687 -0.384)" fill="#e87722"/>
+    <circle id="Ellipse_530" data-name="Ellipse 530" cx="16.907" cy="16.907" r="16.907" transform="translate(1112.723 184.48)" fill="#f2c75c" opacity="0.5"/>
+    <path id="Path_6928" data-name="Path 6928" d="M1128.886,217.822A17.226,17.226,0,1,1,1146.1,200.6,17.226,17.226,0,0,1,1128.886,217.822Zm0-34.153a16.976,16.976,0,1,0,16.927,16.976A16.976,16.976,0,0,0,1128.886,183.67Z" transform="translate(-1.544 -0.258)" fill="#f2c75c"/>
+    <path id="Path_6929" data-name="Path 6929" d="M1034.877,190.8l-2.347,5.992,19.533,63.911,4.744,1.857Z" transform="translate(-1.434 -0.268)" fill="#e87722"/>
+    <path id="Path_6930" data-name="Path 6930" d="M1039.107,180l-2.347,5.992,23.847,77.992,4.744,1.867Z" transform="translate(-1.44 -0.253)" fill="#e87722"/>
+    <path id="Path_6931" data-name="Path 6931" d="M1030.647,201.59l-2.347,5.992,15.219,49.751,4.744,1.867Z" transform="translate(-1.428 -0.283)" fill="#e87722"/>
+    <path id="Path_6932" data-name="Path 6932" d="M1046.053,178.127l-4.743-1.857,27.841,91.074,4.743,1.857Z" transform="translate(-1.446 -0.248)" fill="#e87722"/>
+    <path id="Path_6933" data-name="Path 6933" d="M1017.887,247.331l4.744,1.857L1018,233.94l-2.347,5.992Z" transform="translate(-1.411 -0.328)" fill="#e87722"/>
+    <path id="Path_6934" data-name="Path 6934" d="M1022.2,223.15l-2.347,5.992,6.581,21.52,4.743,1.867Z" transform="translate(-1.417 -0.313)" fill="#e87722"/>
+    <path id="Path_6935" data-name="Path 6935" d="M1026.427,212.37l-2.347,5.992,10.895,35.651,4.744,1.857Z" transform="translate(-1.423 -0.298)" fill="#e87722"/>
+    <path id="Path_6936" data-name="Path 6936" d="M1054.6,181.477l-4.753-1.857,27.851,91.074,4.743,1.857Z" transform="translate(-1.458 -0.253)" fill="#e87722"/>
+    <path id="Path_6937" data-name="Path 6937" d="M1110,204l.27-.689-.539-.21Z" transform="translate(-1.541 -0.285)" fill="#e87722"/>
+    <path id="Path_6938" data-name="Path 6938" d="M1105.9,201.6l-4.744-1.867,4.584,14.979,2.347-5.992Z" transform="translate(-1.529 -0.281)" fill="#e87722"/>
+    <path id="Path_6939" data-name="Path 6939" d="M1097.354,198.247l-4.753-1.867,8.908,29.13,2.347-5.992Z" transform="translate(-1.518 -0.276)" fill="#e87722"/>
+    <path id="Path_6940" data-name="Path 6940" d="M1013.74,244.72l-.34.869.689.27Z" transform="translate(-1.408 -0.343)" fill="#e87722"/>
+    <path id="Path_6941" data-name="Path 6941" d="M1071.7,188.187l-4.743-1.867,21.85,71.481,2.347-5.992Z" transform="translate(-1.482 -0.262)" fill="#e87722"/>
+    <path id="Path_6942" data-name="Path 6942" d="M1088.8,194.887l-4.753-1.857,13.222,43.24,2.347-5.992Z" transform="translate(-1.506 -0.272)" fill="#e87722"/>
+    <path id="Path_6943" data-name="Path 6943" d="M1063.154,184.837l-4.743-1.867,26.164,85.591,2.347-5.992Z" transform="translate(-1.47 -0.258)" fill="#e87722"/>
+    <path id="Path_6944" data-name="Path 6944" d="M1080.253,191.537l-4.743-1.857,17.536,57.36,2.347-5.992Z" transform="translate(-1.494 -0.267)" fill="#e87722"/>
+    <path id="Path_6945" data-name="Path 6945" d="M313.158,292.58l-1.628,4.164,13.581,44.428,3.305,1.3Z" transform="translate(-0.436 -0.409)" fill="#e87722"/>
+    <path id="Path_6946" data-name="Path 6946" d="M316.1,285.08l-1.628,4.164L331.057,343.5l3.3,1.288Z" transform="translate(-0.44 -0.399)" fill="#e87722"/>
+    <path id="Path_6947" data-name="Path 6947" d="M310.218,300.08l-1.628,4.164,10.575,34.612,3.305,1.3Z" transform="translate(-0.432 -0.42)" fill="#e87722"/>
+    <path id="Path_6948" data-name="Path 6948" d="M320.935,283.768l-3.305-1.3,19.343,63.352,3.305,1.3Z" transform="translate(-0.444 -0.395)" fill="#e87722"/>
+    <path id="Path_6949" data-name="Path 6949" d="M301.338,331.907l3.305,1.288L301.4,322.58l-1.638,4.164Z" transform="translate(-0.419 -0.451)" fill="#e87722"/>
+    <path id="Path_6950" data-name="Path 6950" d="M304.338,315.08l-1.638,4.164,4.584,14.979,3.3,1.3Z" transform="translate(-0.423 -0.441)" fill="#e87722"/>
+    <path id="Path_6951" data-name="Path 6951" d="M307.278,307.58l-1.638,4.164,7.59,24.8,3.3,1.3Z" transform="translate(-0.427 -0.43)" fill="#e87722"/>
+    <path id="Path_6952" data-name="Path 6952" d="M326.875,286.1l-3.3-1.3,19.393,63.352,3.305,1.3Z" transform="translate(-0.452 -0.399)" fill="#e87722"/>
+    <path id="Path_6953" data-name="Path 6953" d="M365.4,301.749l.19-.469-.38-.15Z" transform="translate(-0.51 -0.421)" fill="#e87722"/>
+    <path id="Path_6954" data-name="Path 6954" d="M362.565,300.088l-3.305-1.3,3.2,10.445,1.628-4.164Z" transform="translate(-0.502 -0.418)" fill="#e87722"/>
+    <path id="Path_6955" data-name="Path 6955" d="M356.615,297.758l-3.305-1.3,6.2,20.262,1.628-4.164Z" transform="translate(-0.494 -0.415)" fill="#e87722"/>
+    <path id="Path_6956" data-name="Path 6956" d="M298.45,330.09l-.23.6.469.19Z" transform="translate(-0.417 -0.461)" fill="#e87722"/>
+    <path id="Path_6957" data-name="Path 6957" d="M338.775,290.758l-3.305-1.288,15.2,49.721,1.638-4.164Z" transform="translate(-0.469 -0.405)" fill="#e87722"/>
+    <path id="Path_6958" data-name="Path 6958" d="M350.665,295.428l-3.3-1.3,9.2,30.078,1.628-4.164Z" transform="translate(-0.485 -0.412)" fill="#e87722"/>
+    <path id="Path_6959" data-name="Path 6959" d="M332.825,288.428l-3.305-1.3,18.2,59.547,1.638-4.164Z" transform="translate(-0.461 -0.402)" fill="#e87722"/>
+    <path id="Path_6960" data-name="Path 6960" d="M344.725,293.1l-3.305-1.3,12.2,39.895,1.628-4.164Z" transform="translate(-0.477 -0.408)" fill="#e87722"/>
+    <g id="Group_2132" data-name="Group 2132" transform="translate(409.458 173.176)" clip-path="url(#clip-path-2)">
+      <circle id="Ellipse_531" data-name="Ellipse 531" cx="230.96" cy="230.96" r="230.96" transform="translate(67.077 135.622)" fill="#fff" opacity="0.25"/>
+      <circle id="Ellipse_532" data-name="Ellipse 532" cx="193.991" cy="193.991" r="193.991" transform="translate(104.046 172.591)" fill="#fff" opacity="0.5"/>
+      <circle id="Ellipse_533" data-name="Ellipse 533" cx="144.3" cy="144.3" r="144.3" transform="translate(153.737 298.796)" fill="#fff" opacity="0.75"/>
+      <path id="Path_6961" data-name="Path 6961" d="M875.4,569.356a686.532,686.532,0,0,0-25.035,89.516l60.686,2.277,5.3-23.517,6.072,25.035s63.732,0,63.712-.759c-1.678-91.024-25.2-95.577-25.2-95.577Z" transform="translate(-410.64 -173.964)" fill="#a7a6a6"/>
+      <path id="Path_6962" data-name="Path 6962" d="M872.377,575.423l-2.277,5.313s25.884,12.982,53.865,10.625a110.944,110.944,0,0,0,46.895-15.179l-3.795-6.062s-23.507,13.651-46.266,14.41C897.252,585.319,872.377,575.423,872.377,575.423Z" transform="translate(-410.667 -173.97)" fill="#72502b"/>
+      <path id="Path_6963" data-name="Path 6963" d="M933.992,429.21s4.554,5.313,31.856,11.384c0,0,11.384,1.518,15.179,15.928s-2.277,84.952-3.795,94.819-9.107,18.2-18.974,15.978c0,0-14.42,11.374-49.312,11.374L873.676,570.7l1.138-17.066s-22.758-10.625-23.517-14.42-7.58-24.266-3-31.856-5.3-44.768-5.3-44.768-6.831-6.072,12.892-14.42,26.713-12.662,28.53-16.188c0,0,7.12,11.644,13.981,13.921s13.651.749,21.241-4.554a123.931,123.931,0,0,0,14.35-12.143Z" transform="translate(-410.628 -173.774)" fill="#a7a8aa"/>
+      <path id="Path_6964" data-name="Path 6964" d="M877.536,363.5c1.518-5.313,3.146-1.248,5.1-4.853,4.324-7.839-3.994,6.99,26.9,8.059s26.353-15.8,27.961-5.193c1.128,7.31,1.548,37.258,3.995,33.344,2-3.206,3.3-8.139,4.5-12.982.859,1.049,7.44,2.487,7.739,5.482s-5.712,7.909-6.831,12.133c-.909,3.575-7.42,6.191-7.749,6.181-.349.709-2.706,11.983-6.221,17.076,0,3,0,6.751.17,10.356-2.187,2.786-9.477,9.936-28.151,14.6h-7.8a109.662,109.662,0,0,1-12.343-16.327c.29-2.616.639-5.223,1-7.37-3.615-5.432-12.413-8.538-10.895-38.117l.379-14.8" transform="translate(-410.674 -173.673)" fill="#e2b690"/>
+      <path id="Path_6965" data-name="Path 6965" d="M916.962,554.6l-14.18,14.979L893,550.734s-3-74.357,3.305-85.631c-.569-1.2-4.214-7.669-6.531-11.734l2.5-1.927c7.48-5.762,6.5-5.143,6.5-5.143-.19-.09,2.457-.659,2.267-.759,0,0,4.554,1.518,7.589,0,.679-.34.829.709.759.759s.769.07,4.314,3.765c1.108,1.128,2.377,2.546,3.924,4.4a57.076,57.076,0,0,0-8.328,9.746c6.491,8.488,9.507,82.206,9.507,82.206Z" transform="translate(-410.694 -173.797)" fill="#db232e"/>
+      <path id="Path_6966" data-name="Path 6966" d="M907.46,445.912s1.937,1.258,9.427,6.99l2.5,1.917c2,1.528,4.384,3.325,7.1,5.422,2.616-1.258,13.711-18.544,7.63-34.852a5,5,0,0,1-.629,1.268c-1.778,3.066-7.879,11.185-25.565,18.824-.18.09-.27.3-.459.389" transform="translate(-410.719 -173.769)" fill="#fff"/>
+      <path id="Path_6967" data-name="Path 6967" d="M884.108,465.1c2.876-3.735,5.392-6.771,7.39-9.137,1.548-1.847,2.816-3.275,3.924-4.4,3.545-3.695,4.883-5.273,4.883-5.273s.829-.709.749-.759c-7.56-5.992-13.421-10.256-15.588-12.742-.709-.9-1.109-1.378-1.109-1.378-1.718,17.326-3.106,33.074-.25,33.693" transform="translate(-410.684 -173.777)" fill="#fff"/>
+      <path id="Path_6968" data-name="Path 6968" d="M871.08,372.189c.2,3.745.859,2.437,2.487,8.328,1.448,5.283,2.067,3.106,2.067,0,0-6.072,3.345-13.851,5.3-17.446,4.334-7.839-2.347,2.527,28.6,3.585s27.592-.649,29.259,9.986c1.128,7.3.3,22.109,2.726,18.195,1.937-3.206,2.686-7.46,4.653-11.983.909-2.1,3.675,3.355,4.554.759,6.072-18.135.859-27.212,1.518-28.061,3.505-4.564,6.591-12.613,4.544-11.384-3.785,2.277-15.169,3-15.928,2.277-13.841-13.841-52.277-10.505-52.277-10.505s-13.711,1.408-17.506,30.228Z" transform="translate(-410.669 -173.645)" fill="#221e1f"/>
+      <path id="Path_6969" data-name="Path 6969" d="M909.805,502.13S935.59,513.5,950,523.371c0,0-2.277,31.107-19.723,34.133,0,0-15.169-17.436-19.723-23.507,0,0-6.062-9.866-11.374-12.143Z" transform="translate(-410.708 -173.875)" fill="#a7a8aa"/>
+      <path id="Path_6970" data-name="Path 6970" d="M861.2,497.571s4.554-9.866,21.241-5.313c0,0,8.348.759,14.41,5.313l3,1.508s3,19.723-1.518,20.482l-8.338-.759s-9.018-2.267-13.611-6.831-8.348-3-12.143-3H858.17S856.652,503.633,861.2,497.571Z" transform="translate(-410.65 -173.86)" fill="#e2b690"/>
+      <path id="Path_6971" data-name="Path 6971" d="M898.124,498a49.52,49.52,0,0,1,1,8.658s.759,6.831-1.508,10.625a8.508,8.508,0,0,1-3.994,2.217,35.33,35.33,0,0,0,7.789,3.845s4.554-2.277,6.072-5.3l-3-3,3,.759s3-7.579,2.277-13.651Z" transform="translate(-410.7 -173.87)" fill="#a7a8aa"/>
+      <path id="Path_6972" data-name="Path 6972" d="M931.979,492s-56.921,15.888-72.679,23.4c0,0,12.063,27.672,28.83,33.374,0,0,32.715-20.122,38.157-25.415,0,0,7.52-8.8,13.122-10.226Z" transform="translate(-410.652 -173.861)" fill="#a7a8aa"/>
+      <path id="Path_6973" data-name="Path 6973" d="M980.752,494.988s-3-10.446-20.162-8.538c0,0-8.359-.549-15.059,3l-3.235,1s-6.052,19.024-1.678,20.472l8.358.549s9.347-.839,14.55-4.634,8.708-1.7,12.463-1.108l5.992.939S984.307,501.728,980.752,494.988Z" transform="translate(-410.763 -173.853)" fill="#e2b690"/>
+      <path id="Path_6974" data-name="Path 6974" d="M944.252,489.75a50.164,50.164,0,0,0-2.387,8.388s-1.808,6.631-.15,10.735a8.368,8.368,0,0,0,3.6,2.806,34.953,34.953,0,0,1-8.3,2.6s-4.134-3-5.163-6.181l3.465-2.527-3.116.28s-1.817-7.989-.13-13.851Z" transform="translate(-410.752 -173.858)" fill="#fff"/>
+      <path id="Path_6975" data-name="Path 6975" d="M496.5,566.316s-9.856,20.482-13.651,31.107-4.554,55.363-4.554,55.363,66.748,15.978,100.86,0c0,0-.759-48.543-6.831-57.65s-15.169-31.856-15.169-31.856l-35.65,3.795Z" transform="translate(-410.125 -173.96)" fill="#67737a"/>
+      <path id="Path_6976" data-name="Path 6976" d="M488.4,401.343s-17.516-21.56-24.246-6.741-5.392,28.291,1.348,36.38,6.731,22.9,6.731,24.246S493.783,421.545,488.4,401.343Z" transform="translate(-410.099 -173.719)" fill="#221e1f"/>
+      <path id="Path_6977" data-name="Path 6977" d="M550.313,411.6v-.19c0-22.689-15.688-41.083-35.031-41.083s-35.021,18.395-35.021,41.083v.28c-2.8-.669-8.838-1.238-6.741,7.13,1.7,6.82,6.1,7.709,9.1,7.44,4.494,13.6,14.979,23.687,27.662,25.824-.2,3.445-3.056,6.062-7.41,10.416,0,0,4.324,19.643,20.492,20.971S542.334,458.7,542.334,458.7s-9.537-4.214-12.982-9.647c8.518-4.364,15.259-12.583,18.634-22.778,3,.14,7.06-1,8.688-7.47C558.611,410.864,553.249,410.994,550.313,411.6Z" transform="translate(-410.117 -173.693)" fill="#feecdc"/>
+      <path id="Path_6978" data-name="Path 6978" d="M490.434,391.2s-8.079,12.123-8.079,16.168c0,0-2.267,21.7,4.254,27.013a28.051,28.051,0,0,1-9.617-24.326s-6.741-1.348-5.392-12.123,10.785-32.335,33.683-33.683c0,0,29.639-9.427,45.806,17.516,0,0,6.062,15.5,2,28.96,0,0-2.7,16.158-5.392,20.2,0,0,2-15.488.679-20.881s-1.348-16.168-13.471-25.595c0,0,1.348,6.731-1.348,12.123,0,0,0,1.348-3.995,1.348s-24.965.679-30.957,2.7c-1.318.439-3.995,2.7-5.383-1.348Z" transform="translate(-410.115 -173.682)" fill="#221e1f"/>
+      <path id="Path_6979" data-name="Path 6979" d="M506.327,458.46a25.415,25.415,0,0,0,5.313,7.579c3.914,3.925,9.107,7.59,14.41,7.59,2.277,0,5.443-.789,10.835-3.485l5.3,104.994s-27.532,6.141-46.386-5.992c0,0,0-16.168-4.044-25.595L454,536.831s2.686-12.533,2.686-16.168C456.736,501.8,476.7,469.235,506.327,458.46Z" transform="translate(-410.091 -173.815)" fill="#a7a8aa"/>
+      <path id="Path_6980" data-name="Path 6980" d="M541.281,457.7s42.132,9.077,44.828,36.02-6.731,60.626-18.854,67.357l-8.089,1.348v5.422S543,578.622,530.875,575.926l-2.7-9.427s-25.595-5.393-33.673-10.785,2.7-14.819,2.7-14.819l33.673-9.427-6.281-57.81S538.585,467.127,541.281,457.7Z" transform="translate(-410.143 -173.814)" fill="#d0d0ce"/>
+      <path id="Path_6981" data-name="Path 6981" d="M458.073,531.527s41.772-18.864,88.877-3.994l1.348,12.123s-49.841,18.864-74.1,14.819S450,536.919,458.073,531.527Z" transform="translate(-410.09 -173.903)" fill="#a7a8aa"/>
+      <path id="Path_6982" data-name="Path 6982" d="M538.8,483.614c-8.718-9.207-13.281-10.645-13.281-10.645.16-.08.4-.24.559-.32,11.045-5.682,13.981-11.524,14.8-14.09a4,4,0,0,0,.16-1c.08-.16,1.808.18,1.808.18,2.407,11.115-2.287,25.265-3.995,25.914" transform="translate(-410.19 -173.813)" fill="#fff"/>
+      <path id="Path_6983" data-name="Path 6983" d="M522.685,472.979c-.8.32-5.362,2.317-13.282,10.645-1.668-.639-6.072-13.981-3.755-25.155a4.543,4.543,0,0,1,.759-.759c.07,0,.729-.11.759,0,.4,1.648,2.247,8.518,15.518,15.269" transform="translate(-410.162 -173.814)" fill="#fff"/>
+      <path id="Path_6984" data-name="Path 6984" d="M547.12,527.8l1.348,11.8s8.818-3.685,11.095-11.983c0,0-1.578-8.268-7.58-2.277C550.995,526.266,550.605,527.993,547.12,527.8Z" transform="translate(-410.22 -173.904)" fill="#feecdc"/>
+      <path id="Path_6985" data-name="Path 6985" d="M495.47,409.219a8.988,8.988,0,0,1,6.781.24" transform="translate(-410.148 -173.746)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <path id="Path_6986" data-name="Path 6986" d="M522.54,406.186a8.9,8.9,0,0,1,6.042-3.086" transform="translate(-410.186 -173.738)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <g id="Group_2110" data-name="Group 2110" transform="translate(100.962 260.107)" opacity="0.8">
+        <g id="Group_2109" data-name="Group 2109" transform="translate(0)" clip-path="url(#clip-path-3)">
+          <g id="Group_2108" data-name="Group 2108" transform="translate(-0.022 0.022)">
+            <path id="Path_6987" data-name="Path 6987" d="M511.11,436.217s3.405,4.2,7.37,3.505,5.712-5.812,5.712-5.812" transform="translate(-511.11 -433.91)" fill="#e5727c"/>
+          </g>
+        </g>
+      </g>
+      <g id="Group_2113" data-name="Group 2113" transform="translate(102.11 249.211)" opacity="0.8">
+        <g id="Group_2112" data-name="Group 2112" transform="translate(0)" clip-path="url(#clip-path-4)">
+          <g id="Group_2111" data-name="Group 2111" transform="translate(1.323 1.332)">
+            <path id="Path_6988" data-name="Path 6988" d="M514,424.31s-1,4.993.19,5.842,4.993-.4,4.993-.4" transform="translate(-513.607 -424.31)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+          </g>
+        </g>
+      </g>
+      <path id="Path_6989" data-name="Path 6989" d="M504.993,415.567a2.377,2.377,0,1,1-2.756-1.927h0a2.377,2.377,0,0,1,2.746,1.927" transform="translate(-410.155 -173.753)" fill="#221e1f"/>
+      <path id="Path_6990" data-name="Path 6990" d="M527.663,411.557a2.377,2.377,0,1,1-2.756-1.927h0a2.377,2.377,0,0,1,2.756,1.927" transform="translate(-410.186 -173.747)" fill="#221e1f"/>
+      <path id="Path_6991" data-name="Path 6991" d="M706.476,562.52A688.187,688.187,0,0,1,731.5,652.036L670.826,654.3,665.5,630.8l-6.062,25.075s-63.722,0-63.722-.759c0-21.97,9.1-91.783,9.1-91.783Z" transform="translate(-410.287 -173.959)" fill="#a7a6a6"/>
+      <path id="Path_6992" data-name="Path 6992" d="M623.749,424.276s-28.071,3.785-47.035,25.784c0,0-9.1,3.795-10.615,11.384s0,62.194,6.072,70.542,10.615,9.856,14.41,9.1l11.374-2.247,6.072,29.579s30.348,7.589,47.794,7.589,50.82-6.072,56.132-10.625l7.579-31.856,21.23-6.84s9.107-1.518,8.348-12.9.759-46.266-6.831-63.722c0,0-1.518-5.3-14.41-9.1,0,0-31.307-21.42-50.55-19.813a17.825,17.825,0,0,1-3.305,18.295c-7.589,9.1-18.974,9.856-28.071,5.3S623.749,424.276,623.749,424.276Z" transform="translate(-410.245 -173.763)" fill="#1b365d"/>
+      <path id="Path_6993" data-name="Path 6993" d="M678.279,391.108c-.839,3.325-3.625,1.338-3.335,3.076a32.764,32.764,0,0,1-3.465,19.673c.6,2.087,1.288,4.634,1.907,7.18a108.854,108.854,0,0,1-10.146,17.835l-7.729,1c-19.133-2.227-27.252-8.388-29.839-10.815-.26-3.6-.739-7.31-1.158-10.3-4.144-4.624-7.929-15.479-8.358-16.138-.32.05-4.833-1.528-6.191-4.993-3.216-7.889-5.123-15.409-3.645-17.775,1.818,4.6,3.785,9.327,6.132,12.263,2.906,3.575-.529-26.184-.349-33.583.29-10.725-2.167,6.591,28.45,1.558s20.342-18.664,25.644-11.444c2.4,3.325,7.21,37.828,8.718,34.063a64.038,64.038,0,0,0,3.1-13.511l.719.34c4.713,2.487,1.188,15.329-.439,21.56" transform="translate(-410.301 -173.66)" fill="#feecdc"/>
+      <path id="Path_6994" data-name="Path 6994" d="M670.89,547.179l-12.143,16.647L646.614,546.39s-1.218-74.826,3.565-86.81c-.719-1.118-5.173-7.07-7.989-10.8l2.227-2.237c6.681-6.671,8.448-8.179,8.448-8.179l-.589-.2,7.789.26-.13.14a29.238,29.238,0,0,1,5.572,3.865c1.238,1,2.676,2.227,4.444,3.855a57.645,57.645,0,0,0-6.99,10.735c7.52,7.6,8.7,81.777,8.7,81.777" transform="translate(-410.352 -173.787)" fill="#db232e"/>
+      <path id="Path_6995" data-name="Path 6995" d="M652.839,438.387s-1.768,1.5-8.448,8.179l-2.227,2.227c-1.768,1.768-3.925,3.855-6.351,6.281-2.746-.909-15.978-16.627-12.043-33.583a5.521,5.521,0,0,0,.789,1.178c2.157,2.816,9.167,10.216,27.692,15.519l.589.2" transform="translate(-410.325 -173.764)" fill="#fff"/>
+      <path id="Path_6996" data-name="Path 6996" d="M678.484,454.414c-3.345-3.335-6.221-5.992-8.508-8.109-1.768-1.638-3.216-2.886-4.454-3.865A29.3,29.3,0,0,0,660,438.576l.13-.13a109,109,0,0,0,12.852-15.908c.589-1,.919-1.508.919-1.508,3.925,16.976,7.33,32.405,4.584,33.384" transform="translate(-410.376 -173.763)" fill="#fff"/>
+      <path id="Path_6997" data-name="Path 6997" d="M679.05,353a87.6,87.6,0,0,1-1.059,16.168,63.792,63.792,0,0,1-3.1,13.5c-1.508,3.765-5.093-23.118-7.49-26.433-5.3-7.22,3.675-1.2-26.883,3.825s-27.442,2.9-27.732,13.621c-.18,7.39,2.546,21.97-.369,18.4-2.337-2.936-4.3-7.649-6.132-12.263-1.308-3.166-2.5-6.351-3.7-8.818-8.348-17.206,6.411-22.349,5.652-23.118-9.667-9.667,19.333-29.21,26.553-30.338,19.643-3.166,22.569,9.3,22.569,9.3s19.693-3.7,21.68,26.164" transform="translate(-410.293 -173.619)" fill="#221e1f"/>
+      <path id="Path_6998" data-name="Path 6998" d="M701.655,484.66s-8.349-1.518-15.978,9.866l-8.348,1.518s-2.277,14.41,1.518,15.169l17.446-9.866Z" transform="translate(-410.399 -173.851)" fill="#feecdc"/>
+      <path id="Path_6999" data-name="Path 6999" d="M629.522,489.219s34.892-3,47.025,6.072c0,0-3,14.41,4.554,19.723s1.518,24.266,1.518,24.266-27.312,3-46.266,0l-12.9-2.267,2.277-21.241Z" transform="translate(-410.326 -173.857)" fill="#1b365d"/>
+      <path id="Path_7000" data-name="Path 7000" d="M625.326,529.86s-.759,5.423.759,7.989c0,0-7.589-1.188-9.866-1.947,0,0-7.58.759-8.338-.759s1.518-3,1.518-3S622.29,531.378,625.326,529.86Z" transform="translate(-410.304 -173.914)" fill="#feecdc"/>
+      <path id="Path_7001" data-name="Path 7001" d="M709.512,568.6l2.277,5.313S686,583.769,657.933,584.528,602.56,577.7,602.56,577.7l.659-6.052s31.2,8.328,53.925,6.811C680.652,576.9,709.512,568.6,709.512,568.6Z" transform="translate(-410.297 -173.967)" fill="#72502b"/>
+      <path id="Path_7002" data-name="Path 7002" d="M622.9,378.3a10.6,10.6,0,0,1,8.059.419" transform="translate(-410.325 -173.703)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <path id="Path_7003" data-name="Path 7003" d="M655.11,374.845a10.665,10.665,0,0,1,7.06-3.915" transform="translate(-410.37 -173.694)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <g id="Group_2116" data-name="Group 2116" transform="translate(231.115 236.837)" opacity="0.8">
+        <g id="Group_2115" data-name="Group 2115" transform="translate(0)" clip-path="url(#clip-path-5)">
+          <g id="Group_2114" data-name="Group 2114" transform="translate(-0.026 0.025)">
+            <path id="Path_7004" data-name="Path 7004" d="M641.44,413.356s4.054,4.993,8.768,4.174,6.8-6.92,6.8-6.92" transform="translate(-641.44 -410.61)" fill="#e5727c"/>
+          </g>
+        </g>
+      </g>
+      <g id="Group_2119" data-name="Group 2119" transform="translate(232.476 220.985)" opacity="0.8">
+        <g id="Group_2118" data-name="Group 2118" transform="translate(0)" clip-path="url(#clip-path-6)">
+          <g id="Group_2117" data-name="Group 2117" transform="translate(1.555 1.586)">
+            <path id="Path_7005" data-name="Path 7005" d="M644.849,396.3s-1.178,5.992.22,6.99,5.992-.479,5.992-.479" transform="translate(-644.385 -396.3)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+          </g>
+        </g>
+      </g>
+      <path id="Path_7006" data-name="Path 7006" d="M634.1,385.9a2.826,2.826,0,1,1-3.275-2.287h0A2.816,2.816,0,0,1,634.1,385.9" transform="translate(-410.333 -173.711)" fill="#221e1f"/>
+      <path id="Path_7007" data-name="Path 7007" d="M661.132,381.117a2.826,2.826,0,1,1-3.275-2.287h0a2.826,2.826,0,0,1,3.275,2.287" transform="translate(-410.37 -173.704)" fill="#221e1f"/>
+      <path id="Path_7008" data-name="Path 7008" d="M810.591,442.382c-3.795-.759-.759,0-10.615-5.313-6.821-3.675-7.47-10.985-7.23-15.119,11.983-7.779,18.734-23.378,15.768-39.685C804.679,361.294,786.2,347,767.251,350.459s-31.247,23.3-27.4,44.319c2.886,15.8,14.04,27.771,27.452,31.267a10.836,10.836,0,0,1,2.327,6.471c0,7.59-7.58,6.072-7.58,6.072l7.58,15.169c9.107,12.133,36.41,12.892,44,9.866S814.386,443.141,810.591,442.382Z" transform="translate(-410.486 -173.665)" fill="#feecdc"/>
+      <path id="Path_7009" data-name="Path 7009" d="M773,353.977s15.169-3,18.974,6.831a31.956,31.956,0,0,0,10.625,14.41s9.1,8.348,6.062,23.517c0,0-3,5.313,0,4.554,0,0,6.831,2.277,12.9-6.072s5.3-17.446.749-18.2-12.892-7.589-12.133-11.384.759-9.856-4.554-13.651S793.492,335,776.046,338.049c0,0-5.313,0-6.831,3,0,0-18.974-5.313-30.338,10.625,0,0-3,4.544-8.348,18.974a15.978,15.978,0,0,1-6.82,9.1c-5.313,3-14.42,5.313-15.179,16.687s8.348,11.384,10.625,11.384c0,0-9.107,9.1-1.518,18.2s12.133,4.544,14.41,2.277,3-1.518,5.313-.759,9.866,1.508,12.892-6.072,0-11.374-3.785-14.41-4.514-12.133-2.287-17.416,3.785-7.589,9.1-9.856,6.072-5.313,6.072-8.348-2.277-16.687,7.57-17.456C766.919,353.977,770.724,355.505,773,353.977Z" transform="translate(-410.443 -173.647)" fill="#221e1f"/>
+      <path id="Path_7010" data-name="Path 7010" d="M765.711,438.688a28.543,28.543,0,0,1-6.741-.689c-2.277-.759-6.831-3-9.866,3s-18.974,40.943-6.821,57.65c0,0,6.062,3.795,9.1-2.277a9.776,9.776,0,0,1,12.982-4.594,9.654,9.654,0,0,1,1.388.809c4.544,3,.749,40.2-6.072,58.409s-21.969,50.82-14.41,81.157l6.151,29.539,96.336-2.277s12.143-29.589,5.313-56.921-23.517-49.3-23.517-61.445-3-20.482-.759-29.579c0,0,1.9-4.933,1.9-7.21,0,0,8.338,4.554,13.651,2.277,0,0,5.313-3,3-9.856,0,0,7.59,1.518,7.59-4.554,0,0,.759-1.518-1.518-3.795S843.543,476.2,842.025,472.4s-18.974-28.071-27.3-31.856c0,0-4.294-1.1-6.321,1.348,0,0-.509.929.25,3.206s3.795,14.41,0,14.41-26.553,1.518-32.615-4.544a38.119,38.119,0,0,1-8.348-12.143S766.72,439.057,765.711,438.688Z" transform="translate(-410.484 -173.785)" fill="#ed1b2e"/>
+      <path id="Path_7011" data-name="Path 7011" d="M776.088,499.078a96,96,0,0,1-12.183-7.15s-6.781-3.465-11.334,1.847a21.307,21.307,0,0,1-3,4.544s-1.518,2.277-3.795,1.518c0,0,6.831,24.276,15.978,29.589,0,0-5.313,3.795,6.072,9.1a16.341,16.341,0,0,0,4.554.759A22.228,22.228,0,0,1,779.2,540.8c2.277.759,17.446,8.348,33.374,6.831s27.312-7.589,28.83-12.143c0,0,3.795-2.267,3.795-5.3,0,0-.759-3.795.759-5.313s3.795-9.107,1.518-21.241c0,0-2.307,5.183-9.5,3.355l-7.19-2.6s-2.277,10.625-3.795,11.384c0,0-29.589-6.831-37.947-6.072,0,0-7.589,0-10.625-3S776.088,499.078,776.088,499.078Z" transform="translate(-410.495 -173.86)" fill="#feecdc"/>
+      <ellipse id="Ellipse_534" data-name="Ellipse 534" cx="2.277" cy="3.036" rx="2.277" ry="3.036" transform="translate(374.155 271.196) rotate(-20.43)" fill="#f1f1f1"/>
+      <path id="Path_7012" data-name="Path 7012" d="M784.787,444.756c-6.94,0-13.182-5.093-16.527-8.438a.389.389,0,0,1,0-.539.369.369,0,0,1,.519,0c3.735,3.735,11.175,9.726,18.974,7.869,5.992-1.438,8.808-8.8,8.828-8.868a.37.37,0,0,1,.489-.22.36.36,0,0,1,.22.479h0c-.12.32-3,7.819-9.367,9.347a14.149,14.149,0,0,1-3.136.37Z" transform="translate(-410.526 -173.782)" fill="#f1f1f1"/>
+      <path id="Path_7013" data-name="Path 7013" d="M927.789,378.3a10.7,10.7,0,0,0-8.059.419" transform="translate(-410.736 -173.703)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <path id="Path_7014" data-name="Path 7014" d="M895.57,374.855a9.717,9.717,0,0,0-3.146-2.656,9.508,9.508,0,0,0-3.9-1.258" transform="translate(-410.693 -173.694)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <g id="Group_2122" data-name="Group 2122" transform="translate(482.282 237.897)" opacity="0.8">
+        <g id="Group_2121" data-name="Group 2121" transform="translate(0 0)" clip-path="url(#clip-path-7)">
+          <g id="Group_2120" data-name="Group 2120" transform="translate(-0.011 0.023)">
+            <path id="Path_7015" data-name="Path 7015" d="M908.758,411.67s-2.916,5.732-7.7,5.9-8.089-5.353-8.089-5.353" transform="translate(-892.97 -411.67)" fill="#e5727c"/>
+          </g>
+        </g>
+      </g>
+      <g id="Group_2125" data-name="Group 2125" transform="translate(483.209 220.148)" opacity="0.8">
+        <g id="Group_2124" data-name="Group 2124" transform="translate(0)" clip-path="url(#clip-path-8)">
+          <g id="Group_2123" data-name="Group 2123" transform="translate(0.755 0.796)">
+            <path id="Path_7016" data-name="Path 7016" d="M896.617,394.67s-2.457,5.343-1.857,6.671,3.885,1.258,3.885,1.258" transform="translate(-894.666 -394.67)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+          </g>
+        </g>
+      </g>
+      <path id="Path_7017" data-name="Path 7017" d="M916.59,385.9a2.826,2.826,0,1,0,3.275-2.287h0A2.816,2.816,0,0,0,916.6,385.9h0" transform="translate(-410.732 -173.711)" fill="#221e1f"/>
+      <path id="Path_7018" data-name="Path 7018" d="M889.56,381.127a2.826,2.826,0,1,0,3.276-2.3h0a2.826,2.826,0,0,0-3.275,2.3h0" transform="translate(-410.694 -173.704)" fill="#221e1f"/>
+      <path id="Path_7019" data-name="Path 7019" d="M754.69,377.089a10.635,10.635,0,0,1,8.059.429" transform="translate(-410.507 -173.701)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <path id="Path_7020" data-name="Path 7020" d="M786.91,373.645a10.605,10.605,0,0,1,7.06-3.915" transform="translate(-410.552 -173.692)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+      <g id="Group_2128" data-name="Group 2128" transform="translate(363.279 229.195)" opacity="0.8">
+        <g id="Group_2127" data-name="Group 2127" transform="translate(0)" clip-path="url(#clip-path-9)">
+          <g id="Group_2126" data-name="Group 2126" transform="translate(-0.012 0.027)">
+            <path id="Path_7021" data-name="Path 7021" d="M773.8,406.515s4.3,4.793,8.988,3.715,6.431-7.27,6.431-7.27" transform="translate(-773.8 -402.96)" fill="#e5727c"/>
+          </g>
+        </g>
+      </g>
+      <g id="Group_2131" data-name="Group 2131" transform="translate(370.981 214.72)" opacity="0.8">
+        <g id="Group_2130" data-name="Group 2130" transform="translate(0 0)" clip-path="url(#clip-path-10)">
+          <g id="Group_2129" data-name="Group 2129" transform="translate(1.792 0.841)">
+            <path id="Path_7022" data-name="Path 7022" d="M785.357,389.28s2.457,5.333,1.857,6.671-3.895,1.258-3.895,1.258" transform="translate(-783.32 -389.28)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
+          </g>
+        </g>
+      </g>
+      <path id="Path_7023" data-name="Path 7023" d="M765.892,384.7a2.826,2.826,0,1,1-3.266-2.3h0a2.816,2.816,0,0,1,3.266,2.3h0" transform="translate(-410.515 -173.709)" fill="#221e1f"/>
+      <path id="Path_7024" data-name="Path 7024" d="M792.922,379.917a2.826,2.826,0,1,1-3.275-2.287h0a2.816,2.816,0,0,1,3.266,2.287h0" transform="translate(-410.552 -173.703)" fill="#221e1f"/>
+    </g>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/logo.png b/PAMapp/assets/images/logo.png
index cb68217..6ec941e 100644
--- a/PAMapp/assets/images/logo.png
+++ b/PAMapp/assets/images/logo.png
Binary files differ
diff --git a/PAMapp/assets/images/notification/banner_mob.svg b/PAMapp/assets/images/notification/banner_mob.svg
new file mode 100644
index 0000000..6f4631d
--- /dev/null
+++ b/PAMapp/assets/images/notification/banner_mob.svg
@@ -0,0 +1,56 @@
+<svg id="notification_mob" data-name="notification �� mob" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375" height="120" viewBox="0 0 375 120">
+  <defs>
+    <clipPath id="clip-path">
+      <rect id="Rectangle_4042" data-name="Rectangle 4042" width="375" height="120" fill="none"/>
+    </clipPath>
+    <linearGradient id="linear-gradient" x1="-1.128" y1="2.281" x2="-0.128" y2="2.281" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#edc9c7"/>
+      <stop offset="1" stop-color="#f3e2e1"/>
+    </linearGradient>
+  </defs>
+  <g id="Group_3388" data-name="Group 3388" transform="translate(1 -1)">
+    <g id="Group_3387" data-name="Group 3387" transform="translate(-1 1)" clip-path="url(#clip-path)">
+      <g id="Group_3386" data-name="Group 3386" transform="translate(-3.5 -50.5)">
+        <g id="Group_3383" data-name="Group 3383" transform="translate(0 42.5)">
+          <rect id="Rectangle_4025" data-name="Rectangle 4025" width="134.5" height="398" transform="translate(0 134.5) rotate(-90)" fill="url(#linear-gradient)"/>
+        </g>
+        <rect id="Rectangle_4026" data-name="Rectangle 4026" width="225" height="72.5" transform="translate(161 111.5)" fill="#f09491"/>
+        <rect id="Rectangle_4027" data-name="Rectangle 4027" width="375" height="120" transform="translate(4.5 50.5)" fill="none"/>
+        <path id="Path_8048" data-name="Path 8048" d="M505.6,13.343,480.284-95.912a5.277,5.277,0,0,0-6.332-3.95L183.977-32.675a5.278,5.278,0,0,0-3.951,6.332l8.8,38.431L173,24.641a2.912,2.912,0,0,0,1.188,5.127l19.738,4.31,11.418,48.835a5.278,5.278,0,0,0,6.333,3.95L501.649,19.675A5.277,5.277,0,0,0,505.6,13.343Z" transform="translate(-81.946 100)" fill="#f09491"/>
+        <path id="Path_8049" data-name="Path 8049" d="M472.4,135.243l-74.942,34.674a8.661,8.661,0,0,1-6.521-.636L359.2,143.793a2.154,2.154,0,0,1,.792-3.589l80.219-29.133a5.109,5.109,0,0,1,4.938.636l27.519,19.947C473.986,132.974,473.733,134.648,472.4,135.243Z" transform="translate(-175.259 -5.352)" fill="#1b365d" opacity="0.5"/>
+        <path id="Path_8050" data-name="Path 8050" d="M473.873,114.133l-74.941,34.674a8.667,8.667,0,0,1-6.522-.636l-31.741-25.488c-.168-.112-.838-.452-.792-1.056.264-3.43.007-6.92,1.055-7.388L441.68,89.962a5.106,5.106,0,0,1,4.938.636l28.574,15.725C475.72,108.433,475.2,113.538,473.873,114.133Z" transform="translate(-175.937 5.203)" fill="#a7a8aa"/>
+        <path id="Path_8051" data-name="Path 8051" d="M474.514,103.05l-74.942,34.674a8.663,8.663,0,0,1-6.521-.636L361.309,111.6a2.154,2.154,0,0,1,.792-3.589l80.22-29.132a5.108,5.108,0,0,1,4.938.636l27.519,19.947C476.1,100.781,475.844,102.455,474.514,103.05Z" transform="translate(-176.314 10.745)" fill="#feecdc"/>
+        <path id="Path_8052" data-name="Path 8052" d="M495.549,118.372l-14.578,6.789a5.2,5.2,0,0,1-4.223-.825l-21.506-16.67a1.6,1.6,0,0,1,.313-2.61l15.366-5.78a3.132,3.132,0,0,1,3.206.739l21.4,15.717C496.443,116.78,496.371,118,495.549,118.372Z" transform="translate(-223.36 0.453)" fill="#fff"/>
+        <path id="Path_8053" data-name="Path 8053" d="M437,142.121l-14.578,6.789a5.2,5.2,0,0,1-4.223-.824l-22.006-17.17a1.6,1.6,0,0,1,.314-2.61l15.866-5.28a3.133,3.133,0,0,1,3.206.739l21.4,15.717C437.889,140.529,437.817,141.753,437,142.121Z" transform="translate(-193.833 -11.422)" fill="#fff"/>
+        <path id="Path_8054" data-name="Path 8054" d="M540.751,104.906l-1.5,1.383a1.669,1.669,0,0,1-1.353-.264l-6.625-5.4a.512.512,0,0,1,.1-.836l1.492-1a1,1,0,0,1,1.027.237l6.863,5C541.045,104.365,541.015,104.558,540.751,104.906Z" transform="translate(-261.551 0.635)" fill="#a7a8aa"/>
+        <path id="Path_8055" data-name="Path 8055" d="M391.314,173.552l-.712.939a.715.715,0,0,1-.871-.148L383.4,169.33a.634.634,0,0,1-.146-.807l.674-.776c.263-.118.725-.3,1.055,0l6.069,4.75C391.344,172.832,391.578,173.2,391.314,173.552Z" transform="translate(-187.583 -33.791)" fill="#fff"/>
+        <rect id="Rectangle_4028" data-name="Rectangle 4028" width="24.277" height="24.541" rx="5.278" transform="translate(131.955 109.942)" fill="#5cb8b2"/>
+        <rect id="Rectangle_4029" data-name="Rectangle 4029" width="30.61" height="30.943" rx="5.278" transform="translate(178.662 59.277)" fill="#fff" opacity="0.7"/>
+        <rect id="Rectangle_4030" data-name="Rectangle 4030" width="30.61" height="30.943" rx="5.278" transform="translate(236.452 67.194)" fill="#f2c75c" opacity="0.7"/>
+        <path id="Path_8056" data-name="Path 8056" d="M149.422,69.681l-6.879,10.753,7.88,6.207-9.28,9.1,5.192-8.723-7.1-5.9Z" transform="translate(-65.616 15.16)" fill="#fff"/>
+        <path id="Path_8057" data-name="Path 8057" d="M187.495,180.835,175.68,176l-4.688,8.868-10.621-7.492,9.515,3.539,4.53-8.048Z" transform="translate(-76.186 -36.434)" fill="#fff"/>
+        <g id="Group_3384" data-name="Group 3384" transform="translate(21.25 101.584)">
+          <ellipse id="Ellipse_684" data-name="Ellipse 684" cx="4.354" cy="4.882" rx="4.354" ry="4.882" transform="translate(18.449 43.12) rotate(-89.901)" fill="#d0d0ce"/>
+          <path id="Path_8058" data-name="Path 8058" d="M67.989,173.6s-1.589,3.163-.278,8.179,3.676,11.09,3.676,11.09,1.052,1.849-.268,2.374-7.129,2.627-7.129,2.627-2.641,1.051-3.43-.534-8.145-20.6-8.145-20.6Z" transform="translate(-43.457 -138.383)" fill="#a7a8aa"/>
+          <circle id="Ellipse_685" data-name="Ellipse 685" cx="6.333" cy="6.333" r="6.333" transform="translate(40.134 9.656)" fill="#f09491"/>
+          <circle id="Ellipse_686" data-name="Ellipse 686" cx="7.784" cy="7.784" r="7.784" transform="translate(0 22.255)" fill="#68737a"/>
+          <path id="Path_8059" data-name="Path 8059" d="M42.159,132.015s-4.736-7.66,9-13.442,16.637-7.1,21.922-11.837,6.34-4.211,7.656-1.57,8.929,25.084,9.451,28.251-1.328,5.011-6.869,4.738-19.267,1.814-25.6,3.65S44.771,147.06,42.159,132.015Z" transform="translate(-37.934 -103.169)" fill="#fff"/>
+          <path id="Path_8060" data-name="Path 8060" d="M52.376,131.871l7.244,23.674s-7.028,4.033-11.511,2.706-6.318-8.983-6.318-8.983-3.677-10.033,2.134-13.19A91.3,91.3,0,0,1,52.376,131.871Z" transform="translate(-37.571 -117.52)" fill="#f09491"/>
+        </g>
+        <rect id="Rectangle_4031" data-name="Rectangle 4031" width="21.374" height="3.43" transform="translate(183.28 71.811)" fill="#d0d0ce"/>
+        <rect id="Rectangle_4032" data-name="Rectangle 4032" width="21.374" height="3.43" transform="translate(183.28 65.214)" fill="#d0d0ce"/>
+        <rect id="Rectangle_4033" data-name="Rectangle 4033" width="13.986" height="3.43" transform="translate(183.28 78.409)" fill="#d0d0ce"/>
+        <rect id="Rectangle_4034" data-name="Rectangle 4034" width="21.374" height="3.43" transform="translate(240.806 73.659)" fill="#d0d0ce"/>
+        <rect id="Rectangle_4035" data-name="Rectangle 4035" width="13.986" height="3.43" transform="translate(240.806 80.256)" fill="#d0d0ce"/>
+        <rect id="Rectangle_4036" data-name="Rectangle 4036" width="17.416" height="3.43" transform="translate(135.254 114.824)" fill="#d0d0ce"/>
+        <rect id="Rectangle_4037" data-name="Rectangle 4037" width="11.396" height="3.43" transform="translate(135.254 121.421)" fill="#d0d0ce"/>
+        <g id="Group_3385" data-name="Group 3385" transform="translate(312.602 82.875)">
+          <rect id="Rectangle_4038" data-name="Rectangle 4038" width="37.851" height="38.263" rx="5.278" fill="#fff"/>
+          <rect id="Rectangle_4039" data-name="Rectangle 4039" width="30.346" height="3.43" transform="translate(4.09 12.27)" fill="#d0d0ce"/>
+          <rect id="Rectangle_4040" data-name="Rectangle 4040" width="30.346" height="3.43" transform="translate(4.09 5.673)" fill="#d0d0ce"/>
+          <rect id="Rectangle_4041" data-name="Rectangle 4041" width="19.856" height="3.43" transform="translate(4.09 18.867)" fill="#d0d0ce"/>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/notification/banner_web.svg b/PAMapp/assets/images/notification/banner_web.svg
new file mode 100644
index 0000000..f13523e
--- /dev/null
+++ b/PAMapp/assets/images/notification/banner_web.svg
@@ -0,0 +1,60 @@
+<svg id="notification_web" data-name="notification �� web" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1280" height="150" viewBox="0 0 1280 150">
+  <defs>
+    <clipPath id="clip-path">
+      <rect id="Rectangle_3981" data-name="Rectangle 3981" width="1280" height="150" transform="translate(0 1)" fill="none"/>
+    </clipPath>
+    <linearGradient id="linear-gradient" x1="-9.872" y1="-2.825" x2="-8.872" y2="-2.825" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#edc9c7"/>
+      <stop offset="1" stop-color="#f3e2e1"/>
+    </linearGradient>
+  </defs>
+  <g id="Group_3422" data-name="Group 3422" transform="translate(0 -1)">
+    <g id="Group_3421" data-name="Group 3421" clip-path="url(#clip-path)">
+      <g id="Group_3420" data-name="Group 3420">
+        <g id="Group_3415" data-name="Group 3415">
+          <rect id="Rectangle_3964" data-name="Rectangle 3964" width="269" height="796" transform="translate(-6 247) rotate(-90)" fill="url(#linear-gradient)"/>
+        </g>
+        <rect id="Rectangle_3965" data-name="Rectangle 3965" width="751.302" height="155.546" transform="translate(541.045 18.832)" fill="#f09491"/>
+        <rect id="Rectangle_3966" data-name="Rectangle 3966" width="750" height="240" transform="translate(3 -6)" fill="none"/>
+        <path id="Path_8017" data-name="Path 8017" d="M1299.375,29.165l-38.229-164.992a7.971,7.971,0,0,0-9.564-5.966L451.993-1.82a7.971,7.971,0,0,0-5.966,9.563L459.318,65.78,435.41,84.735a4.4,4.4,0,0,0,1.794,7.743l29.808,6.509,17.244,73.748a7.971,7.971,0,0,0,9.564,5.966L1293.409,38.728A7.971,7.971,0,0,0,1299.375,29.165Z" fill="#f09491"/>
+        <path id="Path_8018" data-name="Path 8018" d="M746.643,92.665,633.469,145.029c-2.009.9-7.173.8-9.848-.961l-47.934-38.491c-1.993-1.993-.813-4.521,1.2-5.419L698.026,56.163a7.716,7.716,0,0,1,7.458.96l41.558,30.123C749.034,89.238,748.652,91.767,746.643,92.665Z" fill="#1b365d" opacity="0.5"/>
+        <path id="Path_8019" data-name="Path 8019" d="M747.838,76.725,634.665,129.088c-2.009.9-7.173.8-9.848-.96L576.882,89.637c-.253-.169-1.265-.684-1.2-1.594.4-5.181.011-10.45,1.594-11.158L699.222,40.223a7.712,7.712,0,0,1,7.457.96L749.831,64.93C750.628,68.118,749.848,75.827,747.838,76.725Z" fill="#a7a8aa"/>
+        <path id="Path_8020" data-name="Path 8020" d="M748.237,68.357,635.063,120.72c-2.009.9-7.173.8-9.848-.96L577.281,81.268c-1.993-1.992-.813-4.521,1.2-5.419L699.62,31.854a7.714,7.714,0,0,1,7.458.961l41.558,30.122C750.628,64.93,750.246,67.458,748.237,68.357Z" fill="#feecdc"/>
+        <path id="Path_8021" data-name="Path 8021" d="M708.958,75.952,686.943,86.205c-1.241.555-4.563.2-6.377-1.245L648.089,59.786c-1.388-1.582-.768-3.388.473-3.943l23.205-8.728a4.73,4.73,0,0,1,4.841,1.115L708.92,71.966C710.308,73.548,710.2,75.4,708.958,75.952Z" fill="#fff"/>
+        <path id="Path_8022" data-name="Path 8022" d="M665.123,93.885l-22.015,10.253c-1.241.555-4.563.2-6.377-1.246L603.5,76.963c-1.388-1.582-.768-3.387.473-3.942l23.96-7.974a4.73,4.73,0,0,1,4.841,1.116L665.085,89.9C666.473,91.481,666.364,93.329,665.123,93.885Z" fill="#fff"/>
+        <path id="Path_8023" data-name="Path 8023" d="M719.545,55.892l-2.271,2.089a2.518,2.518,0,0,1-2.042-.4l-10.006-8.15a.774.774,0,0,1,.152-1.263l2.253-1.515a1.515,1.515,0,0,1,1.551.357l10.363,7.558C719.99,55.076,719.944,55.366,719.545,55.892Z" fill="#a7a8aa"/>
+        <path id="Path_8024" data-name="Path 8024" d="M605.574,107.569l-1.075,1.42a1.082,1.082,0,0,1-1.316-.224l-9.564-7.572a.959.959,0,0,1-.22-1.219l1.017-1.172c.4-.177,1.095-.455,1.594,0l9.166,7.173C605.62,106.482,605.974,107.044,605.574,107.569Z" fill="#fff"/>
+        <rect id="Rectangle_3967" data-name="Rectangle 3967" width="36.662" height="37.061" rx="3.985" transform="translate(497.182 62.539)" fill="#5cb8b2"/>
+        <path id="Path_8025" data-name="Path 8025" d="M424.469,22.631,414.081,38.869l11.9,9.373L411.966,61.985l7.841-13.174L409.082,39.9Z" fill="#fff"/>
+        <path id="Path_8026" data-name="Path 8026" d="M466,112.577l-17.842-7.3-7.08,13.392-16.039-11.314,14.369,5.344,6.841-12.154Z" fill="#fff"/>
+        <g id="Group_3416" data-name="Group 3416">
+          <ellipse id="Ellipse_678" data-name="Ellipse 678" cx="6.575" cy="7.372" rx="6.575" ry="7.372" transform="translate(357.861 113.036) rotate(-89.901)" fill="#d0d0ce"/>
+          <path id="Path_8027" data-name="Path 8027" d="M367.047,101.1s-2.4,4.778-.42,12.353,5.55,16.747,5.55,16.747,1.589,2.792-.4,3.586-10.767,3.966-10.767,3.966-3.988,1.587-5.179-.806-12.3-31.1-12.3-31.1Z" fill="#a7a8aa"/>
+          <circle id="Ellipse_679" data-name="Ellipse 679" cx="9.564" cy="9.564" r="9.564" transform="translate(390.609 62.499)" fill="#f09491"/>
+          <circle id="Ellipse_680" data-name="Ellipse 680" cx="11.756" cy="11.756" r="11.756" transform="translate(330 81.526)" fill="#68737a"/>
+          <path id="Path_8028" data-name="Path 8028" d="M336.379,91.479s-7.153-11.569,13.584-20.3S375.087,60.463,383.07,53.3s9.575-6.36,11.56-2.371S408.114,88.814,408.9,93.6s-2.006,7.568-10.374,7.155-29.1,2.739-38.664,5.512S340.325,114.2,336.379,91.479Z" fill="#fff"/>
+          <path id="Path_8029" data-name="Path 8029" d="M352.357,69.589,363.3,105.342s-10.613,6.091-17.384,4.086-9.54-13.565-9.54-13.565-5.553-15.153,3.222-19.92A137.735,137.735,0,0,1,352.357,69.589Z" fill="#f09491"/>
+        </g>
+        <g id="Group_3417" data-name="Group 3417">
+          <rect id="Rectangle_3968" data-name="Rectangle 3968" width="33.608" height="33.973" rx="2.897" transform="translate(560.717 13.027)" fill="#fff" opacity="0.7"/>
+          <rect id="Rectangle_3969" data-name="Rectangle 3969" width="23.468" height="3.766" transform="translate(565.787 26.789)" fill="#d0d0ce"/>
+          <rect id="Rectangle_3970" data-name="Rectangle 3970" width="23.468" height="3.766" transform="translate(565.787 19.546)" fill="#d0d0ce"/>
+          <rect id="Rectangle_3971" data-name="Rectangle 3971" width="15.355" height="3.766" transform="translate(565.787 34.032)" fill="#d0d0ce"/>
+        </g>
+        <g id="Group_3418" data-name="Group 3418">
+          <rect id="Rectangle_3972" data-name="Rectangle 3972" width="46.226" height="46.729" rx="3.985" transform="translate(649.988 8.982)" fill="#f2c75c" opacity="0.7"/>
+          <rect id="Rectangle_3973" data-name="Rectangle 3973" width="32.279" height="5.181" transform="translate(656.564 18.745)" fill="#d0d0ce"/>
+          <rect id="Rectangle_3974" data-name="Rectangle 3974" width="21.121" height="5.181" transform="translate(656.564 28.708)" fill="#d0d0ce"/>
+        </g>
+        <rect id="Rectangle_3975" data-name="Rectangle 3975" width="26.301" height="5.181" transform="translate(502.163 69.911)" fill="#d0d0ce"/>
+        <rect id="Rectangle_3976" data-name="Rectangle 3976" width="17.209" height="5.181" transform="translate(502.163 79.874)" fill="#d0d0ce"/>
+        <g id="Group_3419" data-name="Group 3419">
+          <rect id="Rectangle_3977" data-name="Rectangle 3977" width="57.161" height="57.783" rx="3.985" transform="translate(769.988 32.663)" fill="#fff"/>
+          <rect id="Rectangle_3978" data-name="Rectangle 3978" width="45.828" height="5.181" transform="translate(776.164 51.193)" fill="#d0d0ce"/>
+          <rect id="Rectangle_3979" data-name="Rectangle 3979" width="45.828" height="5.181" transform="translate(776.164 41.231)" fill="#d0d0ce"/>
+          <rect id="Rectangle_3980" data-name="Rectangle 3980" width="29.986" height="5.181" transform="translate(776.164 61.156)" fill="#d0d0ce"/>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/quickFilter/btn_senior.svg b/PAMapp/assets/images/quickFilter/btn_senior.svg
new file mode 100644
index 0000000..ef5b66c
--- /dev/null
+++ b/PAMapp/assets/images/quickFilter/btn_senior.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 147.5 110"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{opacity:0.5;}.cls-4{fill:#f5e3d3;}.cls-5{fill:#221e1f;}.cls-6{fill:#1b365d;}.cls-7{opacity:0.8;}.cls-8{clip-path:url(#clip-path-2);}.cls-9{fill:#dc727c;}.cls-10{clip-path:url(#clip-path-4);}.cls-11{fill:#c7956b;}.cls-12{fill:#e41b2e;}.cls-13{fill:#f2c75c;}.cls-14{fill:#ecc3b2;}.cls-15{fill:#534741;}.cls-16{fill:#67737a;}.cls-17{fill:#a89968;}.cls-18{fill:#fff;}.cls-19{fill:#009cbd;}</style><clipPath id="clip-path"><rect class="cls-1" x="-0.25" y="-0.19" width="147.5" height="110.37"/></clipPath><clipPath id="clip-path-2"><rect class="cls-1" x="124.69" y="39.49" width="1.64" height="4.6" transform="translate(70.66 162.17) rotate(-83.92)"/></clipPath><clipPath id="clip-path-4"><rect class="cls-1" x="122.96" y="37.04" width="2.57" height="1.49" transform="translate(79.85 159.82) rotate(-86.92)"/></clipPath></defs><g id="circle"><g class="cls-2"><g class="cls-3"><path id="Path_6890" data-name="Path 6890" class="cls-4" d="M119,47.66a10,10,0,0,1,2.16-.2c1.92-1.17,1.54-2.54,1.4-3.74a11.28,11.28,0,0,1-5.21-11.28c.78-6.16,5.92-10.59,11.48-9.89s9.44,6.27,8.66,12.44A11.34,11.34,0,0,1,130,44.51a3.1,3.1,0,0,0-.58,1.91c.12,2.2,4.6,3.7,4.6,3.7l-1.81,5c-2.46,3.67-11.17.49-13.42-.28S117.87,47.94,119,47.66Z"/><path id="Path_6891" data-name="Path 6891" class="cls-5" d="M125.09,25.5a2.78,2.78,0,0,0-3.68.4,11.78,11.78,0,0,0-3.16,9.53A6.65,6.65,0,0,0,120,38.91s4.11,3,.2,6.17c-2.49,2-10.55,1.67-7.88-3.2.84-1.54-3.37-1.09-3.93-2.13-2.74-5.15,3.27-7.43,4.6-7.59s.54-5.09,3.75-9.76c2.89-3,6.35-4.31,11.38-3.21,0,0,1.55.07,1.95,1,0,0,5.58-1.3,8.68,3.48A30.82,30.82,0,0,1,141,29.26,4.64,4.64,0,0,0,142.83,32c1.5.95,4.12,1.73,4.19,5s-2.57,3.2-3.23,3.17c0,0,2.53,2.77.21,5.31s-3.59,1.17-4.22.48-.84-.34-1.53-.29c-6.91.49-5.2-6-4.06-6.86s2.3-3,1.71-4.61-3.21-3.79-3.8-4.7C127.86,23,126.52,25.51,125.09,25.5Z"/><path class="cls-6" d="M119.29,46a.64.64,0,0,1-.59-.4l-1.64-4a.64.64,0,0,1,.35-.84.65.65,0,0,1,.84.36l1.64,4.05a.65.65,0,0,1-.36.84A.67.67,0,0,1,119.29,46Z"/><path class="cls-4" d="M111.69,58.84s-3,9,3,12c2.34,1.21,2.43-4,2.55-10.6S112.3,57.18,111.69,58.84Z"/><g id="Group_1783" data-name="Group 1783"><path class="cls-5" d="M130,32.61a.13.13,0,0,1-.1-.06.14.14,0,0,1,0-.2,3.22,3.22,0,0,1,2.42-.42.14.14,0,0,1,.11.17.15.15,0,0,1-.17.1,3,3,0,0,0-2.21.39A.13.13,0,0,1,130,32.61Z"/><path class="cls-5" d="M122.93,32.34a.09.09,0,0,1-.08,0,3,3,0,0,0-2.08-.84.14.14,0,0,1-.14-.14.14.14,0,0,1,.14-.14,2.87,2.87,0,0,1,1.23.24,2.93,2.93,0,0,1,1,.68.15.15,0,0,1,0,.2A.14.14,0,0,1,122.93,32.34Z"/><g id="Group_1764-3" data-name="Group 1764-3" class="cls-7"><g id="Group_1763-3" data-name="Group 1763-3"><g class="cls-8"><g id="Group_1762-3" data-name="Group 1762-3"><g id="Group_1761-3" data-name="Group 1761-3"><g class="cls-8"><g id="Group_1760-3" data-name="Group 1760-3"><path id="Path_6902-3" data-name="Path 6902-3" class="cls-9" d="M127.88,41.22s-1.07,1.53-2.46,1.39-2.11-1.87-2.11-1.87"/></g></g></g></g></g></g></g><g id="Group_1769-3" data-name="Group 1769-3" class="cls-7"><g id="Group_1768-3" data-name="Group 1768-3"><g class="cls-10"><g id="Group_1767-3" data-name="Group 1767-3"><g id="Group_1766-3" data-name="Group 1766-3"><g class="cls-10"><g id="Group_1765-3" data-name="Group 1765-3"><path class="cls-11" d="M124.17,39a.76.76,0,0,1-.59-.28c-.23-.38.24-1.88.29-2a.08.08,0,1,1,.15,0,4.27,4.27,0,0,0-.31,1.93c.15.26.84.22,1.09.19a.06.06,0,0,1,.08.06.08.08,0,0,1-.06.09A3.87,3.87,0,0,1,124.17,39Z"/></g></g></g></g></g></g></g><path id="Path_6904-3" data-name="Path 6904-3" class="cls-5" d="M129.39,34.65a.83.83,0,0,0,.78.87.83.83,0,0,0,.09-1.65h0a.83.83,0,0,0-.87.78h0"/><path id="Path_6905-3" data-name="Path 6905-3" class="cls-5" d="M121.43,34.22a.82.82,0,1,0,1.64.09.81.81,0,0,0-.77-.86h0a.82.82,0,0,0-.87.77h0"/></g><path id="Path_6892" data-name="Path 6892" class="cls-12" d="M134.7,48.9c1.47-.41,2.62.12,3.27,0s2.07-.67,2.76,1.18c.38,1,.22,3.64,1.83,6.91,1.35,2.74,6.41,5.68,3.51,7.38a4.25,4.25,0,0,0-2.31.18c-1.19,3.17-4.95,2.2-6.79.71-.12-.09-.28-1.39-2.21-.8,0,0-.43,10.82,2.78,14.31,3.83,4.16,4.86,14.56-3.39,20.06-2.56,1.7-10.14.37-13.75,1.38C114.06,102,101.15,92,101.15,92s9.6-6.33,15.12-12.38c2.67-2.92.59-5,2.27-8.1,1.24-2.3,1.47-1.92,1.09-4.62a35.59,35.59,0,0,1-1.13-4.13s.06-.75-1.41-1.57c-.88-.72-6.47.22-5.92-.78a1.7,1.7,0,0,1-1.36-2,1.61,1.61,0,0,1,.7-1.21c1.42-1.27,1-2.36,2.13-3.92.55-1,1-4.36,3.55-5.2,0,0,3.46-1.78,4-1,0,0-.45,5.33-.42,6,0,1,2.78,2.44,3.87,2.56s6,1.19,8-.37c1.13-.9,1-4.15,1.72-5.4C133.31,49.9,133.37,49.33,134.7,48.9Z"/><path id="Path_6893" data-name="Path 6893" class="cls-4" d="M134.76,64.5c1.29-.48,1.31-.56,2.46,1.12.18.5,3.31,1.17,3.74,1.11,0,0,.56,10-2.89,11.13a19.49,19.49,0,0,1-7.54-.37c-4.57-.92-7.86-2.13-9-2.95-1.41-1-4.77.49-6.08-3.36,0,0,1-.32,2-2.93,0,0,.8-2.21,1.91-4.52a29.62,29.62,0,0,1,.51,4.63c-.06.6-.67,2.14-.26,2.4a18.11,18.11,0,0,0,4.28,1.46,64.63,64.63,0,0,1,11.2-.39C134.6,70.06,134.79,65.3,134.76,64.5Z"/><ellipse id="Ellipse_493" data-name="Ellipse 493" class="cls-13" cx="124.49" cy="50.75" rx="0.88" ry="0.66" transform="translate(23.56 139.55) rotate(-63.52)"/><path id="Path_6894" data-name="Path 6894" class="cls-14" d="M125.45,50.18c2,.21,4-1.07,5-1.93a.11.11,0,0,0-.14-.18c-1.19,1-3.53,2.47-5.73,1.7-1.7-.6-2.28-2.82-2.28-2.84a.11.11,0,1,0-.22.06c0,.09.62,2.35,2.43,3A3.91,3.91,0,0,0,125.45,50.18Z"/><path class="cls-4" d="M116,46.45s.47-2.68,1-2.92,1.68-1,2-.51-.77.57-1.38,1.24c-.29.31-.23.73-.15,1.31,0,0,3.06-1.92,3.38-1,0,0,.47.52.42.85,0,0,.85.95.21,1.12,0,0,.66,1.17-.14,1.32a7.33,7.33,0,0,1-.94,4.62,7.57,7.57,0,0,0-.72,4.22c.39,2.06,1,10.47-.85,12.34s-3.48,2.91-4.85,1.54a4.72,4.72,0,0,1-.5-6.3s3.1-7.42,3.35-8.88a6.37,6.37,0,0,0-.12-2.65A30.23,30.23,0,0,1,116,46.45Z"/><path class="cls-4" d="M115,90.22s-4.94-.5-5.75,3.49-5.91,14.15-13.68,21.12a18.69,18.69,0,0,0-3,2.76,3.51,3.51,0,0,1-2.87,2.14c-2.11.5-11.11.85-8.66-.38s7.2-4.55,9.55-5.16c0,0,1.19-.38,2.48-2.66s7.18-16.84,7.93-17.4,1.53-10.66,9-11.57S115,90.22,115,90.22Z"/><path class="cls-4" d="M111.35,89.53s-4.27,2.54-2.53,6.23,3.7,14.88,1.64,25.11a18.15,18.15,0,0,0-.76,4,3.51,3.51,0,0,1-1,3.43c-1.39,1.67-8.4,7.32-7.17,4.88s3-8,4.57-9.84c0,0,.73-1,.41-3.63s-4.3-17.79-4-18.68-5.14-9.47.31-14.66S111.35,89.53,111.35,89.53Z"/><path class="cls-12" d="M98.88,94.22s6.39-3.6,10.52-.85,11,6.88,17.87,4.13,6.88-11,6.88-11a38.14,38.14,0,0,0-10.64-7.19c-5.86-2.44-5.7-4.27-5.7-4.27s.09,3.32-7.6,5.33S98,88.19,98.88,94.22Z"/><path class="cls-15" d="M131.05,104.07l22.09-4.44a1.11,1.11,0,0,0,.83-1.34l-3.25-16a1.11,1.11,0,0,0-1.33-.83l-19.58,2.27a1.73,1.73,0,0,0-1.43,1.65l.67,17.64A2.15,2.15,0,0,0,131.05,104.07Z"/><path class="cls-16" d="M131.27,95.18a1.12,1.12,0,0,0,.45.06c2.37-.4,16.45-2.68,19.29-3.47a4.28,4.28,0,0,0,1.36-1.14.11.11,0,0,0,0-.15.11.11,0,0,0-.16,0A4,4,0,0,1,151,91.56c-2.83.78-16.9,3.06-19.27,3.46A9.4,9.4,0,0,1,129,93.91a.11.11,0,0,0-.16,0,.11.11,0,0,0,0,.15A22,22,0,0,0,131.27,95.18Z"/><rect x="138.97" y="90.41" width="4.22" height="5.94" rx="1.43" transform="translate(295.03 163.54) rotate(171)"/><rect class="cls-15" x="139.97" y="91.91" width="2.11" height="2.97" rx="0.72" transform="translate(294.92 163.56) rotate(171)"/><path class="cls-17" d="M133.94,84.27H134a.56.56,0,0,0,.65-.44c.38-1.93,1.32-2.35,2.09-2.51a43.72,43.72,0,0,1,5.44-.62,3.73,3.73,0,0,1,2.94,1.81.56.56,0,0,0,1-.56,4.83,4.83,0,0,0-3.92-2.37,46.75,46.75,0,0,0-5.64.65c-1.6.32-2.57,1.43-3,3.39A.56.56,0,0,0,133.94,84.27Z"/><path class="cls-6" d="M121,51.24,119.63,48a.64.64,0,0,1,.35-.84.65.65,0,0,1,.84.36l1.37,3.38a9.59,9.59,0,0,0-.09,1.51C121.91,52.36,121.26,51.37,121,51.24Z"/><path class="cls-18" d="M121,51.24a1.17,1.17,0,0,1,.4-.26,2.58,2.58,0,0,1,.79-.13,1.88,1.88,0,0,1-.09,1.51A1.64,1.64,0,0,1,121,51.24Z"/><path class="cls-19" d="M122.1,52.46l-.32-.21c0-.06.2-.13.2-.13s.24-.07.25,0Z"/></g></g></g></svg>
\ No newline at end of file
diff --git a/PAMapp/assets/images/quickFilter/btn_unlimited.svg b/PAMapp/assets/images/quickFilter/btn_unlimited.svg
new file mode 100644
index 0000000..c077b64
--- /dev/null
+++ b/PAMapp/assets/images/quickFilter/btn_unlimited.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 147.5 110"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{opacity:0.5;}.cls-4{fill:#f5e3d3;}.cls-5{fill:#67737a;}.cls-6{fill:#221e1f;}.cls-7{fill:#9e9fa1;}.cls-8{fill:#c7c7c5;}.cls-9{fill:#fff;}.cls-10{opacity:0.8;}.cls-11{clip-path:url(#clip-path-2);}.cls-12{clip-path:url(#clip-path-3);}.cls-13{fill:#dc727c;}.cls-14{clip-path:url(#clip-path-4);}.cls-15{fill:#c7956b;}.cls-16{fill:#1b365d;}.cls-17{fill:#e41b2e;}.cls-18{fill:#a89968;}</style><clipPath id="clip-path"><rect class="cls-1" x="-0.25" y="-0.19" width="147.5" height="110.37"/></clipPath><clipPath id="clip-path-2"><rect class="cls-1" x="38.65" y="38.24" width="1.39" height="3.9" transform="translate(-9.31 68.39) rotate(-75.7)"/></clipPath><clipPath id="clip-path-3"><rect class="cls-1" x="38.65" y="38.24" width="1.39" height="3.9" transform="translate(-9.31 68.39) rotate(-75.7)"/></clipPath><clipPath id="clip-path-4"><polygon class="cls-1" points="41.89 35 40.41 34.91 40.45 37.08 41.93 37.17 41.89 35"/></clipPath></defs><g id="circle"><g class="cls-2"><g class="cls-3"><path class="cls-4" d="M47,92.44s4.15,3.2,4.86,4.43c1.22,2.1-5.31-.67-4.75,16.25L48.91,116S58.3,96.43,58.3,94.88s-.44-6.19-4-6.86S47,92.44,47,92.44Z"/><path class="cls-4" d="M28.23,98.19l-5.08,13.64s-1.5,3.17-3.63,4.5S3.57,129.27,3.57,129.27l-.88-1.77s3.09-14.16,13.38-15.15a4.87,4.87,0,0,0,1-2.33c.33-1.65,1.44-17.35,1.44-17.35Z"/><path id="Path_6869" data-name="Path 6869" class="cls-5" d="M25.63,67.58s-3.08,4.06-4.38,6.22-4.19,20.08-4.19,20.08,11.07,10.28,19.68,8.18c7.3-1.78,16.14-12.14,19.91-13,0,0-12.79-9.23-13.72-11.5s-3.85-7.9-3.85-7.9l-8-.76Z"/><path id="Path_6870" data-name="Path 6870" class="cls-6" d="M30.74,28.55s6.47-5,2.17-7.06-8.26-1.82-10.68.09-6.78,1.79-7.18,1.78S24.76,30,30.74,28.55Z"/><path id="Path_6871" data-name="Path 6871" class="cls-4" d="M49.81,36.79l0,0c2.74-6.07.77-12.89-4.4-15.23s-11.6.69-14.34,6.76l0,.07c-.66-.51-2.21-1.4-2.66,1.1-.37,2,.7,2.8,1.53,3.09A10.8,10.8,0,0,0,34.2,42.78c-.47.9-1.55,1.25-3.24,1.89,0,0-1.21,5.78,2.95,8.1S42,48.43,42,48.43s-2-2.28-2.31-4.15a11.52,11.52,0,0,0,7.74-3.85c.78.4,2,.6,3.22-1C52.12,37.59,50.67,37,49.81,36.79Z"/><path id="Path_6872" data-name="Path 6872" class="cls-6" d="M36.25,24.09s-3.63,2.27-4.12,3.35c0,0-3.23,5.53-2.12,7.74a8.23,8.23,0,0,1,.35-7.67s-1.63-1.18,0-3.9,6.79-7.35,13.08-4.94c0,0,9.07,1.06,10.14,10.23,0,0-.25,4.88-3,8,0,0-2.67,4-3.88,4.76,0,0,2.41-3.9,2.7-5.51s1.6-4.49-.51-8.48a6.28,6.28,0,0,1-1.83,3.09s-.16.36-1.24-.13-6.75-2.84-8.62-3c-.4,0-1.4.23-1.28-1Z"/><path id="Path_6873" data-name="Path 6873" class="cls-7" d="M32.58,44.38a5.76,5.76,0,0,0,.83,1.9,5,5,0,0,0,2.83,2.31,5.73,5.73,0,0,0,2.53-.29L35.26,71.58s-6.31.13-9.91-3.37c0,0-2.07-11.22-2.54-13.47L12.2,54.52c.5-1.12-5-2.81-4.65-4C8.39,46.4,25.24,43.68,32.58,44.38Z"/><path id="Path_6874" data-name="Path 6874" class="cls-8" d="M40.28,45.77s19.41,9.57,18.8,15.6-7.74,4-13.93-2L39.54,69.55l-.24,1.18s-4,1.65-6.56.52l2-9.76,1.19-13S39.26,47.71,40.28,45.77Z"/><path id="Path_6875" data-name="Path 6875" class="cls-7" d="M14.75,49.91A30.56,30.56,0,0,1,1.08,64.43L-1,62.69S4.05,51.88,8.58,48.75,15.21,47.79,14.75,49.91Z"/><path id="Path_6875-2" data-name="Path 6875" class="cls-8" d="M53.33,63.77A30.57,30.57,0,0,1,57,44.17l2.72.33s1.56,11.83-.55,16.91S54.09,65.81,53.33,63.77Z"/><path id="Path_6876" data-name="Path 6876" class="cls-9" d="M38.52,51.55C36.94,49,36,48.49,36,48.49l.14-.05c2.81-.79,3.76-2,4.06-2.55a1.09,1.09,0,0,0,.09-.23,5.17,5.17,0,0,1,.69.46c0,2.67-2,5.37-2.42,5.43"/><path class="cls-9" d="M32.67,44s-.17,0-.18,0-.54.31-.61.37c-1.14,2.65-.33,6,.05,6.2a12.11,12.11,0,0,1,4.15-2C33.13,46.21,32.69,44.45,32.67,44Z"/><path id="Path_6878" data-name="Path 6878" class="cls-4" d="M56.65,42.14a6.22,6.22,0,0,0,.22,2.21l2.87.44a5.77,5.77,0,0,0-.17-5.06S57.26,38.21,57.3,41C57.3,41.44,57.06,41.07,56.65,42.14Z"/><g id="Group_1781" data-name="Group 1781"><path class="cls-6" d="M39,31.17a.16.16,0,0,1-.13-.08,2.17,2.17,0,0,0-.58-.76,2.23,2.23,0,0,0-.83-.48.14.14,0,0,1-.09-.18.14.14,0,0,1,.17-.09,2.7,2.7,0,0,1,.93.54,2.47,2.47,0,0,1,.65.85.13.13,0,0,1-.06.18Z"/><path class="cls-6" d="M44.1,32.88a.13.13,0,0,1-.11-.06.14.14,0,0,1,0-.19,2.63,2.63,0,0,1,1-.4,2.57,2.57,0,0,1,1.07,0,.14.14,0,0,1,.1.17.13.13,0,0,1-.16.1,2.45,2.45,0,0,0-1.85.35A.11.11,0,0,1,44.1,32.88Z"/><g id="Group_1775" data-name="Group 1775" class="cls-10"><g id="Group_1774" data-name="Group 1774"><g class="cls-11"><g id="Group_1773" data-name="Group 1773"><g id="Group_1772" data-name="Group 1772"><g class="cls-12"><g id="Group_1771" data-name="Group 1771"><path id="Path_6908" data-name="Path 6908" class="cls-13" d="M37.63,39s.4,1.54,1.54,1.83A2.7,2.7,0,0,0,41.41,40"/></g></g></g></g></g></g></g><g id="Group_1780" data-name="Group 1780" class="cls-10"><g id="Group_1779" data-name="Group 1779"><g class="cls-14"><g id="Group_1778" data-name="Group 1778"><g id="Group_1777" data-name="Group 1777"><g class="cls-14"><g id="Group_1776" data-name="Group 1776"><path class="cls-15" d="M41.23,37.05a2.78,2.78,0,0,1-.68-.09s-.06,0-.06-.08a.08.08,0,0,1,.09-.06c.35.08,1,.14,1.1,0s-.07-1.1-.24-1.63a.08.08,0,0,1,0-.09.07.07,0,0,1,.09,0c.08.24.46,1.47.22,1.77A.74.74,0,0,1,41.23,37.05Z"/></g></g></g></g></g></g></g><path id="Path_6910" data-name="Path 6910" class="cls-6" d="M38.47,32.77a.7.7,0,0,1-1.35-.34.7.7,0,1,1,1.35.34h0"/><path id="Path_6911" data-name="Path 6911" class="cls-6" d="M45,34.44a.7.7,0,0,1-.85.5.7.7,0,0,1,.34-1.35.71.71,0,0,1,.51.85h0"/></g><path class="cls-16" d="M5.42,91.38l-20.76-8.46a1.12,1.12,0,0,1-.57-1.46l6.17-15a1.1,1.1,0,0,1,1.46-.56l18.7,5.86a1.74,1.74,0,0,1,1.09,1.89L7.57,90.7A2.13,2.13,0,0,1,5.42,91.38Z"/><path class="cls-5" d="M6.85,82.65a1.08,1.08,0,0,1-.45,0c-2.23-.83-15.57-5.69-18.19-7a4.24,4.24,0,0,1-1.12-1.36.11.11,0,0,1,.05-.15.11.11,0,0,1,.15.05,3.65,3.65,0,0,0,1,1.26c2.62,1.3,15.94,6.15,18.18,7a9.52,9.52,0,0,0,2.88-.58.12.12,0,0,1,.15.06.11.11,0,0,1-.06.14A19.63,19.63,0,0,1,6.85,82.65Z"/><rect class="cls-17" x="-4.49" y="76.11" width="4.2" height="5.91" rx="1.43" transform="translate(26.66 5.49) rotate(19.81)"/><path class="cls-18" d="M6.28,71.49H6.22A.55.55,0,0,1,5.67,71c0-2-.85-2.55-1.58-2.85A43.51,43.51,0,0,0-1.1,66.48,3.69,3.69,0,0,0-4.31,67.7a.55.55,0,0,1-.78.06A.55.55,0,0,1-5.15,67,4.77,4.77,0,0,1-.88,65.39a43.94,43.94,0,0,1,5.39,1.69C6,67.69,6.76,69,6.77,70.94A.55.55,0,0,1,6.28,71.49Z"/><path id="Path_6878-2" data-name="Path 6878" class="cls-4" d="M1.36,65.8l-.22-1.33-2-2.21S-2.92,65-1.07,67.12c.4.47,2.43,2,2.43.23C1.35,66.9.51,66.57,1.36,65.8Z"/></g></g></g></svg>
\ No newline at end of file
diff --git a/PAMapp/assets/images/quickFilter/btn_young.svg b/PAMapp/assets/images/quickFilter/btn_young.svg
new file mode 100644
index 0000000..d0ad660
--- /dev/null
+++ b/PAMapp/assets/images/quickFilter/btn_young.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 147.5 110"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{opacity:0.5;}.cls-4{fill:#997c52;}.cls-5{fill:#9e9fa1;}.cls-6{fill:#d9ad87;}.cls-7{fill:#a89968;}.cls-8{fill:#d2232e;}.cls-9{fill:#fff;}.cls-10{fill:#221e1f;}.cls-11{opacity:0.8;}.cls-12{clip-path:url(#clip-path-2);}.cls-13{fill:#dc727c;}.cls-14{clip-path:url(#clip-path-4);}.cls-15{fill:#c7956b;}.cls-16{fill:#72502b;}</style><clipPath id="clip-path"><rect class="cls-1" x="-0.25" y="-0.19" width="147.5" height="110.37"/></clipPath><clipPath id="clip-path-2"><polygon class="cls-1" points="109.7 22.97 105.16 23.13 105.1 21.43 109.64 21.26 109.7 22.97"/></clipPath><clipPath id="clip-path-4"><polygon class="cls-1" points="107.56 20.36 106.12 20.09 106.56 17.46 108 17.73 107.56 20.36"/></clipPath></defs><g id="bg"><circle class="cls-1" cx="119.36" cy="34.35" r="24.35"/></g><g id="circle"><g class="cls-2"><g class="cls-3"><path id="Path_6855" data-name="Path 6855" class="cls-4" d="M94,69.07C90.6,80.87,89.09,96.94,87,109.19c0,0-5.92,31.45-4.69,32.65s5.63,5.8,10.32,1.84c1.34-1.12,4.36-26.39,4.88-27.42,4.5-9,6.38-23.46,9.76-28.47.69-1,2.88-1,3.37,0,4.51,8.7,6.52,21,9.57,26.1,1.64,2.73,5.14,32.17,7.13,31.11,1.15-.61,8.5-1.22,9.39-2.11,1.29-1.31-5.43-32.41-5.43-32.47C129.63,74.6,123.06,67,123.06,67Z"/><path id="Path_6857" data-name="Path 6857" class="cls-5" d="M116.35,29.14a51.48,51.48,0,0,1,11.21.63c7.69,1.18,11.86-.17,15.95.79,0,0,5.77,1.7,3.57,4.94-4.32,6.33-19.14,7.92-19.14,7.92.75,5.14-1.63,19-2.07,22s.39,5.38-2.06,6.52c-3.38,1.59-12.2,4-15,3.57,0,0-7.31-1.08-9.76-1.78a40.86,40.86,0,0,1-5.63-3s1.34-5.38,1.13-6.53S93,48.56,93.22,44.8c0,0-6-1.26-8.25-2.37C82.4,41.18,75.4,36.1,75.4,36.1s-2.63-4.75,3-5c1.74-.06,9,.59,9,.59,5.66-2.52,14.17-.69,14.69-1.76,0,0,2.05,3.53,4,4.22s3.92.23,6.1-1.38A36.06,36.06,0,0,0,116.35,29.14Z"/><path id="Path_6858" data-name="Path 6858" class="cls-6" d="M100.11,9.27c.44-1.61.91-.38,1.47-1.47,1.25-2.38-1.16,2.12,7.73,2.44s7.57-4.78,8-1.57c.32,2.21.45,11.28,1.14,10.1a16.26,16.26,0,0,0,1.3-3.92c.24.32,2.13.75,2.22,1.66s-1.64,2.4-2,3.67c-.26,1.09-2.14,1.88-2.23,1.88-.1.21-.78,3.62-1.79,5.17,0,.91,0,2,0,3.14-.64.83-2.73,3-8.1,4.41h-2.24a33.52,33.52,0,0,1-3.55-5c.09-.79.19-1.58.28-2.23-1-1.65-3.56-2.59-3.13-11.55l.11-4.48"/><path id="Path_6859" data-name="Path 6859" class="cls-7" d="M110.67,62.41l-1.12,2.37-3.75-2.57s-2.26-4.94,1.12-22.16l-.37-1.18a21.18,21.18,0,0,1,2.06-1.39,10.73,10.73,0,0,1,.94,2.38c.43.14.92,3.81.19,7.51A28.67,28.67,0,0,0,110.67,62.41Z"/><path id="Path_6859-2" data-name="Path 6859" class="cls-8" d="M92.18,58.9l-5.09-3.32,5.8-2.81s13,3.46,13.14-13c-.17-.36-1.23-2.31-1.9-3.54l.71-.59a15.17,15.17,0,0,0,1.86-1.57s.71-.21.65-.24a3.2,3.2,0,0,0,2.18,0c.2-.11.24.21.22.23s.22,0,1.25,1.13c.32.34.69.77,1.13,1.32a17.46,17.46,0,0,0-2.37,3c1.88,2.56,0,11.64-2.22,14.58C102.33,60.81,92.18,58.9,92.18,58.9Z"/><path id="Path_6860" data-name="Path 6860" class="cls-9" d="M108.7,34.2s.56.38,2.71,2.13l.71.58,2,1.64c.75-.38,3.93-5.61,2.19-10.55a2.64,2.64,0,0,1-.18.38c-.51.93-2.27,3.39-7.35,5.7,0,0-.08.09-.13.12"/><path id="Path_6861" data-name="Path 6861" class="cls-9" d="M102,40c.83-1.13,1.55-2,2.12-2.77.45-.56.81-1,1.13-1.33,1-1.12,1.4-1.6,1.4-1.6s.24-.21.22-.23a49.58,49.58,0,0,1-4.48-3.86c-.2-.27-.32-.41-.32-.41-.49,5.24-.89,10-.07,10.2"/><path id="Path_6862" data-name="Path 6862" class="cls-10" d="M98.26,11.91c.06,1.13.25.74.72,2.52.41,1.6.59.94.59,0a13.61,13.61,0,0,1,1.52-5.29c1.25-2.37-.67.77,8.22,1.09s7.93-.2,8.41,3c.32,2.22.08,6.7.78,5.51a38.46,38.46,0,0,0,1.34-3.63c.26-.64,1,1,1.3.23,1.75-5.5.25-8.25.44-8.51,1-1.38,1.9-3.81,1.31-3.44a9.08,9.08,0,0,1-4.58.69c-4-4.2-15-3.19-15-3.19s-3.94.43-5,9.16Z"/><g id="Group_1540" data-name="Group 1540"><path id="Path_6866" data-name="Path 6866" class="cls-5" d="M80.32,11.13s-6,13.69-5.47,22.4c0,0,8.57,1.39,12.53-2,0,0,.14-11.64-.31-13.89,0,0-1-3.35-.47-5Z"/><path id="Path_6867" data-name="Path 6867" class="cls-6" d="M83.88.44s-1.39-1.53-3.1,1.12c-1.07,2.79-.45,3.89.2,4.84A4,4,0,0,1,81.78,8L81,10.38s5.26,1.92,6.14.51a5.65,5.65,0,0,1,.54-1.5C88.31,8.73,90.1,8.87,90,8c-.18-2.58-.75-2.58-1.5-2.77.39-1.88-.32-3.73-1.18-3.45,0,0-.68-1.52-1.69-.94C85.66.85,85.25,0,83.88.44Z"/><path id="Path_6868" data-name="Path 6868" class="cls-9" d="M81.4,8.8a12.07,12.07,0,0,0,1.69,1.58,13.4,13.4,0,0,0,2.81,1,2.33,2.33,0,0,0,1.23-.47,11,11,0,0,1-.64,2.54,4.32,4.32,0,0,1-2.3.33l-.08-1.3-.41.84a9.5,9.5,0,0,1-3.38-2.2Z"/></g><g id="Group_1540-2" data-name="Group 1540"><path id="Path_6866-2" data-name="Path 6866" class="cls-5" d="M139.37,13.1s10.71,11.92,8.27,21c0,0-4.62,2.68-9.34.68,0,0-3.37-11.08-3.56-13.37,0,0,0-3.51-1-4.94Z"/><path id="Path_6867-2" data-name="Path 6867" class="cls-6" d="M133,4s.91-1.9,3.28.11c1.8,2.34,1.51,3.58,1.16,4.69a4,4,0,0,0-.32,1.78l1.38,2S134,16.06,132.76,15a5.26,5.26,0,0,0-.94-1.27c-.76-.45-2.55.26-2.61-.61-.15-2.34-.6-1.93.67-3.11-.9-1.67-.73-3.66.17-3.66,0,0,.23-1.66,1.36-1.42C131.41,4.92,131.57,4,133,4Z"/><path id="Path_6868-2" data-name="Path 6868" class="cls-9" d="M137.69,11.2a13,13,0,0,1-1.18,2,14.08,14.08,0,0,1-2.4,1.84A2.25,2.25,0,0,1,132.8,15a11.18,11.18,0,0,0,1.32,2.24,4.43,4.43,0,0,0,2.29-.4l-.28-1.27.62.68a9.79,9.79,0,0,0,2.62-3.16Z"/></g><g id="Group_1782" data-name="Group 1782"><path class="cls-10" d="M112.22,14a.13.13,0,0,1-.12-.08.14.14,0,0,1,.06-.19,2.69,2.69,0,0,1,1.2-.32,2.81,2.81,0,0,1,1.22.18.16.16,0,0,1,.09.19.14.14,0,0,1-.18.09,2.78,2.78,0,0,0-2.21.12Z"/><path class="cls-10" d="M105.29,12.85a.14.14,0,0,1-.11-.06,2.64,2.64,0,0,0-.86-.77,2.57,2.57,0,0,0-1.07-.36.14.14,0,0,1-.12-.16.13.13,0,0,1,.15-.13,2.81,2.81,0,0,1,1.18.4,3.13,3.13,0,0,1,.94.84.14.14,0,0,1,0,.2A.12.12,0,0,1,105.29,12.85Z"/><g id="Group_1764-2" data-name="Group 1764-2" class="cls-11"><g id="Group_1763-2" data-name="Group 1763-2"><g class="cls-12"><g id="Group_1762-2" data-name="Group 1762-2"><g id="Group_1761-2" data-name="Group 1761-2"><g class="cls-12"><g id="Group_1760-2" data-name="Group 1760-2"><path id="Path_6902-2" data-name="Path 6902-2" class="cls-13" d="M109.64,21.26s-.84,1.74-2.21,1.79-2.32-1.62-2.32-1.62"/></g></g></g></g></g></g></g><g id="Group_1769-2" data-name="Group 1769-2" class="cls-11"><g id="Group_1768-2" data-name="Group 1768-2"><g class="cls-14"><g id="Group_1767-2" data-name="Group 1767-2"><g id="Group_1766-2" data-name="Group 1766-2"><g class="cls-14"><g id="Group_1765-2" data-name="Group 1765-2"><path class="cls-15" d="M107.45,20.18c-.21,0-1,0-1.15-.42s.46-1.92.54-2.09a.07.07,0,0,1,.09,0,.08.08,0,0,1,0,.11,4.8,4.8,0,0,0-.54,2c.13.3.8.35,1.06.34h0a.07.07,0,0,1,.07.07.07.07,0,0,1-.07.08Z"/></g></g></g></g></g></g></g><path id="Path_6904-2" data-name="Path 6904-2" class="cls-10" d="M111.32,16a.85.85,0,0,0,.66,1,.82.82,0,0,0,.94-.69.85.85,0,0,0-.66-1h0a.81.81,0,0,0-.94.69h0"/><path id="Path_6905-2" data-name="Path 6905-2" class="cls-10" d="M103.56,15.39a.86.86,0,0,0,.66,1,.82.82,0,0,0,.94-.69.86.86,0,0,0-.66-1h0a.82.82,0,0,0-.94.7h0"/></g><path id="Path_6856" data-name="Path 6856" class="cls-16" d="M93.41,70.12l-.75,2.38a32.26,32.26,0,0,0,17.47,4.12,40.83,40.83,0,0,0,15.93-4.52l-.75-1.78s-8.46,4-16.28,4.23C100.94,74.79,93.41,70.12,93.41,70.12Z"/></g></g></g></svg>
\ No newline at end of file
diff --git a/PAMapp/assets/images/satisfaction/notification_mob.svg b/PAMapp/assets/images/satisfaction/satisfactionBtn_mob.svg
similarity index 100%
rename from PAMapp/assets/images/satisfaction/notification_mob.svg
rename to PAMapp/assets/images/satisfaction/satisfactionBtn_mob.svg
diff --git a/PAMapp/assets/images/satisfaction/satisfactionBtn_s_mob.svg b/PAMapp/assets/images/satisfaction/satisfactionBtn_s_mob.svg
new file mode 100644
index 0000000..0fa08fe
--- /dev/null
+++ b/PAMapp/assets/images/satisfaction/satisfactionBtn_s_mob.svg
@@ -0,0 +1,222 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="335" height="60" viewBox="0 0 335 60">
+  <g id="satisfaction_s_mob" data-name="satisfaction �� s �� mob" transform="translate(0 -3.95)">
+    <g id="Component_22_11" data-name="Component 22 11">
+      <g id="Group_3319" data-name="Group 3319">
+        <g id="Group_3896" data-name="Group 3896">
+          <path id="Path_8566" data-name="Path 8566" d="M55.271,23.671V22.7H46.483q5.124,2.022,9.833,4.256c-.016-.857-.023-1.38-.023-1.38a1.11,1.11,0,0,1,.1-.424A1.753,1.753,0,0,1,55.271,23.671Z" fill="#8db9ca"/>
+          <path id="Path_8567" data-name="Path 8567" d="M83.59,45.675a45.2,45.2,0,0,1,4.042,5.03c-.016-.1-.027-.208-.048-.312A6.452,6.452,0,0,0,83.59,45.675Z" fill="#8db9ca"/>
+          <path id="Path_8568" data-name="Path 8568" d="M59.29,22.7H58.279a1.787,1.787,0,0,0,.3.055C58.75,22.752,59.006,22.728,59.29,22.7Z" fill="#8db9ca"/>
+          <path id="Path_8569" data-name="Path 8569" d="M230.734,3.95H10A10,10,0,0,0,.722,10.232c3.038.529,6.057,1.09,9.032,1.711V7.688A1.758,1.758,0,0,1,11.512,5.93H68.585a1.758,1.758,0,0,1,1.758,1.758V20.939A1.758,1.758,0,0,1,68.585,22.7H64.349a1.791,1.791,0,0,1,.1,1.156c-.119,1.073-1.013,1.523-2.077,1.759.46,1.131,1.061,3.058,1.7,5.33A80.66,80.66,0,0,1,82.775,44.81,7.053,7.053,0,0,1,88.273,51a6.969,6.969,0,0,1,.032.719A30.048,30.048,0,0,1,92.971,63.95H325a10,10,0,0,0,10-10V40.3C290.872,38.918,245.273,24.736,230.734,3.95Z" fill="#8db9ca"/>
+          <path id="Path_8570" data-name="Path 8570" d="M43.541,22.7a3.576,3.576,0,0,1,.6,1.171s6.3-1.186,6.94,8.371l0,.009a28,28,0,0,1-.339,5.173v.007c.067.03.134.06.226.108,1.51.794.381,4.906-.14,6.9l.007-.005c-.27,1.065-1.162.425-1.07.984a10.474,10.474,0,0,1-1.11,6.3c.194.67.414,1.482.612,2.3-.109.241-.229.476-.344.714.063-.092.131-.182.193-.275.082-.136.146-.239.2-.318-.016-.045-.025-.091-.042-.135.043,0,.087,0,.13,0l.016-.025.006.024a6.966,6.966,0,0,1,2.525.374c2.7-2.771,5.221-12.111,5.221-12.111-.566-2.542-.79-11.784-.856-15.306q-4.7-2.23-9.833-4.256Z" fill="#8db9ca"/>
+          <path id="Path_8571" data-name="Path 8571" d="M43.541,22.7a3.576,3.576,0,0,1,.6,1.171s6.3-1.186,6.94,8.371l0,.009a28,28,0,0,1-.339,5.173v.007c.067.03.134.06.226.108,1.51.794.381,4.906-.14,6.9l.007-.005c-.27,1.065-1.162.425-1.07.984a10.474,10.474,0,0,1-1.11,6.3c.194.67.414,1.482.612,2.3-.109.241-.229.476-.344.714.063-.092.131-.182.193-.275.082-.136.146-.239.2-.318-.016-.045-.025-.091-.042-.135.043,0,.087,0,.13,0l.016-.025.006.024a6.966,6.966,0,0,1,2.525.374c2.7-2.771,5.221-12.111,5.221-12.111-.566-2.542-.79-11.784-.856-15.306q-4.7-2.23-9.833-4.256Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8572" data-name="Path 8572" d="M30.953,48.108a3.119,3.119,0,0,1-1.98-1.585C27.942,44,27.332,41.592,27.8,40.834a16.469,16.469,0,0,0,1.962,3.924.311.311,0,0,0,.086.078.65.65,0,0,1-.086-.083A16.462,16.462,0,0,1,27.8,40.83c-.422-1.012-.8-2.035-1.19-2.824-2.676-5.508,2.05-7.155,1.807-7.4C26.3,28.483,30,24.872,33.282,22.7H25.563a10.782,10.782,0,0,1-.853,2.166,1.922,1.922,0,0,1-.566.61c-.024,2.991-.163,16.355-.786,19.158,0,0,2.775,7.957,5.425,11.485a11.771,11.771,0,0,1,4.454-1.1,8.885,8.885,0,0,1,.154-.9,1.794,1.794,0,0,0,.251.377c.05.065.11.139.176.218-.061-.511-.126-1-.189-1.441C32.3,51.793,31.095,48.319,30.953,48.108Z" fill="#8db9ca"/>
+          <path id="Path_8573" data-name="Path 8573" d="M30.953,48.108a3.119,3.119,0,0,1-1.98-1.585C27.942,44,27.332,41.592,27.8,40.834a16.469,16.469,0,0,0,1.962,3.924.311.311,0,0,0,.086.078.65.65,0,0,1-.086-.083A16.462,16.462,0,0,1,27.8,40.83c-.422-1.012-.8-2.035-1.19-2.824-2.676-5.508,2.05-7.155,1.807-7.4C26.3,28.483,30,24.872,33.282,22.7H25.563a10.782,10.782,0,0,1-.853,2.166,1.922,1.922,0,0,1-.566.61c-.024,2.991-.163,16.355-.786,19.158,0,0,2.775,7.957,5.425,11.485a11.771,11.771,0,0,1,4.454-1.1,8.885,8.885,0,0,1,.154-.9,1.794,1.794,0,0,0,.251.377c.05.065.11.139.176.218-.061-.511-.126-1-.189-1.441C32.3,51.793,31.095,48.319,30.953,48.108Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8574" data-name="Path 8574" d="M82.652,58.608c-.231.046-.467.082-.707.106a7.053,7.053,0,1,1,.83-13.9A80.66,80.66,0,0,0,64.069,30.942c1.763,6.287,3.805,15.208,3.923,17.2.176,2.986-1.4,7.026-4.039,14.052-.242.646-.489,1.227-.738,1.754H92.971a30.048,30.048,0,0,0-4.666-12.227A7.052,7.052,0,0,1,82.652,58.608Z" fill="#8db9ca"/>
+          <path id="Path_8575" data-name="Path 8575" d="M82.652,58.608c-.231.046-.467.082-.707.106a7.053,7.053,0,1,1,.83-13.9A80.66,80.66,0,0,0,64.069,30.942c1.763,6.287,3.805,15.208,3.923,17.2.176,2.986-1.4,7.026-4.039,14.052-.242.646-.489,1.227-.738,1.754H92.971a30.048,30.048,0,0,0-4.666-12.227A7.052,7.052,0,0,1,82.652,58.608Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8576" data-name="Path 8576" d="M14.641,27.192a1.112,1.112,0,0,0-1.508.112l-.428.442-.422-.436a1.115,1.115,0,0,0-.825-.362h0a1.1,1.1,0,0,0-.694.246,1.178,1.178,0,0,0-.113,1.655.514.514,0,0,0,.038.042l2,2.064h.029l2-2.063a1.178,1.178,0,0,0-.037-1.663Z" fill="#8db9ca"/>
+          <path id="Path_8577" data-name="Path 8577" d="M14.641,27.192a1.112,1.112,0,0,0-1.508.112l-.428.442-.422-.436a1.115,1.115,0,0,0-.825-.362h0a1.1,1.1,0,0,0-.694.246,1.178,1.178,0,0,0-.113,1.655.514.514,0,0,0,.038.042l2,2.064h.029l2-2.063a1.178,1.178,0,0,0-.037-1.663Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8578" data-name="Path 8578" d="M13.518,50.78c.174-2.932,2.63-22.359,4.049-24.895-.434-.159-.749-.372-.749-.655a3.006,3.006,0,0,1,.714-2.533h-6.02a1.758,1.758,0,0,1-1.758-1.758v-9C6.779,11.322,3.76,10.761.722,10.232A9.968,9.968,0,0,0,0,13.95v40a10,10,0,0,0,10,10h7.227C14.79,57.467,13.349,53.639,13.518,50.78ZM9.7,46.134a.383.383,0,0,1-.366.192l-1.6-.119-1,1.252a.388.388,0,0,1-.31.145.4.4,0,0,1-.085-.009.386.386,0,0,1-.3-.289l-.383-1.559-1.5-.569a.391.391,0,0,1-.067-.7l1.365-.845.077-1.6a.391.391,0,0,1,.643-.28L7.405,42.79l1.549-.422a.391.391,0,0,1,.465.524l-.608,1.487.88,1.343A.388.388,0,0,1,9.7,46.134Zm3-14.562a.627.627,0,0,1-.456-.2l-2-2.061c-.022-.023-.043-.045-.062-.069a1.788,1.788,0,0,1,.183-2.521,1.724,1.724,0,0,1,2.33.142,1.718,1.718,0,0,1,2.322-.148h.006l.071.065a1.786,1.786,0,0,1,.054,2.525h0l-2.023,2.087A.619.619,0,0,1,12.7,31.572Z" fill="#8db9ca"/>
+          <path id="Path_8579" data-name="Path 8579" d="M13.518,50.78c.174-2.932,2.63-22.359,4.049-24.895-.434-.159-.749-.372-.749-.655a3.006,3.006,0,0,1,.714-2.533h-6.02a1.758,1.758,0,0,1-1.758-1.758v-9C6.779,11.322,3.76,10.761.722,10.232A9.968,9.968,0,0,0,0,13.95v40a10,10,0,0,0,10,10h7.227C14.79,57.467,13.349,53.639,13.518,50.78ZM9.7,46.134a.383.383,0,0,1-.366.192l-1.6-.119-1,1.252a.388.388,0,0,1-.31.145.4.4,0,0,1-.085-.009.386.386,0,0,1-.3-.289l-.383-1.559-1.5-.569a.391.391,0,0,1-.067-.7l1.365-.845.077-1.6a.391.391,0,0,1,.643-.28L7.405,42.79l1.549-.422a.391.391,0,0,1,.465.524l-.608,1.487.88,1.343A.388.388,0,0,1,9.7,46.134Zm3-14.562a.627.627,0,0,1-.456-.2l-2-2.061c-.022-.023-.043-.045-.062-.069a1.788,1.788,0,0,1,.183-2.521,1.724,1.724,0,0,1,2.33.142,1.718,1.718,0,0,1,2.322-.148h.006l.071.065a1.786,1.786,0,0,1,.054,2.525h0l-2.023,2.087A.619.619,0,0,1,12.7,31.572Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8580" data-name="Path 8580" d="M8.2,44.254l.483-1.182-1.232.335a.39.39,0,0,1-.355-.079L6.118,42.5l-.062,1.275a.39.39,0,0,1-.185.314l-1.08.672,1.194.452a.391.391,0,0,1,.241.275l.3,1.238.8-.995a.384.384,0,0,1,.333-.145l1.273.094-.7-1.068A.388.388,0,0,1,8.2,44.254Z" fill="#8db9ca"/>
+          <path id="Path_8581" data-name="Path 8581" d="M8.2,44.254l.483-1.182-1.232.335a.39.39,0,0,1-.355-.079L6.118,42.5l-.062,1.275a.39.39,0,0,1-.185.314l-1.08.672,1.194.452a.391.391,0,0,1,.241.275l.3,1.238.8-.995a.384.384,0,0,1,.333-.145l1.273.094-.7-1.068A.388.388,0,0,1,8.2,44.254Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8582" data-name="Path 8582" d="M80.611,45.272c-.222.024-.439.057-.654.1h0a6.456,6.456,0,1,0,7.674,5.333,45.2,45.2,0,0,0-4.042-5.03A6.427,6.427,0,0,0,80.611,45.272Zm-2.253,4.971a.6.6,0,1,1,.549-.648v0h0A.6.6,0,0,1,78.358,50.243Zm3.528,5.878a1.506,1.506,0,0,1-.2.029,1.9,1.9,0,0,1-1.979-1.415.152.152,0,0,1,.3-.069.172.172,0,0,1,0,.039,1.619,1.619,0,0,0,1.651,1.142,2.016,2.016,0,0,0,1.571-1.363.154.154,0,0,1,.3.068A2.326,2.326,0,0,1,81.886,56.121Zm2.19-7.549a.6.6,0,0,1,.648.548v0h0a.6.6,0,1,1-.649-.55Z" fill="#8db9ca"/>
+          <path id="Path_8583" data-name="Path 8583" d="M80.611,45.272c-.222.024-.439.057-.654.1h0a6.456,6.456,0,1,0,7.674,5.333,45.2,45.2,0,0,0-4.042-5.03A6.427,6.427,0,0,0,80.611,45.272Zm-2.253,4.971a.6.6,0,1,1,.549-.648v0h0A.6.6,0,0,1,78.358,50.243Zm3.528,5.878a1.506,1.506,0,0,1-.2.029,1.9,1.9,0,0,1-1.979-1.415.152.152,0,0,1,.3-.069.172.172,0,0,1,0,.039,1.619,1.619,0,0,0,1.651,1.142,2.016,2.016,0,0,0,1.571-1.363.154.154,0,0,1,.3.068A2.326,2.326,0,0,1,81.886,56.121Zm2.19-7.549a.6.6,0,0,1,.648.548v0h0a.6.6,0,1,1-.649-.55Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8584" data-name="Path 8584" d="M266.189,19.017l.4-.969-1.01.276a.325.325,0,0,1-.292-.065l-.8-.676-.05,1.045a.324.324,0,0,1-.152.258l-.895.554.979.371a.319.319,0,0,1,.2.225l.249,1.015.656-.816a.32.32,0,0,1,.273-.119l1.044.077-.574-.876A.323.323,0,0,1,266.189,19.017Z" fill="#8db9ca"/>
+          <path id="Path_8585" data-name="Path 8585" d="M266.189,19.017l.4-.969-1.01.276a.325.325,0,0,1-.292-.065l-.8-.676-.05,1.045a.324.324,0,0,1-.152.258l-.895.554.979.371a.319.319,0,0,1,.2.225l.249,1.015.656-.816a.32.32,0,0,1,.273-.119l1.044.077-.574-.876A.323.323,0,0,1,266.189,19.017Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8586" data-name="Path 8586" d="M325,3.95H230.734C245.273,24.736,290.872,38.918,335,40.3V13.95A10,10,0,0,0,325,3.95ZM267.406,20.57a.315.315,0,0,1-.3.156l-1.313-.1-.824,1.026a.319.319,0,0,1-.24.116.327.327,0,0,1-.07-.008.32.32,0,0,1-.242-.237L264.1,20.25l-1.231-.467a.321.321,0,0,1-.055-.572l1.119-.693L264,17.2a.321.321,0,0,1,.528-.23l1,.85,1.27-.345a.324.324,0,0,1,.382.434l-.5,1.218.722,1.1A.321.321,0,0,1,267.406,20.57Zm28.764-4.758-7.589,3.074a1.271,1.271,0,0,1-1.658-.7l-2.306-5.692a1.28,1.28,0,0,1,.7-1.658l7.589-3.075a1.28,1.28,0,0,1,1.658.7l.005.012a.16.16,0,0,1,.009.023l2.292,5.657A1.281,1.281,0,0,1,296.17,15.812Zm27.51,10.632a5.787,5.787,0,0,1-7.11,3.106q-.275-.093-.546-.214a5.787,5.787,0,1,1,7.656-2.892Z" fill="#8db9ca"/>
+          <path id="Path_8587" data-name="Path 8587" d="M325,3.95H230.734C245.273,24.736,290.872,38.918,335,40.3V13.95A10,10,0,0,0,325,3.95ZM267.406,20.57a.315.315,0,0,1-.3.156l-1.313-.1-.824,1.026a.319.319,0,0,1-.24.116.327.327,0,0,1-.07-.008.32.32,0,0,1-.242-.237L264.1,20.25l-1.231-.467a.321.321,0,0,1-.055-.572l1.119-.693L264,17.2a.321.321,0,0,1,.528-.23l1,.85,1.27-.345a.324.324,0,0,1,.382.434l-.5,1.218.722,1.1A.321.321,0,0,1,267.406,20.57Zm28.764-4.758-7.589,3.074a1.271,1.271,0,0,1-1.658-.7l-2.306-5.692a1.28,1.28,0,0,1,.7-1.658l7.589-3.075a1.28,1.28,0,0,1,1.658.7l.005.012a.16.16,0,0,1,.009.023l2.292,5.657A1.281,1.281,0,0,1,296.17,15.812Zm27.51,10.632a5.787,5.787,0,0,1-7.11,3.106q-.275-.093-.546-.214a5.787,5.787,0,1,1,7.656-2.892Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8588" data-name="Path 8588" d="M294.04,8.549a.769.769,0,0,0-.94-.324L285.512,11.3h-.005a.77.77,0,0,0-.448.894l5.763,1.323Z" fill="#8db9ca"/>
+          <path id="Path_8589" data-name="Path 8589" d="M294.04,8.549a.769.769,0,0,0-.94-.324L285.512,11.3h-.005a.77.77,0,0,0-.448.894l5.763,1.323Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8590" data-name="Path 8590" d="M320.577,19.25a3.938,3.938,0,0,0-.5-.208v.008a5.285,5.285,0,1,0,.5.2Zm-3.868,1.941a.493.493,0,0,1,.892.42h0a.493.493,0,0,1-.891-.422Zm2.138,5.832a1.907,1.907,0,0,1-1.8.444,1.511,1.511,0,0,1-.157-.063,1.556,1.556,0,0,1-.826-1.816.122.122,0,0,1,.162-.063h0a.125.125,0,0,1,.063.165,1.327,1.327,0,0,0,.7,1.487,1.651,1.651,0,0,0,1.673-.325.125.125,0,1,1,.184.17Zm3.081-3.365a.494.494,0,1,1-.237-.657h0a.493.493,0,0,1,.235.656Z" fill="#8db9ca"/>
+          <path id="Path_8591" data-name="Path 8591" d="M320.577,19.25a3.938,3.938,0,0,0-.5-.208v.008a5.285,5.285,0,1,0,.5.2Zm-3.868,1.941a.493.493,0,0,1,.892.42h0a.493.493,0,0,1-.891-.422Zm2.138,5.832a1.907,1.907,0,0,1-1.8.444,1.511,1.511,0,0,1-.157-.063,1.556,1.556,0,0,1-.826-1.816.122.122,0,0,1,.162-.063h0a.125.125,0,0,1,.063.165,1.327,1.327,0,0,0,.7,1.487,1.651,1.651,0,0,0,1.673-.325.125.125,0,1,1,.184.17Zm3.081-3.365a.494.494,0,1,1-.237-.657h0a.493.493,0,0,1,.235.656Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8592" data-name="Path 8592" d="M290.937,14.05a.259.259,0,0,1-.056-.006l-5.621-1.292L287.386,18a.78.78,0,0,0,1.008.427l7.588-3.074a.78.78,0,0,0,.426-1.009l-2.123-5.253-3.144,4.846A.249.249,0,0,1,290.937,14.05Z" fill="#8db9ca"/>
+          <path id="Path_8593" data-name="Path 8593" d="M290.937,14.05a.259.259,0,0,1-.056-.006l-5.621-1.292L287.386,18a.78.78,0,0,0,1.008.427l7.588-3.074a.78.78,0,0,0,.426-1.009l-2.123-5.253-3.144,4.846A.249.249,0,0,1,290.937,14.05Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8594" data-name="Path 8594" d="M266.676,19.131l.5-1.218a.324.324,0,0,0-.382-.434l-1.27.345-1-.85a.321.321,0,0,0-.528.23l-.063,1.314-1.119.693a.321.321,0,0,0,.055.572l1.231.467.317,1.273a.32.32,0,0,0,.242.237.327.327,0,0,0,.07.008.319.319,0,0,0,.24-.116l.824-1.026,1.313.1a.315.315,0,0,0,.3-.156.321.321,0,0,0-.008-.339Zm-.929.985a.32.32,0,0,0-.273.119l-.656.816-.249-1.015a.319.319,0,0,0-.2-.225l-.979-.371.895-.554a.324.324,0,0,0,.152-.258l.05-1.045.8.676a.325.325,0,0,0,.292.065l1.01-.276-.4.969a.323.323,0,0,0,.028.3l.574.876Z" fill="#8db9ca"/>
+          <path id="Path_8595" data-name="Path 8595" d="M8.811,44.379l.608-1.487a.391.391,0,0,0-.465-.524l-1.549.422L6.179,41.753a.391.391,0,0,0-.643.28l-.077,1.6-1.365.845a.391.391,0,0,0,.067.7l1.5.569.383,1.559a.386.386,0,0,0,.3.289.4.4,0,0,0,.085.009.388.388,0,0,0,.31-.145l1-1.252,1.6.119a.383.383,0,0,0,.366-.192.388.388,0,0,0-.009-.412ZM7.659,45.59a.384.384,0,0,0-.333.145l-.8.995-.3-1.238a.391.391,0,0,0-.241-.275l-1.194-.452,1.08-.672a.39.39,0,0,0,.185-.314L6.118,42.5l.975.824a.39.39,0,0,0,.355.079l1.232-.335L8.2,44.254a.388.388,0,0,0,.035.362l.7,1.068Z" fill="#8db9ca"/>
+          <path id="Path_8596" data-name="Path 8596" d="M38.407,34.563c.117-.017.228-.031.348-.051.232-.038.45-.079.668-.12-.217.038-.434.076-.665.114Z" fill="#8db9ca"/>
+          <path id="Path_8597" data-name="Path 8597" d="M38.407,34.563c.117-.017.228-.031.348-.051.232-.038.45-.079.668-.12-.217.038-.434.076-.665.114Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8598" data-name="Path 8598" d="M45.3,59.8h-.007a9.259,9.259,0,0,1,1.437,1.025c.07.055.153.128.226.187h0c-.073-.061-.157-.134-.226-.189A9.244,9.244,0,0,0,45.3,59.8Z" fill="#8db9ca"/>
+          <path id="Path_8599" data-name="Path 8599" d="M45.3,59.8h-.007a9.259,9.259,0,0,1,1.437,1.025c.07.055.153.128.226.187h0c-.073-.061-.157-.134-.226-.189A9.244,9.244,0,0,0,45.3,59.8Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8600" data-name="Path 8600" d="M30.135,42.917c-.025-1.237-.137-2.9-.247-4.486,0,.138,0,.281-.007.435C29.854,39.989,30.036,41.625,30.135,42.917Z" fill="#8db9ca"/>
+          <path id="Path_8601" data-name="Path 8601" d="M30.135,42.917c-.025-1.237-.137-2.9-.247-4.486,0,.138,0,.281-.007.435C29.854,39.989,30.036,41.625,30.135,42.917Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_8602" data-name="Path 8602" d="M49.316,54.136,49.4,54c-.043,0-.087,0-.13,0C49.291,54.045,49.3,54.091,49.316,54.136Z" fill="#1b365d"/>
+          <path id="Path_8603" data-name="Path 8603" d="M47.345,61.333c-.139-.12-.261-.219-.386-.321h0C47.084,61.115,47.206,61.213,47.345,61.333Z" fill="#1b365d"/>
+          <path id="Path_8604" data-name="Path 8604" d="M38.991,51.527,39.3,53.3l2.482-.439C40.292,53.121,39,51.536,38.991,51.527Z" fill="#fceada"/>
+          <path id="Path_8605" data-name="Path 8605" d="M39.821,46.02a.249.249,0,0,1,.076-.111l-.468.083.238,1.346A8.111,8.111,0,0,1,39.821,46.02Z" fill="#fceada"/>
+          <path id="Path_8606" data-name="Path 8606" d="M40.335,46.122a3.792,3.792,0,0,0-.036,1.962,3.123,3.123,0,0,0,1.68-.19.244.244,0,0,1,.243.067L41.8,45.573l-1.607.284A.252.252,0,0,1,40.335,46.122Z" fill="#fceada"/>
+          <path id="Path_8607" data-name="Path 8607" d="M42.291,48.353l-.014-.079a.25.25,0,0,1-.121.1Z" fill="#fceada"/>
+          <path id="Path_8608" data-name="Path 8608" d="M43.966,50.645s-.676,1.946-2.172,2.214l2.49-.44-.313-1.775Z" fill="#fceada"/>
+          <path id="Path_8609" data-name="Path 8609" d="M39.843,48.334l.077.438.65-.115A1.089,1.089,0,0,1,40,48.512.551.551,0,0,1,39.843,48.334Z" fill="#fceada"/>
+          <path id="Path_8610" data-name="Path 8610" d="M38.991,51.524h0l4.019-.711Z" fill="#fceada"/>
+          <path id="Path_8611" data-name="Path 8611" d="M44.952,59.586l.041-.041a34.879,34.879,0,0,0,3.934-4.816c.115-.238.235-.473.344-.714-.2-.818-.418-1.63-.612-2.3a10.474,10.474,0,0,0,1.11-6.3c-.092-.559.8.081,1.07-.984l-.007.005c.521-1.994,1.65-6.106.14-6.9-.092-.048-.159-.078-.226-.108a20.392,20.392,0,0,1-.988,4.316c-.482,1.2-1.627-7.4-2.4-8.461-1.66-2.257,1.037-.474-7.935,1.109-.218.041-.436.082-.668.12-.12.02-.231.034-.348.051-8.989,1.466-8.5.967-8.519,3.868.11,1.586.222,3.249.247,4.486.1,1.335.114,2.286-.284,1.919a.311.311,0,0,1-.086-.078A16.469,16.469,0,0,1,27.8,40.834c-.471.758.139,3.162,1.17,5.689a3.119,3.119,0,0,0,1.98,1.585c.142.211,1.35,3.685,2.676,5.165.063.439.128.93.189,1.441C34.677,55.735,37,57.889,42.5,59.46l.007,0,2.48.082-.044.044c.12.064.231.143.348.212H45.3C45.184,59.73,45.073,59.65,44.952,59.586Zm-11.8-19.02a.262.262,0,1,1-.172-.494,3.64,3.64,0,0,1,2.777.146.262.262,0,0,1-.112.5.251.251,0,0,1-.112-.026A3.117,3.117,0,0,0,33.148,40.566Zm2.765,3.222a.9.9,0,1,1,.731-1.047v.007h0A.9.9,0,0,1,35.913,43.788Zm7.243-4.733a3.638,3.638,0,0,1,2.431-1.35.262.262,0,0,1,.062.52,3.114,3.114,0,0,0-2.085,1.156.261.261,0,1,1-.408-.326ZM39.9,45.909l.3-.052,1.607-.284.422,2.388.055.313.014.079-.135.024-1.586.28-.65.115-.077-.438-.176-1-.238-1.346Zm1.9,6.95h-.008L39.3,53.3l-.313-1.772v0h0l4.019-.71.956-.169h.005l.313,1.775Zm2.757-10.6a.9.9,0,1,1,.731-1.047v.007h0A.9.9,0,0,1,44.551,42.262Z" fill="#fceada"/>
+          <path id="Path_8612" data-name="Path 8612" d="M47.438,61.414l-.093-.081c-.139-.12-.261-.218-.387-.321-.073-.059-.156-.132-.226-.187A9.259,9.259,0,0,0,45.295,59.8c-.117-.069-.228-.148-.348-.212l.044-.044-2.48-.082c.06.022.12.041.182.062h0s-.1.091-.365.334c-.354.332-1.018.97-2.159,2.109l-.176.176-.712.712h0l0,0L40.1,63.95H46.8a18.29,18.29,0,0,1,1.351-1.89C47.893,61.817,47.659,61.607,47.438,61.414Z" fill="#d9232e"/>
+          <path id="Path_8613" data-name="Path 8613" d="M39.987,62.144l.177-.176c1.143-1.14,1.806-1.777,2.159-2.109.26-.243.364-.333.364-.333-.064-.022-.126-.041-.189-.064h.013l-.007,0c-5.5-1.571-7.827-3.725-8.686-4.746-.066-.079-.126-.153-.176-.218a1.794,1.794,0,0,1-.251-.377,8.885,8.885,0,0,0-.154.9A12.221,12.221,0,0,0,36.2,63.95h1.97c.4-.4.779-.767,1.106-1.094Z" fill="#fff"/>
+          <path id="Path_8614" data-name="Path 8614" d="M40.164,61.968h0c1.141-1.139,1.805-1.777,2.159-2.109h0C41.97,60.191,41.307,60.828,40.164,61.968Z" fill="#fff"/>
+          <path id="Path_8615" data-name="Path 8615" d="M39.987,62.144l-.71.712h0l.712-.712.176-.176h0Z" fill="#fff"/>
+          <path id="Path_8616" data-name="Path 8616" d="M42.687,59.526s-.1.09-.364.333h0c.26-.243.365-.334.365-.334h0c-.062-.021-.122-.04-.182-.062H42.5C42.561,59.485,42.623,59.5,42.687,59.526Z" fill="#fff"/>
+          <path id="Path_8617" data-name="Path 8617" d="M49.4,54h.022l-.006-.024Z" fill="#fff"/>
+          <path id="Path_8618" data-name="Path 8618" d="M48.927,54.729a35,35,0,0,1-2.9,4.977L45.3,59.8a9.244,9.244,0,0,1,1.431,1.023c.069.055.153.128.226.189a7.087,7.087,0,0,0,1.254-1.156,5.7,5.7,0,0,0,1.1-5.72c-.05.079-.114.182-.2.318C49.058,54.547,48.99,54.637,48.927,54.729Z" fill="#fff"/>
+          <path id="Path_8619" data-name="Path 8619" d="M49.426,54H49.4l-.088.139a5.7,5.7,0,0,1-1.1,5.72,7.087,7.087,0,0,1-1.254,1.156c.125.1.247.2.386.321l.093.081c.221.193.456.4.718.644.563.517,1.239,1.145,2.005,1.892h1.027C51.324,62.36,50.43,58.337,49.426,54Z" fill="#fff"/>
+          <path id="Path_8620" data-name="Path 8620" d="M44.952,59.586c.121.064.232.144.35.214l.721-.094a35,35,0,0,0,2.9-4.977,34.879,34.879,0,0,1-3.934,4.816Z" fill="#fff"/>
+          <path id="Path_8621" data-name="Path 8621" d="M29.851,44.836c.4.367.387-.584.284-1.919C30.16,44.163,30.1,44.975,29.851,44.836Z" fill="#221e1f"/>
+          <path id="Path_8622" data-name="Path 8622" d="M28.42,30.606c.243.245-4.483,1.892-1.807,7.4.39.789.768,1.812,1.19,2.824a16.462,16.462,0,0,0,1.962,3.923.65.65,0,0,0,.086.083c.245.139.309-.673.284-1.919-.1-1.292-.281-2.928-.254-4.051,0-.154.006-.3.007-.435.017-2.9-.47-2.4,8.519-3.868l.351-.057c.231-.038.448-.076.665-.114,8.972-1.583,6.275-3.366,7.935-1.109.773,1.061,1.918,9.661,2.4,8.461a20.392,20.392,0,0,0,.988-4.316v-.007a28,28,0,0,0,.339-5.173l0-.009c-.64-9.557-6.94-8.371-6.94-8.371a3.576,3.576,0,0,0-.6-1.171H33.282C30,24.872,26.3,28.483,28.42,30.606Z" fill="#221e1f"/>
+          <path id="Path_8623" data-name="Path 8623" d="M35.641,40.716a.262.262,0,0,0,.112-.5,3.64,3.64,0,0,0-2.777-.146.262.262,0,1,0,.172.494,3.117,3.117,0,0,1,2.381.124A.251.251,0,0,0,35.641,40.716Z" fill="#221e1f"/>
+          <path id="Path_8624" data-name="Path 8624" d="M43.36,39.479a.262.262,0,0,0,.2-.1,3.114,3.114,0,0,1,2.085-1.156.262.262,0,0,0-.062-.52,3.638,3.638,0,0,0-2.431,1.35.26.26,0,0,0,.2.424Z" fill="#221e1f"/>
+          <path id="Path_8625" data-name="Path 8625" d="M43.966,50.645l-.956.169-4.019.711v0c.008.009,1.3,1.594,2.795,1.333h.008C43.29,52.591,43.966,50.646,43.966,50.645Z" fill="#e3727c"/>
+          <path id="Path_8626" data-name="Path 8626" d="M39.667,47.338l.176,1a.551.551,0,0,0,.156.178,1.089,1.089,0,0,0,.571.145l1.586-.28a.25.25,0,0,0,.121-.1l-.055-.313a.244.244,0,0,0-.243-.067,3.123,3.123,0,0,1-1.68.19,3.792,3.792,0,0,1,.036-1.962.252.252,0,0,0-.142-.265l-.3.052a.249.249,0,0,0-.076.111A8.111,8.111,0,0,0,39.667,47.338Z" fill="#ce9c6b"/>
+          <path id="Path_8627" data-name="Path 8627" d="M36.644,42.741a.75.75,0,1,0,0,.007h0Z" fill="#221e1f"/>
+          <path id="Path_8628" data-name="Path 8628" d="M45.285,41.222h0v-.007a.75.75,0,1,0,0,.007Z" fill="#221e1f"/>
+          <path id="Path_8629" data-name="Path 8629" d="M33.237,55.015a11.771,11.771,0,0,0-4.454,1.1c-2.65-3.528-5.425-11.485-5.425-11.485.623-2.8.762-16.167.786-19.158-1.355.986-4.022.858-4.022.858a11.1,11.1,0,0,1-2.555-.446c-1.419,2.536-3.875,21.963-4.049,24.895-.169,2.859,1.272,6.687,3.709,13.17H36.2A12.221,12.221,0,0,1,33.237,55.015Z" fill="#1b365d"/>
+          <path id="Path_8630" data-name="Path 8630" d="M39.277,62.856c-.327.327-.7.7-1.106,1.094H40.1l-.822-1.092Z" fill="#1b365d"/>
+          <path id="Path_8631" data-name="Path 8631" d="M47.438,61.414c.221.193.455.4.717.646A18.29,18.29,0,0,0,46.8,63.95h3.357c-.766-.747-1.442-1.375-2.005-1.892C47.894,61.817,47.659,61.607,47.438,61.414Z" fill="#1b365d"/>
+          <path id="Path_8632" data-name="Path 8632" d="M67.992,48.144c-.118-1.994-2.16-10.915-3.923-17.2-.637-2.272-1.238-4.2-1.7-5.33a16.794,16.794,0,0,1-1.777.259,8.428,8.428,0,0,1-4.206-.722,1.11,1.11,0,0,0-.1.424s.007.523.023,1.38c.066,3.522.29,12.764.856,15.306,0,0-2.521,9.34-5.221,12.111A6.966,6.966,0,0,0,49.426,54c1,4.341,1.9,8.364,1.762,9.954H63.215c.249-.527.5-1.108.738-1.754C66.591,55.17,68.168,51.13,67.992,48.144Z" fill="#1b365d"/>
+          <path id="Path_8633" data-name="Path 8633" d="M87.584,50.393c.021.1.032.208.048.312.232.338.455.678.673,1.018A6.969,6.969,0,0,0,88.273,51a7.053,7.053,0,0,0-5.5-6.194q.416.43.815.865A6.452,6.452,0,0,1,87.584,50.393Z" fill="#8db9ca"/>
+          <path id="Path_8634" data-name="Path 8634" d="M80.563,44.676a7.053,7.053,0,1,0,1.382,14.038c.24-.024.476-.06.707-.106a7.052,7.052,0,0,0,5.653-6.885c-.218-.34-.441-.68-.673-1.018a6.452,6.452,0,1,1-7.674-5.333h0c.215-.043.432-.076.654-.1a6.427,6.427,0,0,1,2.979.4q-.4-.433-.815-.865A7.045,7.045,0,0,0,80.563,44.676Z" fill="#8db9ca"/>
+          <path id="Path_8635" data-name="Path 8635" d="M78.907,49.6a.6.6,0,1,0-.549.648.6.6,0,0,0,.549-.648h0Z" fill="#8db9ca"/>
+          <path id="Path_8636" data-name="Path 8636" d="M84.175,49.768a.6.6,0,0,0,.55-.646h0v0a.6.6,0,1,0-.549.648Z" fill="#8db9ca"/>
+          <path id="Path_8637" data-name="Path 8637" d="M83.413,54.368a.154.154,0,0,0-.184.116,2.016,2.016,0,0,1-1.571,1.363,1.619,1.619,0,0,1-1.651-1.142.172.172,0,0,0,0-.039.152.152,0,0,0-.3.069,1.9,1.9,0,0,0,1.979,1.415,1.506,1.506,0,0,0,.2-.029,2.326,2.326,0,0,0,1.643-1.569A.154.154,0,0,0,83.413,54.368Z" fill="#8db9ca"/>
+          <path id="Path_8638" data-name="Path 8638" d="M320.788,18.788a5.787,5.787,0,1,0-4.764,10.548q.271.121.546.214a5.787,5.787,0,0,0,4.218-10.762Zm2.579,6.973a5.285,5.285,0,1,1-3.29-6.711v-.008a3.938,3.938,0,0,1,.5.208A5.284,5.284,0,0,1,323.367,25.761Z" fill="#8db9ca"/>
+          <path id="Path_8639" data-name="Path 8639" d="M316.943,21.847a.493.493,0,0,0,.657-.234h0a.493.493,0,1,0-.658.236Z" fill="#8db9ca"/>
+          <path id="Path_8640" data-name="Path 8640" d="M321.692,23h0a.494.494,0,1,0,.237.657h0A.493.493,0,0,0,321.692,23Z" fill="#8db9ca"/>
+          <path id="Path_8641" data-name="Path 8641" d="M318.663,26.853a1.651,1.651,0,0,1-1.673.325,1.327,1.327,0,0,1-.7-1.487.125.125,0,0,0-.063-.165h0a.122.122,0,0,0-.162.063,1.556,1.556,0,0,0,.826,1.816,1.511,1.511,0,0,0,.157.063,1.907,1.907,0,0,0,1.8-.444.125.125,0,1,0-.184-.17Z" fill="#8db9ca"/>
+          <path id="Path_8642" data-name="Path 8642" d="M15.15,29.305A1.786,1.786,0,0,0,15.1,26.78l-.071-.065h-.006a1.718,1.718,0,0,0-2.322.148,1.724,1.724,0,0,0-2.33-.142,1.788,1.788,0,0,0-.183,2.521c.019.024.04.046.062.069l2,2.061a.627.627,0,0,0,.456.2.619.619,0,0,0,.424-.179l2.023-2.087Zm-.432-.413-2,2.063h-.029l-2-2.064a.514.514,0,0,1-.038-.042,1.178,1.178,0,0,1,.113-1.655,1.1,1.1,0,0,1,.694-.246h0a1.115,1.115,0,0,1,.825.362l.422.436.428-.442a1.112,1.112,0,0,1,1.508-.112l.04.037A1.178,1.178,0,0,1,14.718,28.892Z" fill="#8db9ca"/>
+          <path id="Path_8643" data-name="Path 8643" d="M11.512,22.7h6.02a3.569,3.569,0,0,1,1.029-.679c2.02-.917,4.864-.091,4.864-.091a6.605,6.605,0,0,1,1.836-2.02c.844-.241.735,1.262.3,2.79H55.271v-1.23s0-2.387.734-2.387.919.919.919,1.836A1.809,1.809,0,0,0,58.279,22.7H59.29a20.564,20.564,0,0,1,3.873-.312c.562.113.984.022,1.186.312h4.236a1.758,1.758,0,0,0,1.758-1.758V7.688A1.758,1.758,0,0,0,68.585,5.93H11.512A1.758,1.758,0,0,0,9.754,7.688V20.939A1.758,1.758,0,0,0,11.512,22.7Zm46.217-9.254a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.16-.043.113.113,0,0,1,.045.047l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038l0,.007,0,.006a.108.108,0,0,1,.021.075l0,0a.121.121,0,0,1-.038.073l-1.664,1.623a.116.116,0,0,0-.034.1l.394,2.3c0,.015-.006.027-.009.04a.135.135,0,0,1,0,.035l0,0a.31.31,0,0,1-.073.055l-.005,0a.108.108,0,0,1-.056-.008c-.007,0-.014,0-.021,0l-2.062-1.085a.121.121,0,0,0-.108,0l-2.06,1.084h0a.124.124,0,0,1-.076.012l-.007,0c-.007,0-.011-.008-.017-.011a.106.106,0,0,1-.053-.044h0a.109.109,0,0,1,0-.025.11.11,0,0,1-.011-.05l.046-.264h0l.35-2.036a.116.116,0,0,0-.034-.1l-1.67-1.627A.117.117,0,0,1,57.729,13.443Zm-10.327,0a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.158-.05.115.115,0,0,1,.05.05l1.031,2.09a.118.118,0,0,0,.087.064l1.531.223v0l.774.112a.116.116,0,0,1,.073.038l0,.006a.091.091,0,0,1,.014.04.122.122,0,0,1,.012.04l0,.006a.121.121,0,0,1-.038.073l-1.668,1.627a.116.116,0,0,0-.034.1l.394,2.3c0,.008,0,.014,0,.021a.105.105,0,0,1-.007.05l-.005,0a.108.108,0,0,1-.052.044c-.006,0-.009.008-.015.009s-.006.007-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-2.062,1.085a.1.1,0,0,1-.052.005c-.008,0-.016,0-.024,0l0,0a.108.108,0,0,1-.052-.033c-.008-.007-.017-.01-.022-.018l-.005-.005a.116.116,0,0,1-.011-.069l0-.009.046-.264h0l.348-2.033a.115.115,0,0,0-.032-.1l-1.67-1.627A.117.117,0,0,1,47.4,13.447Zm-10.325,0a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.157-.052.114.114,0,0,1,.052.052l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038l0,.007,0,.007a.112.112,0,0,1,.021.074l0,0a.116.116,0,0,1-.038.073L42.6,15.238a.116.116,0,0,0-.033.1l.394,2.3a.126.126,0,0,1-.011.074l-.007.006a.11.11,0,0,1-.045.037c-.008,0-.013.012-.022.014s-.006.006-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-2.062,1.085a.106.106,0,0,1-.047,0,.128.128,0,0,1-.027,0l0,0a.112.112,0,0,1-.062-.039s-.008-.006-.011-.01l-.008-.007a.115.115,0,0,1-.012-.075l.394-2.3a.113.113,0,0,0-.033-.1l-1.67-1.627A.117.117,0,0,1,37.077,13.447Zm-10.324,0a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.157-.052.114.114,0,0,1,.052.052l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038l0,.007,0,.007a.112.112,0,0,1,.021.074l0,0a.121.121,0,0,1-.038.073L32.28,15.238a.116.116,0,0,0-.033.1l.394,2.3a.126.126,0,0,1-.011.074l-.007.006a.123.123,0,0,1-.044.037c-.009,0-.014.012-.023.014s-.006.006-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-.542.285-1.52.8a.106.106,0,0,1-.047,0,.128.128,0,0,1-.027,0l0,0a.106.106,0,0,1-.061-.039s-.009-.006-.012-.01l-.008-.007a.115.115,0,0,1-.012-.075l.191-1.113.2-1.187a.113.113,0,0,0-.033-.1l-1.67-1.627A.117.117,0,0,1,26.753,13.447Zm-10.324,0c.008-.008.019-.009.028-.014a.11.11,0,0,1,.043-.022l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.157-.052.114.114,0,0,1,.052.052l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038.113.113,0,0,1,.025.091v0a.111.111,0,0,1-.036.07L22.313,14.89l-.357.348a.116.116,0,0,0-.033.1l.394,2.3a.126.126,0,0,1-.011.074l-.007.006a.11.11,0,0,1-.045.037c-.008,0-.013.012-.022.014s-.006.006-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-2.062,1.085a.106.106,0,0,1-.047,0,.128.128,0,0,1-.027,0l0,0a.112.112,0,0,1-.062-.039s-.008-.006-.011-.01l-.008-.007a.115.115,0,0,1-.012-.075l.394-2.3a.113.113,0,0,0-.033-.1l-1.67-1.627A.117.117,0,0,1,16.429,13.447Z" fill="#fff"/>
+          <path id="Path_8644" data-name="Path 8644" d="M18.866,13.349a.306.306,0,0,0,.245-.165l.919-1.78-.756,2.027a.306.306,0,0,1-.3.2l-2.1-.1q2.463.585,4.883,1.213A8.9,8.9,0,0,0,22.786,13.3l-1.533-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.114.114,0,0,0-.052-.052.117.117,0,0,0-.157.052L18.9,13.011a.115.115,0,0,1-.089.064l-2.306.336a.11.11,0,0,0-.043.022l.412.1Z" fill="#ffc801"/>
+          <path id="Path_8645" data-name="Path 8645" d="M22.311,14.889h0l1.311-1.279a.111.111,0,0,0,.036-.07v0a.116.116,0,0,1-.034.071Z" fill="#ffc801"/>
+          <path id="Path_8646" data-name="Path 8646" d="M20.086,16.674a.117.117,0,0,0-.109,0l-2.062,1.085a.11.11,0,0,1-.048.007.106.106,0,0,0,.047,0l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011s.007-.005.011-.007a.112.112,0,0,1-.084-.007Z" fill="#ffc801"/>
+          <path id="Path_8647" data-name="Path 8647" d="M21.957,15.235a.116.116,0,0,0-.034.1h0a.116.116,0,0,1,.033-.1l.357-.348h0Z" fill="#ffc801"/>
+          <path id="Path_8648" data-name="Path 8648" d="M18.1,15.238a.113.113,0,0,1,.033.1l-.394,2.3a.115.115,0,0,0,.012.075l.008.007a.11.11,0,0,1-.019-.085l.046-.264a8.9,8.9,0,0,0,3.964-2.627q-2.421-.627-4.883-1.213h0l-.412-.1c-.009.005-.02.006-.028.014a.117.117,0,0,0,.006.164Z" fill="#ffc801"/>
+          <path id="Path_8649" data-name="Path 8649" d="M19.274,13.431,20.03,11.4l-.919,1.78a.306.306,0,0,1-.245.165l-2,.182h0l2.1.1A.306.306,0,0,0,19.274,13.431Z" fill="#ffd753"/>
+          <path id="Path_8650" data-name="Path 8650" d="M16.866,13.531h0Z" fill="#ffd753"/>
+          <path id="Path_8651" data-name="Path 8651" d="M23.659,13.537a.113.113,0,0,0-.025-.091.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.115.115,0,0,1,23.659,13.537Z" fill="#f8b911"/>
+          <path id="Path_8652" data-name="Path 8652" d="M17.84,17.771a.128.128,0,0,0,.027,0,.1.1,0,0,1-.03,0Z" fill="#f8b911"/>
+          <path id="Path_8653" data-name="Path 8653" d="M22.316,17.638a.115.115,0,0,1-.017.077l.007-.006a.126.126,0,0,0,.011-.074l-.394-2.3v0Z" fill="#f8b911"/>
+          <path id="Path_8654" data-name="Path 8654" d="M22.311,14.889l1.314-1.281a.116.116,0,0,0-.065-.2l-.774-.113a8.9,8.9,0,0,1-1.031,1.446Z" fill="#f8b911"/>
+          <path id="Path_8655" data-name="Path 8655" d="M21.957,15.235l.354-.346-.556-.145a8.9,8.9,0,0,1-3.964,2.627l-.046.264a.11.11,0,0,0,.019.085s.008.006.011.01a.112.112,0,0,0,.062.039.1.1,0,0,0,.03,0,.11.11,0,0,0,.048-.007l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.084.007c.009,0,.014-.01.022-.014a.11.11,0,0,0,.045-.037.115.115,0,0,0,.017-.077l-.394-2.3v0h0A.116.116,0,0,1,21.957,15.235Z" fill="#f8b911"/>
+          <path id="Path_8656" data-name="Path 8656" d="M30.41,16.674a.117.117,0,0,0-.109,0l-.546.287h0l.542-.285a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011c.005,0,.007-.005.011-.007a.112.112,0,0,1-.084-.007Z" fill="#ffc801"/>
+          <path id="Path_8657" data-name="Path 8657" d="M28.429,15.238a.113.113,0,0,1,.033.1l-.2,1.187q.555.159,1.106.322A8.9,8.9,0,0,0,33.11,13.3l-1.533-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.114.114,0,0,0-.052-.052.117.117,0,0,0-.157.052l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.761-1.889a.306.306,0,0,0,.245-.165l.919-1.78L29.6,13.431a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
+          <path id="Path_8658" data-name="Path 8658" d="M32.281,15.235a.116.116,0,0,0-.034.1h0a.116.116,0,0,1,.033-.1l1.668-1.627a.121.121,0,0,0,.038-.073l0,0a.11.11,0,0,1-.035.074Z" fill="#ffc801"/>
+          <path id="Path_8659" data-name="Path 8659" d="M28.239,17.759a.11.11,0,0,1-.048.007.106.106,0,0,0,.047,0l1.52-.8h0Z" fill="#ffc801"/>
+          <path id="Path_8660" data-name="Path 8660" d="M28.115,17.371a8.867,8.867,0,0,0,1.25-.524q-.552-.162-1.106-.322l-.191,1.113a.115.115,0,0,0,.012.075l.008.007a.114.114,0,0,1-.019-.085Z" fill="#ffc801"/>
+          <path id="Path_8661" data-name="Path 8661" d="M29.6,13.431l.756-2.027-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,29.6,13.431Z" fill="#ffd753"/>
+          <path id="Path_8662" data-name="Path 8662" d="M33.961,13.453l0-.007a.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.114.114,0,0,1,33.961,13.453Z" fill="#f8b911"/>
+          <path id="Path_8663" data-name="Path 8663" d="M32.64,17.638a.115.115,0,0,1-.017.077l.007-.006a.126.126,0,0,0,.011-.074l-.394-2.3v0Z" fill="#f8b911"/>
+          <path id="Path_8664" data-name="Path 8664" d="M28.164,17.771a.128.128,0,0,0,.027,0,.1.1,0,0,1-.03,0Z" fill="#f8b911"/>
+          <path id="Path_8665" data-name="Path 8665" d="M29.365,16.847l.39.114.546-.287a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.084.007c.009,0,.014-.01.023-.014a.123.123,0,0,0,.044-.037.115.115,0,0,0,.017-.077l-.394-2.3v0h0a.116.116,0,0,1,.034-.1l1.668-1.627a.11.11,0,0,0,.035-.074.112.112,0,0,0-.021-.074l0-.007a.114.114,0,0,0-.077-.042L33.11,13.3A8.9,8.9,0,0,1,29.365,16.847Z" fill="#f8b911"/>
+          <path id="Path_8666" data-name="Path 8666" d="M29.755,16.961l-.39-.114a8.867,8.867,0,0,1-1.25.524l-.046.264a.114.114,0,0,0,.019.085s.008.006.012.01a.106.106,0,0,0,.061.039.1.1,0,0,0,.03,0,.11.11,0,0,0,.048-.007Z" fill="#f8b911"/>
+          <path id="Path_8667" data-name="Path 8667" d="M42.6,15.235a.116.116,0,0,0-.034.1h0a.116.116,0,0,1,.033-.1l1.668-1.627a.116.116,0,0,0,.038-.073l0,0a.11.11,0,0,1-.035.074Z" fill="#ffc801"/>
+          <path id="Path_8668" data-name="Path 8668" d="M40.734,16.674a.117.117,0,0,0-.109,0l-2.062,1.085a.11.11,0,0,1-.048.007.106.106,0,0,0,.047,0l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011c.005,0,.007-.005.011-.007a.112.112,0,0,1-.084-.007Z" fill="#ffc801"/>
+          <path id="Path_8669" data-name="Path 8669" d="M38.753,15.238a.113.113,0,0,1,.033.1l-.394,2.3a.115.115,0,0,0,.012.075l.008.007a.114.114,0,0,1-.019-.085l.046-.264A8.907,8.907,0,0,0,43.434,13.3L41.9,13.075a.118.118,0,0,1-.087-.064l-1.031-2.09a.114.114,0,0,0-.052-.052.117.117,0,0,0-.157.052l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.761-1.889a.306.306,0,0,0,.245-.165l.919-1.78-.756,2.027a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
+          <path id="Path_8670" data-name="Path 8670" d="M39.922,13.431l.756-2.027-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,39.922,13.431Z" fill="#ffd753"/>
+          <path id="Path_8671" data-name="Path 8671" d="M42.964,17.638a.115.115,0,0,1-.017.077l.007-.006a.126.126,0,0,0,.011-.074l-.394-2.3v0Z" fill="#f8b911"/>
+          <path id="Path_8672" data-name="Path 8672" d="M44.285,13.453l0-.007a.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.114.114,0,0,1,44.285,13.453Z" fill="#f8b911"/>
+          <path id="Path_8673" data-name="Path 8673" d="M38.488,17.771a.128.128,0,0,0,.027,0,.1.1,0,0,1-.03,0Z" fill="#f8b911"/>
+          <path id="Path_8674" data-name="Path 8674" d="M38.439,17.371l-.046.264a.114.114,0,0,0,.019.085s.008.006.011.01a.112.112,0,0,0,.062.039.1.1,0,0,0,.03,0,.11.11,0,0,0,.048-.007l2.062-1.085a.117.117,0,0,1,.109,0L42.8,17.759a.112.112,0,0,0,.084.007c.009,0,.014-.01.022-.014a.11.11,0,0,0,.045-.037.115.115,0,0,0,.017-.077l-.394-2.3v0h0a.116.116,0,0,1,.034-.1l1.668-1.627a.11.11,0,0,0,.035-.074.112.112,0,0,0-.021-.074l0-.007a.114.114,0,0,0-.077-.042l-.774-.113A8.907,8.907,0,0,1,38.439,17.371Z" fill="#f8b911"/>
+          <path id="Path_8675" data-name="Path 8675" d="M52.927,15.235a.116.116,0,0,0-.034.1l.394,2.3a.1.1,0,0,1,0,.024c0-.007.006-.013,0-.021l-.394-2.3a.116.116,0,0,1,.034-.1L54.6,13.611a.121.121,0,0,0,.038-.073l0-.006a.115.115,0,0,1-.037.076Z" fill="#ffc801"/>
+          <path id="Path_8676" data-name="Path 8676" d="M51.056,16.674a.117.117,0,0,0-.109,0l-2.062,1.085a.124.124,0,0,1-.051.008.1.1,0,0,0,.052-.005l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011c.005,0,.006-.005.011-.007a.117.117,0,0,1-.086-.007Z" fill="#ffc801"/>
+          <path id="Path_8677" data-name="Path 8677" d="M48.728,17.713l.005.005a.123.123,0,0,1-.016-.074A.116.116,0,0,0,48.728,17.713Z" fill="#ffc801"/>
+          <path id="Path_8678" data-name="Path 8678" d="M49.078,15.238a.115.115,0,0,1,.032.1l-.348,2.033A8.912,8.912,0,0,0,53.756,13.3l-1.531-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.115.115,0,0,0-.05-.05.117.117,0,0,0-.158.05l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.76-1.889a.306.306,0,0,0,.245-.165L51,11.4l-.756,2.027a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
+          <path id="Path_8679" data-name="Path 8679" d="M50.246,13.431,51,11.4l-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,50.246,13.431Z" fill="#ffd753"/>
+          <path id="Path_8680" data-name="Path 8680" d="M53.276,17.709a.105.105,0,0,0,.007-.05.11.11,0,0,1-.012.054Z" fill="#f8b911"/>
+          <path id="Path_8681" data-name="Path 8681" d="M48.81,17.771c.008,0,.016,0,.024,0a.123.123,0,0,1-.027,0Z" fill="#f8b911"/>
+          <path id="Path_8682" data-name="Path 8682" d="M54.606,13.452l0-.006a.116.116,0,0,0-.073-.038l-.774-.112v0l.776.113A.111.111,0,0,1,54.606,13.452Z" fill="#f8b911"/>
+          <path id="Path_8683" data-name="Path 8683" d="M48.762,17.371h0l-.046.264,0,.009v-.006Z" fill="#f8b911"/>
+          <path id="Path_8684" data-name="Path 8684" d="M48.762,17.371l-.046.267v.006a.123.123,0,0,0,.016.074c0,.008.014.011.022.018a.108.108,0,0,0,.052.033.123.123,0,0,0,.027,0,.124.124,0,0,0,.051-.008l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.117.117,0,0,0,.086.007c.006,0,.009-.006.015-.009a.108.108,0,0,0,.052-.044.11.11,0,0,0,.012-.054.1.1,0,0,0,0-.024l-.394-2.3a.116.116,0,0,1,.034-.1L54.6,13.608a.115.115,0,0,0,.037-.076.122.122,0,0,0-.012-.04.091.091,0,0,0-.014-.04.111.111,0,0,0-.074-.041l-.776-.113A8.912,8.912,0,0,1,48.762,17.371Z" fill="#f8b911"/>
+          <path id="Path_8685" data-name="Path 8685" d="M59.4,15.234a.116.116,0,0,1,.034.1l-.35,2.036A8.908,8.908,0,0,0,64.082,13.3l-1.533-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.113.113,0,0,0-.045-.047.117.117,0,0,0-.16.043l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.757-1.885a.306.306,0,0,0,.245-.165l.919-1.78-.756,2.027a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
+          <path id="Path_8686" data-name="Path 8686" d="M59.056,17.71h0a.076.076,0,0,1-.006-.026A.109.109,0,0,0,59.056,17.71Z" fill="#ffc801"/>
+          <path id="Path_8687" data-name="Path 8687" d="M59.213,17.758h0l2.06-1.084h0Z" fill="#ffc801"/>
+          <path id="Path_8688" data-name="Path 8688" d="M63.253,15.235a.116.116,0,0,0-.034.1l.394,2.3a.132.132,0,0,1-.006.039c0-.013.012-.025.009-.04l-.394-2.3a.116.116,0,0,1,.034-.1l1.664-1.623a.121.121,0,0,0,.038-.073l0,0a.114.114,0,0,1-.035.074Z" fill="#ffc801"/>
+          <path id="Path_8689" data-name="Path 8689" d="M63.521,17.769l.005,0a.117.117,0,0,1-.061-.005A.108.108,0,0,0,63.521,17.769Z" fill="#ffc801"/>
+          <path id="Path_8690" data-name="Path 8690" d="M60.57,13.431l.756-2.027-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,60.57,13.431Z" fill="#ffd753"/>
+          <path id="Path_8691" data-name="Path 8691" d="M59.135,17.771a.124.124,0,0,0,.076-.012h0a.115.115,0,0,1-.085.008Z" fill="#f8b911"/>
+          <path id="Path_8692" data-name="Path 8692" d="M59.089,17.37h0l-.046.264a.11.11,0,0,0,.011.05.114.114,0,0,1-.008-.051Z" fill="#f8b911"/>
+          <path id="Path_8693" data-name="Path 8693" d="M61.385,16.673a.117.117,0,0,0-.109,0h0a.121.121,0,0,1,.108,0l2.062,1.085c.007,0,.014,0,.021,0s-.012,0-.018,0Z" fill="#f8b911"/>
+          <path id="Path_8694" data-name="Path 8694" d="M64.933,13.453l0-.007a.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.114.114,0,0,1,64.933,13.453Z" fill="#f8b911"/>
+          <path id="Path_8695" data-name="Path 8695" d="M63.6,17.709a.135.135,0,0,0,0-.035.143.143,0,0,1-.008.037Z" fill="#f8b911"/>
+          <path id="Path_8696" data-name="Path 8696" d="M59.089,17.37l-.045.264a.114.114,0,0,0,.008.051.076.076,0,0,0,.006.026.106.106,0,0,0,.053.044c.006,0,.01.009.017.011a.115.115,0,0,0,.085-.008l2.06-1.084h0a.117.117,0,0,1,.109,0l2.062,1.085c.006,0,.012,0,.018,0a.117.117,0,0,0,.061.005.31.31,0,0,0,.073-.055.143.143,0,0,0,.008-.037.132.132,0,0,0,.006-.039l-.394-2.3a.116.116,0,0,1,.034-.1l1.668-1.627a.114.114,0,0,0,.035-.074.108.108,0,0,0-.021-.075l0-.006a.114.114,0,0,0-.077-.042l-.774-.113A8.908,8.908,0,0,1,59.089,17.37Z" fill="#f8b911"/>
+          <path id="Path_8697" data-name="Path 8697" d="M59.29,22.7h5.059c-.2-.29-.624-.2-1.186-.312A20.564,20.564,0,0,0,59.29,22.7Z" fill="#fceada"/>
+          <path id="Path_8698" data-name="Path 8698" d="M58.574,22.752a1.787,1.787,0,0,1-.3-.055,1.809,1.809,0,0,1-1.356-1.781c0-.917-.185-1.836-.919-1.836s-.734,2.387-.734,2.387v2.2a1.753,1.753,0,0,0,1.117,1.478,8.428,8.428,0,0,0,4.206.722,16.794,16.794,0,0,0,1.777-.259c1.064-.236,1.958-.686,2.077-1.759a1.791,1.791,0,0,0-.1-1.156H59.29C59.006,22.728,58.75,22.752,58.574,22.752Z" fill="#fceada"/>
+          <path id="Path_8699" data-name="Path 8699" d="M24.71,24.863a10.782,10.782,0,0,0,.853-2.166c.433-1.528.542-3.031-.3-2.79a6.605,6.605,0,0,0-1.836,2.02s-2.844-.826-4.864.091a3.569,3.569,0,0,0-1.029.679,3.006,3.006,0,0,0-.714,2.533c0,.283.315.5.749.655a11.1,11.1,0,0,0,2.555.446s2.667.128,4.022-.858A1.922,1.922,0,0,0,24.71,24.863Z" fill="#fceada"/>
+          <path id="Path_8700" data-name="Path 8700" d="M294.578,8.5a.248.248,0,0,1-.025.18l-.012.018-.256.395,2.123,5.253a.78.78,0,0,1-.426,1.009l-7.588,3.074A.78.78,0,0,1,287.386,18l-2.126-5.246-.468-.108a.25.25,0,0,1,.112-.487l.155.036a.77.77,0,0,1,.448-.894h.005L293.1,8.225a.769.769,0,0,1,.94.324l.082-.127a.244.244,0,0,1,.447.051l-.005-.012a1.28,1.28,0,0,0-1.658-.7l-7.589,3.075a1.28,1.28,0,0,0-.7,1.658l2.306,5.692a1.271,1.271,0,0,0,1.658.7l7.589-3.074a1.281,1.281,0,0,0,.7-1.659Z" fill="#8db9ca"/>
+          <path id="Path_8701" data-name="Path 8701" d="M294.04,8.549l-3.218,4.967-5.763-1.323a.762.762,0,0,0,.021.114l.18.445,5.621,1.292a.259.259,0,0,0,.056.006.249.249,0,0,0,.2-.115l3.144-4.846-.177-.438A.7.7,0,0,0,294.04,8.549Z" fill="#8db9ca"/>
+          <path id="Path_8702" data-name="Path 8702" d="M285.059,12.193l-.155-.036a.25.25,0,0,0-.112.487l.468.108-.18-.445A.762.762,0,0,1,285.059,12.193Z" fill="#8db9ca"/>
+          <path id="Path_8703" data-name="Path 8703" d="M294.122,8.422l-.082.127a.7.7,0,0,1,.068.1l.177.438.256-.395.012-.018a.248.248,0,0,0,.025-.18.16.16,0,0,0-.009-.023.244.244,0,0,0-.447-.051Z" fill="#8db9ca"/>
+        </g>
+        <g id="Group_3106" data-name="Group 3106">
+          <path id="Path_8704" data-name="Path 8704" d="M215.724,40.114V36.708a2.493,2.493,0,0,0,.983-.673l1.36-1.52a2.5,2.5,0,0,0-.361-3.666,2.514,2.514,0,0,0,.138-.822v-1.92a2.5,2.5,0,0,0-2.5-2.5H210.4a2.5,2.5,0,0,0-2.341-1.621h-2.041a2.5,2.5,0,0,0-2.34,1.621H198.74a2.5,2.5,0,0,0-.964.194,2.492,2.492,0,0,0-2.112-1.174h-10.8a2.484,2.484,0,0,0-1.39.423,2.5,2.5,0,0,0-2.707-.995l-1.981.54a2.5,2.5,0,0,0-1.576,1.3,2.475,2.475,0,0,0-1.523-.531h-5.009l-.015-.031a2.5,2.5,0,0,0-2.678-1.438l-2.22.361a2.5,2.5,0,0,0-1.7,1.108H159.3a2.489,2.489,0,0,0-2.161,1.265,2.5,2.5,0,0,0-2.315-1.565h-5.185a2.5,2.5,0,0,0-2.53-1.17l-2.261.361a2.5,2.5,0,0,0-1.476.809h-4.191a2.49,2.49,0,0,0-1.756.723,2.483,2.483,0,0,0-1.441-.463h-.5a2.5,2.5,0,0,0-2.2-1.32H131.3a2.5,2.5,0,0,0-1.94.923,2.5,2.5,0,0,0-1.941-.923h-1.98a2.5,2.5,0,0,0-2.205,1.32h-.476a2.494,2.494,0,0,0-.956.191c-.288-.243-.582-.484-.886-.722a2.5,2.5,0,0,0-3.265.163l-1.341,1.28A2.5,2.5,0,0,0,116.481,30c.145.115.27.224.407.337l-.736.7a2.5,2.5,0,0,0,.254,3.825,24.806,24.806,0,0,1,2.075,1.673,55.712,55.712,0,0,1-2.608,6.316,2.5,2.5,0,0,0,1.205,3.368l1.92.88a2.428,2.428,0,0,0,2.528-.276,2.479,2.479,0,0,0,1.635.623h1.86a2.49,2.49,0,0,0,1.838-.805,2.485,2.485,0,0,0,1.583.566h1.841a2.581,2.581,0,0,0,.485-.047A2.5,2.5,0,0,0,132,47.49h1.781a4.2,4.2,0,0,0,3.433-1.57l1.046.663a2.471,2.471,0,0,0,3.243-.52,5.163,5.163,0,0,0,3.436,1.148h4.881a5.77,5.77,0,0,0,3.12-.771c.08-.05.145-.114.219-.17a2.484,2.484,0,0,0,.851.379A2.5,2.5,0,0,0,156,46.258l.511-.359,1.058.951a2.5,2.5,0,0,0,1.671.64,2.458,2.458,0,0,0,.459-.042,2.5,2.5,0,0,0,.527-.163,2.5,2.5,0,0,0,1.354.4,2.437,2.437,0,0,0,.415-.034,31.377,31.377,0,0,0,6.5-1.774,28.934,28.934,0,0,0,6.417,1.774,2.486,2.486,0,0,0,2.229-.755,2.464,2.464,0,0,0,1.217.329h1.921a2.492,2.492,0,0,0,1.921-.9h1.071l.577.519a2.5,2.5,0,0,0,3.969-.874c.183-.427.343-.88.492-1.345h.943l.225.892A2.5,2.5,0,0,0,191.9,47.41h1.781a4.579,4.579,0,0,0,3.012-1.029,2.482,2.482,0,0,0,1.644.63h17.344a2.5,2.5,0,0,0,2.5-2.5v-1.9A2.5,2.5,0,0,0,215.724,40.114ZM176.1,35.886v.187c-.043-.062-.1-.116-.143-.173C176.005,35.9,176.054,35.894,176.1,35.886Zm-19.3-1.447a29.952,29.952,0,0,1-.356,4.456c-.056-.071-.12-.148-.178-.221V34.618A2.5,2.5,0,0,0,156.8,34.439Zm19.062,6.312v.024l-.018,0Zm22.3-.623V36.991c.066.02.13.048.2.063V40.11h-.021C198.28,40.11,198.223,40.124,198.164,40.128Z" fill="#fff"/>
+          <g id="Group_3897" data-name="Group 3897">
+            <path id="Path_8705" data-name="Path 8705" d="M133.784,26.507H131.8v1.32h-3.881v-1.32h-1.98v1.32h-2.681v1.86h2.681v2.721h3v.96h-5.281V44.95h1.86V41.97l.521.98a8.632,8.632,0,0,0,1.38-2.961,6.046,6.046,0,0,0,1.08,2.781l.44-.6v2.541h1.841V41.25l.68,1.3a8.009,8.009,0,0,0,1.24-2.7,5.7,5.7,0,0,0,1.041,2.58l.5-.68v.96a.478.478,0,0,1-.54.54l-1.681-.08.48,1.82h1.781a1.652,1.652,0,0,0,1.84-1.88V33.368h-5.341v-.96h3V29.687h2.7v-1.86h-2.7ZM128.942,41.03a8.9,8.9,0,0,1-.9-4.481h-2.08v1.38h.82a7.472,7.472,0,0,1-1.261,3.341v-6.1h3.421Zm5.3-5.861V40.79a7.805,7.805,0,0,1-.921-4.241h-2.06v1.38h.78a6.511,6.511,0,0,1-1.26,3.121V35.169Zm-2.441-4.4h-3.881V29.687H131.8Z" fill="#68737a"/>
+            <path id="Path_8706" data-name="Path 8706" d="M121.8,35.829l1.36-1.36a24.457,24.457,0,0,0-3.4-2.942l-1.38,1.321A20.889,20.889,0,0,1,121.8,35.829Z" fill="#68737a"/>
+            <path id="Path_8707" data-name="Path 8707" d="M118.62,43.95l1.921.881a75.245,75.245,0,0,0,2.76-7.2l-1.8-.72A57.752,57.752,0,0,1,118.62,43.95Z" fill="#68737a"/>
+            <path id="Path_8708" data-name="Path 8708" d="M121.761,31.128l1.34-1.36a23.625,23.625,0,0,0-3.221-3l-1.34,1.28A20.077,20.077,0,0,1,121.761,31.128Z" fill="#68737a"/>
+            <path id="Path_8709" data-name="Path 8709" d="M156.264,30.367h-4.581l.52-1.04h3.121v-1.76h-6.862c-.16-.44-.3-.84-.46-1.2l-2.26.361c.14.259.28.54.42.84h-6.481v1.76h3.06l.42,1.04H138.74v1.8h17.524Zm-6.762,0h-4.16l-.421-1.04h5.1Z" fill="#68737a"/>
+            <path id="Path_8710" data-name="Path 8710" d="M138.3,43.33l1.8,1.141a13.633,13.633,0,0,0,1.92-4.1l-2.041-.421A9.709,9.709,0,0,1,138.3,43.33Z" fill="#68737a"/>
+            <path id="Path_8711" data-name="Path 8711" d="M154.264,32.868H140.741v6.361h7.321l-1.74,1.081a18.182,18.182,0,0,1,1.8,2.16l1.741-1.22a15.213,15.213,0,0,0-1.741-2.021h6.142Zm-2.041,4.8h-9.442v-.88h9.442Zm0-2.36h-9.442v-.861h9.442Z" fill="#68737a"/>
+            <path id="Path_8712" data-name="Path 8712" d="M150.643,42.63a.918.918,0,0,1-.72.24h-3.881c-.6,0-.9-.26-.9-.74V40.05h-2.121v2.54c0,1.4.8,2.121,2.421,2.121h4.881a3.412,3.412,0,0,0,1.78-.381q.66-.419.9-2.52l-1.98-.661C150.963,41.97,150.843,42.47,150.643,42.63Z" fill="#68737a"/>
+            <path id="Path_8713" data-name="Path 8713" d="M152.623,40.67a29.1,29.1,0,0,1,2.441,3.541l1.74-1.221a29.3,29.3,0,0,0-2.5-3.381Z" fill="#68737a"/>
+            <path id="Path_8714" data-name="Path 8714" d="M174.543,39.029v-1.54H162.621V39.27H164a13.685,13.685,0,0,0,2.941,2.7,27.065,27.065,0,0,1-5.761,1.36l.9,1.86a27.464,27.464,0,0,0,6.941-2.04,24.787,24.787,0,0,0,6.8,2.04l.9-1.839a26.807,26.807,0,0,1-5.682-1.3A15.1,15.1,0,0,0,174.543,39.029Zm-5.66,2.08a11.381,11.381,0,0,1-2.6-1.839H171.7A16.776,16.776,0,0,1,168.883,41.109Z" fill="#68737a"/>
+            <path id="Path_8715" data-name="Path 8715" d="M161.881,33.428h2.841v3.081h8.5V33.428h2.961v-1.92h-2.961V30.247H171.2v1.261h-4.441v-1.24h-2.04v1.24h-2.841V29.827h14.3v-1.96H169.5c-.2-.56-.42-1.06-.619-1.5l-2.221.361a10.6,10.6,0,0,1,.66,1.14H159.8v6.5a22.55,22.55,0,0,1-1.64,9.2l1.58,1.42c1.361-2.68,2.061-6.22,2.141-10.622Zm4.881,0H171.2v1.36h-4.441Z" fill="#68737a"/>
+            <path id="Path_8716" data-name="Path 8716" d="M178.86,44.73h1.921v-.9h3.52V37.649H178.86Zm1.921-5.361H182.4v2.7h-1.619Z" fill="#68737a"/>
+            <path id="Path_8717" data-name="Path 8717" d="M185.361,37.509a17.657,17.657,0,0,1-.939,6.042l1.6,1.439a19.907,19.907,0,0,0,1.282-7.621V29.007h6.881v13.3c0,.52-.2.8-.6.8-.521,0-1.061-.04-1.661-.1l.48,1.9h1.781c1.32,0,1.98-.64,1.98-1.9V27.127h-10.8Z" fill="#68737a"/>
+            <path id="Path_8718" data-name="Path 8718" d="M188.082,36.789V42.13H193.4V36.789h-1.719v-1.28h2.04V33.788h-2.04v-1.38h2.04V30.647h-2.04v-1.14h-1.841v1.14H187.8v1.761h2.04v1.38H187.8v1.721h2.04v1.28Zm3.641,1.641v2.04h-1.94V38.43Z" fill="#68737a"/>
+            <path id="Path_8719" data-name="Path 8719" d="M184.6,28.848h-1.9a20.167,20.167,0,0,0-.78-2.381l-1.981.54c.281.6.54,1.221.781,1.841h-2.3v1.88H184.6Z" fill="#68737a"/>
+            <rect id="Rectangle_4163" data-name="Rectangle 4163" width="4.94" height="1.761" transform="translate(179.101 34.668)" fill="#68737a"/>
+            <rect id="Rectangle_4164" data-name="Rectangle 4164" width="4.94" height="1.761" transform="translate(179.101 31.888)" fill="#68737a"/>
+            <path id="Path_8720" data-name="Path 8720" d="M199.381,34.608a17.415,17.415,0,0,0,7.14-4.421v3.721h-5.16V41.57h12.363V33.908h-5.162v-2.1c2.3.74,4.561,1.6,6.782,2.56l1.36-1.52a81.431,81.431,0,0,0-8.142-2.481v-.34h7.282v-1.92h-7.282V26.486h-2.041v1.621H199.24v1.92h5.5a20.237,20.237,0,0,1-6.5,2.741Zm12.3,5.121H203.4v-1.08h8.283Zm0-3.98v1.14H203.4v-1.14Z" fill="#68737a"/>
+            <rect id="Rectangle_4165" data-name="Rectangle 4165" width="17.344" height="1.9" transform="translate(198.84 42.61)" fill="#68737a"/>
+          </g>
+        </g>
+        <g id="Component_1_1235" data-name="Component 1 1235">
+          <g id="Group_2063" data-name="Group 2063">
+            <g id="Rectangle_7" data-name="Rectangle 7">
+              <path id="Path_8721" data-name="Path 8721" d="M251,14.95h42a19,19,0,0,1,19,19h0a19,19,0,0,1-19,19H251a19,19,0,0,1-19-19h0A19,19,0,0,1,251,14.95Z" fill="#fff"/>
+              <path id="Path_8722" data-name="Path 8722" d="M293,52.95H251a19,19,0,0,1,0-38h42a19,19,0,0,1,0,38Zm-42-36a17,17,0,1,0,0,34h42a17,17,0,0,0,0-34Z" fill="#009cbd"/>
+            </g>
+            <g id="憛怠神" style="isolation: isolate">
+              <g id="Group_3898" data-name="Group 3898" style="isolation: isolate">
+                <path id="Path_8723" data-name="Path 8723" d="M263.922,25.787v-1.32h2.021v1.32h4.7v1.78h-4.7v.88h3.7v9.122h1.7V39.41H267.6a22.193,22.193,0,0,1,3.541,2.32l-1.261,1.46a22.288,22.288,0,0,0-3.8-2.76l1.1-1.02h-4.5l1.18,1.04a16.935,16.935,0,0,1-4.28,2.74l-1.221-1.56a17.169,17.169,0,0,0,3.9-2.22h-3.741v-1.4a42.137,42.137,0,0,1-5.3,1.679L252.7,37.67a21.682,21.682,0,0,0,2.22-.481V31.168h-2v-1.96h2v-4.6h2.021v4.6h1.821v1.96h-1.821v5.421c.6-.22,1.18-.46,1.741-.7v1.68h1.56V28.447h3.68v-.88h-4.7v-1.78Zm3.762,5.061v-.8H262.2v.8Zm0,2.22v-.8H262.2v.8Zm0,2.221v-.8H262.2v.8Zm0,2.28v-.86H262.2v.86Z" fill="#009cbd"/>
+                <path id="Path_8724" data-name="Path 8724" d="M284.062,41.17c.721.04,1.42.06,2.081.06a1.435,1.435,0,0,0,1.42-.66,8.53,8.53,0,0,0,.46-2.94h-10.7c-.341.26-.68.5-1,.72l1.421.379a20.725,20.725,0,0,1-1.24,3.942l-1.88-.681a15.5,15.5,0,0,0,1.3-3.381c-.46.281-.941.561-1.421.821l-1.26-1.54a15.1,15.1,0,0,0,4.281-2.8h-1.74v-6.3a18.043,18.043,0,0,0,4.961-.78l.88,1.54a22.576,22.576,0,0,1-3.981.82v.72h3.582v1.56h-3.582v.8h8.722v-.78h-3.3v-1.56h3.3v-.82h-3.6v-1.62h5.482v6.421H279.9c-.24.28-.48.56-.72.82h10.862c-.06,1.721-.16,3.1-.3,4.181a4.687,4.687,0,0,1-.84,2.221,2.732,2.732,0,0,1-1.861.66h-2.481Zm6.461-11.382h-1.96v-2.06h-13.1v2.08H273.5V25.887h7.222a11.351,11.351,0,0,0-.7-1.1l2.161-.36a14.107,14.107,0,0,1,.68,1.46h7.661ZM281.1,41.811l-1.86.439a30.087,30.087,0,0,0-.6-3.42l1.7-.381C280.622,39.49,280.861,40.61,281.1,41.811Zm3.121-.8-1.781.421a15.743,15.743,0,0,0-.84-2.822l1.68-.339A21.867,21.867,0,0,1,284.223,41.01Zm2.961-.86-1.58.68a17.587,17.587,0,0,0-.961-2.32l1.541-.641A17.166,17.166,0,0,1,287.184,40.15Z" fill="#009cbd"/>
+              </g>
+            </g>
+          </g>
+        </g>
+        <g id="Group_3900" data-name="Group 3900">
+          <g id="Group_3899" data-name="Group 3899">
+            <path id="Icon_awesome-hand-pointer-3" data-name="Icon awesome-hand-pointer-3" d="M318.93,44.572V49.62a2.115,2.115,0,0,1-.056.482l-1.683,7.148a2.1,2.1,0,0,1-2.048,1.622H304.2a2.1,2.1,0,0,1-1.7-.866L295.77,48.75a2.1,2.1,0,0,1,3.4-2.475l1.664,2.289V34.05a2.1,2.1,0,0,1,4.207,0V44.572h.429v-2.1a2.1,2.1,0,1,1,4.207,0v2.1h.421V43.309a2.1,2.1,0,0,1,4.207,0h0v1.262h.421a2.1,2.1,0,0,1,4.207,0Z" fill="#f8f9fa"/>
+            <path id="Path_8725" data-name="Path 8725" d="M315.145,59.872H304.2a3.11,3.11,0,0,1-2.509-1.278l-6.735-9.255a3.1,3.1,0,0,1,4.873-3.836V34.05a3.1,3.1,0,1,1,6.207,0v5.723a3.1,3.1,0,0,1,4.207,1.125,3.1,3.1,0,0,1,4.786,1.143,3.1,3.1,0,0,1,4.9,2.53l0,5.049a3.132,3.132,0,0,1-.082.711l-1.683,7.148A3.089,3.089,0,0,1,315.145,59.872ZM297.468,46.409a1.094,1.094,0,0,0-.647.212,1.106,1.106,0,0,0-.243,1.541l6.735,9.255a1.108,1.108,0,0,0,.892.455h10.939a1.1,1.1,0,0,0,1.074-.85l1.682-7.15a1.053,1.053,0,0,0,.03-.252V44.49a1.1,1.1,0,0,0-2.2.081v1H313.3V43.309a1.1,1.1,0,1,0-2.207,0v2.263h-2.421v-3.1a1.1,1.1,0,1,0-2.207,0v3.1h-2.429V34.05a1.1,1.1,0,1,0-2.207,0V51.641l-3.473-4.778a1.1,1.1,0,0,0-.719-.44A1.154,1.154,0,0,0,297.468,46.409Z" fill="#20375a"/>
+          </g>
+        </g>
+      </g>
+    </g>
+    <g id="Group_3106-2" data-name="Group 3106-2">
+      <path id="Path_8726" data-name="Path 8726" d="M215.724,40.11v-3.4a2.493,2.493,0,0,0,.983-.673l1.36-1.52a2.5,2.5,0,0,0-.361-3.666,2.514,2.514,0,0,0,.138-.822v-1.92a2.5,2.5,0,0,0-2.5-2.5H210.4a2.5,2.5,0,0,0-2.341-1.621h-2.041a2.5,2.5,0,0,0-2.34,1.621H198.74a2.5,2.5,0,0,0-.964.194,2.492,2.492,0,0,0-2.112-1.174h-10.8a2.493,2.493,0,0,0-1.383.417,2.5,2.5,0,0,0-2.714-.989l-1.981.54a2.5,2.5,0,0,0-1.576,1.3,2.475,2.475,0,0,0-1.523-.531h-5.009l-.015-.031a2.5,2.5,0,0,0-2.678-1.438l-2.22.361a2.5,2.5,0,0,0-1.7,1.108H159.3a2.489,2.489,0,0,0-2.161,1.265,2.5,2.5,0,0,0-2.315-1.565h-5.185a2.5,2.5,0,0,0-2.53-1.17l-2.261.361a2.5,2.5,0,0,0-1.476.809h-4.191a2.49,2.49,0,0,0-1.756.723,2.483,2.483,0,0,0-1.441-.463h-.5a2.5,2.5,0,0,0-2.2-1.32H131.3a2.5,2.5,0,0,0-1.94.923,2.5,2.5,0,0,0-1.941-.923h-1.98a2.5,2.5,0,0,0-2.205,1.32h-.476a2.506,2.506,0,0,0-.955.189q-.431-.365-.887-.72a2.5,2.5,0,0,0-3.265.163l-1.341,1.28A2.5,2.5,0,0,0,116.481,30q.211.17.411.333l-.74.707a2.5,2.5,0,0,0,.254,3.825,25.583,25.583,0,0,1,2.082,1.669,55.715,55.715,0,0,1-2.615,6.32,2.5,2.5,0,0,0,1.205,3.368l1.92.88a2.5,2.5,0,0,0,1.924.067,2.433,2.433,0,0,0,.6-.328,2.493,2.493,0,0,0,1.635.608h1.86a2.49,2.49,0,0,0,1.838-.805,2.485,2.485,0,0,0,1.583.566h1.841a2.581,2.581,0,0,0,.485-.047A2.5,2.5,0,0,0,132,47.49h1.781a4.2,4.2,0,0,0,3.433-1.57l1.046.663a2.5,2.5,0,0,0,3.246-.5,5.192,5.192,0,0,0,3.433,1.125h4.881a5.77,5.77,0,0,0,3.12-.771c.078-.048.153-.1.224-.155A2.507,2.507,0,0,0,156,46.258l.511-.359,1.058.951a2.5,2.5,0,0,0,2.13.6,2.54,2.54,0,0,0,.524-.159,2.49,2.49,0,0,0,1.357.4,2.437,2.437,0,0,0,.415-.034,31.377,31.377,0,0,0,6.5-1.774,28.949,28.949,0,0,0,6.417,1.774,2.486,2.486,0,0,0,2.229-.755,2.464,2.464,0,0,0,1.217.329h1.921a2.492,2.492,0,0,0,1.921-.9h1.071l.577.519a2.5,2.5,0,0,0,3.969-.874q.276-.643.5-1.345h.936l.225.892A2.5,2.5,0,0,0,191.9,47.41h1.781a4.579,4.579,0,0,0,3.012-1.029,2.482,2.482,0,0,0,1.644.63h17.344a2.5,2.5,0,0,0,2.5-2.5v-1.9A2.5,2.5,0,0,0,215.724,40.11Zm-39.864.665-.018,0,.018-.021Zm.241-4.691c-.04-.058-.075-.119-.12-.174.041-.005.079-.019.12-.025Zm-19.837-1.466a2.438,2.438,0,0,0,.534-.182,29.86,29.86,0,0,1-.356,4.459c-.061-.077-.115-.148-.178-.227Zm41.9,5.51V36.991c.066.02.13.048.2.063V40.11h-.021C198.28,40.11,198.223,40.124,198.164,40.128Z" fill="#fff"/>
+      <g id="皛踵�漲隤踵-4" style="isolation: isolate">
+        <g id="Group_3901" data-name="Group 3901" style="isolation: isolate">
+          <path id="Path_8727" data-name="Path 8727" d="M123.161,34.469l-1.36,1.36a20.889,20.889,0,0,0-3.421-2.981l1.38-1.321A24.457,24.457,0,0,1,123.161,34.469Zm-.06-4.7-1.34,1.36a20.077,20.077,0,0,0-3.221-3.081l1.34-1.28A23.625,23.625,0,0,1,123.1,29.768Zm.2,7.861a75.245,75.245,0,0,1-2.76,7.2l-1.921-.881a57.752,57.752,0,0,0,2.881-7.041Zm2.641-9.8v-1.32h1.98v1.32H131.8v-1.32h1.981v1.32h2.7v1.861h-2.7v2.72h-3v.96h5.341V43.11a1.652,1.652,0,0,1-1.84,1.88H132.5l-.48-1.82,1.681.08a.478.478,0,0,0,.54-.54v-.96l-.5.68a5.7,5.7,0,0,1-1.041-2.58,8.009,8.009,0,0,1-1.24,2.7l-.68-1.3v3.461h-1.841V42.17l-.44.6a6.055,6.055,0,0,1-1.08-2.782,8.632,8.632,0,0,1-1.38,2.961l-.521-.98v2.98h-1.86V33.368h5.281v-.96h-3v-2.72h-2.681V27.827Zm.84,10.1h-.82v-1.38h2.08a8.9,8.9,0,0,0,.9,4.481V35.169h-3.421v6.1A7.472,7.472,0,0,0,126.782,37.929Zm1.14-7.161H131.8v-1.08h-3.881Zm4.121,7.161h-.78v-1.38h2.06a7.805,7.805,0,0,0,.921,4.241V35.169h-3.461V41.05A6.511,6.511,0,0,0,132.043,37.929Z" fill="#68737a"/>
+          <path id="Path_8728" data-name="Path 8728" d="M142.021,40.37a13.633,13.633,0,0,1-1.92,4.1l-1.8-1.141a9.7,9.7,0,0,0,1.68-3.381Zm-2.34-11.043v-1.76h6.481c-.14-.3-.28-.581-.42-.84l2.26-.361c.16.361.3.761.46,1.2h6.862v1.76H152.2l-.52,1.04h4.581v1.8H138.74v-1.8h4.421l-.42-1.04Zm14.583,3.541v6.361h-6.142a15.213,15.213,0,0,1,1.741,2.021l-1.741,1.22a18.182,18.182,0,0,0-1.8-2.16l1.74-1.081h-7.321V32.868Zm-2.041,2.441v-.861h-9.442v.861Zm0,1.48h-9.442v.88h9.442Zm-6.781,7.922c-1.621,0-2.421-.721-2.421-2.121V40.05h2.121v2.08c0,.48.3.74.9.74h3.881a.918.918,0,0,0,.72-.24c.2-.16.32-.66.38-1.481l1.98.661q-.24,2.1-.9,2.52a3.412,3.412,0,0,1-1.78.381Zm4.06-14.344.52-1.04h-5.1l.421,1.04Zm7.3,12.623-1.74,1.221a29.1,29.1,0,0,0-2.441-3.541l1.681-1.061A29.3,29.3,0,0,1,156.8,42.99Z" fill="#68737a"/>
+          <path id="Path_8729" data-name="Path 8729" d="M161.881,34.368c-.08,4.4-.78,7.942-2.141,10.622l-1.58-1.42a22.55,22.55,0,0,0,1.64-9.2v-6.5h7.522a10.6,10.6,0,0,0-.66-1.14l2.221-.361c.2.441.42.941.619,1.5h6.682v1.96h-14.3v1.681h2.841v-1.24h2.04v1.24H171.2V30.247h2.02v1.261h2.961v1.92h-2.961v3.081h-8.5V33.428h-2.841Zm12.662,3.121v1.54a15.1,15.1,0,0,1-3.5,3.021,26.807,26.807,0,0,0,5.682,1.3l-.9,1.839a24.787,24.787,0,0,1-6.8-2.04,27.464,27.464,0,0,1-6.941,2.04l-.9-1.86a27.065,27.065,0,0,0,5.761-1.36A13.685,13.685,0,0,1,164,39.27h-1.38V37.489Zm-5.66,3.62a16.776,16.776,0,0,0,2.82-1.839h-5.421A11.381,11.381,0,0,0,168.883,41.109Zm-2.121-6.321H171.2v-1.36h-4.441Z" fill="#68737a"/>
+          <path id="Path_8730" data-name="Path 8730" d="M180.721,28.848c-.241-.62-.5-1.242-.781-1.841l1.981-.54a20.167,20.167,0,0,1,.78,2.381h1.9v1.88H178.42v-1.88ZM184.3,43.83h-3.52v.9H178.86V37.649H184.3Zm-.26-11.942v1.76H179.1v-1.76Zm0,2.78v1.761H179.1V34.668Zm-1.641,7.4v-2.7h-1.619v2.7Zm13.764.94c0,1.261-.66,1.9-1.98,1.9H192.4l-.48-1.9c.6.06,1.14.1,1.661.1.4,0,.6-.28.6-.8v-13.3H187.3v8.362a19.907,19.907,0,0,1-1.282,7.621l-1.6-1.439a17.657,17.657,0,0,0,.939-6.042V27.127h10.8Zm-6.321-6.221v-1.28H187.8V33.788h2.04v-1.38H187.8V30.647h2.04v-1.14h1.841v1.14h2.04v1.761h-2.04v1.38h2.04v1.721h-2.04v1.28H193.4V42.13h-5.321V36.789Zm1.88,1.641h-1.94v2.04h1.94Z" fill="#68737a"/>
+          <path id="Path_8731" data-name="Path 8731" d="M206.521,33.908v-3.72a17.425,17.425,0,0,1-7.14,4.42l-1.141-1.84a20.237,20.237,0,0,0,6.5-2.741h-5.5v-1.92h7.281V26.486h2.041v1.621h7.282v1.92h-7.282v.34a81.431,81.431,0,0,1,8.142,2.481l-1.36,1.52c-2.221-.96-4.481-1.82-6.782-2.56v2.1h5.162V41.57H201.361V33.908Zm9.663,8.7v1.9H198.84v-1.9Zm-4.5-5.721v-1.14H203.4v1.14Zm0,1.76H203.4v1.08h8.283Z" fill="#68737a"/>
+        </g>
+      </g>
+    </g>
+    <g id="Component_1_1236" data-name="Component 1 1236">
+      <g id="Group_2063-2" data-name="Group 2063-2">
+        <g id="Rectangle_7-2" data-name="Rectangle 7-2">
+          <path id="Path_8732" data-name="Path 8732" d="M251,14.95h42a19,19,0,0,1,19,19h0a19,19,0,0,1-19,19H251a19,19,0,0,1-19-19h0A19,19,0,0,1,251,14.95Z" fill="#fff"/>
+          <path id="Path_8733" data-name="Path 8733" d="M293,52.95H251a19,19,0,0,1,0-38h42a19,19,0,0,1,0,38Zm-42-36a17,17,0,1,0,0,34h42a17,17,0,0,0,0-34Z" fill="#009cbd"/>
+        </g>
+        <g id="憛怠神-2" style="isolation: isolate">
+          <g id="Group_3902" data-name="Group 3902" style="isolation: isolate">
+            <path id="Path_8734" data-name="Path 8734" d="M263.922,25.787v-1.32h2.021v1.32h4.7v1.78h-4.7v.88h3.7v9.122h1.7V39.41H267.6a22.193,22.193,0,0,1,3.541,2.32l-1.261,1.46a22.288,22.288,0,0,0-3.8-2.76l1.1-1.02h-4.5l1.18,1.04a16.935,16.935,0,0,1-4.28,2.74l-1.221-1.56a17.169,17.169,0,0,0,3.9-2.22h-3.741v-1.4a42.137,42.137,0,0,1-5.3,1.679L252.7,37.67a21.682,21.682,0,0,0,2.22-.481V31.168h-2v-1.96h2v-4.6h2.021v4.6h1.821v1.96h-1.821v5.421c.6-.22,1.18-.46,1.741-.7v1.68h1.56V28.447h3.68v-.88h-4.7v-1.78Zm3.762,5.061v-.8H262.2v.8Zm0,2.22v-.8H262.2v.8Zm0,2.221v-.8H262.2v.8Zm0,2.28v-.86H262.2v.86Z" fill="#009cbd"/>
+            <path id="Path_8735" data-name="Path 8735" d="M284.062,41.17c.721.04,1.42.06,2.081.06a1.435,1.435,0,0,0,1.42-.66,8.53,8.53,0,0,0,.46-2.94h-10.7c-.341.26-.68.5-1,.72l1.421.379a20.725,20.725,0,0,1-1.24,3.942l-1.88-.681a15.5,15.5,0,0,0,1.3-3.381c-.46.281-.941.561-1.421.821l-1.26-1.54a15.1,15.1,0,0,0,4.281-2.8h-1.74v-6.3a18.043,18.043,0,0,0,4.961-.78l.88,1.54a22.576,22.576,0,0,1-3.981.82v.72h3.582v1.56h-3.582v.8h8.722v-.78h-3.3v-1.56h3.3v-.82h-3.6v-1.62h5.482v6.421H279.9c-.24.28-.48.56-.72.82h10.862c-.06,1.721-.16,3.1-.3,4.181a4.687,4.687,0,0,1-.84,2.221,2.732,2.732,0,0,1-1.861.66h-2.481Zm6.461-11.382h-1.96v-2.06h-13.1v2.08H273.5V25.887h7.222a11.351,11.351,0,0,0-.7-1.1l2.161-.36a14.107,14.107,0,0,1,.68,1.46h7.661ZM281.1,41.811l-1.86.439a30.087,30.087,0,0,0-.6-3.42l1.7-.381C280.622,39.49,280.861,40.61,281.1,41.811Zm3.121-.8-1.781.421a15.743,15.743,0,0,0-.84-2.822l1.68-.339A21.867,21.867,0,0,1,284.223,41.01Zm2.961-.86-1.58.68a17.587,17.587,0,0,0-.961-2.32l1.541-.641A17.166,17.166,0,0,1,287.184,40.15Z" fill="#009cbd"/>
+          </g>
+        </g>
+      </g>
+    </g>
+    <g id="Group_3903" data-name="Group 3903">
+      <path id="Path_8736" data-name="Path 8736" d="M316.829,43.468a1.1,1.1,0,0,0-1.1,1.1v1H313.3V43.309a1.1,1.1,0,1,0-2.207,0v2.263h-2.421v-3.1a1.1,1.1,0,1,0-2.207,0v3.1h-2.429V34.05a1.1,1.1,0,1,0-2.207,0V51.641l-3.473-4.778a1.1,1.1,0,0,0-.719-.44,1.154,1.154,0,0,0-.174-.014,1.094,1.094,0,0,0-.647.212,1.106,1.106,0,0,0-.243,1.541l6.735,9.255a1.108,1.108,0,0,0,.892.455h10.939a1.1,1.1,0,0,0,1.074-.85l1.682-7.15a1.053,1.053,0,0,0,.03-.252V44.49A1.106,1.106,0,0,0,316.829,43.468Z" fill="#f8f9fa"/>
+      <path id="Path_8737" data-name="Path 8737" d="M316.829,41.468a3.092,3.092,0,0,0-1.8.573,3.1,3.1,0,0,0-4.786-1.143,3.1,3.1,0,0,0-4.207-1.125V34.05a3.1,3.1,0,1,0-6.207,0V45.5a3.1,3.1,0,0,0-4.873,3.836l6.735,9.255a3.11,3.11,0,0,0,2.509,1.278h10.94a3.089,3.089,0,0,0,3.02-2.393l1.683-7.148a3.132,3.132,0,0,0,.082-.711l0-5.049A3.107,3.107,0,0,0,316.829,41.468Zm-1.685,16.4H304.2a1.108,1.108,0,0,1-.892-.455l-6.735-9.255a1.106,1.106,0,0,1,.243-1.541,1.094,1.094,0,0,1,.647-.212,1.154,1.154,0,0,1,.174.014,1.1,1.1,0,0,1,.719.44l3.473,4.778V34.05a1.1,1.1,0,1,1,2.207,0V45.572h2.429v-3.1a1.1,1.1,0,1,1,2.207,0v3.1H311.1V43.309a1.1,1.1,0,1,1,2.207,0v2.262h2.421v-1a1.1,1.1,0,0,1,2.2-.081v5.13a1.053,1.053,0,0,1-.03.252l-1.682,7.15A1.1,1.1,0,0,1,315.144,57.872Z" fill="#20375a"/>
+    </g>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/satisfaction/satisfactionBtn_s_web.svg b/PAMapp/assets/images/satisfaction/satisfactionBtn_s_web.svg
new file mode 100644
index 0000000..5c12d34
--- /dev/null
+++ b/PAMapp/assets/images/satisfaction/satisfactionBtn_s_web.svg
@@ -0,0 +1,274 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="700" height="110" viewBox="0 0 700 110">
+  <defs>
+    <clipPath id="clip-path">
+      <path id="Path_7862" data-name="Path 7862" d="M822.069-1297.8v-91.667c0-5.062,4.677-9.166,10.448-9.166h679.1c5.77,0,10.448,4.1,10.448,9.166v91.667c0,5.062-4.678,9.167-10.448,9.167h-679.1C826.746-1288.632,822.069-1292.737,822.069-1297.8Z" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-2">
+      <rect id="Rectangle_3891" data-name="Rectangle 3891" width="3.112" height="8.732" transform="translate(1390.038 -1320.255) rotate(-76.982)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-4">
+      <rect id="Rectangle_3893" data-name="Rectangle 3893" width="4.874" height="2.825" transform="matrix(0.174, -0.985, 0.985, 0.174, 1391.363, -1326.489)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-6">
+      <rect id="Rectangle_3895" data-name="Rectangle 3895" width="8.476" height="3.02" transform="translate(927.453 -1310.899) rotate(-10.018)" fill="none"/>
+    </clipPath>
+    <clipPath id="clip-path-8">
+      <rect id="Rectangle_3897" data-name="Rectangle 3897" width="4.036" height="4.731" transform="translate(928.187 -1320.171) rotate(-10.018)" fill="none"/>
+    </clipPath>
+  </defs>
+  <g id="satisfaction_s_web" data-name="satisfaction �� s �� web" transform="translate(-822.069 1398.632)">
+    <g id="Group_3243" data-name="Group 3243" clip-path="url(#clip-path)">
+      <g id="Group_3104" data-name="Group 3104">
+        <g id="Group_3103" data-name="Group 3103">
+          <rect id="Rectangle_3818" data-name="Rectangle 3818" width="710.448" height="140.522" transform="translate(817.89 -1402.812)" fill="#8db9ca"/>
+          <path id="Path_7126" data-name="Path 7126" d="M564.595-1350.771s-74.6,73.017,18.44,116.651c11.3,5.3,24.977,8.966,49.851-2.645s56.626,4.843,74.561,28.884,53.215,106.964,166.9,124.955,163.858-70.936,160.494-180.538S698.3-1435.787,564.595-1350.771Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_7126-2" data-name="Path 7126-2" d="M1679.807-1350.669s61.159-59.866-15.12-95.641c-9.265-4.346-20.478-7.353-40.872,2.167s-46.423-3.97-61.131-23.681-43.63-87.7-136.837-102.446-134.348,58.16-131.589,148.028S1570.183-1280.966,1679.807-1350.669Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
+          <path id="Path_7834" data-name="Path 7834" d="M1375.234-1357.222a.717.717,0,0,1-.146-.016.668.668,0,0,1-.506-.5l-.662-2.66-2.573-.975a.672.672,0,0,1-.386-.867.678.678,0,0,1,.271-.329l2.339-1.448.131-2.745a.672.672,0,0,1,.7-.639.671.671,0,0,1,.4.158l2.089,1.776,2.654-.721a.661.661,0,0,1,.677.209.666.666,0,0,1,.121.7l-1.045,2.545,1.509,2.3a.672.672,0,0,1,.017.708.66.66,0,0,1-.627.326l-2.744-.209-1.722,2.144A.661.661,0,0,1,1375.234-1357.222Zm-2.8-4.864,2.046.775a.67.67,0,0,1,.418.47l.52,2.121,1.371-1.705a.667.667,0,0,1,.57-.249l2.182.161-1.2-1.83a.671.671,0,0,1-.058-.627l.836-2.025-2.111.577a.677.677,0,0,1-.61-.136l-1.672-1.412-.1,2.183a.677.677,0,0,1-.318.539Zm5.165,2.319,2.694-.683-6.415-.14,5.332-2.319-5.466-1.212,1.009-2.6" fill="#8db9ca"/>
+          <path id="Path_7835" data-name="Path 7835" d="M853.492-1303.236a.8.8,0,0,1-.177-.019.809.809,0,0,1-.617-.6l-.8-3.257-3.135-1.189a.817.817,0,0,1-.479-1.051.813.813,0,0,1,.339-.412l2.853-1.766.161-3.343a.816.816,0,0,1,.855-.777.813.813,0,0,1,.488.192l2.562,2.167,3.237-.882a.817.817,0,0,1,1,.574.817.817,0,0,1-.031.521l-1.27,3.107,1.839,2.806a.813.813,0,0,1,.019.861.8.8,0,0,1-.765.4l-3.344-.249-2.089,2.616A.815.815,0,0,1,853.492-1303.236Zm-3.412-5.932,2.495.944a.818.818,0,0,1,.5.575l.627,2.587,1.672-2.079a.8.8,0,0,1,.7-.3l2.66.2-1.463-2.232a.809.809,0,0,1-.073-.756l1.009-2.47-2.574.7a.815.815,0,0,1-.742-.165l-2.037-1.722-.13,2.664a.819.819,0,0,1-.386.657Zm6.3,2.823,3.285-.836-7.826-.171,6.505-2.83.769-2.77-6.958-1.543.752-.328" fill="#8db9ca"/>
+          <g id="Group_1862" data-name="Group 1862">
+            <g id="Ellipse_525" data-name="Ellipse 525">
+              <path id="Path_7838" data-name="Path 7838" d="M1012.775-1280.243q-.725.146-1.478.222a14.738,14.738,0,0,1-16.11-13.223,14.738,14.738,0,0,1,13.223-16.111,14.737,14.737,0,0,1,16.11,13.223A14.736,14.736,0,0,1,1012.775-1280.243Zm-5.63-27.657a13.491,13.491,0,0,0-10.491,15.935,13.491,13.491,0,0,0,15.935,10.491,13.492,13.492,0,0,0,10.491-15.935,13.491,13.491,0,0,0-14.57-10.7h0c-.464.05-.918.119-1.367.209Z" fill="#8db9ca"/>
+            </g>
+            <g id="Group_1781" data-name="Group 1781">
+              <path id="Path_6910" data-name="Path 6910" d="M1004.951-1299.072a1.253,1.253,0,0,1-1.15,1.35,1.253,1.253,0,0,1-1.349-1.15,1.254,1.254,0,0,1,1.143-1.349h0a1.255,1.255,0,0,1,1.354,1.145v0h0" fill="#8db9ca"/>
+              <path id="Path_6911" data-name="Path 6911" d="M1017.106-1300.064a1.254,1.254,0,0,1-1.15,1.35,1.254,1.254,0,0,1-1.349-1.15,1.253,1.253,0,0,1,1.143-1.349h0a1.254,1.254,0,0,1,1.354,1.145v0h0" fill="#8db9ca"/>
+              <path id="Path_7839" data-name="Path 7839" d="M1011.174-1285.439a3.272,3.272,0,0,1-.418.06,3.97,3.97,0,0,1-4.135-2.956.319.319,0,0,1,.237-.382.319.319,0,0,1,.382.238.366.366,0,0,1,.008.081,3.382,3.382,0,0,0,3.45,2.386,4.212,4.212,0,0,0,3.282-2.848.321.321,0,0,1,.385-.242.321.321,0,0,1,.242.384h0A4.859,4.859,0,0,1,1011.174-1285.439Z" fill="#8db9ca"/>
+            </g>
+          </g>
+          <g id="Group_1862-2" data-name="Group 1862-2">
+            <g id="Ellipse_525-2" data-name="Ellipse 525-2">
+              <path id="Path_7840" data-name="Path 7840" d="M1483.558-1340.961q-.574-.193-1.14-.447a12.092,12.092,0,0,1-6.043-16,12.093,12.093,0,0,1,16-6.043,12.093,12.093,0,0,1,6.042,16A12.091,12.091,0,0,1,1483.558-1340.961Zm7.328-21.94a11.042,11.042,0,0,0-14.022,6.875,11.043,11.043,0,0,0,6.875,14.023,11.044,11.044,0,0,0,14.023-6.875,11.043,11.043,0,0,0-5.831-13.6h0a8.252,8.252,0,0,0-1.045-.435Z" fill="#8db9ca"/>
+            </g>
+            <g id="Group_1781-2" data-name="Group 1781-2">
+              <path id="Path_6910-2" data-name="Path 6910-2" d="M1485.711-1357.546a1.03,1.03,0,0,1-1.373.49,1.03,1.03,0,0,1-.489-1.372,1.029,1.029,0,0,1,1.371-.49h0a1.028,1.028,0,0,1,.492,1.368v0h0" fill="#8db9ca"/>
+              <path id="Path_6911-2" data-name="Path 6911-2" d="M1494.754-1353.272a1.032,1.032,0,0,1-1.373.494,1.033,1.033,0,0,1-.495-1.373,1.033,1.033,0,0,1,1.374-.495h0a1.029,1.029,0,0,1,.491,1.37h0" fill="#8db9ca"/>
+              <path id="Path_7841" data-name="Path 7841" d="M1484.551-1345.313a3.2,3.2,0,0,1-.328-.132,3.252,3.252,0,0,1-1.726-3.8.256.256,0,0,1,.338-.132l.007,0a.261.261,0,0,1,.131.345,2.774,2.774,0,0,0,1.463,3.107,3.452,3.452,0,0,0,3.5-.679.261.261,0,0,1,.37-.015.262.262,0,0,1,.014.37A3.987,3.987,0,0,1,1484.551-1345.313Z" fill="#8db9ca"/>
+            </g>
+          </g>
+          <path id="Path_7842" data-name="Path 7842" d="M866.61-1336.736a1.309,1.309,0,0,1-.952-.418l-4.18-4.306c-.046-.048-.089-.094-.129-.144a3.739,3.739,0,0,1,.382-5.268,3.6,3.6,0,0,1,4.869.3,3.59,3.59,0,0,1,4.852-.31h.012l.149.136a3.733,3.733,0,0,1,.112,5.277h0l-4.227,4.361A1.3,1.3,0,0,1,866.61-1336.736Zm-2.6-9.662a2.3,2.3,0,0,0-1.45.514,2.461,2.461,0,0,0-.236,3.458.926.926,0,0,0,.079.088l4.179,4.313h.061l4.179-4.311a2.462,2.462,0,0,0-.077-3.475l-.084-.077a2.321,2.321,0,0,0-3.151.234l-.894.924-.882-.911a2.335,2.335,0,0,0-1.724-.757Z" fill="#8db9ca"/>
+          <g id="Icon_feather-mail" data-name="Icon feather-mail">
+            <path id="Path_7860" data-name="Path 7860" d="M1424.083-1363.047a2.671,2.671,0,0,1-2.474-1.66l-4.818-11.893a2.674,2.674,0,0,1,1.463-3.465h0l15.857-6.425a2.674,2.674,0,0,1,3.465,1.463l4.818,11.893a2.677,2.677,0,0,1-1.462,3.467l-15.858,6.423A2.671,2.671,0,0,1,1424.083-1363.047Zm-5.432-16.05a1.628,1.628,0,0,0-.893,2.106l4.819,11.892a1.629,1.629,0,0,0,2.106.892l15.856-6.423a1.628,1.628,0,0,0,.89-2.109l-4.806-11.891a1.627,1.627,0,0,0-2.106-.891l-15.856,6.424Z" fill="#8db9ca"/>
+            <path id="Path_7861" data-name="Path 7861" d="M1430-1373.349a.578.578,0,0,1-.117-.012l-12.723-2.926a.522.522,0,0,1-.371-.639.522.522,0,0,1,.6-.378l12.366,2.839,6.9-10.644a.523.523,0,0,1,.716-.184.523.523,0,0,1,.184.715l-.024.037-7.1,10.952A.52.52,0,0,1,1430-1373.349Z" fill="#8db9ca"/>
+          </g>
+          <rect id="Rectangle_3828" data-name="Rectangle 3828" width="391.791" height="125.373" transform="translate(1019.009 -1397.588)" fill="none"/>
+          <g id="Group_3200" data-name="Group 3200">
+            <path id="Path_7909" data-name="Path 7909" d="M1321.587-1332.958a1.551,1.551,0,0,1-.728-.175l-12.087-6.353-12.088,6.353a1.559,1.559,0,0,1-2.109-.642,1.557,1.557,0,0,1-.161-1l2.308-13.46-9.776-9.532a1.561,1.561,0,0,1-.027-2.207,1.557,1.557,0,0,1,.9-.456l13.514-1.964,6.044-12.245a1.561,1.561,0,0,1,2.093-.7,1.565,1.565,0,0,1,.7.7h0l6.051,12.23,13.514,1.964a1.56,1.56,0,0,1,1.328,1.762,1.561,1.561,0,0,1-.455.9l-9.777,9.532,2.308,13.46a1.571,1.571,0,0,1-1.3,1.805,1.627,1.627,0,0,1-.241.021Zm-33.15-25.806,9.581,9.338a1.556,1.556,0,0,1,.448,1.383l-2.261,13.185,11.844-6.225a1.549,1.549,0,0,1,1.452,0l11.84,6.225-2.269-13.185a1.57,1.57,0,0,1,.448-1.381l9.581-9.339-13.238-1.92a1.558,1.558,0,0,1-1.175-.855l-5.92-12-5.916,12a1.562,1.562,0,0,1-1.175.854Z" fill="#f5a817"/>
+          </g>
+          <g id="Group_1544" data-name="Group 1544">
+            <path id="Path_7916" data-name="Path 7916" d="M1357.664-1333.978a16.633,16.633,0,0,1-3.475-8.129,26.832,26.832,0,0,1,1.236-9.013s1.232-2.281,1.843-.053-.183,5.789,1.072,7.8,1.389,3.251,2.539,1.579,1.656-3.14,2.775-2.368-.182,5.789-1.072,7.811-.03,2.445.241,4.931,2.25,19.287.935,22.168c0,0,10.3,3.535,13.741,5.232s-3.118,11.831-5.263,11.842-19.041-11.483-19.229-14.571S1356.491-1329.854,1357.664-1333.978Z" fill="#fceada"/>
+            <path id="Path_6890" data-name="Path 6890" d="M1380.931-1290.512c4.192,1.677,19.28,1.257,24.31-5.449l4.19-8.383s-4.19.839-4.19-3.354a5.975,5.975,0,0,1,1.282-3.575c7.414-1.936,13.577-8.552,15.166-17.28,2.106-11.615-4.665-22.577-15.143-24.485s-20.683,5.962-22.8,17.576c-1.641,9.01,2.073,17.631,8.711,21.928.131,2.3-.228,6.323-3.994,8.351-5.447,2.934-3.771,2.514-5.867,2.934S1376.74-1292.188,1380.931-1290.512Z" fill="#fceada"/>
+            <path id="Path_6891" data-name="Path 6891" d="M1406.7-1351.081c5.449.42,4.191,7.963,4.191,9.64s.42,3.354,3.354,4.6,3.773,2.514,5.029,5.449.838,7.966-1.258,9.641-3.772,3.772-2.1,7.963a5.736,5.736,0,0,0,7.125,3.354c1.258-.419,1.677-.837,2.935.42s3.772,3.772,7.963-1.258-.837-10.058-.837-10.058c1.258,0,6.287,0,5.867-6.289s-5.449-7.544-8.383-9.221a8.814,8.814,0,0,1-3.772-5.03c-2.934-7.963-4.606-10.478-4.606-10.478-6.286-8.8-16.764-5.868-16.764-5.868-.838-1.675-3.771-1.675-3.771-1.675-9.64-1.677-13.414,6.71-16.347,8.8a7.17,7.17,0,0,0-2.513,7.544c.419,2.1-4.193,5.87-6.71,6.288s-2.933,5.448.419,10.06,7.125,3.353,7.125,3.353c1.677.42,0-2.514,0-2.514a14.159,14.159,0,0,1,3.354-12.994,17.683,17.683,0,0,0,5.865-7.96c2.1-5.449,10.479-3.773,10.479-3.773A4.271,4.271,0,0,0,1406.7-1351.081Z" fill="#221e1f"/>
+            <path id="Path_6892" data-name="Path 6892" d="M1406.289-1302.037a21.08,21.08,0,0,1-4.6,6.711c-3.353,3.352-12.9,1.209-15.013.3-1.927-.827.492-9.661.91-10.921s-3.026-2.124-4.55-2.124a21.541,21.541,0,0,0-4.549.606c-4.95,1.073-1.7,4.153-2.122,6.369a11.9,11.9,0,0,1-3.027,6.368c-1.257,1.258-2.53,1.785-2.728,2.729-1.214,5.762,5.761,7.278,5.761,7.278-.835,1.983-.218,10.044.3,12.13.909,3.639,4.82,17.8,3.033,24.261a90.794,90.794,0,0,0-2.426,34.573c2.012,15.423,4.548,31.236,4.548,31.236l42.764,1.516,2.124-15.77a66.637,66.637,0,0,0-2.731-40.637c-3.772-10.061-13.343-16.376-13.646-18.2a16.794,16.794,0,0,1-.3-6.974c.489-2.94.909-6.974,1.819-10.613,1.675,3.354,16.68-4.852,16.68-4.852,6.71-9.221-5.905-19.7-7.582-23.047s-8.575-4.086-9.833-3.666a15.571,15.571,0,0,1-3.7.412C1406.844-1304.149,1406.289-1302.037,1406.289-1302.037Z" fill="#eb1b2e"/>
+            <path id="Path_7917" data-name="Path 7917" d="M1415.983-1272.679s8.439-3.1,10.263-4.309c0,0,1.82,7.278.607,10.921s-3.948,13.948-6.672,20.016a33.908,33.908,0,0,0-2.275,6.824c-.3,2.426-2.729,11.221-5.155,13.041s-3.947,3.336-6.671,3.336-4.853,0-3.64-1.516a22.626,22.626,0,0,0,2.729-5.458s-1.819,1.213-2.729.606.607-2.729,1.516-3.947a34.349,34.349,0,0,0,3.027-3.947,4.162,4.162,0,0,1,3.335-2.425c1.82-.3,1.82-5.762,2.123-8.189.31-2.481.91-13.647,2.122-17.9A25.109,25.109,0,0,0,1415.983-1272.679Z" fill="#fceada"/>
+            <ellipse id="Ellipse_493" data-name="Ellipse 493" cx="1.676" cy="1.258" rx="1.676" ry="1.258" transform="translate(1393.411 -1298.603) rotate(-69.571)" fill="#eb1b2e"/>
+            <path id="Path_6894" data-name="Path 6894" d="M1395.132-1301.2c-3.539-.843-5.111-4.984-5.177-5.16a.211.211,0,0,1,.124-.271.212.212,0,0,1,.271.125h0c.01.04,1.556,4.108,4.876,4.9,4.317,1.028,8.421-2.281,10.491-4.342a.209.209,0,0,1,.3,0,.209.209,0,0,1,0,.3c-1.842,1.842-5.292,4.661-9.127,4.661A7.574,7.574,0,0,1,1395.132-1301.2Z" fill="#68737a"/>
+            <g id="Group_1783" data-name="Group 1783">
+              <path id="Path_7918" data-name="Path 7918" d="M1405.341-1337a.329.329,0,0,1-.329-.329.329.329,0,0,1,.182-.295,6.214,6.214,0,0,1,4.714-.246.33.33,0,0,1,.194.423.328.328,0,0,1-.423.194,5.558,5.558,0,0,0-4.194.219A.328.328,0,0,1,1405.341-1337Z" fill="#221e1f"/>
+              <path id="Path_7919" data-name="Path 7919" d="M1392.017-1339.131a.328.328,0,0,1-.264-.131,5.555,5.555,0,0,0-3.672-2.039.33.33,0,0,1-.3-.361.329.329,0,0,1,.362-.3,6.2,6.2,0,0,1,4.128,2.289.33.33,0,0,1-.066.461.333.333,0,0,1-.2.065Z" fill="#221e1f"/>
+              <g id="Group_1764-3" data-name="Group 1764-3" opacity="0.8">
+                <g id="Group_1763-3" data-name="Group 1763-3">
+                  <g id="Group_3220" data-name="Group 3220">
+                    <g id="Group_3230" data-name="Group 3230">
+                      <g id="Group_3229" data-name="Group 3229" clip-path="url(#clip-path-2)">
+                        <g id="Group_3219" data-name="Group 3219">
+                          <g id="Group_1762-3" data-name="Group 1762-3">
+                            <g id="Group_1761-3" data-name="Group 1761-3">
+                              <g id="Group_3218" data-name="Group 3218">
+                                <g id="Group_3228" data-name="Group 3228">
+                                  <g id="Group_3227" data-name="Group 3227" clip-path="url(#clip-path-2)">
+                                    <g id="Group_3217" data-name="Group 3217">
+                                      <g id="Group_1760-3" data-name="Group 1760-3">
+                                        <path id="Path_6902-3" data-name="Path 6902-3" d="M1390.743-1323.286s.976,3.421,3.553,4.015,4.952-2.049,4.952-2.049" fill="#e3727c"/>
+                                      </g>
+                                    </g>
+                                  </g>
+                                </g>
+                              </g>
+                            </g>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+              <g id="Group_1768-3" data-name="Group 1768-3">
+                <g id="Group_3224" data-name="Group 3224">
+                  <g id="Group_3234" data-name="Group 3234">
+                    <g id="Group_3233" data-name="Group 3233" clip-path="url(#clip-path-4)">
+                      <g id="Group_3223" data-name="Group 3223">
+                        <g id="Group_1767-3" data-name="Group 1767-3">
+                          <g id="Group_1766-3" data-name="Group 1766-3">
+                            <g id="Group_3222" data-name="Group 3222">
+                              <g id="Group_3232" data-name="Group 3232">
+                                <g id="Group_3231" data-name="Group 3231" clip-path="url(#clip-path-4)">
+                                  <g id="Group_3221" data-name="Group 3221">
+                                    <g id="Group_1765-3" data-name="Group 1765-3">
+                                      <path id="Path_6903-3" data-name="Path 6903-3" d="M1394-1326.456s-1.821.041-2.15-.7,1.029-3.684,1.029-3.684" fill="none" stroke="#ce9c6b" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
+                                    </g>
+                                  </g>
+                                </g>
+                              </g>
+                            </g>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+              <path id="Path_6904-3" data-name="Path 6904-3" d="M1403.608-1333.365h0a1.56,1.56,0,0,1,1.809-1.263h0a1.562,1.562,0,0,1,1.266,1.809,1.561,1.561,0,0,1-1.809,1.267,1.562,1.562,0,0,1-1.267-1.81v0" fill="#221e1f"/>
+              <path id="Path_6905-3" data-name="Path 6905-3" d="M1388.693-1336h0a1.559,1.559,0,0,1,1.807-1.263h0a1.562,1.562,0,0,1,1.264,1.81,1.561,1.561,0,0,1-1.81,1.263,1.559,1.559,0,0,1-1.263-1.809h0" fill="#221e1f"/>
+            </g>
+          </g>
+          <g id="Group_1543" data-name="Group 1543">
+            <path id="Path_6879" data-name="Path 6879" d="M962.437-1231a368.788,368.788,0,0,1,13.428,48.013l-32.55,1.222-2.849-12.614-3.255,13.427s-34.18,0-34.18-.406c0-11.808,4.882-49.234,4.882-49.234Z" fill="#a5a4a4"/>
+            <path id="Path_6880" data-name="Path 6880" d="M918.087-1305.056s-11.24-.023-13.889,8.809c0,0-5.074,8.883-5.888,12.953s-.31,2.886,2.945,7.361,6.255,48.179,6.255,48.179,16.274,4.07,25.633,4.07,27.261-3.257,30.11-5.7c0,0,2.77-38.9.711-50.968,1.173-3.533,3.154-7.685,3.826-10.306,0,0-12.783-16.943-23.1-16.09a9.563,9.563,0,0,1-1.778,9.813,12.021,12.021,0,0,1-15.054,2.849C922.974-1296.517,918.087-1305.056,918.087-1305.056Z" fill="#1b365d"/>
+            <path id="Path_6881" data-name="Path 6881" d="M947.311-1322.787c-.453,1.785-1.948.713-1.794,1.649a17.555,17.555,0,0,1-1.86,10.559c.325,1.123.694,2.484,1.025,3.855a58.724,58.724,0,0,1-5.443,9.539l-4.145.538c-10.268-1.192-14.619-4.5-16.006-5.8-.138-1.936-.394-3.924-.622-5.521-2.223-2.481-4.247-8.3-4.485-8.657a5.231,5.231,0,0,1-3.319-2.657c-1.728-4.235-2.75-8.264-1.961-9.535a27.578,27.578,0,0,0,3.289,6.577c1.558,1.916-.28-14.043-.185-18.01.154-5.754-1.165,3.536,15.252.838,16.389-2.7,10.915-10.015,13.757-6.14,1.289,1.78,3.868,20.29,4.675,18.269a34.168,34.168,0,0,0,1.657-7.245c.116.05.23.1.387.184,2.531,1.331.639,8.223-.234,11.565" fill="#fceada"/>
+            <path id="Path_6882" data-name="Path 6882" d="M943.315-1239.141l-6.505,8.952-6.51-9.361s-.652-40.134,1.914-46.562c-.385-.6-2.773-3.789-4.285-5.79l1.193-1.2c3.582-3.582,4.525-4.388,4.525-4.388-.107-.037-.211-.069-.316-.107l4.178.137-.074.074a15.577,15.577,0,0,1,2.992,2.073c.67.526,1.44,1.192,2.385,2.07a30.785,30.785,0,0,0-3.756,5.761c4.036,4.071,4.666,43.863,4.666,43.863" fill="#d9232e"/>
+            <path id="Path_6883" data-name="Path 6883" d="M933.651-1297.489s-.947.807-4.526,4.39l-1.193,1.193c-.949.949-2.1,2.07-3.406,3.371-1.475-.49-8.566-8.918-6.459-18.014a3,3,0,0,0,.421.632c1.158,1.508,4.917,5.482,14.853,8.319.1.039.209.071.316.108" fill="#fff"/>
+            <path id="Path_6884" data-name="Path 6884" d="M947.379-1288.885c-1.793-1.792-3.337-3.23-4.565-4.358-.947-.872-1.722-1.544-2.385-2.07a15.509,15.509,0,0,0-2.985-2.073l.068-.069a58.515,58.515,0,0,0,6.917-8.533c.317-.526.5-.808.5-.808,2.1,9.095,3.932,17.383,2.457,17.909" fill="#fff"/>
+            <path id="Path_6885" data-name="Path 6885" d="M947.724-1343.206a46.863,46.863,0,0,1-.568,8.67,34.161,34.161,0,0,1-1.657,7.246c-.808,2.011-2.727-12.4-4.023-14.181-2.849-3.875,1.973-.646-14.414,2.05-16.425,2.7-14.72,1.552-14.878,7.307-.1,3.966,1.369,11.783-.194,9.867a27.679,27.679,0,0,1-3.289-6.575c-.707-1.7-1.341-3.411-1.994-4.733-4.485-9.232,3.436-11.992,3.028-12.4-5.185-5.186,10.373-15.671,14.247-16.278,10.537-1.7,12.106,4.985,12.106,4.985s10.559-1.988,11.631,14.03" fill="#221e1f"/>
+            <path id="Path_6889" data-name="Path 6889" d="M964.066-1227.749l1.222,2.85a99.166,99.166,0,0,1-28.889,5.7,114.929,114.929,0,0,1-29.7-3.662l.355-3.246s16.734,4.468,28.939,3.655A161.2,161.2,0,0,0,964.066-1227.749Z" fill="#72502b"/>
+            <g id="Group_1770" data-name="Group 1770">
+              <path id="Path_6900" data-name="Path 6900" d="M917.516-1329.679a5.711,5.711,0,0,1,4.322.227" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
+              <path id="Path_6901" data-name="Path 6901" d="M934.775-1331.524a5.7,5.7,0,0,1,3.785-2.1" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
+              <g id="Group_1764" data-name="Group 1764" opacity="0.8">
+                <g id="Group_1763" data-name="Group 1763">
+                  <g id="Group_3086" data-name="Group 3086">
+                    <g id="Group_3238" data-name="Group 3238">
+                      <g id="Group_3237" data-name="Group 3237" clip-path="url(#clip-path-6)">
+                        <g id="Group_3085" data-name="Group 3085">
+                          <g id="Group_1762" data-name="Group 1762">
+                            <g id="Group_1761" data-name="Group 1761">
+                              <g id="Group_3084" data-name="Group 3084">
+                                <g id="Group_3236" data-name="Group 3236">
+                                  <g id="Group_3235" data-name="Group 3235" clip-path="url(#clip-path-6)">
+                                    <g id="Group_3083" data-name="Group 3083">
+                                      <g id="Group_1760" data-name="Group 1760">
+                                        <path id="Path_6902" data-name="Path 6902" d="M927.451-1310.9s2.179,2.682,4.693,2.238,3.647-3.713,3.647-3.713" fill="#e3727c"/>
+                                      </g>
+                                    </g>
+                                  </g>
+                                </g>
+                              </g>
+                            </g>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+              <g id="Group_1769" data-name="Group 1769" opacity="0.8">
+                <g id="Group_1768" data-name="Group 1768">
+                  <g id="Group_3090" data-name="Group 3090">
+                    <g id="Group_3242" data-name="Group 3242">
+                      <g id="Group_3241" data-name="Group 3241" clip-path="url(#clip-path-8)">
+                        <g id="Group_3089" data-name="Group 3089">
+                          <g id="Group_1767" data-name="Group 1767">
+                            <g id="Group_1766" data-name="Group 1766">
+                              <g id="Group_3088" data-name="Group 3088">
+                                <g id="Group_3240" data-name="Group 3240">
+                                  <g id="Group_3239" data-name="Group 3239" clip-path="url(#clip-path-8)">
+                                    <g id="Group_3087" data-name="Group 3087">
+                                      <g id="Group_1765" data-name="Group 1765">
+                                        <path id="Path_6903" data-name="Path 6903" d="M929.275-1320.038s-.631,3.206.119,3.732,3.2-.259,3.2-.259" fill="none" stroke="#ce9c6b" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
+                                      </g>
+                                    </g>
+                                  </g>
+                                </g>
+                              </g>
+                            </g>
+                          </g>
+                        </g>
+                      </g>
+                    </g>
+                  </g>
+                </g>
+              </g>
+              <path id="Path_6904" data-name="Path 6904" d="M923.524-1325.608a1.509,1.509,0,0,1-1.229,1.744,1.509,1.509,0,0,1-1.744-1.23,1.508,1.508,0,0,1,1.215-1.74h0a1.508,1.508,0,0,1,1.753,1.215l0,.011h0" fill="#221e1f"/>
+              <path id="Path_6905" data-name="Path 6905" d="M938-1328.165a1.508,1.508,0,0,1-1.23,1.743,1.508,1.508,0,0,1-1.743-1.229,1.508,1.508,0,0,1,1.215-1.741h0a1.508,1.508,0,0,1,1.752,1.216l0,.011h0" fill="#221e1f"/>
+            </g>
+            <path id="Path_7836" data-name="Path 7836" d="M902.575-1355.572s-.146,27.822-1.324,33.12c0,0,6.771,19.429,11.776,21.789s-11.776,23.257-11.776,23.257-5.3.59-9.721-11.188-7.068-18.545-6.771-23.552,4.564-38.716,6.919-41.953S902.575-1358.517,902.575-1355.572Z" fill="#1b365d"/>
+            <path id="Path_7837" data-name="Path 7837" d="M956.452-1354.394s.293,22.669,1.473,27.967c0,0-5.125,18.989-10.132,21.344s11.776,23.259,11.776,23.259,5.3.588,9.721-11.188,7.065-18.547,6.77-23.552-7.828-36.065-10.184-39.3S956.452-1357.338,956.452-1354.394Z" fill="#1b365d"/>
+          </g>
+          <g id="Group_3102" data-name="Group 3102">
+            <rect id="Rectangle_3827" data-name="Rectangle 3827" width="101.55" height="28.102" rx="2.946" transform="translate(878.45 -1387.316)" fill="#fff"/>
+            <g id="Group_3101" data-name="Group 3101">
+              <g id="Group_3092" data-name="Group 3092">
+                <path id="Path_7843" data-name="Path 7843" d="M895.849-1378.951l1.728,3.5a.193.193,0,0,0,.146.107l3.867.563a.2.2,0,0,1,.167.218.193.193,0,0,1-.06.118l-2.8,2.727a.2.2,0,0,0-.057.167l.661,3.855a.2.2,0,0,1-.16.227.194.194,0,0,1-.123-.019l-3.456-1.819a.2.2,0,0,0-.183,0l-3.456,1.819a.2.2,0,0,1-.265-.081.194.194,0,0,1-.02-.127l.66-3.855a.186.186,0,0,0-.055-.167l-2.8-2.727a.2.2,0,0,1-.01-.275.2.2,0,0,1,.119-.061l3.865-.563a.19.19,0,0,0,.149-.107l1.728-3.5a.2.2,0,0,1,.263-.087A.2.2,0,0,1,895.849-1378.951Z" fill="#ffc801"/>
+                <g id="Group_3091" data-name="Group 3091">
+                  <path id="Path_7844" data-name="Path 7844" d="M895.673-1378.141l-1.54,2.983a.511.511,0,0,1-.411.276l-3.352.306,3.533.167a.513.513,0,0,0,.5-.335Z" fill="#ffd753"/>
+                </g>
+                <path id="Path_7845" data-name="Path 7845" d="M891.921-1368.14l-.077.442a.2.2,0,0,0,.158.228.207.207,0,0,0,.127-.02l3.455-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.191.191,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.928,14.928,0,0,1,891.921-1368.14Z" fill="#f8b911"/>
+              </g>
+              <g id="Group_3094" data-name="Group 3094">
+                <path id="Path_7846" data-name="Path 7846" d="M913.153-1378.951l1.728,3.5a.191.191,0,0,0,.146.107l3.866.563a.194.194,0,0,1,.171.213.2.2,0,0,1-.064.123l-2.795,2.727a.192.192,0,0,0-.057.167l.66,3.855a.2.2,0,0,1-.159.227.2.2,0,0,1-.124-.019l-3.456-1.819a.2.2,0,0,0-.183,0l-3.456,1.819a.2.2,0,0,1-.265-.081.207.207,0,0,1-.02-.127l.661-3.855a.19.19,0,0,0-.056-.167l-2.8-2.727a.2.2,0,0,1-.009-.275.194.194,0,0,1,.118-.061l3.865-.563a.193.193,0,0,0,.15-.107l1.728-3.5a.2.2,0,0,1,.263-.087A.2.2,0,0,1,913.153-1378.951Z" fill="#ffc801"/>
+                <g id="Group_3093" data-name="Group 3093">
+                  <path id="Path_7847" data-name="Path 7847" d="M912.977-1378.141l-1.541,2.983a.511.511,0,0,1-.41.276l-3.352.306,3.533.167a.515.515,0,0,0,.5-.335Z" fill="#ffd753"/>
+                </g>
+                <path id="Path_7848" data-name="Path 7848" d="M909.224-1368.14l-.077.442a.2.2,0,0,0,.158.228.206.206,0,0,0,.127-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.2.2,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.056-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.122-.063l-1.3-.187A14.933,14.933,0,0,1,909.224-1368.14Z" fill="#f8b911"/>
+              </g>
+              <g id="Group_3096" data-name="Group 3096">
+                <path id="Path_7849" data-name="Path 7849" d="M930.456-1378.951l1.728,3.5a.193.193,0,0,0,.146.107l3.867.563a.193.193,0,0,1,.17.213.2.2,0,0,1-.063.123l-2.8,2.727a.2.2,0,0,0-.057.167l.661,3.855a.2.2,0,0,1-.16.227.2.2,0,0,1-.124-.019l-3.456-1.819a.2.2,0,0,0-.182,0l-3.456,1.819a.2.2,0,0,1-.265-.081.194.194,0,0,1-.02-.127l.66-3.855a.186.186,0,0,0-.055-.167l-2.8-2.727a.2.2,0,0,1-.01-.275.194.194,0,0,1,.119-.061l3.865-.563a.192.192,0,0,0,.149-.107l1.728-3.5a.2.2,0,0,1,.263-.087A.2.2,0,0,1,930.456-1378.951Z" fill="#ffc801"/>
+                <g id="Group_3095" data-name="Group 3095">
+                  <path id="Path_7850" data-name="Path 7850" d="M930.28-1378.141l-1.54,2.983a.511.511,0,0,1-.411.276l-3.352.306,3.533.167a.513.513,0,0,0,.5-.335Z" fill="#ffd753"/>
+                </g>
+                <path id="Path_7851" data-name="Path 7851" d="M926.528-1368.14l-.078.442a.2.2,0,0,0,.159.228.2.2,0,0,0,.126-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.191.191,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.928,14.928,0,0,1,926.528-1368.14Z" fill="#f8b911"/>
+              </g>
+              <g id="Group_3098" data-name="Group 3098">
+                <path id="Path_7852" data-name="Path 7852" d="M947.76-1378.951l1.728,3.5a.19.19,0,0,0,.146.107l3.866.563a.192.192,0,0,1,.17.213.191.191,0,0,1-.063.123l-2.795,2.727a.192.192,0,0,0-.057.167l.66,3.855a.2.2,0,0,1-.159.227.2.2,0,0,1-.124-.019l-3.456-1.819a.2.2,0,0,0-.183,0l-3.456,1.819a.2.2,0,0,1-.265-.081.207.207,0,0,1-.02-.127l.661-3.855a.191.191,0,0,0-.054-.167l-2.8-2.727a.2.2,0,0,1-.01-.275.2.2,0,0,1,.119-.061l3.865-.563a.19.19,0,0,0,.149-.107l1.728-3.5a.2.2,0,0,1,.264-.084A.192.192,0,0,1,947.76-1378.951Z" fill="#ffc801"/>
+                <g id="Group_3097" data-name="Group 3097">
+                  <path id="Path_7853" data-name="Path 7853" d="M947.584-1378.141l-1.541,2.983a.511.511,0,0,1-.41.276l-3.352.306,3.533.167a.515.515,0,0,0,.5-.335Z" fill="#ffd753"/>
+                </g>
+                <path id="Path_7854" data-name="Path 7854" d="M943.828-1368.14l-.077.442a.2.2,0,0,0,.158.228.2.2,0,0,0,.126-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.191.191,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.927,14.927,0,0,1,943.828-1368.14Z" fill="#f8b911"/>
+              </g>
+              <g id="Group_3100" data-name="Group 3100">
+                <path id="Path_7855" data-name="Path 7855" d="M965.063-1378.951l1.728,3.5a.193.193,0,0,0,.146.107l3.867.563a.193.193,0,0,1,.17.213.2.2,0,0,1-.063.123l-2.789,2.72a.193.193,0,0,0-.057.167l.66,3.855a.2.2,0,0,1-.159.227.191.191,0,0,1-.124-.019l-3.456-1.818a.2.2,0,0,0-.183,0l-3.456,1.818a.2.2,0,0,1-.265-.081.206.206,0,0,1-.02-.127l.662-3.855a.193.193,0,0,0-.057-.167l-2.8-2.727a.2.2,0,0,1-.009-.275.193.193,0,0,1,.118-.06l3.865-.563a.193.193,0,0,0,.149-.108l1.728-3.5a.2.2,0,0,1,.268-.072A.193.193,0,0,1,965.063-1378.951Z" fill="#ffc801"/>
+                <g id="Group_3099" data-name="Group 3099">
+                  <path id="Path_7856" data-name="Path 7856" d="M964.887-1378.141l-1.54,2.983a.512.512,0,0,1-.411.276l-3.352.306,3.533.167a.513.513,0,0,0,.5-.335Z" fill="#ffd753"/>
+                </g>
+                <path id="Path_7857" data-name="Path 7857" d="M961.134-1368.14l-.077.442a.2.2,0,0,0,.159.228.2.2,0,0,0,.126-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.19.19,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.926,14.926,0,0,1,961.134-1368.14Z" fill="#f8b911"/>
+              </g>
+            </g>
+            <path id="Path_7858" data-name="Path 7858" d="M954.737-1361.275s0-4,1.23-4,1.541,1.54,1.541,3.077a3.034,3.034,0,0,0,2.767,3.077c1.54,0,6.154-.923,7.691-.615s2.46-.308,2.154,2.461-3.688,3.077-6.46,3.382-8.921-.614-8.921-3.687Z" fill="#fceada"/>
+            <path id="Path_7859" data-name="Path 7859" d="M895.828-1353.123s6.151.305,7.689-2.461,3.077-8.921.924-8.306a11.076,11.076,0,0,0-3.078,3.386s-4.766-1.385-8.152.152-2.921,3.845-2.921,5.384S895.828-1353.123,895.828-1353.123Z" fill="#fceada"/>
+          </g>
+        </g>
+      </g>
+    </g>
+    <g id="Group_3906" data-name="Group 3906" transform="translate(3171.069 8787.829)">
+      <g id="Group_3106-2" data-name="Group 3106-2" transform="translate(-2204.933 -10168.411)">
+        <path id="Path_8726" data-name="Path 8726" d="M215.724,40.11v-3.4a2.493,2.493,0,0,0,.983-.673l1.36-1.52a2.5,2.5,0,0,0-.361-3.666,2.514,2.514,0,0,0,.138-.822v-1.92a2.5,2.5,0,0,0-2.5-2.5H210.4a2.5,2.5,0,0,0-2.341-1.621h-2.041a2.5,2.5,0,0,0-2.34,1.621H198.74a2.5,2.5,0,0,0-.964.194,2.492,2.492,0,0,0-2.112-1.174h-10.8a2.493,2.493,0,0,0-1.383.417,2.5,2.5,0,0,0-2.714-.989l-1.981.54a2.5,2.5,0,0,0-1.576,1.3,2.475,2.475,0,0,0-1.523-.531h-5.009l-.015-.031a2.5,2.5,0,0,0-2.678-1.438l-2.22.361a2.5,2.5,0,0,0-1.7,1.108H159.3a2.489,2.489,0,0,0-2.161,1.265,2.5,2.5,0,0,0-2.315-1.565h-5.185a2.5,2.5,0,0,0-2.53-1.17l-2.261.361a2.5,2.5,0,0,0-1.476.809h-4.191a2.49,2.49,0,0,0-1.756.723,2.483,2.483,0,0,0-1.441-.463h-.5a2.5,2.5,0,0,0-2.2-1.32H131.3a2.5,2.5,0,0,0-1.94.923,2.5,2.5,0,0,0-1.941-.923h-1.98a2.5,2.5,0,0,0-2.205,1.32h-.476a2.506,2.506,0,0,0-.955.189q-.431-.365-.887-.72a2.5,2.5,0,0,0-3.265.163l-1.341,1.28A2.5,2.5,0,0,0,116.481,30q.211.17.411.333l-.74.707a2.5,2.5,0,0,0,.254,3.825,25.583,25.583,0,0,1,2.082,1.669,55.715,55.715,0,0,1-2.615,6.32,2.5,2.5,0,0,0,1.205,3.368l1.92.88a2.5,2.5,0,0,0,1.924.067,2.433,2.433,0,0,0,.6-.328,2.493,2.493,0,0,0,1.635.608h1.86a2.49,2.49,0,0,0,1.838-.805,2.485,2.485,0,0,0,1.583.566h1.841a2.581,2.581,0,0,0,.485-.047A2.5,2.5,0,0,0,132,47.49h1.781a4.2,4.2,0,0,0,3.433-1.57l1.046.663a2.5,2.5,0,0,0,3.246-.5,5.192,5.192,0,0,0,3.433,1.125h4.881a5.77,5.77,0,0,0,3.12-.771c.078-.048.153-.1.224-.155A2.507,2.507,0,0,0,156,46.258l.511-.359,1.058.951a2.5,2.5,0,0,0,2.13.6,2.54,2.54,0,0,0,.524-.159,2.49,2.49,0,0,0,1.357.4,2.437,2.437,0,0,0,.415-.034,31.377,31.377,0,0,0,6.5-1.774,28.949,28.949,0,0,0,6.417,1.774,2.486,2.486,0,0,0,2.229-.755,2.464,2.464,0,0,0,1.217.329h1.921a2.492,2.492,0,0,0,1.921-.9h1.071l.577.519a2.5,2.5,0,0,0,3.969-.874q.276-.643.5-1.345h.936l.225.892A2.5,2.5,0,0,0,191.9,47.41h1.781a4.579,4.579,0,0,0,3.012-1.029,2.482,2.482,0,0,0,1.644.63h17.344a2.5,2.5,0,0,0,2.5-2.5v-1.9A2.5,2.5,0,0,0,215.724,40.11Zm-39.864.665-.018,0,.018-.021Zm.241-4.691c-.04-.058-.075-.119-.12-.174.041-.005.079-.019.12-.025Zm-19.837-1.466a2.438,2.438,0,0,0,.534-.182,29.86,29.86,0,0,1-.356,4.459c-.061-.077-.115-.148-.178-.227Zm41.9,5.51V36.991c.066.02.13.048.2.063V40.11h-.021C198.28,40.11,198.223,40.124,198.164,40.128Z" fill="#fff"/>
+        <g id="皛踵�漲隤踵-4" style="isolation: isolate">
+          <g id="Group_3901" data-name="Group 3901" style="isolation: isolate">
+            <path id="Path_8727" data-name="Path 8727" d="M123.161,34.469l-1.36,1.36a20.889,20.889,0,0,0-3.421-2.981l1.38-1.321A24.457,24.457,0,0,1,123.161,34.469Zm-.06-4.7-1.34,1.36a20.077,20.077,0,0,0-3.221-3.081l1.34-1.28A23.625,23.625,0,0,1,123.1,29.768Zm.2,7.861a75.245,75.245,0,0,1-2.76,7.2l-1.921-.881a57.752,57.752,0,0,0,2.881-7.041Zm2.641-9.8v-1.32h1.98v1.32H131.8v-1.32h1.981v1.32h2.7v1.861h-2.7v2.72h-3v.96h5.341V43.11a1.652,1.652,0,0,1-1.84,1.88H132.5l-.48-1.82,1.681.08a.478.478,0,0,0,.54-.54v-.96l-.5.68a5.7,5.7,0,0,1-1.041-2.58,8.009,8.009,0,0,1-1.24,2.7l-.68-1.3v3.461h-1.841V42.17l-.44.6a6.055,6.055,0,0,1-1.08-2.782,8.632,8.632,0,0,1-1.38,2.961l-.521-.98v2.98h-1.86V33.368h5.281v-.96h-3v-2.72h-2.681V27.827Zm.84,10.1h-.82v-1.38h2.08a8.9,8.9,0,0,0,.9,4.481V35.169h-3.421v6.1A7.472,7.472,0,0,0,126.782,37.929Zm1.14-7.161H131.8v-1.08h-3.881Zm4.121,7.161h-.78v-1.38h2.06a7.805,7.805,0,0,0,.921,4.241V35.169h-3.461V41.05A6.511,6.511,0,0,0,132.043,37.929Z" fill="#68737a"/>
+            <path id="Path_8728" data-name="Path 8728" d="M142.021,40.37a13.633,13.633,0,0,1-1.92,4.1l-1.8-1.141a9.7,9.7,0,0,0,1.68-3.381Zm-2.34-11.043v-1.76h6.481c-.14-.3-.28-.581-.42-.84l2.26-.361c.16.361.3.761.46,1.2h6.862v1.76H152.2l-.52,1.04h4.581v1.8H138.74v-1.8h4.421l-.42-1.04Zm14.583,3.541v6.361h-6.142a15.213,15.213,0,0,1,1.741,2.021l-1.741,1.22a18.182,18.182,0,0,0-1.8-2.16l1.74-1.081h-7.321V32.868Zm-2.041,2.441v-.861h-9.442v.861Zm0,1.48h-9.442v.88h9.442Zm-6.781,7.922c-1.621,0-2.421-.721-2.421-2.121V40.05h2.121v2.08c0,.48.3.74.9.74h3.881a.918.918,0,0,0,.72-.24c.2-.16.32-.66.38-1.481l1.98.661q-.24,2.1-.9,2.52a3.412,3.412,0,0,1-1.78.381Zm4.06-14.344.52-1.04h-5.1l.421,1.04Zm7.3,12.623-1.74,1.221a29.1,29.1,0,0,0-2.441-3.541l1.681-1.061A29.3,29.3,0,0,1,156.8,42.99Z" fill="#68737a"/>
+            <path id="Path_8729" data-name="Path 8729" d="M161.881,34.368c-.08,4.4-.78,7.942-2.141,10.622l-1.58-1.42a22.55,22.55,0,0,0,1.64-9.2v-6.5h7.522a10.6,10.6,0,0,0-.66-1.14l2.221-.361c.2.441.42.941.619,1.5h6.682v1.96h-14.3v1.681h2.841v-1.24h2.04v1.24H171.2V30.247h2.02v1.261h2.961v1.92h-2.961v3.081h-8.5V33.428h-2.841Zm12.662,3.121v1.54a15.1,15.1,0,0,1-3.5,3.021,26.807,26.807,0,0,0,5.682,1.3l-.9,1.839a24.787,24.787,0,0,1-6.8-2.04,27.464,27.464,0,0,1-6.941,2.04l-.9-1.86a27.065,27.065,0,0,0,5.761-1.36A13.685,13.685,0,0,1,164,39.27h-1.38V37.489Zm-5.66,3.62a16.776,16.776,0,0,0,2.82-1.839h-5.421A11.381,11.381,0,0,0,168.883,41.109Zm-2.121-6.321H171.2v-1.36h-4.441Z" fill="#68737a"/>
+            <path id="Path_8730" data-name="Path 8730" d="M180.721,28.848c-.241-.62-.5-1.242-.781-1.841l1.981-.54a20.167,20.167,0,0,1,.78,2.381h1.9v1.88H178.42v-1.88ZM184.3,43.83h-3.52v.9H178.86V37.649H184.3Zm-.26-11.942v1.76H179.1v-1.76Zm0,2.78v1.761H179.1V34.668Zm-1.641,7.4v-2.7h-1.619v2.7Zm13.764.94c0,1.261-.66,1.9-1.98,1.9H192.4l-.48-1.9c.6.06,1.14.1,1.661.1.4,0,.6-.28.6-.8v-13.3H187.3v8.362a19.907,19.907,0,0,1-1.282,7.621l-1.6-1.439a17.657,17.657,0,0,0,.939-6.042V27.127h10.8Zm-6.321-6.221v-1.28H187.8V33.788h2.04v-1.38H187.8V30.647h2.04v-1.14h1.841v1.14h2.04v1.761h-2.04v1.38h2.04v1.721h-2.04v1.28H193.4V42.13h-5.321V36.789Zm1.88,1.641h-1.94v2.04h1.94Z" fill="#68737a"/>
+            <path id="Path_8731" data-name="Path 8731" d="M206.521,33.908v-3.72a17.425,17.425,0,0,1-7.14,4.42l-1.141-1.84a20.237,20.237,0,0,0,6.5-2.741h-5.5v-1.92h7.281V26.486h2.041v1.621h7.282v1.92h-7.282v.34a81.431,81.431,0,0,1,8.142,2.481l-1.36,1.52c-2.221-.96-4.481-1.82-6.782-2.56v2.1h5.162V41.57H201.361V33.908Zm9.663,8.7v1.9H198.84v-1.9Zm-4.5-5.721v-1.14H203.4v1.14Zm0,1.76H203.4v1.08h8.283Z" fill="#68737a"/>
+          </g>
+        </g>
+      </g>
+      <g id="Component_1_1236" data-name="Component 1 1236" transform="translate(-2204.933 -10168.411)">
+        <g id="Group_2063-2" data-name="Group 2063-2">
+          <g id="Rectangle_7-2" data-name="Rectangle 7-2">
+            <path id="Path_8732" data-name="Path 8732" d="M251,14.95h42a19,19,0,0,1,19,19h0a19,19,0,0,1-19,19H251a19,19,0,0,1-19-19h0A19,19,0,0,1,251,14.95Z" fill="#fff"/>
+            <path id="Path_8733" data-name="Path 8733" d="M293,52.95H251a19,19,0,0,1,0-38h42a19,19,0,0,1,0,38Zm-42-36a17,17,0,1,0,0,34h42a17,17,0,0,0,0-34Z" fill="#009cbd"/>
+          </g>
+          <g id="憛怠神-2" style="isolation: isolate">
+            <g id="Group_3902" data-name="Group 3902" style="isolation: isolate">
+              <path id="Path_8734" data-name="Path 8734" d="M263.922,25.787v-1.32h2.021v1.32h4.7v1.78h-4.7v.88h3.7v9.122h1.7V39.41H267.6a22.193,22.193,0,0,1,3.541,2.32l-1.261,1.46a22.288,22.288,0,0,0-3.8-2.76l1.1-1.02h-4.5l1.18,1.04a16.935,16.935,0,0,1-4.28,2.74l-1.221-1.56a17.169,17.169,0,0,0,3.9-2.22h-3.741v-1.4a42.137,42.137,0,0,1-5.3,1.679L252.7,37.67a21.682,21.682,0,0,0,2.22-.481V31.168h-2v-1.96h2v-4.6h2.021v4.6h1.821v1.96h-1.821v5.421c.6-.22,1.18-.46,1.741-.7v1.68h1.56V28.447h3.68v-.88h-4.7v-1.78Zm3.762,5.061v-.8H262.2v.8Zm0,2.22v-.8H262.2v.8Zm0,2.221v-.8H262.2v.8Zm0,2.28v-.86H262.2v.86Z" fill="#009cbd"/>
+              <path id="Path_8735" data-name="Path 8735" d="M284.062,41.17c.721.04,1.42.06,2.081.06a1.435,1.435,0,0,0,1.42-.66,8.53,8.53,0,0,0,.46-2.94h-10.7c-.341.26-.68.5-1,.72l1.421.379a20.725,20.725,0,0,1-1.24,3.942l-1.88-.681a15.5,15.5,0,0,0,1.3-3.381c-.46.281-.941.561-1.421.821l-1.26-1.54a15.1,15.1,0,0,0,4.281-2.8h-1.74v-6.3a18.043,18.043,0,0,0,4.961-.78l.88,1.54a22.576,22.576,0,0,1-3.981.82v.72h3.582v1.56h-3.582v.8h8.722v-.78h-3.3v-1.56h3.3v-.82h-3.6v-1.62h5.482v6.421H279.9c-.24.28-.48.56-.72.82h10.862c-.06,1.721-.16,3.1-.3,4.181a4.687,4.687,0,0,1-.84,2.221,2.732,2.732,0,0,1-1.861.66h-2.481Zm6.461-11.382h-1.96v-2.06h-13.1v2.08H273.5V25.887h7.222a11.351,11.351,0,0,0-.7-1.1l2.161-.36a14.107,14.107,0,0,1,.68,1.46h7.661ZM281.1,41.811l-1.86.439a30.087,30.087,0,0,0-.6-3.42l1.7-.381C280.622,39.49,280.861,40.61,281.1,41.811Zm3.121-.8-1.781.421a15.743,15.743,0,0,0-.84-2.822l1.68-.339A21.867,21.867,0,0,1,284.223,41.01Zm2.961-.86-1.58.68a17.587,17.587,0,0,0-.961-2.32l1.541-.641A17.166,17.166,0,0,1,287.184,40.15Z" fill="#009cbd"/>
+            </g>
+          </g>
+        </g>
+      </g>
+      <g id="Group_3905" data-name="Group 3905" transform="translate(-2204.933 -10168.411)">
+        <path id="Path_8736" data-name="Path 8736" d="M316.829,43.468a1.1,1.1,0,0,0-1.1,1.1v1H313.3V43.309a1.1,1.1,0,1,0-2.207,0v2.263h-2.421v-3.1a1.1,1.1,0,1,0-2.207,0v3.1h-2.429V34.05a1.1,1.1,0,1,0-2.207,0V51.641l-3.473-4.778a1.1,1.1,0,0,0-.719-.44,1.154,1.154,0,0,0-.174-.014,1.094,1.094,0,0,0-.647.212,1.106,1.106,0,0,0-.243,1.541l6.735,9.255a1.108,1.108,0,0,0,.892.455h10.939a1.1,1.1,0,0,0,1.074-.85l1.682-7.15a1.053,1.053,0,0,0,.03-.252V44.49A1.106,1.106,0,0,0,316.829,43.468Z" fill="#f8f9fa"/>
+        <path id="Path_8737" data-name="Path 8737" d="M316.829,41.468a3.092,3.092,0,0,0-1.8.573,3.1,3.1,0,0,0-4.786-1.143,3.1,3.1,0,0,0-4.207-1.125V34.05a3.1,3.1,0,1,0-6.207,0V45.5a3.1,3.1,0,0,0-4.873,3.836l6.735,9.255a3.11,3.11,0,0,0,2.509,1.278h10.94a3.089,3.089,0,0,0,3.02-2.393l1.683-7.148a3.132,3.132,0,0,0,.082-.711l0-5.049A3.107,3.107,0,0,0,316.829,41.468Zm-1.685,16.4H304.2a1.108,1.108,0,0,1-.892-.455l-6.735-9.255a1.106,1.106,0,0,1,.243-1.541,1.094,1.094,0,0,1,.647-.212,1.154,1.154,0,0,1,.174.014,1.1,1.1,0,0,1,.719.44l3.473,4.778V34.05a1.1,1.1,0,1,1,2.207,0V45.572h2.429v-3.1a1.1,1.1,0,1,1,2.207,0v3.1H311.1V43.309a1.1,1.1,0,1,1,2.207,0v2.262h2.421v-1a1.1,1.1,0,0,1,2.2-.081v5.13a1.053,1.053,0,0,1-.03.252l-1.682,7.15A1.1,1.1,0,0,1,315.144,57.872Z" fill="#20375a"/>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/PAMapp/assets/images/satisfaction/notification_web.svg b/PAMapp/assets/images/satisfaction/satisfactionBtn_web.svg
similarity index 100%
rename from PAMapp/assets/images/satisfaction/notification_web.svg
rename to PAMapp/assets/images/satisfaction/satisfactionBtn_web.svg
diff --git a/PAMapp/assets/images/taiwan-logo.png b/PAMapp/assets/images/taiwan-logo.png
index bced408..bd1f8f3 100644
--- a/PAMapp/assets/images/taiwan-logo.png
+++ b/PAMapp/assets/images/taiwan-logo.png
Binary files differ
diff --git a/PAMapp/assets/scss/_common.scss b/PAMapp/assets/scss/_common.scss
index 768bb07..ee6f5d2 100644
--- a/PAMapp/assets/scss/_common.scss
+++ b/PAMapp/assets/scss/_common.scss
@@ -91,4 +91,50 @@
         line-height: 40px;
         padding-right: 10px;
     }
-}
\ No newline at end of file
+}
+
+.remind-container{
+  margin-top: 13px;
+  margin-bottom: 20px;
+  display: flex;
+      .remind-date{
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          font-weight: bold;
+          width: 70px;
+          background-color: #fff;
+          border-radius: 6px;
+          border-bottom: 1px solid #CCCCCC;
+          border-right: 1px solid #CCCCCC;
+          border-left: 1px solid #CCCCCC;
+      }
+      .remind-content-txt{
+        display: flex;
+        flex-direction: column;
+        border: 1px solid #CCCCCC;
+        flex:1;
+        border-radius: 5px;
+        padding: 10px;
+        background-color: #fff;
+      }
+      .mb-3{
+        margin-bottom: 3px;
+      }
+      .mt-2{
+        margin-top:2px;
+      }
+      .date-year{
+        color: #fff;
+        align-items: center;
+        display: flex;
+        justify-content: center;
+      }
+      .bgc-primary-red{
+        background-color:$PRIMARY_RED;
+        width: 70.5px;
+        border-top-left-radius:6px;
+        border-top-right-radius:6px;
+        border: 1px solid #CCCCCC;
+      }
+}
diff --git a/PAMapp/assets/scss/_variable.scss b/PAMapp/assets/scss/_variable.scss
index db3a0e4..3eb388f 100644
--- a/PAMapp/assets/scss/_variable.scss
+++ b/PAMapp/assets/scss/_variable.scss
@@ -10,6 +10,7 @@
 $SKY_BLUE: #009CBD;
 $LIGHT_BLUE: #8DB9CA;
 $DARK_BLUE: #1B365D;
+$LIGHT_RED: #DA3738;
 $BEIGE: #A89968;
 $PRUDENTIAL_GREY: #68737A;
 $LIGHT_GREY: #D0D0CE;
@@ -19,5 +20,5 @@
 // DEVICE BREAKPOINT
 $DESKTOP_BREAKPOINT: 768px;
 
-$DESKTOP_NAV_BAR: 110px;
+$DESKTOP_NAV_BAR: 90px;
 $MOB_NAV_BAR: 53px;
diff --git a/PAMapp/assets/scss/utilities/_heading.scss b/PAMapp/assets/scss/utilities/_heading.scss
index 933e0d7..9ec9f55 100644
--- a/PAMapp/assets/scss/utilities/_heading.scss
+++ b/PAMapp/assets/scss/utilities/_heading.scss
@@ -35,12 +35,21 @@
   font-size: 14px;
 }
 
+.xxsTxt {
+  font-size: 12px;
+}
+
 .text--bold {
   font-weight: bold !important;
 }
 
 .text--regular {
   font-weight: normal !important;
+  font-weight: lighter;
+}
+
+.text--lighter {
+  font-weight: lighter;
 }
 
 .text--center {
@@ -51,12 +60,24 @@
   text-align: left;
 }
 
+.text--right {
+  text-align: right;
+}
+
 .text--primary {
   color: $PRIMARY_RED;
 }
 
+.text--black{
+  color: $PRIMARY_BLACK;
+}
+
 .text--orange {
   color: $ORANGE;
+}
+
+.text--black{
+  color: $PRIMARY_BLACK;
 }
 
 .text--dark-blue {
@@ -92,4 +113,24 @@
   font-size: 18px;
   color: $ORANGE;
   cursor: pointer;
-}
\ No newline at end of file
+}
+
+.text--underline {
+  text-decoration: underline;
+}
+
+.pam-link-button {
+  @extend .fix-chrome-click--issue;
+  @extend .smTxt;
+  @extend .text--bold;
+  @extend .text--primary;
+  @extend .cursor--pointer;
+}
+
+.pam-link-button--lg {
+  @extend .fix-chrome-click--issue;
+  @extend .mdTxt;
+  @extend .text--bold;
+  @extend .text--primary;
+  @extend .cursor--pointer;
+}
diff --git a/PAMapp/assets/scss/utilities/_icon.scss b/PAMapp/assets/scss/utilities/_icon.scss
index 32f2ef1..6852502 100644
--- a/PAMapp/assets/scss/utilities/_icon.scss
+++ b/PAMapp/assets/scss/utilities/_icon.scss
@@ -9,3 +9,9 @@
       color: $YELLOW;
     }
 }
+
+.down-icon {
+  color: #ED1B2E;
+  font-size: 25px;
+  align-self: center;
+}
diff --git a/PAMapp/assets/scss/utilities/_utilities.scss b/PAMapp/assets/scss/utilities/_utilities.scss
index 42f6c90..c0281b9 100644
--- a/PAMapp/assets/scss/utilities/_utilities.scss
+++ b/PAMapp/assets/scss/utilities/_utilities.scss
@@ -5,6 +5,10 @@
   margin-bottom: 50px;
 }
 
+.mt-50 {
+  margin-top: 50px;
+}
+
 .mt-30 {
   margin-top: 30px;
 }
@@ -21,6 +25,7 @@
   margin-bottom: 20px;
 }
 
+
 .mt-10 {
   margin-top: 10px;
 }
@@ -30,6 +35,10 @@
 
 .mb-10 {
   margin-bottom: 10px;
+}
+
+.ml-5 {
+  margin-left: 5px;
 }
 
 .ml-10{
@@ -42,6 +51,10 @@
 
 .mr-30{
   margin-right: 30px;
+}
+
+.my-10 {
+  margin:10px 0;
 }
 
 .pt-30 {
@@ -95,3 +108,7 @@
     font-size: #{$fontSize} + 'px';
   }
 }
+
+.text--break-all {
+  word-break: break-all
+}
diff --git a/PAMapp/assets/scss/vendors/_elementUI.scss b/PAMapp/assets/scss/vendors/_elementUI.scss
index df9c6ea..0fe5584 100644
--- a/PAMapp/assets/scss/vendors/_elementUI.scss
+++ b/PAMapp/assets/scss/vendors/_elementUI.scss
@@ -12,3 +12,8 @@
 @import './elementUI/dialog';
 @import './elementUI/messageBox';
 @import './elementUI/input';
+@import './elementUI/tree';
+@import './elementUI/upload';
+@import './elementUI/textarea';
+@import './elementUI/dateTimePicker';
+@import './elementUI/select';
\ No newline at end of file
diff --git a/PAMapp/assets/scss/vendors/elementUI/_dateTimePicker.scss b/PAMapp/assets/scss/vendors/elementUI/_dateTimePicker.scss
new file mode 100644
index 0000000..b75fa43
--- /dev/null
+++ b/PAMapp/assets/scss/vendors/elementUI/_dateTimePicker.scss
@@ -0,0 +1,85 @@
+.pam-date.el-input,.pam-time.el-input {
+    .el-input__inner {
+        padding-left: 10px;
+        height: 46px;
+        border: 1px solid #707070;
+    }
+
+    .el-input__prefix {
+        left:auto;
+        right: 10px;
+        top: 50%;
+        transform: translateY(-50%);
+        color: $PRIMARY_BLACK;
+    }
+    .el-input__suffix {
+        right: 25px;
+    }
+}
+
+.pam-date.el-input {
+    width: 58%;
+}
+.pam-time.el-input {
+    width: 38%;
+}
+
+.pam-time-popper {
+    .time-select-item {
+        font-size: 18px;
+
+        &.selected {
+            color: $CORAL;
+        }
+    }
+}
+.pam-date-popper {
+    .el-date-picker__header {
+        .el-picker-panel__icon-btn:hover, .el-date-picker__header-label:hover {
+            color: $CORAL;
+        }
+    }
+    .el-picker-panel__body {
+        .el-picker-panel__content {
+            .el-date-table {
+                .el-date-table__row {
+                    td.today span {
+                        color: $CORAL;
+                    }
+                    td.current span {
+                        background-color: $CORAL;
+                    }
+                    td.available:hover {
+                        color: $CORAL;
+                    }
+                    td.today.current span {
+                        color: $PRIMARY_WHITE;
+                    }
+                }
+            }
+            .el-year-table {
+                td.current .cell {
+                    color: $CORAL;
+                }
+                td.today .cell {
+                    color: $CORAL;
+                }
+                td.available .cell:hover {
+                    color: $CORAL;
+                }
+            }
+            .el-month-table {
+                td.current .cell {
+                    color: $CORAL;
+                }
+                td.today .cell {
+                    color: $CORAL;
+                }
+                td .cell:hover {
+                    color: $CORAL;
+                }
+            }
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/PAMapp/assets/scss/vendors/elementUI/_dialog.scss b/PAMapp/assets/scss/vendors/elementUI/_dialog.scss
index 24c2881..54f40d6 100644
--- a/PAMapp/assets/scss/vendors/elementUI/_dialog.scss
+++ b/PAMapp/assets/scss/vendors/elementUI/_dialog.scss
@@ -35,3 +35,38 @@
     }
   }
 }
+
+.pam-dialog-review {
+  .review-content {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-evenly;
+  }
+  .review-text {
+    width: 60%;
+    line-height: 28px;
+    @extend .p;
+    @extend .text--lighter;
+  }
+  .review-score {
+    display: flex;
+    justify-content: center;
+    margin-bottom: 30px;
+  }
+  .review-btn {
+    display: flex;
+    justify-content: center;
+  }
+}
+
+.pam-dialog-reserved {
+  .reserved-info {
+    font-size: 20px;
+    overflow-y:scroll;
+    height: 400px;
+  }
+  .reserved-btn {
+    display: flex;
+    justify-content: center;
+  }
+}
\ No newline at end of file
diff --git a/PAMapp/assets/scss/vendors/elementUI/_input.scss b/PAMapp/assets/scss/vendors/elementUI/_input.scss
index 8f48451..917ac76 100644
--- a/PAMapp/assets/scss/vendors/elementUI/_input.scss
+++ b/PAMapp/assets/scss/vendors/elementUI/_input.scss
@@ -1,3 +1,37 @@
 .el-input__inner:focus{
   border-color:#DCDFE6;
 }
+
+.input-radius > .el-input__inner {
+  border-radius: 10px;
+}
+
+.el-input__inner {
+  font-size: 18px;
+}
+
+.pam-appointment-textarea {
+  &.is-disabled {
+    .el-textarea__inner {
+      color: #222222;
+      border: 1px solid #707070;
+
+      &::placeholder {
+        color: #A7A8AA;
+      }
+    }
+  }
+
+  .el-textarea__inner {
+      border: 1px solid #707070;
+      padding: 10px 20px;
+      box-sizing: border-box;
+      border-radius: 5px;
+      font-size: 18px;
+
+      &:focus {
+          outline: none;
+          border: solid 1px $SKY_BLUE;
+      }
+  }
+}
diff --git a/PAMapp/assets/scss/vendors/elementUI/_radio.scss b/PAMapp/assets/scss/vendors/elementUI/_radio.scss
index 22d3686..af72595 100644
--- a/PAMapp/assets/scss/vendors/elementUI/_radio.scss
+++ b/PAMapp/assets/scss/vendors/elementUI/_radio.scss
@@ -18,36 +18,53 @@
         .el-radio__label {
             text-align: center;
             color: $PRIMARY_BLACK;
-            display: block;
-            line-height: 110px;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
             padding-left: 0;
             background-size: cover;
             background-position: center;
             background-repeat: no-repeat;
+            height: 100%;
             @extend .mdTxt;
+
+            .subtitle {
+                margin-top: 10px;
+                @extend .smTxt_bold;
+                color: $PRUDENTIAL_GREY;
+            }
         }
 
         &.is-checked {
             background-color: $PEACH;
             .el-radio__label {
                 color: $PRIMARY_WHITE;
+
+                .subtitle {
+                    color: $PRIMARY_WHITE;
+                    font-weight: lighter;
+                }
             }
         }
     }
 }
 
-.pam-single__select--col{
+.pam-single__select--col {
     width: 100%;
     display: flex;
-    flex-direction: column;
+    justify-content: center;
+    margin-top: 30px;
     .el-radio-button{
         @extend .fix-chrome-click--issue;
-        width: 100%;
-        margin-top: 30px;
+        margin-right: 10px;
+
         &.is-active{
             .el-radio-button__inner{
-                color:$DARK_BLUE;
                 font-weight: bolder;
+                background-color: $CORAL;
+                color: $PRIMARY_WHITE;
+                transition: 0s;
             }
         }
         &:focus:not(.is-focus):not(:active):not(.is-disabled){
@@ -58,9 +75,11 @@
             color:$PRIMARY_BLACK; ;
             background-color:$PRIMARY_WHITE;
             box-shadow: none;
-            width: 100%;
             font-size: 20px;
             font-weight: normal;
+            transition: 0s;
+            border: 1px $LIGHT_GREY solid;
+            border-radius: 50px;
         }
     }
 }
@@ -75,6 +94,22 @@
         background-image: url('~/assets/images/quickFilter/btn_man.svg');
     }
 }
+.btn_unlimited {
+    .el-radio__label {
+        background-image: url('~/assets/images/quickFilter/btn_unlimited.svg');
+    }
+}
+.btn_senior {
+    .el-radio__label {
+        background-image: url('~/assets/images/quickFilter/btn_senior.svg');
+    }
+}
+.btn_young {
+    .el-radio__label {
+        background-image: url('~/assets/images/quickFilter/btn_young.svg');
+    }
+}
+
 .pam-single-btn.el-radio-group{
   .el-radio {
     padding: 10px 20px;
@@ -110,5 +145,5 @@
         }
       }
     }
-}
+  }
 }
diff --git a/PAMapp/assets/scss/vendors/elementUI/_rate.scss b/PAMapp/assets/scss/vendors/elementUI/_rate.scss
index cd069c1..571b574 100644
--- a/PAMapp/assets/scss/vendors/elementUI/_rate.scss
+++ b/PAMapp/assets/scss/vendors/elementUI/_rate.scss
@@ -1,6 +1,5 @@
-.pam-quickFilter-rate {
+.pam-rate {
   height: auto;
-  margin-top: 30px;
   display: flex;
   justify-content: center;
   @extend .fix-chrome-click--issue;
@@ -40,3 +39,20 @@
     }
   }
 }
+
+.pam-satisfaction-rate {
+  height: auto;
+  display: flex;
+  justify-content: center;
+  margin-top: 10px;
+  @extend .fix-chrome-click--issue;
+  .el-rate__item {
+    .el-rate__icon {
+      font-size: 30px;
+    }
+
+    .el-icon-star-off {
+      color: $PRIMARY_BLACK !important;
+    }
+  }
+}
\ No newline at end of file
diff --git a/PAMapp/assets/scss/vendors/elementUI/_select.scss b/PAMapp/assets/scss/vendors/elementUI/_select.scss
new file mode 100644
index 0000000..815b184
--- /dev/null
+++ b/PAMapp/assets/scss/vendors/elementUI/_select.scss
@@ -0,0 +1,42 @@
+.pam-select.el-select {
+  width: 100%;
+
+  .el-input {
+
+    &__inner {
+      padding-left: 20px;
+      height: 46px;
+      border: 1px solid #707070;
+      border-radius: 5px;
+      font-size: 20px;
+    }
+    &__icon {
+      color: #ED1B2E;
+      font-size: 25px;
+      transform: none;
+    }
+  }
+  .is-focus {
+    .el-input__inner {
+      border-color: #707070;
+    }
+  }
+  .el-icon-arrow-up {
+    font-family: 'icomoon' !important;
+    speak: never;
+    font-style: normal;
+    font-weight: normal;
+    font-variant: normal;
+    text-transform: none;
+    line-height: 1;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    &:before {
+      content: "\e910";
+    }
+  }
+}
+
+.el-select-dropdown__item {
+  padding: 0 10px;
+}
\ No newline at end of file
diff --git a/PAMapp/assets/scss/vendors/elementUI/_textarea.scss b/PAMapp/assets/scss/vendors/elementUI/_textarea.scss
new file mode 100644
index 0000000..33743b0
--- /dev/null
+++ b/PAMapp/assets/scss/vendors/elementUI/_textarea.scss
@@ -0,0 +1,8 @@
+.el-textarea__inner {
+    border: 1px solid #707070;
+    padding: 10px 20px;
+    font-size: 18px;
+    &::placeholder {
+        font-size: 18px;
+    }
+}
diff --git a/PAMapp/assets/scss/vendors/elementUI/_tree.scss b/PAMapp/assets/scss/vendors/elementUI/_tree.scss
new file mode 100644
index 0000000..d81f901
--- /dev/null
+++ b/PAMapp/assets/scss/vendors/elementUI/_tree.scss
@@ -0,0 +1,90 @@
+.el-tree {
+    position: static;
+    background: transparent;
+    .el-tree-node {
+        white-space: pre-wrap;
+        word-break: break-all;
+
+        .el-tree-node__content {
+            border: solid 2px #CCCCCC;
+            padding: 10px 10px 10px 20px;
+            border-radius: 10px;
+            color: #68737A;
+            justify-content: space-between;
+            flex-direction: row-reverse;
+            margin-bottom: 10px;
+            height: auto;
+
+            .el-tree-node__expand-icon {
+                @extend .pam-icon;
+                @extend .icon--primary;
+
+                &.expanded::before {
+                    content: "\e900";
+                    display: inline-block;
+                    transform: rotate(90deg);
+                }
+            }
+
+            .el-tree-node__label {
+                @extend .mdTxt;
+                width: 85%;
+                display: block;
+                padding-left: 20px;
+                line-height: 27px;
+                word-wrap: break-word;
+                height: auto;
+            }
+        }
+
+        &.is-expanded > .el-tree-node__content {
+            background-color: #F68C96;
+            border: solid 2px #F68C96;
+
+            .el-tree-node__label,.el-tree-node__expand-icon {
+                color: $PRIMARY_WHITE;
+            }
+        }
+
+        .el-tree-node__children {
+            margin-bottom: 10px;
+            .el-tree-node {
+                .el-tree-node__content  {
+                    flex-direction: row;
+                    border: 0px;
+                    padding: 0 !important;
+                    margin-bottom: 0;
+
+                    .el-tree-node__expand-icon {
+                        display: none;
+                    }
+
+                    .el-tree-node__label {
+                        @extend .p;
+                        line-height: 27px;
+                        width: 100%;
+                        font-weight: lighter;
+                        padding-right: 10px;
+                        // line-break: loose;
+                        // display: flex;
+                        // justify-content: space-between;
+                        // text-align: justify;
+                        // text-align-last: left;
+                        // text-justify:inter-ideograph;
+                        // word-break: break-all;
+
+                        // &:after{
+                        //     display:inline-block;
+                        //     content:'';
+                        //     overflow:hidden;
+                        //     width:100%;
+                        //     height: 0;
+
+                        // }
+                    }
+                }
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/PAMapp/assets/scss/vendors/elementUI/_upload.scss b/PAMapp/assets/scss/vendors/elementUI/_upload.scss
new file mode 100644
index 0000000..bb70033
--- /dev/null
+++ b/PAMapp/assets/scss/vendors/elementUI/_upload.scss
@@ -0,0 +1,16 @@
+.pam-avatar-uploader{
+  display: flex;
+  justify-content: center;
+  margin-top: 10px;
+  .el-upload{
+    @extend .fix-chrome-click--issue;
+    .pam-avatar-uploader--title{
+      font-size: 20px;
+      letter-spacing: 2px;
+    }
+    &:focus{
+      border-color: $PRIMARY_BLACK;
+      color: $PRIMARY_BLACK;
+    }
+  }
+}
diff --git a/PAMapp/assets/ts/api/appointment.ts b/PAMapp/assets/ts/api/appointment.ts
deleted file mode 100644
index cfb1c6b..0000000
--- a/PAMapp/assets/ts/api/appointment.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { service } from '~/assets/ts/api/share';
-import { AxiosResponse } from 'axios';
-import { AppointmentLog } from '../models/appointment.model';
-
-// ���������
-export function getMyAppointmentList():Promise<ClientInfo[]> {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.get('/consultant/getMyAppointment', {headers}).then(res => res.data);
-}
-
-// 璅�撌脰蝯�
-export function markAsContact(appointmentId: number) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    // TODO: 頝�垢蝣箄���ㄐ��� API 銝�府���� void, ���府���敺���� - Ben 2021/11/16
-    return service.post('/appointment/markAsContacted/'+appointmentId, undefined, {headers})
-            .then(res => res.data)
-}
-
-export function getMyReviewLog(): Promise<AppointmentLog[]> {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.get('/satisfaction/getMySatisfaction', { headers }).then(res => res.data);
-}
-
-
-// 憿批��憿舐內����蝑敺孛�
-export function allAppointmentsView() {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.post('/consultant/record/allAppointmentsView', undefined, {headers})
-}
-
-// 霈�������孛�
-export function recordRead(appointmentId: number) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.post('/appointment/recordRead/' + appointmentId, undefined, {headers})
-}
-
-
-export interface ClientInfo {
-    id               : number,
-    phone            : string,
-    email            : string,
-    contactType      : string,
-    gender           : string,
-    age              : string,
-    job              : string,
-    requirement      : string,
-    communicateStatus: string,
-    hopeContactTime  : string,
-    otherRequirement : string,
-    appointmentDate  : Date,
-    agentNo          : string,
-    customerId       : number,
-    name             : string,
-    consultantViewTime: Date,
-    consultantReadTime: Date,
-    contactTime      : Date,
-    satisfactionScore: number
-}
\ No newline at end of file
diff --git a/PAMapp/assets/ts/api/consultant.ts b/PAMapp/assets/ts/api/consultant.ts
deleted file mode 100644
index 159c2fd..0000000
--- a/PAMapp/assets/ts/api/consultant.ts
+++ /dev/null
@@ -1,262 +0,0 @@
-import { service } from '~/assets/ts/api/share';
-import { AxiosResponse } from 'axios';
-import { AppointmentDetail } from '../models/AppointmentDetail';
-import { ConsultantLoginInfo } from '../models/ConsultantLoginInfo';
-import _ from 'lodash';
-import { UserSetting } from '../models/account.model';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-
-// 憿批恥��(TODO: OTP隤����� ���蝙�)
-export function login(user: any) {
-    return service.post('/authenticate', user)
-}
-
-// 憿批恥��-��TP
-export function sendOtp(loginInfo: LoginRequest) {
-    return service.post<OtpInfo>('/otp/sendOtp', loginInfo).then(res => res.data)
-}
-
-// 憿批恥��-撽�tp銝衣�
-export function loginVerify(loginVerify: LoginVerify) {
-    return service.post('/otp/verify', loginVerify)
-}
-
-// 憿批恥閮餃��
-export function register(registerInfo: RegisterInfo) {
-    return service.post('/otp/register', registerInfo)
-}
-
-// ��靽憿批��
-export function recommend() {
-    return service.get<Consultant[]>('/consultant/recommend')
-            .then(res => res.data);
-}
-
-// ���“���
-export function getFavoriteConsultant() {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.get<Consultant[]>('/consultant/favorite', {headers})
-            .then(res => res.data);
-}
-
-// 敹恍�祟�
-export function fastQuery(data: FastQueryParams) {
-    return service.post('/consultant/fastQuery', data)
-}
-
-// ������
-export function strictQuery(data:StrictQueryParams):Promise<AxiosResponse<AgentOfStrictQuery[]>>{
-    return service.post('/consultant/strictQuery', data)
-}
-
-// ��憿批��
-export function addFavoriteConsultant(agentNoList: string[]) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.post('/consultant/favorite', {agentNoList}, {headers})
-}
-
-// ����岷���
-export function appointmentDemand(data: AppointmentParams) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.post('/appointment/customer/create', data, {headers})
-}
-
-//憿批�底蝝啗���
-export function getConsultantDetail(agentNo:string){
-    return service.get('/consultant/detail', {params:{agentNo:agentNo}})
-}
-
-// 蝘駁憿批��
-export function deleteConsultant(agentId: string) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.delete('/consultant/favorite/'+agentId, {headers})
-}
-
-// �����Ⅳ����
-export function getImgOfVerification():Promise<string>{
-  return service.get('/login/validate/get_img_code',{ responseType : 'arraybuffer' })
-    .then(response=>{
-      const toBase64 = window.btoa(_.reduce(new Uint8Array(response.data),(data,byte)=>data + String.fromCharCode(byte),''));
-      const imgSrc = `data:image/jpeg;base64,${toBase64}`;
-      return imgSrc;
-  });
-}
-
-// 撽�Ⅳ 撽��
-export function getVerificationStatus(imgCode:string):Promise<AxiosResponse<boolean>>{
-  return service.get('/login/validate/verify_img_code/'+imgCode);
-}
-
-// 憿批��
-export function logInToConsultant(consultantDto:ConsultantLoginInfo):Promise<AxiosResponse<RequestOfLoginSuccess>>{
-    return service.post('/eService/authenticate',consultantDto);
-}
-
-// �����蝝啁�
-export function getAppointmentDetail(apointmentId: number):Promise<AxiosResponse<AppointmentDetail>> {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.get('/appointment/getDetail/'+apointmentId, {headers})
-}
-
-//���蝙��董�����
-export function getUserAccountSetting() : Promise<UserSetting> {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.get<UserSetting>('/customer/info', {headers}).then(res => res.data);
-}
-
-//��雿輻�董�����
-export function updateAccountSetting(params: any) : any {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.put('/customer/info', params ,{headers}).then(res => res.data);
-}
-
-//摰X�脰�遛��漲閰��
-
-export function userReviewsConsultants(data: UserReviewsConsultantsParams) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.post('/satisfaction/create', data ,{headers});
-}
-
-// ������
-export function cancelAppointment(appointment: number) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.delete('/appointment/'+appointment ,{headers});
-}
-
-// 蝺刻摩����
-export function editAppointment(editAppointmentParams: editAppointmentParams) {
-    const headers = {
-        Authorization: 'Bearer ' + localStorage.getItem('id_token')
-    }
-    return service.put('/appointment', editAppointmentParams, {headers});
-}
-
-export interface FastQueryParams {
-    gender             : string,
-    communicationStyles: string[],
-    avgScore           : number,
-    status             : string
-}
-
-export interface AppointmentRequests {
-    phone          : string,
-    email          : string,
-    contactType    : string,
-    gender         : string,
-    age            : string,
-    job            : string,
-    requirement    : string[],
-    hopeContactTime: ContactTime[],
-    agentNo        : string,
-}
-export interface ContactTime {
-  selectWeekOptions : string[],
-  selectTimesOptions: string[]
-}
-export interface AppointmentParams {
-    phone          : string,
-    email          : string,
-    contactType    : string,
-    gender         : string,
-    age            : string,
-    job            : string,
-    requirement    : string,
-    hopeContactTime: string,
-    agentNo        : string
-}
-export interface StrictQueryParams{
-    gender          : string;
-    avgScore        : number;
-    status          : string;    //phase 1 disable
-    area            : string;
-    requirements    : string[];
-    otherRequirement: string;
-    seniority       : string;
-    popularTags     : string[];
-    otherPopularTags: string;
-}
-export interface AgentOfStrictQuery {
-    agentNo      : string;
-    name         : string;
-    img          : string;
-    expertise    : string[];
-    avgScore     : number;
-    contactStatus: null;
-    updateTime   : null;
-    seniority    : string;
-    new          : boolean;
-}
-export interface RequestOfLoginSuccess{
-  id_token: string;
-}
-
-export interface LoginRequest {
-    /** "SMS"=�����"EMAIL"=email */
-    loginType: string,
-    /** �loginType憛俟MS��府甈葆�����MAIL��葆��隞嗡縑蝞� */
-    account: string,
-}
-
-export interface OtpInfo {
-    /** ��撣嗅otp隤��� */
-    indexKey: string,
-    /** Otp�������� */
-    success: boolean,
-    failCode: string,
-    failReason: string,
-}
-
-export interface LoginVerify {
-    /** �撣嗅����mail */
-    account: string,
-    /** �otp��pi���ndex key */
-    indexKey: string,
-    /** �����縑蝞望�����Ⅳ */
-    otpCode: string
-}
-
-export interface RegisterInfo {
-    phone?: string,
-    email?: string,
-    indexKey: string,
-    otpCode: string,
-    name: string,
-    /** "SMS"嚗tp������"EMAIL":Otp�email */
-    contactType: string
-}
-
-export interface UserReviewsConsultantsParams{
-    appointmentId:number,
-    score:number,
-}
-
-export interface editAppointmentParams {
-    id: number,
-    phone: string,
-    email: string,
-    contactType: string,
-    gender: string,
-    age: string,
-    job: string,
-    requirement: string,
-    hopeContactTime: string,
-    otherRequirement: null
-}
diff --git a/PAMapp/assets/ts/api/share.ts b/PAMapp/assets/ts/api/share.ts
deleted file mode 100644
index a119703..0000000
--- a/PAMapp/assets/ts/api/share.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios';
-import ErrorMessageBox from '../errorService';
-import axios from 'axios';
-import _ from 'lodash';
-
-const notRequireInterceptorErrorUrl=[
-  '/otp/verify',
-  '/eService/authenticate',
-  '/login/validate/get_img_code',
-  '/login/validate/verify_img_code',
-];
-
-export const service = axios.create({
-  baseURL: process.env.BASE_URL,
-  withCredentials: true
-});
-
-service.interceptors.request.use(
-  (config:AxiosRequestConfig)=>{
-    loadingStart();
-    return config;
-  }
-);
-
-service.interceptors.response.use(
-  (response:AxiosResponse)=>{
-    loadingFinish();
-    return response;  // maybe can use response.data
-  },
-  (error:AxiosError)=>{
-    loadingFinish();
-    showErrorMessageBox(error)
-    return Promise.reject(error);
-  }
-);
-
-function loadingStart(): void {
-    window.$nuxt.$loading.start();
-};
-
-function loadingFinish(): void {
-    window.$nuxt.$loading.finish();
-};
-
-function showErrorMessageBox(error:any):void{
-  // console.log('error', error, error.response);
-  if(!_.includes(notRequireInterceptorErrorUrl,error.config.url)){
-    switch (error.response.status) {
-      case 401:
-        Promise.all([ErrorMessageBox('���暹��'),window.$nuxt.$store.dispatch('localStorage/actionStorageClear')]).then(()=>{
-          _.isEqual(window.$nuxt.$route.name, 'index') ? location.reload() : window.$nuxt.$router.push('/');
-        });
-        break;
-
-      default:
-        ErrorMessageBox('', error);
-        break;
-    }
-  }
-};
diff --git a/PAMapp/assets/ts/errorService.ts b/PAMapp/assets/ts/errorService.ts
deleted file mode 100644
index 69aed3e..0000000
--- a/PAMapp/assets/ts/errorService.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { MessageBox } from 'element-ui';
-import { MessageBoxData } from 'element-ui/types/message-box';
-import * as _ from 'lodash';
-
-export default function ErrorMessageBox(errorMsg?:string, errorObj?: any):Promise<MessageBoxData>{
-  errorMsg && console.info('Error: ', errorMsg);
-  errorObj && console.error('Error Details: ', errorObj?.response || errorObj);
-
-  return MessageBox({
-    message: errorMsg
-              ? `${breakTextByComma(errorMsg)}`
-              : `<div class="message-header"> 蝟餌絞���隤�: ${errorObj?.response?.status} </div>
-                  <div class="message-content">${errorObj?.response?.data?.detail}</div>`,
-    dangerouslyUseHTMLString: true,
-    showClose:false,
-    showConfirmButton:true,
-    confirmButtonText:'蝣箄��',
-    customClass:'pam-message-box',
-    closeOnClickModal:false,
-  });
-}
-// ������銵�
-function breakTextByComma(errorMsg:string):string{
-  return _.split(errorMsg,"嚗�").join('<br>');
-}
diff --git a/PAMapp/assets/ts/models/AppointmentDetail.ts b/PAMapp/assets/ts/models/AppointmentDetail.ts
deleted file mode 100644
index c13f9a8..0000000
--- a/PAMapp/assets/ts/models/AppointmentDetail.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-
-export interface AppointmentDetail {
-    id: number;
-    phone: string;
-    email: string;
-    contactType: string;
-    gender: string;
-    age: string;
-    job: string;
-    requirement: string;
-    communicateStatus: string;
-    hopeContactTime: string;
-    otherRequirement: string;
-    appointmentDate: Date;
-    agentNo: string;
-    customerId: number;
-    name: string;
-}
diff --git a/PAMapp/assets/ts/models/account.model.ts b/PAMapp/assets/ts/models/account.model.ts
deleted file mode 100644
index abc4914..0000000
--- a/PAMapp/assets/ts/models/account.model.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface UserSetting {
-    name: string;
-    phone?: string;
-    email?: string;
-}
\ No newline at end of file
diff --git a/PAMapp/assets/ts/models/appointment.model.ts b/PAMapp/assets/ts/models/appointment.model.ts
deleted file mode 100644
index 2d5733d..0000000
--- a/PAMapp/assets/ts/models/appointment.model.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export interface AppointmentLog {
-    id              : number,
-    createdDate     : Date,
-    lastModifiedDate: Date,
-    customerId      : number,
-    agentNo         : string,
-    status          : 'UNFILLED' | 'FILLED',
-    score           : number,
-    agentName       : string,
-    customerName    : string,
-}
\ No newline at end of file
diff --git a/PAMapp/assets/ts/models/consultant.model.ts b/PAMapp/assets/ts/models/consultant.model.ts
deleted file mode 100644
index a2de171..0000000
--- a/PAMapp/assets/ts/models/consultant.model.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-export interface Consultant {
-    agentNo            : string;
-    name               : string;
-    img                : string;
-    expertise          : string[];
-    avgScore           : number;
-    contactStatus?     : string;
-    createTime         : Date | string;
-    updateTime         : Date | string;
-    role               : string;
-    seniority          : string,
-    appointments?      : Appointment[];
-    new                : boolean,
-}
-
-export interface Appointment {
-    id                 : number;
-    phone?             : string;
-    email?             : string;
-    contactType        : string;
-    gender             : string;
-    age                : string;
-    job                : string;
-    requirement        : string;
-    communicateStatus  : string;
-    hopeContactTime    : string;
-    otherRequirement?  : string;
-    appointmentDate    : Date;
-    lastModifiedDate   : Date;
-    agentNo            : string;
-    customerId         : number;
-    name               : string;
-    consultantViewTime?: Date;
-    consultantReadTime?: Date;
-    satisfactionScore? : number;
-};
-
diff --git a/PAMapp/assets/ts/models/enum/Role.ts b/PAMapp/assets/ts/models/enum/Role.ts
deleted file mode 100644
index acae4db..0000000
--- a/PAMapp/assets/ts/models/enum/Role.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export enum Role{
-    ADMIN = 'admin',
-    USER = 'user',
-    NOT_LOGIN = ''
-}
\ No newline at end of file
diff --git a/PAMapp/components/AddAndReservedBtns.vue b/PAMapp/components/AddAndReservedBtns.vue
index d88a444..f2f3177 100644
--- a/PAMapp/components/AddAndReservedBtns.vue
+++ b/PAMapp/components/AddAndReservedBtns.vue
@@ -1,10 +1,10 @@
 <template>
     <el-row type="flex" justify="center" :class="cusClass">
         <el-button @click="addConsultant(agentInfo)" :disabled="isAdded">
-            <span> {{isAdded ? '撌脣�憿批��' : '+ 憿批��'}}</span>
+            <span> {{ isAdded ? '撌脣�憿批��' : '+ 憿批��' }}</span>
         </el-button>
         <el-button
-            @click="reserveCommunication"
+            @click="navigateToReservationForm"
             type="primary"
         >�脰����</el-button>
     </el-row>
@@ -12,28 +12,42 @@
 
 <script lang="ts">
 import { Vue, Component, Prop, Emit, Action, State, namespace } from 'nuxt-property-decorator';
-import { Consultant } from '~/assets/ts/models/consultant.model';
+import { Consultant } from '~/shared/models/consultant.model';
 
-const localStorage = namespace('localStorage');
 @Component
 export default class AddAndReservedBtns extends Vue {
-    @Action addToMyConsultantList!: (consultantToAdd: Consultant) => Promise<boolean>
-    @State('myConsultantList') myConsultantList!: Consultant[];
-    @Prop() agentInfo!: Consultant;
-    @Prop() cusClass!: string;
+
+    @Action
+    addToMyConsultantList!: (consultantToAdd: Consultant) => Promise<boolean>
+
+    @State('myConsultantList')
+    myConsultantList!: Consultant[];
+
+    @Prop()
+    agentInfo!: Consultant;
+
+    @Prop()
+    cusClass!: string;
+
     isVisiblePopUp = false;
-    addConsultant(item: Consultant) {
+
+    //////////////////////////////////////////////////////////////////////
+
+    @Emit('openPopUp')
+    openPopUp(popUpTxt: string = '����憿批��'): string {
+        return popUpTxt;
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    addConsultant(item: Consultant): void {
         this.addToMyConsultantList(item).then(addOk => {
             addOk && this.openPopUp();
         });
     }
 
-    reserveCommunication() {
+    navigateToReservationForm(): void {
         this.$router.push(`/questionnaire/${this.agentInfo.agentNo}`);
-    }
-
-    @Emit('openPopUp') openPopUp(popUpTxt: string = '����憿批��') {
-        return popUpTxt
     }
 
     get isAdded() {
@@ -41,4 +55,4 @@
                 ? true : false
     }
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/components/AddressPicker.vue b/PAMapp/components/AddressPicker.vue
index 0da4ff9..95314fa 100644
--- a/PAMapp/components/AddressPicker.vue
+++ b/PAMapp/components/AddressPicker.vue
@@ -1,12 +1,12 @@
 <template>
     <div class="text--center">
-      <div class="subTitle mb-10">������</div>
+      <div class="subTitle mb-10">�����</div>
       <el-input
           type="text"
-          class="p mt-10 cursor--pointer "
+          class="p mt-10 cursor--pointer input-radius"
           tabindex="-1"
           v-model="keyWord"
-          @change="searchDistrict"
+          @input="searchDistrict"
           placeholder="隢撓���摮�"
       ></el-input>
       <Ui-ScrollPicker
@@ -23,17 +23,30 @@
 <script lang="ts">
 import { Vue, Component, Emit } from 'nuxt-property-decorator';
 
+import { taiwanCities } from '~/shared/const/taiwan-cities';
+
 @Component
 export default class AddressPicker extends Vue {
 
-    options = ['�����', '�����', '�����', '獢���', '�蝡孵��', '�蝡寧腦', '���腦', '�銝剖��', '敶啣�腦', '���腦', '���腦', '��儔撣�', '��儔蝮�', '�����', '擃���', '撅蝮�', '��蝮�', '��蝮�', '摰蝮�', '瞉�腦', '���蝮�', '��瘙腦'];
-    keyWord = '';
+    options      : string[] = taiwanCities;
+    keyWord      : string   = '';
     filterOptions: string[] = [];
-    district = '�����';
+    district     : string   = '�����';
+
+    //////////////////////////////////////////////////////////////////////
 
     mounted() {
         this.filterOptions = JSON.parse(JSON.stringify(this.options));
     }
+
+    //////////////////////////////////////////////////////////////////////
+
+    @Emit('confirm')
+    confirm(): string {
+        return this.district;
+    }
+
+    //////////////////////////////////////////////////////////////////////
 
     searchDistrict() {
         this.filterOptions = this.options.filter(e => e.match(this.keyWord));
@@ -43,10 +56,7 @@
         this.district = value;
     }
 
-    @Emit('confirm')
-    confirm() {
-        return this.district;
-    }
+
 
 }
 </script>
diff --git a/PAMapp/components/Appointment/AppointmentClosedInfo.vue b/PAMapp/components/Appointment/AppointmentClosedInfo.vue
new file mode 100644
index 0000000..ec701c4
--- /dev/null
+++ b/PAMapp/components/Appointment/AppointmentClosedInfo.vue
@@ -0,0 +1,74 @@
+<template>
+    <section class="close-appointment-detail">
+
+        <div class="close-appointment-detail-nav">
+          <div class="mdTxt">蝯�撘�</div>
+          <div class="mdTxt text--primary text--underline cursor--pointer" @click="editAppointmentHasClosed">蝺刻摩</div>
+        </div>
+        <span class="mt-10 mb-30">{{ displayClosedType }}</span>
+        <template v-if="appointmentDetail.appointmentClosedInfo.policyholderIdentityId && appointmentDetail.communicateStatus === 'done'">
+          <div class="mdTxt mb-10">靽頨思遢霅���</div>
+          <div class="mb-30">{{ appointmentDetail.appointmentClosedInfo.policyholderIdentityId }}</div>
+        </template>
+
+        <template v-if="appointmentDetail.appointmentClosedInfo.planCode && appointmentDetail.communicateStatus === 'done'">
+          <div class="mdTxt mb-10">���誨蝣噗lan Code</div>
+          <div class="mb-30">{{ appointmentDetail.appointmentClosedInfo.planCode }}</div>
+        </template>
+
+        <template v-if="appointmentDetail.appointmentClosedInfo.closedReason && appointmentDetail.communicateStatus !== 'done'">
+          <div class="mdTxt mb-10">���漱����</div>
+          <div >{{ appointmentDetail.appointmentClosedInfo.closedReason | toFailReasonLabel }}</div>
+          <div v-if="appointmentDetail.appointmentClosedInfo.closedOtherReason" class="mt-10">{{ appointmentDetail.appointmentClosedInfo.closedOtherReason }}</div>
+          <div class="mb-30"></div>
+        </template>
+
+        <template v-if="appointmentDetail.appointmentClosedInfo.policyEntryDate && appointmentDetail.communicateStatus === 'done'">
+          <div class="mdTxt mb-10">�脖辣����</div>
+          <div class="mb-30">{{ appointmentDetail.appointmentClosedInfo.policyEntryDate | formatDate }}</div>
+        </template>
+
+        <div class="mdTxt mb-10">��酉</div>
+        <div>{{ appointmentDetail.appointmentClosedInfo.remark || '�' }}</div>
+
+    </section>
+</template>
+
+<script lang="ts">
+import { Vue, Component, Prop } from 'nuxt-property-decorator';
+
+import { Appointment } from '~/shared/models/appointment.model';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+
+@Component
+export default class AppointmentClosedInfo extends Vue {
+
+    @Prop()
+    appointmentDetail!: Appointment;
+
+    contactStatus = ContactStatus;
+
+    //////////////////////////////////////////////////////////////////////
+
+    editAppointmentHasClosed(): void{
+      this.$router.push(`/appointment/${this.appointmentDetail.id}/close`);
+    }
+
+    get displayClosedType(): string {
+      let closedType = '��漱';
+      switch (this.appointmentDetail.communicateStatus) {
+        case this.contactStatus.CLOSE:
+          closedType = '���漱';
+          break;
+        case this.contactStatus.CANCEL:
+          closedType = '����';
+          break;
+      }
+      return closedType;
+    }
+
+}
+</script>
+
+<style lang="scss" scoped>
+</style>
diff --git a/PAMapp/components/Appointment/AppointmentInterviewList.vue b/PAMapp/components/Appointment/AppointmentInterviewList.vue
new file mode 100644
index 0000000..92fe2cc
--- /dev/null
+++ b/PAMapp/components/Appointment/AppointmentInterviewList.vue
@@ -0,0 +1,76 @@
+<template>
+    <div>
+        <div class="interview__header">
+            <div class="mdTxt">蝝赤蝝����</div>
+            <div class="pam-link-button"
+            @click="addInterview">+�憓�</div>
+        </div>
+
+        <InterviewCard :interviewList="displayAppointmentList"></InterviewCard>
+
+        <section class="text--right mt-30 interview-check-more" v-if="interviewList.length > 3">
+                <div class="pam-link-button" @click="readAllList = !readAllList">
+                  {{ readAllList ?  '憿舐內頛��' : '撅��憭�' }}
+                  <i :class="readAllList ? 'icon-top' : 'icon-down'"></i>
+                  </div>
+        </section>
+    </div>
+</template>
+
+<script lang="ts">
+import { Vue, Component, Prop, Watch, namespace } from 'nuxt-property-decorator';
+
+import { InterviewRecord } from '~/shared/models/appointment.model';
+
+@Component
+export default class AppointmentInterviewList extends Vue {
+
+  @Prop()
+  interviewList!: InterviewRecord[];
+
+  appointmentId!: string;
+  displayList: InterviewRecord[] = [];
+  readAllList = false;
+
+  get displayAppointmentList(): InterviewRecord[] {
+    return this.readAllList ? this.displayList : this.displayList.slice(0, 3);
+  }
+
+
+  //////////////////////////////////////////////////////////////////////
+
+  mounted() {
+      this.appointmentId = this.$route.params.appointmentId;
+  }
+
+  //////////////////////////////////////////////////////////////////////
+
+  @Watch('interviewList', {immediate: true})
+  updateInterviewList() {
+      if (this.interviewList && this.interviewList.length > 0) {
+          this.displayList = this.interviewList
+            .map((i) => ({ ...i, sortDate: new Date(i.interviewDate)}))
+            .sort((preItem, nextItem) => +nextItem.sortDate - +preItem.sortDate);
+      }
+  }
+
+  //////////////////////////////////////////////////////////////////////
+
+  addInterview(): void {
+    this.$router.push(`/appointment/${this.appointmentId}/interview/new`);
+  }
+
+}
+</script>
+
+<style lang="scss" scoped>
+.interview__header {
+  display        : flex;
+  justify-content: space-between;
+  margin-bottom  : 10px;
+}
+.interview-check-more{
+  display: flex;
+  justify-content: center;
+}
+</style>
diff --git a/PAMapp/components/Appointment/AppointmentProgress.vue b/PAMapp/components/Appointment/AppointmentProgress.vue
new file mode 100644
index 0000000..5d31d83
--- /dev/null
+++ b/PAMapp/components/Appointment/AppointmentProgress.vue
@@ -0,0 +1,119 @@
+<template>
+    <div class="appointment-progress">
+      <div
+        class="appointment-progress__indicator"
+        :style="{ width: indicatorLineWidth }">
+        <div class="line"></div>
+        <div
+          class="circle"
+          v-for="(step, index) in stepList"
+          :class="{ 'activate': index < displayCurrentStep }"
+          :key="index">
+        </div>
+      </div>
+      <div class="appointment-progress__status-label xxsTxt text--bold ml-5">
+        {{ displayStatusLabel }}
+      </div>
+    </div>
+</template>
+
+<script lang="ts">
+import { Vue, Component, Prop } from 'nuxt-property-decorator';
+
+@Component
+export default class AppointmentProgress extends Vue {
+
+  @Prop()
+  totalStep?: number;
+
+  @Prop()
+  currentStep!: 'picked' | 'reserved' | 'contacted' | 'done' | 'closed' | 'cancel';
+
+  //////////////////////////////////////////////////////////////////////
+
+  get stepList(): number[] {
+    const tempList: number[] = [];
+    for(let i = 0; i < (this.totalStep || 3); i ++) {
+      tempList.push(i);
+    }
+    return tempList;
+  }
+
+  get indicatorLineWidth(): string {
+    const connectLineGutter = 10;
+    return ((this.totalStep || 3) * 10 + connectLineGutter) + 'px';
+  }
+
+  get displayCurrentStep(): number {
+    let step: number = 1;
+    switch (this.currentStep) {
+      case 'contacted':
+        step = 2;
+        break;
+      case 'done':
+        step = 3;
+        break;
+      case 'closed':
+        step = 3;
+        break;
+      case 'cancel':
+        step = 3;
+        break;
+    }
+    return step;
+  }
+
+  get displayStatusLabel(): '��蝯�' | '蝝赤銝�' | '��漱' | '���漱' | '撌脣���' {
+    let label: '��蝯�' | '蝝赤銝�' | '��漱' | '���漱' | '撌脣���' = '��蝯�';
+    switch (this.currentStep) {
+      case 'contacted':
+        label = '蝝赤銝�';
+        break;
+      case 'done':
+        label = '��漱';
+        break;
+      case 'closed':
+        label = '���漱';
+        break;
+      case 'cancel':
+        label = '撌脣���';
+        break;
+    }
+    return label;
+  }
+
+}
+</script>
+
+<style lang="scss" scoped>
+
+.appointment-progress{
+  display: flex;
+  .appointment-progress__indicator {
+    align-items    : center;
+    display        : flex;
+    justify-content: space-between;
+    position       : relative;
+    .circle {
+      background-color: white;
+      border          : 1px solid #CCCCCC;
+      border-radius   : 50%;
+      height          : 8px;
+      margin          : 0;
+      width           : 8px;
+      z-index         : 5;
+      &.activate {
+        background-color: $BEIGE;
+      }
+    }
+    .line {
+      background-color: #707070;
+      height          : 3px;
+      left            : 5%;
+      position        : absolute;
+      width           : 90%;
+    }
+  }
+}
+
+</style>
diff --git a/PAMapp/components/Appointment/AppointmentRecordList.vue b/PAMapp/components/Appointment/AppointmentRecordList.vue
new file mode 100644
index 0000000..27dfde9
--- /dev/null
+++ b/PAMapp/components/Appointment/AppointmentRecordList.vue
@@ -0,0 +1,53 @@
+<template>
+    <div class="record-log-component">
+        <div class="mdTxt mt-30 mb-10">蝟餌絞�蝝����</div>
+
+            <InterviewRecordCard :noticeLogsList="displayLogs.slice(0, 3)"></InterviewRecordCard>
+
+            <section class="text--center mt-30" v-if="displayLogs.length > 3">
+                <div class="pam-link-button"
+                    @click="readMoreBtn"
+                >撅��憭�
+                <i class="icon-expand"></i></div>
+            </section>
+    </div>
+</template>
+
+<script lang="ts">
+import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator';
+import { NoticeLogs } from '~/shared/models/appointment.model';
+
+@Component
+export default class AppointmentRecordList extends Vue {
+
+    @Prop()
+    noticeLogs!: NoticeLogs[];
+
+    appointmentId: string       = '';
+    displayLogs  : NoticeLogs[] = [];
+
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+        this.appointmentId = this.$route.params.appointmentId;
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    @Watch('noticeLogs', {immediate: true})
+    onNoticeLogsChange() {
+      if (this.noticeLogs.length) {
+        this.displayLogs = this.noticeLogs
+                            .map((i) => ({ ...i, sortDate: new Date(i.createdDate)}))
+                            .sort((preItem, nextItem) => +nextItem.sortDate - +preItem.sortDate);
+      }
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    readMoreBtn() {
+        this.$router.push(`/appointment/${this.appointmentId}/recordList`);
+    }
+
+}
+</script>
diff --git a/PAMapp/components/BackActionBar.vue b/PAMapp/components/BackActionBar.vue
index 83d03bb..29fc5ee 100644
--- a/PAMapp/components/BackActionBar.vue
+++ b/PAMapp/components/BackActionBar.vue
@@ -1,22 +1,40 @@
 <template>
     <nav class="pam-back-action-bar fix-chrome-click--issue">
-        <a @click="pushRouterByLoginRole" v-if="questionnaireState">
-          <i class="icon-left "></i>{{ label }}
+        <a @click="goBack">
+            <i class="icon-left "></i>
         </a>
+        <div class="label">{{ label }}</div>
     </nav>
 </template>
 
 <script lang="ts">
 import { namespace } from 'nuxt-property-decorator';
 import { Vue, Component,} from 'vue-property-decorator';
-import { Role } from '~/assets/ts/models/enum/Role';
-import * as _ from 'lodash';
 
-const roleStorage = namespace('localStorage');
+import * as _ from 'lodash';
+import { Role } from '~/shared/models/enum/Role';
+
+const appointmentStore = namespace('appointment.store');
+const roleStorage      = namespace('localStorage');
+
 @Component
 export default class UiCarousel extends Vue {
-  @roleStorage.Getter currentRole!:string;
-  questionnaireState: boolean = true;
+
+  @roleStorage.Getter
+  currentRole!:string;
+
+  @appointmentStore.Getter
+  isCloseAppointment!: boolean;
+
+  //////////////////////////////////////////////////////////////////////
+
+  goBack(): void {
+    const pathName = this.$route.name;
+    pathName?.includes('myConsultantList')
+      ? this.$router.push('/')
+      : this.$router.go(-1);
+  }
+
   get label(): string {
     if (this.$route.name) {
       const routeName = this.$route.name.split('-')[0];
@@ -35,7 +53,10 @@
           featureLabel = '���“���';
           break;
         case 'agentInfo':
-          featureLabel = _.isEqual(this.currentRole,Role.ADMIN) ? '���董�����' : '璆剖�鞈��'
+          const agentFeatureLabel = this.$route.name.includes('edit') ? '蝺刻摩撣唾����' : '���董�����';
+          featureLabel = _.isEqual(this.currentRole,Role.ADMIN)
+                  ? agentFeatureLabel
+                  : '璆剖�鞈��'
           break;
         default:
           featureLabel = '�����';
@@ -46,6 +67,7 @@
         case 'notification':
           featureLabel = '�';
           break;
+        case 'userReviewsRecord':
         case 'record':
           featureLabel = '�������';
           break;
@@ -55,6 +77,29 @@
         case 'consultantAccountSetting':
           featureLabel = '���董�����';
           break;
+        case 'faq':
+          featureLabel = 'F&Q 撣貉����';
+          break;
+        case 'appointment':
+          const appointmentFeatureLabel = this.$route.name.includes('close')
+                                                            ? '蝯��'
+                                                            : this.isCloseAppointment ? '蝯��敦' : '������';
+          const inInterview = this.$route.name.includes('interview');
+          const addNewInterview = this.$route.name.includes('new');
+          const interviewList = this.$route.name.includes('interviewList');
+          const recordList = this.$route.name.includes('recordList');
+          if (interviewList) {
+            featureLabel = '蝝赤蝝����';
+          } else if (recordList) {
+            featureLabel = '蝟餌絞�蝝����';
+          } else if (inInterview) {
+            featureLabel = addNewInterview
+                  ? '�憓�赤蝝����'
+                  : '蝺刻摩蝝赤蝝����';
+          } else {
+            featureLabel = appointmentFeatureLabel;
+          }
+          break;
       }
       return featureLabel;
     } else {
@@ -62,44 +107,43 @@
     }
   }
 
-  pushRouterByLoginRole():void{
-    const pathName = this.$route.name;
-    pathName?.includes('myConsultantList') ? this.$router.push('/') : this.$router.go(-1);
-  }
-
-  set label(value) {
-    this.questionnaireState = value === '�脰����' ? this.currentRole === Role.USER : true;
-  }
 }
 </script>
 
 <style lang="scss" scoped>
 .pam-back-action-bar {
-  height: $MOB_NAV_BAR;
-  border: 1px solid #CCCCCC;
-  display: flex;
-  align-items: center;
-  position: fixed;
-  top: $MOB_NAV_BAR;
-  left: 0;
-  width: 100%;
+  height          : $MOB_NAV_BAR;
+  border          : 1px solid #CCCCCC;
+  display         : flex;
+  align-items     : center;
+  position        : fixed;
+  top             : $MOB_NAV_BAR;
+  left            : 0;
+  width           : 100%;
   background-color: $PRIMARY_WHITE;
-  z-index: 6;
+  z-index         : 6;
+  font-size       : 20px;
+  font-weight     : bold;
   i {
-    font-size: 20px;
+    display      : block;
     padding-right: 14px;
   }
   a {
-    cursor: pointer;
-    font-size: 24px;
-    font-weight: bold;
-    padding: 20px;
+    cursor : pointer;
+    padding: 0 20px;
+    width  : 26px;
+  }
+  .label {
+    margin   : 0 auto;
+    transform: translateX(-33px);
   }
 }
 
 @include desktop {
   .pam-back-action-bar {
-    top: $DESKTOP_NAV_BAR;
+    top      : $DESKTOP_NAV_BAR;
+    font-size: 24px;
   }
 }
+
 </style>
diff --git a/PAMapp/components/Client/ClientCard.vue b/PAMapp/components/Client/ClientCard.vue
index 44a5316..7cbde5d 100644
--- a/PAMapp/components/Client/ClientCard.vue
+++ b/PAMapp/components/Client/ClientCard.vue
@@ -2,33 +2,35 @@
     <div>
         <el-row
             type="flex"
+            ref="clientCardRef"
             class="rowStyle cursor--pointer"
             justify="space-between"
-            :class="{'new': !isView && isReserved}"
-            @click.native="openDetail"
+            :class="{'new': newAppointment }"
+            @click.native="viewAppointmentDetail"
         >
-            <el-col :xs="1" :sm="1" class="unread" align="middle" v-if="isReserved">
+        <div class="test">
+            <div class="unread" v-if="isReserved">
                 <div class="circle" v-if="!isRead"></div>
-            </el-col>
-            <el-col :xs="5" :sm="3" align="middle">
-                <el-avatar
-                    :size="50"
-                    src=""
-                ></el-avatar>
-                <div class="satisfaction">
-                    <template v-if="client.satisfactionScore">
-                        <i class="icon-star pam-icon icon--yellow satisfaction"></i>
-                        <span>{{client.satisfactionScore}}</span>
-                    </template>
-                    <template v-else>
-                        <div class="unfilled">�憛急遛��漲</div>
-                    </template>
+            </div>
+
+            <div class="pl-10">
+                <div class="smTxt_bold name">{{ client.name || 'NO NAME' }}</div>
+                <div  v-if="client.communicateStatus === contactStatus.RESERVED" class="my-10 xsTxt">������</div>
+                <div
+                  class="xsTxt mb-10 mt-10"
+                  v-else-if="client.communicateStatus === contactStatus.CONTACTED">
+                  蝝赤蝝����
                 </div>
-            </el-col>
-            <el-col :xs="14" :sm="14" class="pl-10">
-                <div class="smTxt_bold name">{{client.name}}</div>
-                <div class="message">������</div>
-                <div class="professionals">
+                <div
+                  class="xsTxt mb-10 mt-10"
+                  v-else>
+                  皛踵�漲
+                  <span v-if="client.satisfactionScore" class="xsTxt text--primary">
+                    <UiReviewScore :score="client.satisfactionScore"></UiReviewScore>
+                  </span>
+                  <span v-else class="xsTxt text--mid_grey">�憛�</span>
+                </div>
+                <div class="professionals mb-10" v-if="client.communicateStatus === contactStatus.RESERVED">
                     <template v-if="client.requirement">
                         <span
                             v-for="(item, index) in requirements"
@@ -41,36 +43,71 @@
                         >(摰X�����瘙�)</span>
                     </template>
                 </div>
-            </el-col>
-            <el-col class="flex-column contactInfo" :xs="4" :sm="6">
+                <AppointmentProgress
+                  :currentStep="client.communicateStatus"
+                ></AppointmentProgress>
+            </div>
+        </div>
+            <!-- <el-col :xs="5" :sm="3" align="middle">
+                <el-avatar
+                    :size="50"
+                ></el-avatar>
+                <div class="satisfaction" v-if="!hideReviews">
+                    <template v-if="client.satisfactionScore">
+                        <i class="icon-star pam-icon icon--yellow satisfaction"></i>
+                        <span>{{client.satisfactionScore}}</span>
+                    </template>
+                    <template v-else>
+                        <div class="unfilled">�憛急遛��漲</div>
+                    </template>
+                </div>
+            </el-col> -->
+
+            <div class="flex-column contactInfo" :xs="4" :sm="6">
+
                 <div
-                    class="smTxt_bold fix-chrome-click--issue"
-                    :class="{'unread-txt': reservedTxt === '�霈�', 'read-txt': reservedTxt !== '�霈�'}"
-                >{{reservedTxt}}</div>
+                  class="invite-msg smTxt_bold"
+                  @click.stop="showAddInterviewDialog"
+                  v-if="client.communicateStatus === contactStatus.RESERVED">
+                  ���赤�
+                </div>
                 <div
-                    class="date xsTxt text--mid_grey"
-                >{{date}}</div>
+                  class="invite-msg smTxt_bold"
+                  @click.stop="navigateToCloseAppointment"
+                  v-else-if="client.communicateStatus === contactStatus.CONTACTED">
+                  蝯��
+                </div>
+                <div
+                  class="invite-msg smTxt_bold"
+                  @click.stop="inviteReview"
+                  v-else-if="!client.satisfactionScore">
+                  ��遛��漲
+                </div>
+
+                <div
+                    class="date xsTxt text--black"
+                >{{ date }}</div>
                 <div
                     class="xsTxt text--mid_grey"
-                >{{time}}</div>
-            </el-col>
+                >{{ time }}</div>
+            </div>
         </el-row>
 
         <Ui-Dialog
-            :isVisible.sync="isVisibleDialog"
-            :width="width"
-            @closeDialog="close"
+            :isVisible.sync="isShowInformDialog"
+            :width="dialogWidth"
+            @closeDialog="closeInformDialog"
             class="pam-myDemand-dialog"
         >
             <h5 class="subTitle text--center mb-30"
             >{{isReserved ? '������' : '撌脰蝯∟���'}}</h5>
 
             <p v-if='isReserved'
-                class="smTxt text-right"
+                class="smTxt text--right"
             ><span v-if="isRead">{{client.consultantReadTime | formatDate}}</span> 撌脰�</p>
             <p
                 v-if="!isReserved"
-                class="smTxt text-right"
+                class="smTxt text--right"
             >{{client.contactTime | formatDate}} �蝯�</p>
             <p class="smTxt">{{client.appointmentDate | formatDate}} ����</p>
 
@@ -85,18 +122,66 @@
                 <p v-for="(item, index) in hopeContactTime"
                     :key="index"
                 >��蝯⊥�挾{{index + 1 | formatNumber}}嚗�<span>{{ item | formatHopeContactTime}}</span></p>
+            </div>
+            <div class="mt-30">
+                <div class="memoTitleStyle">
+                    <div class="mdTxt">�摰寞�膩</div>
+                    <div
+                        class="smTxt text--bold text--primary cursor--pointer text--underline edit"
+                        @click='editMemo'
+                    >蝺刻摩</div>
                 </div>
-                <div class="mt-30 text--center" v-if="isReserved">
-                    <el-button @click="markAppointment">璅酉�撌脤��蝯�</el-button>
+
+                <el-input
+                    class="mt-10 pam-appointment-textarea"
+                    type="textarea"
+                    :rows="3"
+                    maxlength="100"
+                    placeholder="隢撓�嚗��100摮��"
+                    :disabled="!isEdit"
+                    v-model="memo"
+                >
+                </el-input>
+
+                <div class="mt-10 smTxt text--bold text--primary text--right fixed-Height">
+                    <template v-if="isEdit">
+                        <span class="cursor--pointer" @click="cancelEditMemo">����</span>
+                        <span class="pl-20 cursor--pointer" @click="saveMemo">�摮�</span>
+                    </template>
                 </div>
+            </div>
+            <div class="mt-30 text--center" v-if="isReserved">
+                <el-button @click="markAppointment">璅酉�撌脤��蝯�</el-button>
+            </div>
         </Ui-Dialog>
+
+        <InterviewMsg
+          :client="client"
+          :isVisible.sync="isShowAddInterviewDialog">
+        </InterviewMsg>
+        <PopUpFrame :isOpen.sync="isShowInviteReviewDialog">
+          <div class="text--middle invite-review">
+            <div class="mb-30 mt-10">撌脩�遛��漲</div>
+            <div class="text--primary text--middle cursor--pointer text--underline" @click="isShowInviteReviewDialog = false" :size="'250px'">������</div>
+          </div>
+        </PopUpFrame>
     </div>
 </template>
 
 <script lang="ts">
-import { Vue, Component, Prop, Action } from 'nuxt-property-decorator';
-import { isMobileDevice } from '~/assets/ts/device';
-import { ClientInfo, markAsContact, recordRead } from '~/assets/ts/api/appointment';
+import { Vue, Component, Prop, namespace, Watch } from 'nuxt-property-decorator';
+
+import appointmentService from '~/shared/services/appointment.service';
+import myConsultantService from '~/shared/services/my-consultant.service';
+import UtilsService from '~/shared/services/utils.service';
+import { hideReviews } from '~/shared/const/hide-reviews';
+import { ElRow } from 'element-ui/types/row';
+import { Appointment, AppointmentMemoInfo } from '~/shared/models/appointment.model';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+import reviewsService from '~/shared/services/reviews.service';
+
+const appointmentStore = namespace('appointment.store');
+const localStorage     = namespace('localStorage');
 
 @Component({
     filters: {
@@ -118,12 +203,183 @@
     }
 })
 export default class ClientList extends Vue {
-    @Action updateMyAppointment!: (data: ClientInfo) => void
-    @Action storeConsultantList!: () => void;
+    @Prop()
+    client!: Appointment;
 
-    @Prop() client!: ClientInfo;
-    isVisibleDialog = false;
-    width = '';
+    @appointmentStore.Action
+    updateMyAppointmentList!: (data: Appointment) => void;
+
+    @appointmentStore.Action
+    getAppointmentDetail!: (appointmentId: number) => Promise<Appointment>;
+
+    @appointmentStore.Action
+    updateAppointmentDetail!: (id: number) => Appointment;
+
+    @appointmentStore.Getter
+    appointmentProgress!: ContactStatus;
+
+    @localStorage.Mutation
+    storageClearAppointmentIdFromMsg!: () => void;
+
+    contactStatus            = ContactStatus;
+
+    dialogWidth              = '';
+    hideReviews              = hideReviews;
+    isEdit                   = false;
+    isShowAddInterviewDialog = false;
+    isShowInformDialog       = false;
+    isShowInviteReviewDialog = false;
+    memo                     = '';
+
+    memoInfo: AppointmentMemoInfo = {
+        appointmentId: 0,
+        content      : '',
+        id           : 0
+    };
+
+    //////////////////////////////////////////////////////////////////////
+
+    @Watch('$route', {immediate: true})
+    onRouteChange() {
+        const appointmentIdFromMsg = this.$route.query.appointmentId;
+        if (appointmentIdFromMsg && +appointmentIdFromMsg === this.client.id) {
+            this.openDetail();
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+        this.memoInfo = this.client.appointmentMemoList.length > 0
+            ? JSON.parse(JSON.stringify(this.client.appointmentMemoList[0]))
+            : {appointmentId: 0, content: '', id: 0};
+        this.memo = this.memoInfo.content;
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    viewAppointmentDetail(): void {
+      this.getAppointmentDetail(this.client.id).then((_) => {
+        const unread = !this.client.consultantReadTime;
+        if (unread) {
+          this.readAppointment();
+        }
+        this.$router.push(`/appointment/${this.client.id}`);
+      });
+    }
+
+    showAddInterviewDialog(): void {
+      this.isShowAddInterviewDialog = true;
+    }
+
+    navigateToCloseAppointment(): void {
+      this.getAppointmentDetail(this.client.id).then((_) => {
+        this.$router.push(`/appointment/${this.client.id}/close`);
+      });
+    }
+
+    inviteReview(): void {
+        reviewsService.sendSatisfactionToClient(this.client.id).then(res => {
+            this.isShowInviteReviewDialog = true ;
+        })
+    }
+
+    openDetail() {
+        setTimeout(() => {
+            (this.$refs.clientCardRef as any).$el.classList.add('currentShowStyle');
+        }, 0)
+        this.dialogWidth = UtilsService.isMobileDevice() ? '80%' : '';
+        this.isShowInformDialog = true;
+    }
+
+    markAppointment() {
+        myConsultantService.markAsContact(this.client.id).then(data => {
+            this.updateMyAppointmentList(data);
+            this.isShowInformDialog = false;
+        })
+    }
+
+    closeInformDialog(): void {
+        this.readAppointment();
+        this.isEdit = false;
+        this.clearAppointmentIdFromMsg();
+    }
+
+    private readAppointment(): void {
+      appointmentService.recordRead(this.client.id).then((_) => {
+          const updatedClient = {...this.client};
+          updatedClient.consultantReadTime = new Date().toString();
+          this.updateMyAppointmentList(updatedClient);
+          this.updateAppointmentDetail(this.client.id);
+      });
+    }
+
+    private clearAppointmentIdFromMsg() {
+        this.storageClearAppointmentIdFromMsg();
+        this.$router.push({query: {}});
+        setTimeout(() => {
+            (this.$refs.clientCardRef as ElRow).$el.classList.remove('currentShowStyle')
+        },1000)
+    }
+
+    saveMemo() {
+        if (this.client.appointmentMemoList.length > 0) {
+            const params = {
+                content: this.memo,
+                id: this.client.appointmentMemoList[0].id
+            };
+            this.updateMemo(params);
+            return;
+        }
+
+        const params = {
+            content: this.memo,
+            appointmentId: this.client.id,
+        }
+        this.createMemo(params);
+    }
+
+    private createMemo(params) {
+        appointmentService.createMemo(params).then(memoRes => {
+            this.storeMemo(memoRes);
+        });
+    }
+
+    private updateMemo(params) {
+        appointmentService.updateMemo(params).then(memoRes => {
+            this.storeMemo(memoRes);
+        });
+    }
+
+    private storeMemo(memoRes) {
+        this.memoInfo = memoRes;
+        this.memo = this.memoInfo.content;
+        this.client.appointmentMemoList[0] = this.memoInfo;
+        this.isEdit = false;
+    }
+
+    editMemo() {
+        this.isEdit = !this.isEdit;
+        this.memo = this.memoInfo.content;
+    }
+
+    cancelEditMemo() {
+        this.isEdit = false;
+        this.memo = this.memoInfo.content;
+    }
+
+    get newAppointment(): boolean {
+      return !this.client.consultantViewTime
+            && this.client.communicateStatus === 'reserved';
+    }
+
+    get isReserved() {
+      return this.client.communicateStatus === 'reserved';
+    }
+
+    get isRead() {
+      return !!this.client.consultantReadTime;
+    }
 
     get requirements() {
         return this.client.requirement.split(',');
@@ -133,7 +389,7 @@
         if (this.client.gender) {
             return this.client.gender === 'male' ? '���' : '憟單��';
         }
-        return ''
+        return '';
     }
 
     get hopeContactTime() {
@@ -141,19 +397,7 @@
         return contactList.filter(item => !!item && item !== ",")
     }
 
-    get isReserved() {
-        return this.client.communicateStatus === 'reserved';
-    }
-
-    get isRead() {
-        return !!this.client.consultantReadTime;
-    }
-
-    get isView() {
-        return !!this.client.consultantViewTime;
-    }
-
-    get reservedTxt() {
+    get reservedTxt(): string {
         if (this.isReserved) {
             return this.client.consultantReadTime ? '撌脰�' : '�霈�';
         } else {
@@ -161,52 +405,22 @@
         }
     }
 
-    get latestUpdateTime() {
+    get displayTime(): string {
         if (this.isReserved) {
-            return this.client.consultantReadTime ? this.client.consultantReadTime : this.client.appointmentDate;
+            return this.client.appointmentDate;
         } else {
-            return this.client.contactTime;
+            return this.client.lastModifiedDate;
         }
-    }
-
-    get time() {
-        const formatDate = (this.$options.filters as any).formatDate(this.latestUpdateTime);
-        return formatDate.split(' ')[1]
     }
 
     get date() {
-        const formatDate = (this.$options.filters as any).formatDate(this.latestUpdateTime);
+        const formatDate = (this.$options.filters as any).formatDate(this.displayTime);
         return formatDate.split(' ')[0];
     }
 
-    openDetail() {
-        this.width = isMobileDevice() ? '80%' : '';
-        this.isVisibleDialog = true;
-    }
-
-    markAppointment() {
-        markAsContact(this.client.id).then(data => {
-            // TODO: 閬敺����� updated client 鞈�� - Ben 2021/11/16
-
-            const updatedClient = {...this.client};
-            updatedClient.communicateStatus = 'contacted';
-            updatedClient.contactTime = new Date();
-
-            this.updateMyAppointment(updatedClient);
-            this.isVisibleDialog = false;
-
-        })
-    }
-
-    close() {
-        if (!this.client.consultantReadTime) {
-            recordRead(this.client.id).then(res => {
-                const updatedClient = {...this.client};
-                updatedClient.consultantReadTime = new Date();
-
-                this.updateMyAppointment(updatedClient);
-            });
-        }
+    get time() {
+        const formatDate = (this.$options.filters as any).formatDate(this.displayTime);
+        return formatDate.split(' ')[1]
     }
 
 }
@@ -214,93 +428,104 @@
 
 <style lang="scss" scoped>
     .rowStyle {
-        padding: 10px 15px 10px 5px;
         background-color: $PRIMARY_WHITE;
-        margin-bottom: 10px;
-        display: flex;
-        justify-content: space-between;
-
+        border-left     : solid 4px transparent;
+        display         : flex;
+        justify-content : space-between;
+        margin-bottom   : 10px;
+        padding         : 10px 15px 10px 5px;
+        transition: background-color 0.5s;
         &.new {
-            border-left: solid 4px $YELLOW;
+            border-color: $YELLOW;
         }
-
+        &.currentShowStyle {
+            background-color: rgba(236, 195, 178, 0.5);
+            transition      : background-color 0.5s;
+        }
         .unread {
             align-self: center;
-
             .circle {
-                width: 10px;
-                height: 10px;
-                border-radius: 50px;
                 background-color: $PRIMARY_RED;
-                margin: auto;
+                border-radius   : 50%;
+                height          : 10px;
+                margin          : auto;
+                width           : 10px;
             }
         }
-
         .satisfaction {
-            font-size: 12px;
+            font-size  : 12px;
             font-weight: bold;
-            margin-top: 5px;
-
+            margin-top : 5px;
             .unfilled {
+                color      : $MID_GREY;
                 font-weight: lighter;
-                color: $MID_GREY;
             }
         }
-
-        .message {
-            margin:10px 0;
-        }
-
         .professionals {
-            overflow: hidden;
-            white-space: nowrap;
+            overflow     : hidden;
             text-overflow: ellipsis;
-
+            display: -webkit-box;
+            -webkit-box-orient: vertical;
+            -webkit-line-clamp: 1;
             .professionalsTxt {
-                font-size: 12px;
-                font-weight: bold;
+                font-size   : 12px;
                 margin-right: 5px;
-            }
 
+
+            }
             .noProfessionalsTxt {
-                color: $PRUDENTIAL_GREY;
+                color      : $PRUDENTIAL_GREY;
                 font-weight: lighter;
             }
         }
-
         .contactInfo {
             text-align: right;
             .date {
                 font-size: 12px;
             }
         }
-
         .unread-txt {
             @extend .text--primary;
         }
-
         .read-txt {
             color: $SKY_BLUE;
         }
-
     }
-
     .flex-column {
-        display: flex;
-        flex-direction: column;
+        display        : flex;
+        flex-direction : column;
         justify-content: space-between;
     }
-
     .dialogTxt {
-        font-size: 20px;
-        overflow-y:scroll;
-        max-height: 45vh;
+        font-size : 20px;
+        max-height: 25vh;
+        overflow-y: scroll;
         @include desktop {
             height: 400px;
         }
     }
-
-    .text-right {
-        text-align: right;
+    .memoTitleStyle {
+        display        : flex;
+        flex-direction : row;
+        justify-content: space-between;
+       .edit {
+            align-self: flex-end;
+        }
     }
+    .fixed-Height {
+        height: 16px;
+    }
+    .test{
+        display: flex;
+    }
+    .invite-msg{
+      width: 96px;
+      color: $PRIMARY_RED;
+      @extend .text--underline;
+    }
+  .invite-review{
+    align-items   : center;
+    display       : flex;
+    flex-direction: column;
+  }
 </style>
diff --git a/PAMapp/components/Client/ClientList.vue b/PAMapp/components/Client/ClientList.vue
index 11a77d1..820c043 100644
--- a/PAMapp/components/Client/ClientList.vue
+++ b/PAMapp/components/Client/ClientList.vue
@@ -2,14 +2,14 @@
     <div>
         <template v-if="clients.length > 0">
             <ClientCard
-                v-for="(client, index) in clients"
-                :key="index"
+                v-for="(client) in clients"
+                :key="client.id"
                 :client="client"
             ></ClientCard>
         </template>
         <template v-else>
-            <div class="emptyRowStyle">
-                <div class="smTxt txt">{{title === 'reservedList' ? '����撌脤��恥�' : '����撌脰蝯∪恥�'}}</div>
+            <div class="client-list--empty">
+                <div class="smTxt txt">{{ noDataPlaceholder }}</div>
             </div>
         </template>
     </div>
@@ -17,17 +17,31 @@
 
 <script lang='ts'>
 import { Vue, Component, Prop } from 'nuxt-property-decorator';
-import { ClientInfo } from '~/assets/ts/api/appointment';
+
+import { Appointment } from '~/shared/models/appointment.model';
 
 @Component
 export default class ClientList extends Vue {
-    @Prop() clients!: ClientInfo[];
+    @Prop() clients!: Appointment[];
     @Prop() title!: string;
+
+    //////////////////////////////////////////////////////////////////////
+
+    get noDataPlaceholder(): string {
+      let noDataWording = '����撌脩�����';
+      if (this.title === 'contactedList') {
+        noDataWording = '����蝝赤銝剔���';
+      }
+      if (this.title === 'reservedList') {
+        noDataWording = '������蝯∠���';
+      }
+      return noDataWording;
+    }
 }
 </script>
 
 <style lang="scss" scoped>
-    .emptyRowStyle {
+    .client-list--empty {
         background-color: $PRIMARY_WHITE;
         width: 100%;
         height: 100px;
@@ -40,4 +54,4 @@
             margin-left: 17px;
         }
     }
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/components/Consultant-ques.vue b/PAMapp/components/Consultant-ques.vue
index 6c3c6c0..4d89bb5 100644
--- a/PAMapp/components/Consultant-ques.vue
+++ b/PAMapp/components/Consultant-ques.vue
@@ -2,86 +2,70 @@
     <div>
         <div class="pam-tags">
             <div class="pb-10" v-for="(qaItem,index) in questionList" :key="index">
-                <el-button  class="tags" :class="{'active': qaItem.selected}"
+                <el-button  class="tags" :class="{ 'active': qaItem.selected }"
                 @click="selectQuestion(index)">
-                {{qaItem.name}}
+                {{ qaItem.name }}
                 </el-button>
             </div>
         </div>
-
     </div>
 </template>
 
 <script lang="ts">
 import { Vue, Component, Emit, Prop} from 'vue-property-decorator';
 
+import { consultantQuestions } from '~/shared/const/consult-questions';
+
 @Component
     export default class ConsultantQues extends Vue{
 
-        showDialog = false;
-        other = '';
-        otherQuestion = '';
+      @Prop({ default: () => []})
+      selectedQuestions!: string[];
 
-        @Prop({ default: () => []}) selectedQuestions!: string[];
+      other         : string = '';
+      otherQuestion : string = '';
 
-        get questionList(): any[] {
-          return this.defaultQuestionList.map((question) => {
-            const isSeleted = (quesName: string): boolean => this.selectedQuestions.some((question) => question === quesName);
-            if (isSeleted(question.name)) {
-                question.selected = true;
-              }
-            return question;
-            }
-          );
-        }
+      questionList: ConsultQuestionWithSelect[] = [];
 
-        defaultQuestionList = [
-          {
-            name:'�摨瑁����',
-            selected:false
-          },
-          {
-            name:'摮戊��',
-            selected:false
-          },
-          {
-            name:'鞈閬��',
-            selected:false
-          },
-          {
-            name:'璅暑��隡�',
-            selected:false
-          },
-          {
-            name:'靽�瑼�/閬��',
-            selected:false
-          },
-          {
-            name:'����',
-            selected:false
+      //////////////////////////////////////////////////////////////////////
+
+      mounted() {
+        const isSelected = (quesName: string): boolean => this.selectedQuestions.some((question) => question === quesName);
+        this.questionList = consultantQuestions.map((consultQuestion) => {
+          return {
+            name: consultQuestion,
+            selected: isSelected(consultQuestion)
           }
-        ];
+        })
+      }
 
-        @Emit('change')
-        selectQuestion(questionIndex: number): any[] {
-            this.questionList[questionIndex].selected = !this.questionList[questionIndex].selected;
-            return this.questionList;
-        }
+      //////////////////////////////////////////////////////////////////////
 
+      @Emit('change')
+      selectQuestion(questionIndex: number): any[] {
+          this.questionList[questionIndex].selected = !this.questionList[questionIndex].selected;
+          return this.questionList;
+      }
+
+    }
+
+    interface ConsultQuestionWithSelect {
+      name    : string;
+      selected: boolean;
     }
 </script>
 <style lang="scss">
 .con-input{
     input:focus,textarea:focus {
     outline: none;
-    border: 1px solid #ED1B2E;
+    border : 1px solid #ED1B2E;
   }
 }
 
 .other-input{
-    height: 50px;
-    width:316px;
-    border:1px solid #CCCCCC;
+    height    : 50px;
+    width     : 316px;
+    border    : 1px solid #CCCCCC;
     margin-top: 10px;
 }
 
@@ -90,10 +74,10 @@
 }
 
 .qa-dialog-footer{
-    display: flex;
+    display        : flex;
     justify-content: center;
-    font-size: 20px;
-    color: red;
+    font-size      : 20px;
+    color          : red;
 }
 
 .el-dialog__wrapper{
@@ -101,39 +85,38 @@
 }
 
 .qa-dialog{
-    overflow:hidden;
-    height: 500px;
+    overflow  : hidden;
+    height    : 500px;
     margin-top: 20px;
 }
 
 .qaTextTitle{
-    font-size: 20px;
-    font-family: bold;
-    display: flex;
+    font-size      : 20px;
+    font-family    : bold;
+    display        : flex;
     justify-content: center;
-    align-items: center;
-    margin-top: -15px;
+    align-items    : center;
+    margin-top     : -15px;
 
 }
 .qa-title{
-    font-size: 20px;
+    font-size    : 20px;
     margin-bottom: 10px;
 }
 .qa-content{
-    font-size: 18px;
+    font-size    : 18px;
     margin-bottom: 10px;
 }
 
 @include desktop
 {
   .pam-tags{
-      display:flex;
-      flex-wrap:wrap;
-
+      display  : flex;
+      flex-wrap: wrap;
   }
   .tags{
       margin-right: 10px;
-      height: 47px;
+      height      : 47px;
   }
 }
 </style>
diff --git a/PAMapp/components/Consultant/ConsultantCard.vue b/PAMapp/components/Consultant/ConsultantCard.vue
index 7348481..642c210 100644
--- a/PAMapp/components/Consultant/ConsultantCard.vue
+++ b/PAMapp/components/Consultant/ConsultantCard.vue
@@ -1,67 +1,75 @@
 <template>
     <div>
-        <el-row type="flex" class="rowStyle">
+        <el-row type="flex" class="rowStyle" :class="{'new': !agentInfo.customerViewTime }">
+            <el-col class="flex_column pl-5" :xs="5" :sm="3">
+                <UiAvatar
+                    :size="50"
+                    :agentNo="agentInfo.agentNo"
+                    @click.native="showAgentDetail(agentInfo.agentNo)"
+                ></UiAvatar>
+                <div v-if="!hideReviews" style="display: flex; justify-content: flex-start; align-items: center; margin-top: 6px; font-size: 12px">
+                    <i v-if="isAppointment ? agentInfo.appointmentScore : agentInfo.avgScore"
+                      class="icon-star pam-icon icon--yellow satisfaction"
+                       style="margin-top: 0"></i>
+                    <template v-if="isAppointment">
+                      <template v-if="agentInfo.appointmentStatus === 'closed'
+                                    || agentInfo.appointmentStatus === 'done'">
+                        <span v-if="agentInfo.appointmentScore">
+                            {{ agentInfo.appointmentScore }}
+                        </span>
+                        <div class="unfilled text--center "
+                            style="display:flex"
+                            v-else>�憛�<br />皛踵�漲</div>
+                      </template>
+                    </template>
+                    <template v-else>
+                      <span v-if="agentInfo.avgScore">{{ agentInfo.avgScore }}</span>
+                      <span class="unfilled text--center "
+                          style="display:flex" v-else>撠<br />皛踵�漲</span>
+                    </template>
 
-            <el-col :xs="2" :sm="1" :class="{'state': agentInfo.new}"></el-col>
-            <el-col :xs="22" :sm="23">
-                <el-row type="flex">
-                    <el-col class="flex_column" :xs="5" :sm="3">
-                        <UiAvatar
-                            :size="50"
-                            :fileName="avatarFileName"
-                            @click.native="showAgentDetail(agentInfo.agentNo)"
-                        ></UiAvatar>
-                        <div>
-                            <i class="icon-star pam-icon icon--yellow satisfaction"  v-if="!(latestContactedAppointment && !latestContactedAppointment.satisfactionScore)"></i>
-                            <span v-if="agentInfo.contactStatus === 'contacted' && latestContactedAppointment && latestContactedAppointment.satisfactionScore">
-                                {{ latestContactedAppointment && latestContactedAppointment.satisfactionScore}}
-                            </span>
-                            <div class="unfilled text--center "
-                                style="display:flex"
-                                v-if="agentInfo.contactStatus === 'contacted' &&
-                                latestContactedAppointment && !latestContactedAppointment.satisfactionScore">�憛�<br />皛踵�漲</div>
-                            <span v-if="agentInfo.contactStatus !== 'contacted'">{{ agentInfo.avgScore }}</span>
-                        </div>
-                    </el-col>
-                    <el-col :xs="10" :sm="15">
-                        <div class="smTxt_bold name">{{agentInfo.name}}</div>
-                        <div class="professionals">
-                            <span
-                                class="professionalsTxt"
-                                v-for="(expertise, index) in agentInfo.expertise"
-                                :key="index"
-                            >#{{expertise}}</span>
-                        </div>
-                        <div
-                            class="delete"
-                            v-if="agentInfo.contactStatus === 'picked'
-                                || !agentInfo.contactStatus"
-                            @click="removeAgent"
-                        >蝘駁</div>
-                    </el-col>
-                    <el-col class="flex_column" :xs="9" :sm="6">
-                        <el-button
-                            class="smTxt_bold outline_btn"
-                            @click="reserveCommunication"
-                            :class="agentInfo.contactStatus + 'Btn'"
-                        >{{ contactTxt }}</el-button>
-                        <div class="updateTime">
-                            {{ displayTime | formatDate }}
-                        </div>
-                    </el-col>
-                </el-row>
+                </div>
+            </el-col>
+            <el-col :xs="10" :sm="15">
+                <div class="smTxt_bold name">{{agentInfo.name}}</div>
+                <div class="professionals">
+                    <span
+                        class="professionalsTxt"
+                        v-for="(expertise, index) in agentInfo.expertise"
+                        :key="index"
+                    >#{{expertise}}</span>
+                </div>
+                <div
+                    class="delete"
+                    v-if="showRemoveBtn"
+                    @click="isRemoveAgentPopup = true"
+                >蝘駁</div>
+                <div
+                    v-if="notScoreAppointmentYet && (agentInfo.appointmentStatus === 'closed' || agentInfo.appointmentStatus === 'done')"
+                    class="text--primary text--underline cursor--pointer xsTxt text--bold"
+                    @click="reviewsBtn = true">蝯虫�遛��漲閰��</div>
+            </el-col>
+            <el-col class="flex_column" :xs="9" :sm="6">
+                <el-button
+                    class="smTxt_bold outline_btn"
+                    @click="reservedOrShowAppointmentInfo"
+                    :class="actionBtnStyle"
+                >{{ actionBtnLabel }}</el-button>
+                <div class="updateTime mt-10">
+                    {{ (isAppointment ? agentInfo.appointmentLastModifiedDate : agentInfo.updateTime)  | formatDate }}
+                </div>
             </el-col>
         </el-row>
 
         <Ui-Dialog
             :isVisible.sync="isVisibleDialog"
             :width="width"
-            class="pam-myDemand-dialog"
+            class="pam-myDemand-dialog pam-dialog-reserved"
         >
             <div v-if="appointmentDetail">
                 <h5 class="subTitle text--center mb-30">������</h5>
-                <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}}</p>
-                <div class="dialogInfo">
+                <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}} 撱箇��</p>
+                <div class="reserved-info">
                     <p>憪��{appointmentDetail.name}}</p>
                     <p>�閰梧�{appointmentDetail.phone}}</p>
                     <p>Email嚗{appointmentDetail.email}}</p>
@@ -73,36 +81,45 @@
                         v-for="(item, index) in hopeContactTime"
                         :key="index"
                     >��蝯⊥�挾{{index + 1 | formatNumber}}嚗{ item | formatHopeContactTime }}</p>
-                    <div v-if="appointmentDetail.satisfactionScore">
+                    <div v-if="appointmentDetail.appointmentScore">
                         <div class="mdTxt mt-10 mb-10">皛踵�漲</div>
-                            <el-rate
-                            :value="appointmentDetail.satisfactionScore"
-                            class="pam-myDemand-dialog__rate"
-                            disabled>
-                            </el-rate>
-                        </div>
+                        <el-rate
+                        :value="appointmentDetail.appointmentScore"
+                        class="pam-myDemand-dialog__rate"
+                        disabled>
+                        </el-rate>
                     </div>
+                </div>
 
-                <div v-if="agentInfo.contactStatus === 'contacted'
-                        && !appointmentDetail.satisfactionScore" class="dialogInfo-btn">
+                <div v-if="notScoreAppointmentYet && (agentInfo.appointmentStatus === 'closed' || agentInfo.appointmentStatus === 'done')" class="reserved-btn">
                     <el-button type="primary"
                         @click.native="reviewsBtn = true">蝯虫�遛��漲閰��</el-button>
                 </div>
 
-                <div v-if="agentInfo.contactStatus === 'reserved'" class="text--center mt-10">
+                <div v-if="agentInfo.contactStatus === 'reserved' && !isAppointment" class="text--center mt-10">
                     <el-button @click="isCancelPopup = true">������</el-button>
                     <el-button @click="edit" type="primary">蝺刻摩</el-button>
                 </div>
             </div>
         </Ui-Dialog>
-        <PopUpFrame :isOpen.sync="reviewsBtn">
-            <div class="mdTxt">
+
+        <PopUpFrame :isOpen.sync="reviewsBtn" class="reviewDialog-content">
+            <div class="mdTxt pam-dialog-review">
                 靽憿批�遛��漲
                 <span class="hint">������</span>
-                <div class="dialogInfo-score">
-                    <el-rate v-model="inputScore" class="pam-quickFilter-rate"></el-rate>
+                <div class="mt-30 review-content">
+                    <UiAvatar :size="80" :agentNo="agentInfo.agentNo"></UiAvatar>
+                    <div class="review-text">撠憿批��
+                        <span class="text--primary">{{agentInfo.name}}</span>
+                        ��擃���蝯虫�嗾憿��嚗�
+                    </div>
                 </div>
-                <div class="dialogInfo-btn">
+
+                <div class="review-score">
+                    <el-rate v-model="inputScore" class="pam-rate mt-30"></el-rate>
+                </div>
+
+                <div class="review-btn">
                     <el-button
                         type="primary"
                         :disabled="!inputScore"
@@ -114,8 +131,23 @@
         <PopUpFrame :isOpen.sync="isCancelPopup">
             <div class="text--center mdTxt">�����迨蝑����</div>
             <div class="text--center mt-30">
-                <el-button @click="isCancelPopup = false">����</el-button>
-                <el-button @click="cancel" type="primary">蝣箏��</el-button>
+                <el-button @click="isCancelPopup = false">�</el-button>
+                <el-button @click="cancel" type="primary">�</el-button>
+            </div>
+        </PopUpFrame>
+
+        <PopUpFrame  :isOpen.sync="isConfirmPopup">
+            <div class="text--center mdTxt">撌脫��{confirmTxt}}</div>
+            <div class="text--center mt-30">
+                <el-button @click="isConfirmPopup = false" type="primary">蝣箏��</el-button>
+            </div>
+        </PopUpFrame>
+
+        <PopUpFrame :isOpen.sync="isRemoveAgentPopup">
+            <div class="text--center mdTxt">��蝘駁憿批�� <span class="text--primary">{{agentInfo.name}}</span>嚗�</div>
+            <div class="text--center mt-30">
+                <el-button @click="isRemoveAgentPopup = false">�</el-button>
+                <el-button @click="removeAgent" type="primary">�</el-button>
             </div>
         </PopUpFrame>
     </div>
@@ -123,12 +155,17 @@
 
 <script lang="ts">
 import { Vue, Component, Prop, Action, namespace } from 'nuxt-property-decorator';
-import { getAppointmentDetail, UserReviewsConsultantsParams, userReviewsConsultants, cancelAppointment } from '~/assets/ts/api/consultant';
-import { Consultant, Appointment } from '~/assets/ts/models/consultant.model';
-import { isMobileDevice } from '~/assets/ts/device';
-import { Role } from '~/assets/ts/models/enum/Role';
 
-const roleStorage = namespace('localStorage');
+import appointmentService from '~/shared/services/appointment.service';
+import reviewsService from '~/shared/services/reviews.service';
+import UtilsService from '~/shared/services/utils.service';
+import { hideReviews } from '~/shared/const/hide-reviews';
+import { Consultant, ConsultantWithAppointmentId } from '~/shared/models/consultant.model';
+import { Appointment } from '~/shared/models/appointment.model';
+import { SatisfactionType } from '~/shared/models/enum/satisfaction-type';
+import { UserReviewParams } from '~/shared/models/reviews.model';
+
+const localStorage = namespace('localStorage');
 @Component({
     filters: {
         formatNumber(index: number) {
@@ -149,10 +186,12 @@
     }
 })
 export default class ConsultantCard extends Vue {
-    @Action removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>;
-    @Action storeConsultantList!: any;
-    @Prop() agentInfo!: Consultant;
-    @roleStorage.Getter currentRole!:string;
+
+    @Prop()
+    agentInfo!: Consultant | ConsultantWithAppointmentId;
+
+    @localStorage.State('current_role')
+    currentRole!: string;
 
     isVisibleDialog = false;
     reviewsBtn = false;
@@ -160,44 +199,10 @@
     width: string = '';
     inputScore = 0;
     isCancelPopup = false;
-
-    get latestContactedAppointment(): Appointment | null {
-        if (!(this.agentInfo && this.agentInfo.appointments && this.agentInfo.appointments.length)) return null;
-        const contactedAppointments: Appointment[] =  this.agentInfo.appointments
-                                                        .filter((appointment) => appointment.communicateStatus === 'contacted')
-                                                        .sort((preAppointment, nextAppointment) => +nextAppointment.appointmentDate - +preAppointment.appointmentDate);
-        return contactedAppointments[0];
-    }
-
-    get latestReservedAppointment(): Appointment {
-        return this.agentInfo.appointments!
-                .filter((appointment) => appointment.communicateStatus !== 'contacted')
-                .map((reversedAppointment) => {
-                  return {
-                    ...reversedAppointment,
-                    sortDate: new Date(reversedAppointment.appointmentDate)
-                  }
-                })
-                .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0];
-    }
-    get displayTime(): string {
-        let time: Date | string = '';
-        switch(this.agentInfo.contactStatus) {
-            case 'reserved':
-                time = this.agentInfo.updateTime
-                break;
-            case 'contacted':
-                time = this.agentInfo.updateTime
-                break;
-            case 'picked':
-                time = this.agentInfo.createTime
-                break;
-        }
-        if (typeof time !== 'string') {
-          time.toString();
-        }
-        return time as string;
-    }
+    hideReviews = hideReviews;
+    isConfirmPopup = false;
+    isRemoveAgentPopup = false;
+    confirmTxt = '';
 
     appointmentDetail: any = {
         age               : '',
@@ -219,8 +224,40 @@
         otherRequirement  : null,
         phone             : "",
         requirement       : '',
-        satisfactionScore : 0,
+        appointmentScore : 0,
     };
+
+    get notScoreAppointmentYet(): boolean {
+      const isAppointment = !!this.agentInfo['appointmentStatus'];
+      return isAppointment
+            ? !this.agentInfo['appointmentScore']
+            : !this.agentInfo.avgScore
+    }
+
+    get isAppointment(): boolean {
+      return !!this.agentInfo['appointmentStatus'];
+    }
+
+    get latestNotClosedAppointment(): Appointment {
+        return this.agentInfo.appointments!
+                .filter((appointment) => appointment.communicateStatus === 'reserved' || appointment.communicateStatus === 'contacted')
+                .map((reversedAppointment) => {
+                    return {
+                    ...reversedAppointment,
+                    sortDate: new Date(reversedAppointment.appointmentDate)
+                    }
+                })
+                .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0];
+    }
+
+    get showRemoveBtn(): boolean {
+      const isAppointment = !!this.agentInfo['appointmentStatus'];
+      if (isAppointment) {
+        return false;
+      } else {
+        return this.agentInfo.contactStatus === 'picked' || !this.agentInfo.contactStatus;
+      }
+    }
 
     get avatarFileName() {
         return this.agentInfo.img;
@@ -232,50 +269,105 @@
         }
         return ''
     }
-    get contactTxt() {
+    get actionBtnLabel() {
+      const isAppointment = !!this.agentInfo['appointmentStatus'];
+      if (isAppointment) {
+        if (this.agentInfo['appointmentStatus'] === 'contacted') {
+            return '撌脰蝯�';
+        }
+        if (this.agentInfo['appointmentStatus'] === 'reserved') {
+            return '撌脤���';
+        }
+        if (this.agentInfo['appointmentStatus'] === 'done') {
+            return '撌脫�漱';
+        }
+        if (this.agentInfo['appointmentStatus'] === 'closed') {
+            return '���漱';
+        }
+      } else {
         if (this.agentInfo.contactStatus === 'contacted') {
             return '撌脰蝯�';
         }
         if (this.agentInfo.contactStatus === 'reserved') {
             return '撌脤���';
         }
+      }
         return '�脰����';
+    }
+
+    get actionBtnStyle() {
+      const isAppointment = !!this.agentInfo['appointmentStatus'];
+      if (isAppointment) {
+        if (this.agentInfo['appointmentStatus'] === 'contacted') {
+            return 'contactedBtn';
+        }
+        if (this.agentInfo['appointmentStatus'] === 'reserved') {
+            return 'reservedBtn';
+        }
+        if (this.agentInfo['appointmentStatus'] === 'done') {
+            return 'doneBtn';
+        }
+        if (this.agentInfo['appointmentStatus'] === 'closed') {
+            return 'closedBtn';
+        }
+      } else {
+        if (this.agentInfo.contactStatus === 'contacted') {
+            return 'contactedBtn';
+        }
+        if (this.agentInfo.contactStatus === 'reserved') {
+            return 'reservedBtn';
+        }
+      }
     }
 
     get hopeContactTime() {
         const contactList = this.appointmentDetail.hopeContactTime
-            .split("'").map(item => item.slice(0, item.length));
-        return contactList.filter(item => !!item && item !== ",")
+            .split("'").map((item: any) => item.slice(0, item.length));
+        return contactList.filter((item: any) => !!item && item !== ",")
     }
 
-    reserveCommunication() {
-        const contactStatus = this.agentInfo.contactStatus;
-        if (!contactStatus || contactStatus === 'picked') {
-            this.currentRole === Role.USER
-                ? this.$router.push(`/questionnaire/${this.agentInfo.agentNo}`)
-                : this.$router.push('/login');
+    //////////////////////////////////////////////////////////////////////
+
+    @Action
+    removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>;
+
+    @Action
+    storeConsultantList!: () => void;
+
+    reservedOrShowAppointmentInfo() {
+      const isAppointment = !!this.agentInfo['appointmentStatus'];
+      const contactStatus = this.agentInfo.contactStatus;
+        if (!isAppointment && (!contactStatus || contactStatus === 'picked')) {
+            this.$router.push(`/questionnaire/${this.agentInfo.agentNo}`);
         } else {
             this.openPopUp();
         }
     }
 
-    openPopUp() {
-      const appointmentId = this.agentInfo.contactStatus === 'contacted'
-                          ? this.latestContactedAppointment?.id
-                          : this.latestReservedAppointment.id;
+    openPopUp(): void {
+      const isAppointment = !!this.agentInfo['appointmentStatus'];
+      const appointmentId = isAppointment
+                          ? this.agentInfo['appointmentId']
+                          : this.latestNotClosedAppointment.id;
 
-        getAppointmentDetail(appointmentId!).then(res => {
+        appointmentService.getAppointmentDetail(appointmentId!).then(res => {
             this.appointmentDetail = {
-                ...this.appointmentDetail,
-                ...res.data
+                ...res,
+                appointmentScore:  this.agentInfo['appointmentScore'],
             };
-            this.width = isMobileDevice() ? '80%' : '';
+            this.width = UtilsService.isMobileDevice() ? '80%' : '';
             this.isVisibleDialog = true;
         });
     }
 
     removeAgent() {
         this.removeFromMyConsultantList(this.agentInfo.agentNo).then((removeOk) => {
+            this.isRemoveAgentPopup = false;
+            setTimeout(() => {
+                this.confirmTxt = '蝘駁憿批��';
+                this.isConfirmPopup = true;
+            }, 300);
+
         });
     }
 
@@ -284,23 +376,34 @@
     }
 
     userReviewsConsultants() {
-        const reviewParams: UserReviewsConsultantsParams = {
-            appointmentId: this.appointmentDetail.id,
-            score: this.inputScore,
-        }
-        this.appointmentDetail.satisfactionScore = this.inputScore;
+      const isAppointment = !!this.agentInfo['appointmentStatus'];
+      const appointmentId = isAppointment
+                          ? this.agentInfo['appointmentId']
+                          : this.latestNotClosedAppointment.id;
 
-        userReviewsConsultants(reviewParams).then((res) => {
+        const reviewParams: UserReviewParams = {
+            appointmentId: appointmentId,
+            score: this.inputScore,
+            type : SatisfactionType.APPOINTMENT,
+        }
+        this.appointmentDetail.appointmentScore = this.inputScore;
+
+        reviewsService.userReviewsConsultants(reviewParams).then((res) => {
             this.reviewsBtn = false;
             this.storeConsultantList();
         });
     }
 
     cancel() {
-        cancelAppointment(this.latestReservedAppointment.id).then(res => {
+        appointmentService.cancelAppointment(this.latestNotClosedAppointment.id).then(res => {
             this.storeConsultantList();
             this.isVisibleDialog = false;
             this.isCancelPopup = false;
+            setTimeout(() => {
+                this.confirmTxt = '���迨蝑���';
+                this.isConfirmPopup = true;
+
+            }, 300);
         });
     }
 
@@ -319,13 +422,10 @@
         margin-bottom: 10px;
         display: flex;
         justify-content: space-between;
+        border-left: 4px solid transparent;
 
-        .state {
-            width: 10px;
-            height: 10px;
-            border-radius: 50px;
-            background-color: $YELLOW;
-            margin: auto 0;
+        &.new {
+            border-color: $YELLOW;
         }
 
         .satisfaction {
@@ -354,6 +454,7 @@
         }
 
         .delete {
+            display: inline-block;
             color: $PRIMARY_RED;
             font-size: 14px;
             font-weight: bold;
@@ -382,6 +483,28 @@
             }
         }
 
+        .doneBtn {
+            color: $BEIGE;
+            border-color: $BEIGE;
+
+            &:focus {
+                color: $PRIMARY_WHITE;
+                background-color: $BEIGE;
+                opacity: 0.5;
+            }
+        }
+
+        .closedBtn {
+            color: $PRUDENTIAL_GREY;
+            border-color: $PRUDENTIAL_GREY;
+
+            &:focus {
+                color: $PRIMARY_WHITE;
+                background-color: $PRUDENTIAL_GREY;
+                opacity: 0.5;
+            }
+        }
+
         .updateTime {
             font-size: 12px;
             font-weight: bold;
@@ -395,20 +518,4 @@
         flex-direction: column;
         justify-content: space-between;
     }
-
-    .dialogInfo {
-        font-size: 20px;
-        overflow-y:scroll;
-        height: 400px;
-    }
-    .dialogInfo-btn{
-        display: flex;
-        justify-content: center;
-    }
-    .dialogInfo-score{
-        display: flex;
-        justify-content: center;
-        margin-bottom: 50px;
-    }
-
 </style>
diff --git a/PAMapp/components/Consultant/ConsultantList.vue b/PAMapp/components/Consultant/ConsultantList.vue
index 1a1b3fb..06ccd84 100644
--- a/PAMapp/components/Consultant/ConsultantList.vue
+++ b/PAMapp/components/Consultant/ConsultantList.vue
@@ -1,6 +1,5 @@
 <template>
     <div>
-
         <template v-if="agentList.length > 0">
             <ConsultantCard
                 v-for="(agent, index) in agentList"
@@ -8,12 +7,12 @@
                 :agentInfo="agent"
             ></ConsultantCard>
         </template>
-        <template v-if="isLogin && agentList.length === 0">
+        <template v-if="isUserLogin && agentList.length === 0">
             <div class="emptyRowStyle">
-                <div class="smTxt txt">����撌脤憿批��</div>
+                <div class="smTxt txt">{{ noDataPlaceholder }}</div>
             </div>
         </template>
-        <template v-if="!isLogin">
+        <template v-if="!isUserLogin">
             <div class="emptyRowStyle">
                 <div class="mdTxt login fix-chrome-click--issue" @click="$router.push('/login')">�� | 閮餃��</div>
                 <div class="smTxt txt ">���憭�</div>
@@ -23,24 +22,38 @@
 </template>
 
 <script lang="ts">
-import { Vue, Component, Prop, namespace } from 'nuxt-property-decorator';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-import { Role } from '~/assets/ts/models/enum/Role';
-
-const roleStorage = namespace('localStorage');
+import { Consultant } from '~/shared/models/consultant.model';
+import { Vue, Component, Prop } from 'nuxt-property-decorator';
+import authService from '~/shared/services/auth.service';
 
 @Component
 export default class ConsultantList extends Vue {
-    @Prop() agents!: Consultant[];
-    @roleStorage.Getter currentRole!:string;
+    @Prop()
+    agents!: Consultant[];
 
-    get isLogin() {
-        return this.currentRole === Role.USER;
-    }
+    @Prop()
+    title! : string;
+
+    isUserLogin = false;
+
+    //////////////////////////////////////////////////////////////////////
+
     get agentList(){
-        return this.agents.map((agentDto)=>
-            ({...agentDto,customerScore:0,})
-        )
+      return this.agents.map((agentDto)=>
+          ({...agentDto,customerScore:0,})
+      )
+    }
+
+    get noDataPlaceholder(): string {
+      return this.title === 'contactedList'
+                          ? '����撌脰蝯⊿“���'
+                          : '����撌脤憿批��';
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+      this.isUserLogin = authService.isUserLogin();
     }
 
 }
diff --git a/PAMapp/components/Consultant/ConsultantSwiper.vue b/PAMapp/components/Consultant/ConsultantSwiper.vue
index bacf1ca..ae61981 100644
--- a/PAMapp/components/Consultant/ConsultantSwiper.vue
+++ b/PAMapp/components/Consultant/ConsultantSwiper.vue
@@ -10,17 +10,26 @@
           :key="index"
         >
             <div class="consultantCardStyle" >
-              <UiAvatar :size="80" :fileName="agentInfo.img" class="mb-10"></UiAvatar>
+              <UiAvatar
+                class="mb-10"
+                :size="80"
+                :agentNo="agentInfo.agentNo"
+              >
+              </UiAvatar>
               <div class="name">{{agentInfo.name}}</div>
-              <div>
+              <div v-if="!hideReviews" style="display: flex; align-items: center; justify-content: center; margin-top: 4px">
                 <i class="icon-star pam-icon icon--yellow"></i>
                 <span class="satisfaction">{{agentInfo.avgScore}}</span>
               </div>
           </div>
         </swiper-slide>
 
-        <div class="swiper-button-prev" slot="button-prev"></div>
-        <div class="swiper-button-next" slot="button-next"></div>
+        <div class="swiper-button-prev" slot="button-prev">
+          <i class="icon-left"></i>
+        </div>
+        <div class="swiper-button-next" slot="button-next">
+          <i class="icon-right"></i>
+        </div>
     </swiper>
 </div>
 </template>
@@ -28,13 +37,16 @@
 <script lang="ts">
 import { Vue, Component, Prop } from 'vue-property-decorator';
 import { SwiperOptions } from 'swiper';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-
+import { Consultant } from '~/shared/models/consultant.model';
+import { hideReviews } from '~/shared/const/hide-reviews';
 
 @Component
 export default class UiSwiper extends Vue {
-    @Prop() agents!: Consultant[];
 
+    @Prop()
+    agents!: Consultant[];
+
+    hideReviews = hideReviews ;
     swiperOptions: SwiperOptions = {
       loop: false,
         slideToClickedSlide: false,
@@ -53,6 +65,8 @@
           }
         }
     }
+
+    //////////////////////////////////////////////////////////////////////
 
     clkItem(loopIndex: number, realIndex: number) {
       const agentNo = this.agents[loopIndex].agentNo;
@@ -82,9 +96,12 @@
     height: 100%;
 
     &:after {
+      display: none;
+    }
+
+    .icon-right,.icon-left {
       font-size: 20px;
-      font-weight: bold;
-      color: #707A81;
+      color: $CORAL;
     }
 
     &.swiper-button-disabled {
diff --git a/PAMapp/components/DateTimePicker.vue b/PAMapp/components/DateTimePicker.vue
new file mode 100644
index 0000000..584df86
--- /dev/null
+++ b/PAMapp/components/DateTimePicker.vue
@@ -0,0 +1,65 @@
+
+
+<template>
+    <div class="dateTime">
+        <UiDatePicker
+            @changeDate="changeDateTime($event, 'date')"
+            :isPastDateDisabled="isPastDateDisabled"
+            :isFutureDateDisabled="isFutureDateDisabled"
+            :defaultValue="defaultValue"
+        ></UiDatePicker>
+        <UiTimePicker
+            @changeTime="changeDateTime($event, 'time')"
+            :defaultValue="defaultValue"
+            :isPastDateDisabled="isPastDateDisabled"
+            :isFutureDateDisabled="isFutureDateDisabled"
+            :changeDate="changeDate"
+        ></UiTimePicker>
+    </div>
+</template>
+
+<script lang="ts">
+import { Component, Emit, Prop, Vue, Watch } from "nuxt-property-decorator";
+
+@Component
+export default class DateTimePicker extends Vue {
+    changeDate: Date | string = '';
+    changeTime!: string;
+
+    @Prop()
+    defaultValue!: string;
+
+    @Prop()
+    isPastDateDisabled!: boolean;
+
+    @Prop()
+    isFutureDateDisabled!: boolean;
+
+    @Emit('changeDateTime')
+    changeDateTime(event, type) {
+        if (type === 'date') {
+            this.changeDate = event;
+        }
+        if (type === 'time') {
+            this.changeTime = event;
+        }
+        if (this.changeDate && this.changeTime) {
+            const hour = this.changeTime.split(':')[0];
+            const minute = this.changeTime.split(':')[1];
+            const interViewTime = new Date(this.changeDate).setHours(+hour, +minute);
+            return new Date(interViewTime);
+        }
+        return '';
+    }
+
+}
+</script>
+
+<style lang="scss" scoped>
+.dateTime {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    font-size: 20px;
+}
+</style>
\ No newline at end of file
diff --git a/PAMapp/components/Footer.vue b/PAMapp/components/Footer.vue
index 10aa643..9762e98 100644
--- a/PAMapp/components/Footer.vue
+++ b/PAMapp/components/Footer.vue
@@ -20,7 +20,7 @@
           <li class="pam-footer-contact__item">(撠�������曹� ~ �曹�� 08:00~20:00 ���勗�����09:00~17:30)</li>
         </ul>
       </section>
-      <section class="pam-footer-copywrite">�蝬脩�靽�犖憯質���誨������</section>
+      <section class="pam-footer-copywriting">�蝬脩�靽�犖憯質���誨������</section>
     </footer>
 </template>
 
@@ -44,18 +44,19 @@
   label: string;
   url: string;
 }
+
 </script>
 
 <style lang="scss" scoped>
 .pam-footer {
-  border-top: 1px solid #CCCCCC;
+  border-top      : 1px solid #CCCCCC;
   background-color: $PRIMARY_WHITE;
   .pam-footer-nav {
     padding: 10px 20px;
     .pam-footer-nav__list {
-      display: flex;
-      list-style: none;
-      flex-wrap: wrap;
+      display        : flex;
+      list-style     : none;
+      flex-wrap      : wrap;
       justify-content: center;
       .pam-footer-nav__item {
         padding: 10px 0 10px 10px;
@@ -65,7 +66,7 @@
         @extend .cursor--pointer;
          a, a:hover, a:focus, a:active {
               text-decoration: none;
-              color: inherit;
+              color          : inherit;
         }
         &:nth-of-type(3) {
           .pam-footer-nav__item-pipe {
@@ -79,37 +80,37 @@
     }
   }
   .pam-footer-contact {
-    padding: 10px 20px;
-    display: flex;
+    padding       : 10px 20px;
+    display       : flex;
     flex-direction: column;
     .pam-footer-contact__list {
-      display: flex;
-      list-style: none;
-      flex-wrap: wrap;
+      display        : flex;
+      list-style     : none;
+      flex-wrap      : wrap;
       justify-content: center;
       .pam-footer-contact__item {
-        color: $PRUDENTIAL_GREY;
-        font-size: 12px;
-        text-align: center;
+        color      : $PRUDENTIAL_GREY;
+        font-size  : 12px;
+        text-align : center;
         line-height: 20px;
         @extend .text--bold;
         .phone {
-          color: $PRIMARY_BLACK;
+          color    : $PRIMARY_BLACK;
           font-size: 14px;
           @extend .text--bold;
         }
       }
     }
   }
-  .pam-footer-copywrite {
+  .pam-footer-copywriting {
     background-color: $PRIMARY_RED;
-    display: flex;
-    justify-content: center;
-    color: $PRIMARY_WHITE;
-    padding: 10px 0;
-    font-size: 12px;
-    font-weight: bold;
-    line-height: 20px;
+    display         : flex;
+    justify-content : center;
+    color           : $PRIMARY_WHITE;
+    padding         : 10px 0;
+    font-size       : 12px;
+    font-weight     : bold;
+    line-height     : 20px;
   }
 }
 </style>
diff --git a/PAMapp/components/Interview/InterviewAdd.vue b/PAMapp/components/Interview/InterviewAdd.vue
new file mode 100644
index 0000000..145c41f
--- /dev/null
+++ b/PAMapp/components/Interview/InterviewAdd.vue
@@ -0,0 +1,269 @@
+<template>
+  <div class="edit-appointment-record">
+      <div class="edit-appointment-record-date" v-if="interviewId && interviewRecord">
+          <span>{{interviewRecord.createdDate | formatDate}} 撱箇��</span>
+          <span>{{interviewRecord.lastModifiedDate | formatDate}} ��</span>
+      </div>
+      <el-row class="mdTxt mb-10">
+          <el-col :xs="16" :sm="20">
+            <span :class="{'required': !interviewId || isEdit}">蝝赤����</span>
+          </el-col>
+          <el-col :xs="8" :sm="4" class="text--right" v-if="interviewId">
+              <span
+                v-if="!isEdit"
+                class="mr-10 text--primary  cursor--pointer"
+                @click="showCancelPopUp = true"
+              ><i class="icon-delet"></i></span>
+              <span
+                v-if="!isEdit"
+                class="text--primary  cursor--pointer"
+                @click="isEdit = !isEdit"
+              ><i class="icon-edit"></i></span>
+          </el-col>
+      </el-row>
+      <template v-if="!interviewId || isEdit">
+          <DateTimePicker
+            @changeDateTime="interviewTime = $event"
+            :defaultValue="defaultValue"
+          ></DateTimePicker>
+      </template>
+      <template v-else>
+          <div class="fs-20 mt-20">
+              {{formatInterviewDate}}
+          </div>
+      </template>
+
+      <div class="mdTxt mb-10 mt-30" :class="{'required': !interviewId || isEdit}">蝝赤蝝����</div>
+      <template v-if="!interviewId || isEdit">
+          <el-input
+            type="textarea"
+            :rows="5"
+            placeholder="隢撓�蝝赤蝝����"
+            resize="none"
+            v-model="content"
+        >
+        </el-input>
+      </template>
+      <template v-else>
+          <div class="fs-20 mt-20">
+              {{content}}
+          </div>
+      </template>
+      <div class="edit-appointment-record-btn" v-if="!interviewId || isEdit">
+          <el-button @click="cancel">����</el-button>
+          <el-button
+            :disabled="!interviewTime || !content"
+            @click="saveInterviewRecord"
+          >蝣箏��</el-button>
+      </div>
+
+      <PopUpFrame :isOpen.sync="showCancelPopUp"
+         @closePopUp="showCancelPopUp = false"
+      >
+        <div class="text--center mdTxt">����甇斤��赤閮���</div>
+        <div class="text--center mt-30">
+            <el-button @click="showCancelPopUp = false">�</el-button>
+            <el-button @click="deleteInterviewRecord" type="primary">�</el-button>
+        </div>
+      </PopUpFrame>
+
+      <PopUpFrame :isOpen.sync="showConfirmPopup"
+        @closePopUp="closePopup">
+        <div class="text--center mdTxt">{{confirmTxt}}嚗�</div>
+        <div class="text--center mt-30">
+            <el-button @click="closePopup" type="primary">蝣箏��</el-button>
+        </div>
+      </PopUpFrame>
+
+      <PopUpFrame :isOpen.sync="showFutureDateConfirmPopup"
+        @closePopUp="closePopup">
+        <div class="text--center mdTxt">{{confirmTxt}}嚗�</div>
+        <div class="text--center mdTxt">蝡���赤�嚗�</div>
+        <div class="text--center mt-30 confirm-btn">
+            <el-button @click="closePopup">�����</el-button>
+            <el-button @click="showInterviewMsgPopup = true" type="primary">���赤�</el-button>
+        </div>
+      </PopUpFrame>
+
+      <InterviewMsg
+        :isVisible.sync="showInterviewMsgPopup"
+        :client="appointmentDetail"
+        :defaultValue="interviewTime"
+        @closeDialog="closePopup"
+      ></InterviewMsg>
+  </div>
+</template>
+<script lang="ts">
+import { Appointment, InterviewRecord, InterviewRecordInfo } from '~/shared/models/appointment.model';
+import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
+import appointmentService from '~/shared/services/appointment.service';
+
+const appointmentStore = namespace('appointment.store');
+
+@Component
+export default class InterviewAdd extends Vue {
+
+    @appointmentStore.State
+    appointmentDetail!: Appointment;
+
+    @appointmentStore.Action
+    updateAppointmentDetail!: (id: number) => Appointment;
+
+    interviewTime = '';
+    content = '';
+
+    interviewId = '';
+    appointmentId = '';
+    confirmTxt: '�憓���' | '蝺刻摩����' | '������' = '�憓���';
+
+    isEdit = false;
+
+    showConfirmPopup = false;
+    showCancelPopUp = false;
+    showInterviewMsgPopup = false;
+    showFutureDateConfirmPopup = false;
+
+    defaultValue = '';
+
+    interviewRecord!: InterviewRecord;
+
+    ////////////////////////////////////////////////////////////////////
+
+    mounted() {
+        this.interviewId = this.$route.params.interviewId;
+        this.appointmentId = this.$route.params.appointmentId;
+
+        this.onAppointmentDetailChange();
+    }
+
+    ////////////////////////////////////////////////////////////////////
+
+    @Watch('appointmentDetail', {immediate: true})
+    onAppointmentDetailChange() {
+        if (this.appointmentDetail && this.appointmentDetail.id === +this.appointmentId) {
+            this.interviewRecord = this.appointmentDetail.interviewRecordDTOs
+                .filter(item => item.id === +this.interviewId)[0];
+
+                if (this.interviewRecord && this.interviewId) {
+                    this.content = this.interviewRecord.content;
+                    this.defaultValue = this.interviewRecord.interviewDate;
+                }
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////
+
+    saveInterviewRecord() {
+        const interviewRecordInfo: InterviewRecordInfo = {
+            content: this.content,
+            interviewDate: this.interviewTime,
+            appointmentId: +this.appointmentId
+        };
+        if (!this.interviewId) {
+            this.createdRecord(interviewRecordInfo);
+        } else {
+            const updateInterviewRecord = {
+                ...interviewRecordInfo,
+                id: +this.interviewId
+            }
+            this.updateRecord(updateInterviewRecord);
+        }
+    }
+
+    private createdRecord(interviewRecordInfo) {
+        appointmentService.createInterviewRecord(interviewRecordInfo).then(res => {
+            this.showPopUp('�憓���');
+        });
+    }
+
+    private updateRecord(updateInterviewRecord) {
+        appointmentService.updateInterviewRecord(updateInterviewRecord).then(res => {
+            this.showPopUp('蝺刻摩����');
+        });
+    }
+
+    private showPopUp(confirmTxt) {
+        this.confirmTxt = confirmTxt;
+        this.updateAppointmentDetail(+this.appointmentId);
+
+        if (new Date(this.interviewTime).getTime() >= new Date().getTime()) {
+            this.showFutureDateConfirmPopup = true;
+        } else {
+            this.showConfirmPopup = true;
+        }
+    }
+
+    deleteInterviewRecord() {
+        appointmentService.deleteInterviewRecord(this.interviewId).then(res => {
+            this.confirmTxt = '������';
+            this.showConfirmPopup = true;
+            this.updateAppointmentDetail(+this.appointmentId);
+        });
+    }
+
+    cancel() {
+        if (this.interviewId) {
+           this.content = this.interviewRecord.content;
+           this.defaultValue = this.interviewRecord.interviewDate;
+           this.isEdit = false;
+        } else {
+           this.$router.go(-1);
+        }
+    }
+
+    closePopup() {
+        this.$router.go(-1);
+    }
+
+    ////////////////////////////////////////////////////////////////////
+
+    get formatInterviewDate() {
+        const interviewDate = new Date(this.interviewRecord.interviewDate);
+        const hours = interviewDate.getHours();
+        const minutes = interviewDate.getMinutes();
+        return `${interviewDate.getFullYear()}/${interviewDate.getMonth() + 1}/${interviewDate.getDate()} ${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}`;
+    }
+
+}
+</script>
+
+<style lang="scss" >
+.edit-appointment-record {
+    padding-left : 10px;
+    padding-right: 10px;
+    .edit-appointment-record-date{
+        color          : #68737A;
+        display        : flex;
+        justify-content: space-between;
+        margin-bottom  : 26px;
+    }
+}
+.edit-appointment-record-btn{
+    margin-top: 30px;
+    display: flex;
+    justify-content: center;
+}
+.el-textarea__inner {
+    border: 1px solid #707070;
+    padding: 10px 20px;
+    font-size: 20px;
+    &::placeholder {
+        font-size: 20px;
+    }
+}
+.required {
+      position: relative;
+
+      &::before {
+        content: '*';
+        position: absolute;
+        color: #FF0000;
+        transform: translate(-12px, 0);
+        z-index: 5;
+      }
+    }
+.confirm-btn{
+  display: flex;
+  justify-content: center;
+}
+</style>
diff --git a/PAMapp/components/Interview/InterviewCard.vue b/PAMapp/components/Interview/InterviewCard.vue
new file mode 100644
index 0000000..5c39f5f
--- /dev/null
+++ b/PAMapp/components/Interview/InterviewCard.vue
@@ -0,0 +1,176 @@
+<template>
+    <div>
+      <template v-if="!interviewList.length">
+          <span class="record-card record-card--empty" style="display:flex">
+            �蝝赤蝝����
+          </span>
+      </template>
+
+      <template v-else>
+        <div class="interview--future">
+          <div class="record-card mb-10"
+                v-for="(item, index) in futureList"
+                :key="index + 'feature'"
+                @click="editInterview(item)"
+          >
+            <div class="remind-container">
+              <div class="remind-date mr-10">
+                <div class="mb-3 smTxt bgc-primary-red date-year">
+                  <div class="mb-3 mt-2">
+                    <UiDateFormat
+                            class="date bold"
+                            :date="item.interviewDate"
+                            onlyShowSection="YEAR" />
+                  </div>
+                </div>
+              <div class="p mt-5">
+                <UiDateFormat
+                            class="mt-5 line-space time"
+                            :date="item.interviewDate"
+                            onlyShowSection="DATE" />
+              </div>
+            </div>
+            <div class="remind-content-txt">
+              <div style="display:flex">
+                <UiDateFormat
+                            class="mt-5 line-space mb-3 time"
+                            :date="item.interviewDate"
+                            onlyShowSection="TIME" />
+              </div>
+                <div class="interview-card-content">{{item.content}}</div>
+            </div>
+
+          </div>
+            </div>
+        </div>
+
+        <section class="interview--past" v-if="pastList.length">
+            <div class="record-card mb-10"
+                v-for="(item, index) in pastList"
+                :key="index + 'past'"
+                @click="editInterview(item)"
+            >
+
+              <div class="remind-container">
+                <div class="remind-date mr-10">
+                  <div class="mb-3 smTxt bgc-primary-red date-year">
+                    <div class="mb-3 mt-2">
+                      <UiDateFormat
+                            class=" date"
+                            :date="item.interviewDate"
+                            onlyShowSection="YEAR" />
+                    </div>
+                    </div>
+                  <div class="p mt-5">
+                    <UiDateFormat
+                            class="mt-5 line-space time"
+                            :date="item.interviewDate"
+                            onlyShowSection="DATE" />
+                  </div>
+                </div>
+                <div class="remind-content-txt">
+                  <div style="display:flex">
+                    <UiDateFormat
+                            class="mt-5 line-space mb-3 time"
+                            :date="item.interviewDate"
+                            onlyShowSection="TIME" />
+                  </div>
+                    <div class="interview-card-content">{{item.content}}</div>
+                </div>
+              </div>
+            </div>
+        </section>
+      </template>
+    </div>
+</template>
+
+<script lang="ts">
+import { Component, Prop, Vue, Watch } from "nuxt-property-decorator";
+import { InterviewRecord } from "~/shared/models/appointment.model";
+
+@Component
+export default class InterviewCard extends Vue {
+
+    @Prop()
+    interviewList!: InterviewRecord[];
+
+    futureList: InterviewRecord[] = [];
+    pastList: InterviewRecord[] = [];
+
+    appointmentId!: number;
+
+    mounted() {
+        this.appointmentId = +this.$route.params.appointmentId;
+    }
+
+    @Watch('interviewList', {immediate: true})
+    onInterviewListChange() {
+        if (this.interviewList.length > 0) {
+            this.futureList = this.interviewList
+            .filter(item => new Date(item.interviewDate).getTime() >= new Date().getTime())
+            .sort((preItem, nextItem) => +new Date(nextItem.interviewDate) - +new Date(preItem.interviewDate));
+          this.pastList = this.interviewList
+            .filter(item =>  new Date(item.interviewDate).getTime() < new Date().getTime())
+            .sort((preItem, nextItem) => +new Date(nextItem.interviewDate) - +new Date(preItem.interviewDate));
+        }
+
+    }
+
+    editInterview(interviewRecord) {
+        this.$router.push(`/appointment/${this.appointmentId}/interview/${interviewRecord.id}`);
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.interview--future{
+    .record{
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 10px;
+    }
+}
+.interview--past {
+    margin-top: 10px;
+    border-top: 1px solid #CCCCCC;
+    padding-top: 17px;
+    margin-top: 17px;
+}
+.record-card {
+    height: 64px;
+    margin-bottom: 20px;
+    .record-card-date{
+        display: flex;
+        flex-direction: column;
+        margin-left: 10px;
+        margin-right: 10px;
+        margin-top: 10px;
+    }
+
+    .record-card-content{
+        height: 42px;
+        margin-top: 10px;
+        margin-right: 10px;
+        line-height: 1.2;
+
+    }
+  &.record-card--empty {
+    align-items     : center;
+    background-color: #fff;
+    color           : $MID_GREY;
+    justify-content : center;
+  }
+}
+.interview-card-content{
+ overflow: hidden;
+        text-overflow: ellipsis;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        word-break: break-all;
+        word-wrap: break-word;
+        -webkit-line-clamp: 2;
+}
+.line-space{
+    letter-spacing: 1px;
+}
+</style>
diff --git a/PAMapp/components/Interview/InterviewMsg.vue b/PAMapp/components/Interview/InterviewMsg.vue
new file mode 100644
index 0000000..bc76c75
--- /dev/null
+++ b/PAMapp/components/Interview/InterviewMsg.vue
@@ -0,0 +1,176 @@
+<template>
+  <div class="interview-msg-component">
+    <el-dialog
+      :visible.sync="dialogVisible"
+      :width="dialogWidth"
+      @close="closeDialog"
+      :lock-scroll="false"
+        >
+        <div class="subTitle msg-dialog-title">蝝赤�</div>
+      <div class="send-msg-nav">
+        <div class="mdTxt">��摰�</div>
+      </div>
+
+      <el-input
+        type="textarea"
+        :autosize="true"
+        placeholder="蝝赤�"
+        resize="none"
+        v-model="interviewTxt">
+        </el-input>
+
+      <div v-if="client.phone">
+        <div class="mdTxt mt-30 mb-10 required">����赤��挾</div>
+        <DateTimePicker
+          @changeDateTime="interviewTime = $event"
+          :isPastDateDisabled="true"
+          :defaultValue="defaultValue"
+        ></DateTimePicker>
+      </div>
+
+      <div class="msg-dialog-btn">
+        <el-button @click="addInterview"  :disabled="isBtnDisabled">���</el-button>
+      </div>
+
+        </el-dialog>
+
+        <PopUpFrame
+          :isOpen.sync="isShowSuccessAlert"
+          @closePopUp="closeAllDialog">
+        <div class="text--middle invite-review">
+            <div class="mb-30 mt-10">撌脩��赤�</div>
+            <div class="text--primary text--middle cursor--pointer text--underline" @click="closeAllDialog " :size="'250px'">������</div>
+          </div>
+        </PopUpFrame>
+  </div>
+</template>
+<script lang="ts">
+import { Vue, Component, Prop, PropSync, Emit, namespace } from 'nuxt-property-decorator';
+
+import appointmentService from '~/shared/services/appointment.service';
+import { Appointment, ToInformAppointment } from '~/shared/models/appointment.model';
+import { AgentInfo } from '~/shared/models/agent-info.model';
+
+const loginStore = namespace('login.store');
+const appointmentStore = namespace('appointment.store');
+
+@Component
+export default class InterviewMsg extends Vue {
+
+    @appointmentStore.Action
+    updateAppointmentDetail!: (id: number) => Appointment;
+
+    @appointmentStore.Action
+    getMyAppointmentList!: () => Promise<Appointment[]>;
+
+    @PropSync('isVisible')
+    dialogVisible!: boolean;
+
+    @Prop({default:'90%'})
+    dialogWidth!:string;
+
+    @Prop()
+    client!: Appointment;
+
+    @Prop()
+    defaultValue!: string;
+
+    @Emit('closeDialog')
+    closeDialog() {
+        return;
+    }
+
+    @loginStore.State
+    loginConsultant!: AgentInfo;
+
+    isShowSuccessAlert = false;
+
+    interviewTxt = "";
+    interviewTime = '';
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+      if(this.loginConsultant.phoneNumber && this.loginConsultant.email)
+      {
+        this.interviewTxt = "�憟踝��靽���像����憿批��" + this.loginConsultant.name + "嚗�����������銝膩������蝜�"+"\n"+"隞乩����閰梯�Ⅳ/Email嚗�"+"\n" + this.loginConsultant.phoneNumber + "\n" + this.loginConsultant.email + "\n"+"�甇斗���靘選����蝜恬�����"}
+        else if (!this.loginConsultant.phoneNumber && this.loginConsultant.email)
+          {
+            this.interviewTxt = "�憟踝��靽���像����憿批��" + this.loginConsultant.name + "嚗�����������銝膩������蝜�"+"\n"+"隞乩����mail嚗�"+"\n" + this.loginConsultant.email + "\n"+"�甇斗���靘選����蝜恬�����"
+        }
+        else
+        this.interviewTxt = "�憟踝��靽���像����憿批��" + this.loginConsultant.name + "嚗�����������銝膩������蝜�"+"\n"+"隞乩����閰梯�Ⅳ嚗�"+"\n" + this.loginConsultant.phoneNumber + "\n"+"�甇斗���靘選����蝜恬�����"
+    }
+
+    addInterview() {
+      const appointmentInformation: ToInformAppointment = {
+        appointmentId: this.client.id,
+        email        : this.client?.email,
+        interviewDate: this.interviewTime,
+        message      : this.interviewTxt,
+        phone        : this.client?.phone,
+      };
+      appointmentService.informAppointment(appointmentInformation).then((_) => {
+        this.isShowSuccessAlert = true ;
+      });
+    }
+
+    closeAllDialog() {
+      this.isShowSuccessAlert = false ;
+      this.dialogVisible = false;
+      this.updateAppointmentDetail(this.client.id);
+      this.getMyAppointmentList();
+    }
+
+    get isBtnDisabled() :Boolean {
+      const isFormValid = this.client.phone ? this.interviewTxt && this.interviewTime :this.interviewTxt
+      return !isFormValid
+    }
+
+}
+</script>
+
+<style lang="scss" >
+.interview-msg-component{
+
+  .required {
+  position: relative;
+  &::before {
+      content: '*';
+      position: absolute;
+      color: #FF0000;
+      transform: translate(-12px, 0);
+    }
+  }
+  .msg-dialog-title{
+    display: flex;
+    justify-content: center;
+    margin-bottom:30px;
+    color: $PRIMARY_BLACK;
+  }
+  .send-msg-nav{
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 10px;
+    color: $PRIMARY_BLACK;
+  }
+  .el-dialog{
+    width:90%
+  }
+  .el-textarea__inner{
+    font-size: 20px;
+    padding:10px;
+    text-align: justify;
+    font-weight: 600;
+  }
+  .msg-dialog-btn{
+    margin-top: 30px;
+    display: flex;
+    justify-content: center;
+  }
+  .invite-review{
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+    }
+}
+</style>
diff --git a/PAMapp/components/Interview/InterviewRecordCard.vue b/PAMapp/components/Interview/InterviewRecordCard.vue
new file mode 100644
index 0000000..2a8bb4c
--- /dev/null
+++ b/PAMapp/components/Interview/InterviewRecordCard.vue
@@ -0,0 +1,98 @@
+<template>
+    <div class="record-log-component">
+        <div v-for="(item, index) in noticeLogsList"
+                :key="index">
+                <section
+                    class="record-log-card"
+                >
+                    <div class="record-log-card-date-container">
+                        <div class="record-log-card-date-container-circle">
+                            <div>
+                                <UiDateFormat
+                                    class="xxsTxt bold line-height"
+                                    :date="item.createdDate"
+                                    onlyShowSection="YEAR" />
+                            </div>
+                            <div>
+                                <UiDateFormat
+                                    class="xxsTxt bold line-height"
+                                    :date="item.createdDate"
+                                    onlyShowSection="DATE" />
+                            </div>
+                            <div>
+                                <UiDateFormat
+                                    class="xxsTxt mt-4 line-space"
+                                    :date="item.createdDate"
+                                    onlyShowSection="TIME" />
+                            </div>
+                        </div>
+                    </div>
+                        <div class="record-log-msg">
+                            <div>���赤�
+                                <span v-if="item.email && item.phone">(���陛閮�mail)</span>
+                                <span v-else-if="item.email">(Email)</span>
+                                <span v-else>(���陛閮�)</span>
+                            </div>
+                            <div v-if="item.phone" class="mt-10">���{item.interviewDate | formatDate}}</div>
+                        </div>
+                </section>
+                <div class="time-line"></div>
+            </div>
+    </div>
+</template>
+
+<script lang="ts">
+import { Component, Prop, Vue } from "nuxt-property-decorator";
+import { NoticeLogs } from "~/shared/models/appointment.model";
+
+@Component
+export default class RecordCard extends Vue {
+    @Prop()
+    noticeLogsList!: NoticeLogs[];
+}
+</script>
+
+<style lang="scss" scoped>
+.record-log-component{
+    display: flex;
+    flex-direction: column;
+    .record-log-card{
+        display: flex;
+        .record-log-card-date-container{
+            position:relative;
+            .record-log-card-date-container-circle{
+                display: flex;
+                flex-direction: column;
+                width: 56px;
+                height: 56px;
+                border-radius: 50%;
+                border:1px solid $PRIMARY_BLACK;
+                justify-content: center;
+                align-items: center;
+                align-content: center;
+                background-color:#1B365D;
+                color: #fff;
+            }
+        }
+    }
+}
+.mt-4{
+    margin-top: 4px;
+}
+.line-space{
+    letter-spacing: 1px;
+}
+.line-height{
+    line-height:1.2;
+}
+.time-line{
+    border-left: 1px solid black;
+    height: 30px;
+    margin-left: 28px;
+
+}
+.record-log-msg{
+    margin-left: 13px;
+    margin-top: 10px;
+}
+</style>
diff --git a/PAMapp/components/NavBar.vue b/PAMapp/components/NavBar.vue
index 6e3d2ab..75290c0 100644
--- a/PAMapp/components/NavBar.vue
+++ b/PAMapp/components/NavBar.vue
@@ -7,13 +7,32 @@
       <div class="pam-header__title--sub">�����兢蝳�風��</div>
     </div>
     <div class="pam-header__action-bar">
-      <!-- <i class="icon-bell text--dark-blue cursor--pointer fix-chrome-click--issue"
-        @click="$router.push('/notification')"></i> -->
+      <i
+        v-if="isShowNotification"
+        class="icon-bell text--dark-blue cursor--pointer"
+        @click="$router.push('/notification')"
+      >
+        <span :class="{'newNotification': isNewNotification}"></span>
+      </i>
+
         <el-dropdown :class="{'is-open':isOpenDropdown}"
           ref="dropdown"
           trigger="click"
           @command="routerNavigateTo">
-          <i class="icon-avatar text--dark-blue cursor--pointer fix-chrome-click--issue" @click="isOpenDropdown =!isOpenDropdown" @blur="isOpenDropdown =false"></i>
+          <div
+            @click="isOpenDropdown =!isOpenDropdown"
+            @blur="isOpenDropdown =false">
+            <template v-if="isAdminLogin">
+              <UiAvatar
+              :size="30"
+              :agentNo="consultantId"
+              class="admin-avatar"
+              ></UiAvatar>
+            </template>
+            <template v-else>
+              <i class="icon-avatar text--dark-blue cursor--pointer fix-chrome-click--issue"></i>
+            </template>
+          </div>
           <el-dropdown-menu
             class="pam-header__dropdown">
             <template v-for="(item,index) in navBarList">
@@ -33,18 +52,47 @@
 
 <script lang="ts">
   import { Vue, Component } from 'vue-property-decorator';
-  import { namespace } from 'nuxt-property-decorator';
-  import { Role } from '~/assets/ts/models/enum/Role';
+  import { Action, namespace, State, Watch } from 'nuxt-property-decorator';
+  import { Role } from '~/shared/models/enum/Role';
   import * as _ from 'lodash';
+  import { NotificationList } from '~/shared/models/reviews.model';
+  import { AppointmentLog } from '~/shared/models/appointment.model';
 
   const roleStorage = namespace('localStorage');
   @Component
   export default class NavBar extends Vue {
-    @roleStorage.Mutation storageClear!: () => void;
 
-    @roleStorage.Getter idToken!: string | null;
-    @roleStorage.Getter currentRole!: string | null;
-    @roleStorage.Getter consultantId!: string | null;
+    @roleStorage.Getter
+    idToken!: string | null;
+
+    @roleStorage.Getter
+    currentRole!: string | null;
+
+    @roleStorage.Getter
+    consultantId!: string | null;
+
+    @roleStorage.Mutation
+    storageClear!: () => void;
+
+    @roleStorage.Getter
+    isAdminLogin!: boolean;
+
+    @roleStorage.Getter
+    isUserLogin!: boolean;
+
+    @Action
+    storeMyPersonalNotification!: () => void;
+
+    @State
+    notificationList!: NotificationList[];
+
+    @Action
+    storeMyAppointmentReviewLog!: () => void;
+
+    @State
+    unReviewLogList!: AppointmentLog[];
+
+    isOpenDropdown = false;
 
     navBarList = [{
         authorityOfRoleList: [Role.NOT_LOGIN],
@@ -77,6 +125,11 @@
         title: '���“���',
       },
       {
+        authorityOfRoleList: [Role.NOT_LOGIN, Role.USER],
+        routeUrl: '/faq',
+        title: 'F&Q 撣貉����',
+      },
+      {
         authorityOfRoleList: [Role.USER, Role.ADMIN],
         routeUrl: '',
         title: '��',
@@ -87,12 +140,18 @@
         title: '憿批��',
       },
     ];
-    login_role = Role.NOT_LOGIN;
-    isOpenDropdown = false;
 
-    get loginRole(): Role {
-      return this.idToken && this.currentRole ? (this.currentRole as Role): Role.NOT_LOGIN;
+    //////////////////////////////////////////////////////////////////////
+
+    @Watch('$route', {immediate: true})
+    onRouterChange() {
+        if (this.currentRole) {
+          this.storeMyPersonalNotification();
+          this.storeMyAppointmentReviewLog();
+        }
     }
+
+    //////////////////////////////////////////////////////////////////////
 
     routerNavigateTo(url: string): void {
       (this.$refs.dropdown as any).hide();
@@ -110,6 +169,26 @@
       this.storageClear();
       _.isEqual(this.$route.name, 'index') ? location.reload() : this.$router.push('/');
     }
+
+    get loginRole(): Role {
+      return this.idToken && this.currentRole ? (this.currentRole as Role): Role.NOT_LOGIN;
+    }
+
+    get isShowNotification() {
+      if (this.isUserLogin) {
+        return this.notificationList.length || this.unReviewLogList.length;
+      }
+      if (this.isAdminLogin) {
+        return this.notificationList.length
+      }
+    }
+
+    get isNewNotification() {
+      if (this.currentRole) {
+        return this.notificationList.filter(item => !item.readDate).length;
+      }
+    }
+
   }
 
 </script>
@@ -175,9 +254,30 @@
 
       i {
         padding: 0px 15px;
+        @extend .fix-chrome-click--issue;
 
         @media screen and (max-width: 352px) {
           padding: 0px 10px;
+        }
+      }
+
+      .admin-avatar {
+        margin: 0px 15px;
+        @media screen and (max-width: 352px) {
+          margin: 0px 10px;
+        }
+      }
+
+      .icon-bell {
+        position: relative;
+        .newNotification {
+          position: absolute;
+          width: 10px;
+          height: 10px;
+          top: 0;
+          right: 15px;
+          border-radius: 50px;
+          background: $PRIMARY_RED;
         }
       }
     }
@@ -200,11 +300,11 @@
       height: $DESKTOP_NAV_BAR;
 
       .pam-header__logo {
-        width: 180px;
-        height: 100%;
+        width: 160px;
+        height: 70px;
         margin: 0;
         background-image: url('~/assets/images/logo.png');
-        background-size: cover;
+        background-size: contain;
         background-repeat: no-repeat;
         background-position: center;
       }
diff --git a/PAMapp/components/QuickFilter/QuickFilterConsultantList.vue b/PAMapp/components/QuickFilter/QuickFilterConsultantList.vue
index 93250cd..7daefd9 100644
--- a/PAMapp/components/QuickFilter/QuickFilterConsultantList.vue
+++ b/PAMapp/components/QuickFilter/QuickFilterConsultantList.vue
@@ -19,7 +19,7 @@
             >
                 <UiAvatar
                     :size="200"
-                    :fileName="item.img"
+                    :agentNo="item.agentNo"
                     class="mx-auto"
                     @click.native="showAgentDetail(item.agentNo)"
                 ></UiAvatar>
@@ -31,7 +31,7 @@
                         <div class="smTxt_bold mb-10 text--prudential_grey">����風</div>
                         <div class="mb-10">{{item.seniority}}</div>
                     </el-col>
-                    <el-col :span="12">
+                    <el-col :span="12" v-if="!hideReviews">
                         <div class="smTxt_bold mb-10 text--prudential_grey">摰X皛踵�漲</div>
                         <div>
                             <i class="icon-star pam-icon icon--yellow "></i>
@@ -79,20 +79,25 @@
 </template>
 
 <script lang="ts">
+import { Consultant } from '~/shared/models/consultant.model';
 import { ElCarousel } from 'element-ui/types/carousel';
+import { hideReviews } from '~/shared/const/hide-reviews';
 import { Vue, Component, Prop } from 'vue-property-decorator';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-
 
 @Component
 export default class QuickFilterConsultantList extends Vue {
-    @Prop() consultantList!: Consultant[];
+    @Prop()
+    consultantList!: Consultant[];
+
     isVisiblePopUp = false;
     popUpTxt = '����憿批��';
     startPosition = 0;
     endPosition = 0;
     startYPosition = 0;
     endYPosition = 0;
+    hideReviews = hideReviews ;
+
+    //////////////////////////////////////////////////////////////////
 
     moveStart(event: TouchEvent) {
         this.startPosition = event.changedTouches[0].clientX;
@@ -114,13 +119,7 @@
         }
     }
 
-    nextCard() {
-        (this.$refs.carouselRef as ElCarousel).next();
-    }
-
-    prevCard() {
-        (this.$refs.carouselRef as ElCarousel).prev();
-    }
+    //////////////////////////////////////////////////////////////////
 
     openPopUp(txt: string) {
         this.popUpTxt = txt;
@@ -130,6 +129,15 @@
     showAgentDetail(agentNo: string): void {
         this.$router.push(`/agentInfo/${agentNo}`);
     }
+
+    nextCard() {
+        (this.$refs.carouselRef as ElCarousel).next();
+    }
+
+    prevCard() {
+        (this.$refs.carouselRef as ElCarousel).prev();
+    }
+
 }
 </script>
 
@@ -216,4 +224,4 @@
         }
     }
 
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/components/QuickFilter/QuickFilterSelector.vue b/PAMapp/components/QuickFilter/QuickFilterSelector.vue
index 915eca1..5baa545 100644
--- a/PAMapp/components/QuickFilter/QuickFilterSelector.vue
+++ b/PAMapp/components/QuickFilter/QuickFilterSelector.vue
@@ -2,7 +2,7 @@
     <div>
         <div class="mb-10" v-if="questionOption.title !== '憿批��批'">
             <span class="mdTxt"
-            >{{questionOption.title === '憿批�遛��漲' ? '靽憿批�遛��漲' : questionOption.title}}
+            >{{questionOption.title}}
             </span>
             <span
                 class="smTxt_bold text--primary"
@@ -14,7 +14,10 @@
             >������</span>
         </div>
 
-        <div class="quickBtnBlock" v-if="questionOption.name === 'communicationStyles'">
+        <!-------------------- 皞�◢� -------------------->
+        <div class="quickBtnBlock"
+            v-if="questionOption.name === 'communicationStyles'"
+        >
             <el-checkbox-group
                 class="pam-quickFilter-checkbox"
                 v-model="pickedItem.communicationStyles"
@@ -29,8 +32,29 @@
                 ></el-checkbox>
             </el-checkbox-group>
         </div>
-
-        <div class="quickBtnBlock" v-else-if="questionOption.name === 'gender'">
+        <!-------------------- 撟渲�� -------------------->
+        <div class="quickBtnBlock"
+            v-else-if="questionOption.name === 'seniority'"
+        >
+            <el-radio-group
+                class="pam-quickFilter-radio pam-radio-group"
+                v-model="pickedItem.seniority"
+            >
+                <el-radio
+                    v-for="(i, index) in questionOption.detail"
+                    :key="index"
+                    :label="i.value"
+                    :class="i.className"
+                >
+                    <div>{{i.name}}</div>
+                    <div class="subtitle">{{i.subTitle}}</div>
+                </el-radio>
+            </el-radio-group>
+        </div>
+        <!-------------------- �批 -------------------->
+        <div class="quickBtnBlock"
+            v-else-if="questionOption.name === 'gender'"
+        >
             <el-radio-group
                 class="pam-quickFilter-radio"
                 v-model="pickedItem.gender"
@@ -43,10 +67,11 @@
                 >{{i.name}}</el-radio>
             </el-radio-group>
         </div>
-
+        <!-------------------- 皛踵�漲 -------------------->
         <div v-else>
             <el-rate
-                class="pam-quickFilter-rate"
+            v-if="!hideReviews"
+                class="pam-rate mt-30"
                 v-model="pickedItem.avgScore"
             ></el-rate>
         </div>
@@ -65,53 +90,58 @@
 
 <script lang="ts">
 import { Vue, Component, Prop, Watch, Emit } from 'nuxt-property-decorator';
-import { FastQueryParams } from '~/assets/ts/api/consultant';
-import { QuestionOption } from '~/pages/quickFilter/index.vue';
-
+import { hideReviews } from '~/shared/const/hide-reviews';
+import { FastQueryParams, QuestionOption, Selected } from '~/shared/models/quick-filter.model';
 @Component
 export default class QuickFilterDrawer extends Vue {
+    @Prop()
+    questionOption!: QuestionOption;
+
+    @Prop()
+    isOpenQuestionPopUp!: boolean;
+
+    @Prop()
+    confirmItem!: Selected[];
 
     pickedItem: FastQueryParams = {
         communicationStyles: [],
         status: '',
         gender: '',
-        avgScore: 0
+        avgScore: 0,
+        seniority: ''
     }
+    hideReviews = hideReviews ;
 
-    @Prop() questionOption!: QuestionOption;
-    @Prop() isOpenQuestionPopUp!: boolean;
-    @Prop() confirmItem!: Selected[];
+    //////////////////////////////////////////////////////////////////
 
-    @Watch('isOpenQuestionPopUp', {immediate: true}) onPopUpChange() {
+    @Watch('isOpenQuestionPopUp', {immediate: true})
+    onPopUpChange() {
         this.pickedItem = {
-            communicationStyles: this.communicationStyles,
+            communicationStyles: this.getCommunicationStyles(),
             status: '',
-            gender: this.gender,
-            avgScore: this.avgScore
+            gender: this.getGender(),
+            avgScore: this.getAvgScore(),
+            seniority: this.getSeniority()
         }
     }
 
-    get gender() {
-        const filter = this.confirmItem.filter(item => item.option === 'gender');
-        return filter.length > 0 ? filter[0].value : '';
+    @Emit('confirm')
+    confirm() {
+        const name = this.questionOption.name;
+        return {
+            option: name,
+            value: this.pickedItem[name]
+        }
     }
 
-    get avgScore() {
-        const filter = this.confirmItem.filter(item => item.option === 'avgScore');
-        return filter.length > 0 ? filter[0].value : 0;
-    }
-
-    get communicationStyles() {
-        return this.confirmItem
-            .filter(item => item.option === 'communicationStyles')
-            .map(item => item.value);
-    }
+    //////////////////////////////////////////////////////////////////
 
     get isDisabled() {
         const name = this.questionOption.name;
         return name === 'gender' && !this.pickedItem[name]
             || name === 'avgScore' && !this.pickedItem[name]
             || name === 'communicationStyles' && !this.pickedItem[name].length
+            || name === 'seniority' && !this.pickedItem[name]
     }
 
     selectedCommunicationStyles() {
@@ -120,20 +150,32 @@
         }
     }
 
-    @Emit('confirm')
-    confirm() {
-        const name = this.questionOption.name;
-        return {
-            option: this.questionOption.name,
-            value: this.pickedItem[name]
-        }
+    //////////////////////////////////////////////////////////////////
+
+    private getGender(): string {
+        return this.filterSingleSelected('gender');
     }
 
-}
+    private getAvgScore(): number {
+        return this.filterSingleSelected('avgScore');
+    }
 
-export interface Selected {
-    option: string;
-    value: any;
+    private getCommunicationStyles(): string[] {
+        return this.confirmItem
+            .filter(item => item.option === 'communicationStyles')
+            .map(item => item.value);
+    }
+
+    private getSeniority(): string {
+        return this.filterSingleSelected('seniority');
+    }
+
+    private filterSingleSelected(name: string) {
+        const filter = this.confirmItem.filter(item => item.option === name);
+        return filter.length > 0
+            ? filter[0].value
+            : (name === 'avgScore' ? 0 : '');
+    }
 }
 </script>
 
@@ -142,8 +184,12 @@
     .quickBtnBlock {
         display: flex;
         justify-content: space-between;
-        align-content: space-between;
         flex-wrap: wrap;
     }
 
-</style>
\ No newline at end of file
+    .pam-radio-group {
+        height: 240px;
+        flex-wrap: wrap;
+    }
+
+</style>
diff --git a/PAMapp/components/ReviewRecords/ReviewRecords.vue b/PAMapp/components/ReviewRecords/ReviewRecords.vue
new file mode 100644
index 0000000..e1c3fb0
--- /dev/null
+++ b/PAMapp/components/ReviewRecords/ReviewRecords.vue
@@ -0,0 +1,126 @@
+<template>
+<div class="user-reviews-page">
+    <section class="mdTxt">
+        �������
+    </section>
+
+    <section class="user-reviews-header">
+        <div class="header-title mdTxt">
+            皛踵�漲蝝����
+        </div>
+    </section>
+    <div class="user-reviews-page">
+
+      <template v-if="reviewLogList.length">
+        <section class="user-reviews-content">
+            <div
+                class="user-reviews-card"
+                v-for="(appointmentLog, index) in reviewLogList"
+                :key="index">
+                <div class="user-reviews-card-content" v-if="isUserLogin">
+                    �撠�<span class="mdTxt">{{ ` ${appointmentLog.type === 'APPOINTMENT' ? appointmentLog.agentName : '撟喳'} ` }}</span>���� <UiReviewScore :score="appointmentLog.score" /> 閰嚗�
+                </div>
+                <div class="user-reviews-card-content" v-else>
+                    {{ `${appointmentLog.customerName} `}} 撠���� <UiReviewScore :score="appointmentLog.score" /> 閰嚗�
+                </div>
+                <div class="user-reviews-card-date">
+                    <div class="date">
+                        <UiDateFormat
+                            :date="appointmentLog.lastModifiedDate"
+                            onlyShowSection="DAY" />
+                    </div>
+                    <div class="time">
+                        <UiDateFormat
+                            :date="appointmentLog.lastModifiedDate"
+                            onlyShowSection="TIME" />
+                    </div>
+                </div>
+            </div>
+        </section>
+      </template>
+      <template v-else>
+                <section class="user-reviews-content">
+            <div
+                class="user-reviews-card empty">
+                <div class="user-reviews-card-content">
+                    ��鞈��
+                </div>
+            </div>
+        </section>
+      </template>
+
+    </div>
+</div>
+
+</template>
+<script lang="ts">
+import { AppointmentLog } from '~/shared/models/appointment.model';
+import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator';
+import authService from '~/shared/services/auth.service';
+
+@Component
+export default  class ReviewRecords extends Vue{
+
+    @Prop()
+    reviewLogList!: AppointmentLog[];
+
+    isUserLogin = false;
+
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+      this.isUserLogin = authService.isUserLogin();
+    }
+
+}
+</script>
+
+<style lang="scss" scoped>
+.user-reviews-page{
+    margin-bottom:155px;
+    .user-reviews-header{
+        height: 43px;
+        margin-top: 28px;
+        display: flex;
+        justify-content: center;
+        border-bottom: 2px solid black;
+    }
+    .user-reviews-content{
+        .user-reviews-card{
+            display: flex;
+            justify-content: space-between;
+            margin-top: 26px;
+            border-bottom: 1px solid #707070;
+            height: 54px;
+            padding-bottom: 15px;
+            .user-reviews-card-content{
+                width: 242px;
+                padding-right:50px;
+                line-height: 1.2;
+                font-size: 20px;
+                margin-left: 15px;
+            }
+            .user-reviews-card-date{
+                font-size: 12px;
+                display: flex;
+                flex-direction: column;
+                align-items: flex-end;
+                margin-right: 15px;
+                width:52px;
+                .date{
+                    margin-bottom: 2px;
+
+                }
+            }
+            &.empty {
+              border-color: transparent;
+            }
+        }
+    }
+}
+@include desktop{
+    .user-reviews-card-content{
+        flex: 1;
+    }
+}
+</style>
diff --git a/PAMapp/components/Ui/UiAvatar.vue b/PAMapp/components/Ui/UiAvatar.vue
index 55a5763..2cd6eb3 100644
--- a/PAMapp/components/Ui/UiAvatar.vue
+++ b/PAMapp/components/Ui/UiAvatar.vue
@@ -11,11 +11,14 @@
 
 @Component
 export default class UiAvatar extends Vue {
-    @Prop() size!: number;
-    @Prop() fileName!: string;
+    @Prop()
+    size!: number;
+
+    @Prop()
+    agentNo!: string;
 
     get imgSrc() {
-        return process.env.BASE_URL + '/consultant/avatar/' + this.fileName;
+        return process.env.BASE_URL + '/consultant/avatar/' + this.agentNo;
     }
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/components/Ui/UiCarousel.vue b/PAMapp/components/Ui/UiCarousel.vue
index 98a61a8..5f05473 100644
--- a/PAMapp/components/Ui/UiCarousel.vue
+++ b/PAMapp/components/Ui/UiCarousel.vue
@@ -1,18 +1,25 @@
 <template>
 <div>
     <el-carousel
-        :autoplay="true"
         indicator-position="outside"
         arrow="never"
         trigger="click"
         class="pam-home-carousel"
     >
-        <el-carousel-item class="banner-img">
+        <el-carousel-item class="banner-img-style banner1-img">
             <div class="text--center mt-30 banner-info">
                 <h1 class="banner-title mb-10">�犖������“���</h1>
                 <p class="banner-txt text--PRIMARY_WHITE">����嚗�������</p>
                 <p class="banner-txt text--PRIMARY_WHITE">霈��鼠�敹恍�������“����</p>
                 <p class="banner-txt text--PRIMARY_WHITE">閫�瘙箔�憭批������嚗�銵���</p>
+            </div>
+        </el-carousel-item>
+
+        <el-carousel-item class="banner-img-style banner2-img">
+            <div class="text--center mt-30 banner-info">
+                <h1 class="banner-title mb-10">憭���撘�</h1>
+                <p class="banner-txt text--PRIMARY_WHITE">頛����憿批��</p>
+                <p class="banner-txt text--PRIMARY_WHITE">慦���“��蜓��蝜�</p>
             </div>
         </el-carousel-item>
     </el-carousel>
@@ -29,13 +36,19 @@
 </script>
 
 <style lang="scss" scoped>
-.banner-img {
+.banner-img-style {
     width: 100%;
     height: 100%;
-    background-image: url('~/assets/images/index_banner_mob.svg');
     background-repeat: no-repeat;
     background-size: cover;
     background-position: bottom;
+}
+.banner1-img {
+    background-image: url('~/assets/images/index_banner_mob.svg');
+}
+
+.banner2-img {
+    background-image: url('~/assets/images/index_banner2_mob.svg');
 }
 
 .banner-info {
@@ -50,9 +63,13 @@
 }
 
 @media (min-width: 576px) {
-    .banner-img {
+    .banner1-img {
         background-image: url('~/assets/images/index_banner_web.svg');
     }
+
+    .banner2-img {
+        background-image: url('~/assets/images/index_banner2_web.svg');
+    }
 }
 
 @include desktop {
diff --git a/PAMapp/components/Ui/UiDateFormat.vue b/PAMapp/components/Ui/UiDateFormat.vue
index 7decbf2..32f9651 100644
--- a/PAMapp/components/Ui/UiDateFormat.vue
+++ b/PAMapp/components/Ui/UiDateFormat.vue
@@ -9,14 +9,17 @@
 
 @Component
 export default class UiDateFormat extends Vue {
-    @Prop() date!: Date | string;
-    @Prop() onlyShowSection!: 'DAY' | 'TIME';
-    compareTarget!: Date;
+    @Prop()
+    date!: Date | string;
 
+    @Prop()
+    onlyShowSection!: 'YEAR' | 'DATE' | 'DAY' | 'TIME';
+
+    compareTarget!: Date;
     displayValue = '';
 
-    @Watch('date', {immediate: true}) formattedDate(): void {
-
+    @Watch('date', {immediate: true})
+    formattedDate(): void {
         if (!this.date) return;
 
         const toDatePromise = new Promise((resolve, reject) => {
@@ -35,7 +38,7 @@
                     const isThisYear = (compareDate: Date): boolean => {
                         return compareDate.getFullYear() === _now.getFullYear();
                     };
-            
+
                     const minutes = compareTarget.getMinutes() > 9 ?  compareTarget.getMinutes() : `0${compareTarget.getMinutes()}`;
                     const thisYearDayLabel = isToday(compareTarget) ? `隞予` : `${compareTarget.getMonth() + 1}/${compareTarget.getDate()}`;
 
@@ -43,15 +46,21 @@
                         this.displayValue = isThisYear(compareTarget) ? thisYearDayLabel : `${compareTarget.getFullYear()}/${compareTarget.getMonth() + 1}/${compareTarget.getDate()}`;
                     } else if (this.onlyShowSection === 'TIME') {
                         this.displayValue = `${compareTarget.getHours()}:${minutes}`;
+                    } else if (this.onlyShowSection === 'DATE') {
+                        this.displayValue = isThisYear(compareTarget)
+                            ? thisYearDayLabel
+                            : `${compareTarget.getMonth() + 1}/${compareTarget.getDate()}`;
+                    } else if (this.onlyShowSection === 'YEAR') {
+                        this.displayValue = `${compareTarget.getFullYear()}`;
                     }
 
                     if (this.onlyShowSection) return;
 
-                    this.displayValue = isThisYear(compareTarget) 
-                        ? `${thisYearDayLabel} ${compareTarget.getHours()}:${minutes}` 
+                    this.displayValue = isThisYear(compareTarget)
+                        ? `${thisYearDayLabel} ${compareTarget.getHours()}:${minutes}`
                         : `${compareTarget.getFullYear()}/${compareTarget.getMonth() + 1}/${compareTarget.getDate()} ${compareTarget.getHours()}:${minutes}`;
-                }    
+                }
         )}
 
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/components/Ui/UiDatePicker.vue b/PAMapp/components/Ui/UiDatePicker.vue
new file mode 100644
index 0000000..025594a
--- /dev/null
+++ b/PAMapp/components/Ui/UiDatePicker.vue
@@ -0,0 +1,71 @@
+<template>
+    <el-date-picker
+        class="pam-date cursor--pointer"
+        popper-class="pam-date-popper"
+        v-model="dateValue"
+        :clearable="false"
+        type="date"
+        :editable="false"
+        format="yyyy/MM/dd"
+        placeholder="������"
+        prefix-icon="icon-down down-icon"
+        :picker-options="pickerOptions"
+        @change="changeDate"
+    >
+    </el-date-picker>
+</template>
+
+<script lang="ts">
+import { Component, Emit, Prop, PropSync, Vue, Watch } from "nuxt-property-decorator";
+
+@Component
+export default class UiDatePicker extends Vue {
+    dateValue: Date | string = '';
+
+    @Prop()
+    defaultValue!: string;
+
+    @Prop({default: false})
+    isPastDateDisabled!: boolean;
+
+    @Prop({default: false})
+    isFutureDateDisabled!: boolean;
+
+    @Emit('changeDate')
+    changeDate() {
+        return this.dateValue;
+    }
+
+    @Watch('defaultValue', {immediate: true})
+    updateDefault() {
+        if (this.defaultValue) {
+            this.dateValue = new Date(this.defaultValue);
+            this.changeDate();
+        }
+    }
+
+    get pickerOptions() {
+        const date = new Date();
+        const currentDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
+
+        if (this.isPastDateDisabled) {
+            return {
+                disabledDate(time: Date) {
+                    const pickedDate = `${time.getFullYear()}/${time.getMonth() + 1}/${time.getDate()}`;
+                    return new Date(pickedDate).getTime() < new Date(currentDate).getTime();
+                }
+            }
+        }
+
+        if (this.isFutureDateDisabled) {
+            return {
+                disabledDate(time: Date) {
+                    const pickedDate = `${time.getFullYear()}/${time.getMonth() + 1}/${time.getDate()}`;
+                    return new Date(pickedDate).getTime() > new Date(currentDate).getTime();
+                }
+            }
+        }
+    }
+
+}
+</script>
\ No newline at end of file
diff --git a/PAMapp/components/Ui/UiDialog.vue b/PAMapp/components/Ui/UiDialog.vue
index be737dc..4865810 100644
--- a/PAMapp/components/Ui/UiDialog.vue
+++ b/PAMapp/components/Ui/UiDialog.vue
@@ -17,11 +17,15 @@
 
 @Component
 export default class UiDialog extends Vue {
-    @PropSync('isVisible') dialogVisible!: boolean;
-    @Prop() width!: string;
+    @PropSync('isVisible')
+    dialogVisible!: boolean;
 
-    @Emit('closeDialog') closeDialog() {
+    @Prop()
+    width!: string;
+
+    @Emit('closeDialog')
+    closeDialog() {
         return;
     }
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/components/Ui/UiDrawer.vue b/PAMapp/components/Ui/UiDrawer.vue
index 8cc9b08..fc66bd4 100644
--- a/PAMapp/components/Ui/UiDrawer.vue
+++ b/PAMapp/components/Ui/UiDrawer.vue
@@ -17,10 +17,14 @@
 
 @Component
 export default class UiDialog extends Vue {
-    @PropSync('isVisible') drawerVisible!: boolean;
-    @Prop() size!: number;
+    @PropSync('isVisible')
+    drawerVisible!: boolean;
 
-    @Emit('closeDrawer') closeDrawer() {
+    @Prop()
+    size!: number;
+
+    @Emit('closeDrawer')
+    closeDrawer() {
         return;
     }
 }
@@ -34,4 +38,4 @@
         border-radius: 10px;
         margin: 10px auto 13px auto;
     }
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/components/Ui/UiField.vue b/PAMapp/components/Ui/UiField.vue
index 5d5ee7b..8845d85 100644
--- a/PAMapp/components/Ui/UiField.vue
+++ b/PAMapp/components/Ui/UiField.vue
@@ -3,7 +3,7 @@
       v-if="fieldDisplayDevice === 'ALL'
       || fieldDisplayDevice === currentDevice">
       <div class="pam-field__label">
-        <div class="pam-field__title"><i :class="fieldIcon"></i>{{ fieldLabel }}</div>
+        <div class="pam-field__title" :style="{ 'font-size': fieldLabelSize }"><i :class="fieldIcon"></i>{{ fieldLabel }}</div>
       </div>
       <p class="pam-field__content">
         <slot></slot>
@@ -13,21 +13,36 @@
 
 <script lang="ts">
 import { Vue, Component, Prop } from 'vue-property-decorator';
-import { isMobileDevice } from '~/assets/ts/device';
+
+import UtilsService from '~/shared/services/utils.service';
 
 @Component
 export default class UiField extends Vue {
 
-  @Prop() span!: number;
-  @Prop() icon!: string;
-  @Prop() label!: string;
-  @Prop() content!: string;
-  @Prop() displayDevice!: 'MOBILE' | 'DESKTOP' | 'ALL';
+  @Prop()
+  span!: number;
+
+  @Prop()
+  icon!: string;
+
+  @Prop()
+  label!: string;
+
+  @Prop()
+  content!: string;
+
+  @Prop()
+  labelSize?: number;
+
+  @Prop()
+  displayDevice!: 'MOBILE' | 'DESKTOP' | 'ALL';
 
   currentDevice: 'MOBILE' | 'DESKTOP' = 'MOBILE';
 
+  //////////////////////////////////////////////////////////////////
+
   mounted(): void {
-    this.currentDevice = isMobileDevice() ? 'MOBILE' : 'DESKTOP';
+    this.currentDevice = UtilsService.isMobileDevice() ? 'MOBILE' : 'DESKTOP';
   }
 
   get fieldSpan(): number {
@@ -46,29 +61,34 @@
     return this.displayDevice || 'ALL';
   }
 
+  get fieldLabelSize(): string {
+    return (this.labelSize || 16) + 'px';
+  }
+
 }
 </script>
 
-
 <style lang="scss" scoped>
 .pam-field {
-  display: flex;
+  display       : flex;
   flex-direction: column;
   .pam-field__label {
-    display: flex;
     align-items: center;
+    display    : flex;
     .pam-icon {
       font-size: 12px;
     }
     .pam-field__title {
-      font-size: 16px;
-      font-weight: bold;
-      display: flex;
       align-items: center;
+      display    : flex;
+      font-weight: bold;
     }
   }
   .pam-field__content {
-    padding-top: 10px;
+    display    : flex;
+    // padding-top: 10px;
+    white-space: pre-line;
+    line-height: 1.5;
   }
 }
 </style>
diff --git a/PAMapp/components/Ui/UiGoToTop.vue b/PAMapp/components/Ui/UiGoToTop.vue
index 2fe1bd7..8ceb2f7 100644
--- a/PAMapp/components/Ui/UiGoToTop.vue
+++ b/PAMapp/components/Ui/UiGoToTop.vue
@@ -16,11 +16,19 @@
 export default class UiGoToTop extends Vue {
     buttonDisplay = 'none';
 
+    //////////////////////////////////////////////////////////////////
+
     created() {
         if (process.browser) {
             document.body.addEventListener('scroll', this.scrollFunction);
         }
     }
+
+    destroyed() {
+        document.body.removeEventListener('scroll', this.scrollFunction);
+    }
+
+    //////////////////////////////////////////////////////////////////
 
     scrollFunction() {
         if (document.body.scrollTop > 300 || document.documentElement.scrollTop > 300) {
@@ -33,10 +41,6 @@
     topFunction() {
         document.body.scrollTop = 0;
         document.documentElement.scrollTop = 0;
-    }
-
-    destroyed() {
-        document.body.removeEventListener('scroll', this.scrollFunction);
     }
 }
 </script>
@@ -66,4 +70,4 @@
       background-color: $MID_GREY;
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/components/Ui/UiPagination.vue b/PAMapp/components/Ui/UiPagination.vue
index 40f2709..2e13b2b 100644
--- a/PAMapp/components/Ui/UiPagination.vue
+++ b/PAMapp/components/Ui/UiPagination.vue
@@ -1,6 +1,6 @@
 <template>
     <el-pagination
-        :current-page.sync="currentPage"
+        :current-page.sync="syncCurrentPage"
         layout="prev, pager, next"
         :total="totalList.length"
         :page-size="pageSize"
@@ -11,23 +11,40 @@
 </template>
 
 <script lang="ts">
-import { Vue, Component, Prop, Emit, Watch } from 'nuxt-property-decorator';
-import { Consultant } from '~/assets/ts/models/consultant.model';
+import { Vue, Component, Prop, Emit, Watch, PropSync } from 'nuxt-property-decorator';
+import { Consultant } from '~/shared/models/consultant.model';
 
 @Component
 export default class UiPagination extends Vue {
-    @Prop() totalList!: Consultant[];
+    @Prop()
+    totalList!: Consultant[];
+
     @Prop({default: 5}) pageSize!: number;
-    currentPage = 1;
+    @PropSync('currentPage', {default: 1}) syncCurrentPage!: number;
+
     pageList: Consultant[] = [];
 
-    mounted() {
-        this.handleCurrentChange(this.currentPage);
-    }
+    //////////////////////////////////////////////////////////////////
 
-    @Emit('changePage') changePage(): Consultant[] {
+    @Emit('changePage')
+    changePage(): Consultant[] {
         return this.pageList
     }
+
+    @Watch('totalList')
+    watchTotalList(newValue: Consultant[]) {
+        if (newValue) {
+            this.handleCurrentChange(this.syncCurrentPage);
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////
+
+    mounted() {
+        this.handleCurrentChange(this.syncCurrentPage);
+    }
+
+    //////////////////////////////////////////////////////////////////
 
     handleCurrentChange(currentPage: number) {
 
@@ -38,12 +55,6 @@
         if (this.totalList) {
             this.pageList = this.totalList.slice(this.pageSize * currentPage - this.pageSize, this.pageSize * currentPage)
             this.changePage();
-        }
-    }
-
-    @Watch('totalList') watchTotalList(newValue: Consultant[]) {
-        if (newValue) {
-            this.handleCurrentChange(this.currentPage);
         }
     }
 }
diff --git a/PAMapp/components/Ui/UiReviewScore.vue b/PAMapp/components/Ui/UiReviewScore.vue
index 12afaf3..3c91503 100644
--- a/PAMapp/components/Ui/UiReviewScore.vue
+++ b/PAMapp/components/Ui/UiReviewScore.vue
@@ -14,6 +14,7 @@
 
 @Component
 export default class UiReviewScore extends Vue {
-    @Prop() score!: number;
+    @Prop()
+    score!: number;
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/components/Ui/UiScrollPicker.vue b/PAMapp/components/Ui/UiScrollPicker.vue
index 5d624aa..c37b429 100644
--- a/PAMapp/components/Ui/UiScrollPicker.vue
+++ b/PAMapp/components/Ui/UiScrollPicker.vue
@@ -14,12 +14,16 @@
 export default class UiScrollPicker extends Vue {
      // https://reposhub.com/vuejs/form-input/wan2land-vue-scroll-picker.html
 
-     @Prop() options!: string[];
-     @Prop() initValue!: string;
+     @Prop()
+     options!: string[];
 
-     @Emit('change') selValue(value: string) {
+     @Prop()
+     initValue!: string;
+
+     @Emit('change')
+     selValue(value: string) {
           return value
      }
 
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/components/Ui/UiSelect.vue b/PAMapp/components/Ui/UiSelect.vue
new file mode 100644
index 0000000..2ed8dd8
--- /dev/null
+++ b/PAMapp/components/Ui/UiSelect.vue
@@ -0,0 +1,26 @@
+ <template>
+  <el-select v-model="syncedCloseReason" class="pam-select" ref="select">
+    <el-option
+      v-for="(item,index) in options"
+      :key="index"
+      :label="item.key"
+      :value="item.value">
+      {{ item.key }}
+    </el-option>
+  </el-select>
+</template>
+
+<script lang="ts">
+import { Vue, Component, PropSync, Prop} from 'nuxt-property-decorator';
+
+@Component
+export default class UiSelect extends Vue {
+
+  @PropSync('closeReason', { type: String, default: 'other' })
+  syncedCloseReason!: string;
+
+  @Prop({ type:Array , default:()=>[] })
+  options!: object[];
+
+}
+</script>
\ No newline at end of file
diff --git a/PAMapp/components/Ui/UiTags.vue b/PAMapp/components/Ui/UiTags.vue
index 870105a..7dd9ba8 100644
--- a/PAMapp/components/Ui/UiTags.vue
+++ b/PAMapp/components/Ui/UiTags.vue
@@ -16,9 +16,10 @@
 @Component
 export default class UiTags extends Vue {
 
-    @Emit('removeTag') removeTag() {
+    @Emit('removeTag')
+    removeTag() {
         return;
     }
 
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/components/Ui/UiTimePicker.vue b/PAMapp/components/Ui/UiTimePicker.vue
new file mode 100644
index 0000000..291fbcd
--- /dev/null
+++ b/PAMapp/components/Ui/UiTimePicker.vue
@@ -0,0 +1,118 @@
+<template>
+    <el-time-select
+        class="pam-time cursor--pointer"
+        popper-class="pam-time-popper"
+        v-model="timeValue"
+        :clearable="false"
+        :editable="false"
+        :picker-options="pickerOptions"
+        placeholder="������"
+        prefix-icon="icon-down down-icon"
+        value-format="timestamp"
+        @change="changeTime"
+    >
+    </el-time-select>
+</template>
+
+<script lang="ts">
+import { Component, Emit, Prop, Vue, Watch } from "nuxt-property-decorator";
+
+@Component
+export default class UiTimePicker extends Vue {
+    timeValue = '';
+
+    @Prop()
+    defaultValue!: string;
+
+    @Prop({default: ''})
+    changeDate!: Date | string;
+
+    @Prop()
+    isPastDateDisabled!: boolean;
+
+    @Prop()
+    isFutureDateDisabled!: boolean;
+
+    ///////////////////////////////////////////////////////////////////////
+
+    @Emit('changeTime')
+    changeTime() {
+        return this.timeValue;
+    }
+
+    @Watch('defaultValue', {immediate: true})
+    updateDefault() {
+        if (this.defaultValue) {
+            const defaultDate = new Date(this.defaultValue);
+            this.timeValue = this.formatTimeString(defaultDate);
+            this.changeTime();
+        }
+    }
+
+    ///////////////////////////////////////////////////////////////////////
+
+    get pickerOptions() {
+        let minTime = '';
+        let maxTime = '';
+        const currentDate = new Date();
+
+        if (this.changeDate && this.isPickedToday(currentDate)) {
+
+            if (this.isPastDateDisabled) {
+                minTime = this.formatTimeString(currentDate);
+                this.isPickedDisableTime(currentDate, minTime);
+            }
+
+            if (this.isFutureDateDisabled) {
+                maxTime = this.formatTimeString(currentDate);
+                this.isPickedDisableTime(currentDate, maxTime);
+            }
+
+        }
+
+        return {
+            start: '09:00',
+            step: '00:15',
+            end: '21:00',
+            minTime: minTime,
+            maxTime: maxTime
+        }
+    }
+
+    private isPickedDisableTime(currentDate: Date, minMaxTime: string) {
+        const currentTime = this.getTimeValue(currentDate, minMaxTime);
+        const pickedTime = this.getTimeValue(currentDate, this.timeValue);
+        if (this.isPastDateDisabled && pickedTime < currentTime) {
+            this.timeValue = '';
+            this.changeTime();
+        }
+        if (this.isFutureDateDisabled && currentTime < pickedTime) {
+            this.timeValue = '';
+            this.changeTime();
+        }
+    }
+
+    private isPickedToday(currentDate: Date) {
+        const pickedDate = new Date(this.changeDate);
+        const today = this.formatDateString(currentDate);
+        const picked = this.formatDateString(pickedDate);
+        return today === picked;
+    }
+
+    private getTimeValue(date: Date, time: string) {
+        const hour = time.split(':')[0];
+        const minute = time.split(':')[1];
+        return date.setHours(+hour, +minute);
+    }
+
+    private formatDateString(date: Date) {
+        return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
+    }
+
+    private formatTimeString(date: Date) {
+        const hours = date.getHours();
+        const minutes = date.getMinutes();
+        return `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}`;
+    }
+}
+</script>
\ No newline at end of file
diff --git a/PAMapp/components/careerSelect.vue b/PAMapp/components/careerSelect.vue
index c1ae2c7..3a0f848 100644
--- a/PAMapp/components/careerSelect.vue
+++ b/PAMapp/components/careerSelect.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div class="mdTxt pt-10 pb-10">�璆�</div>
+    <div class="mdTxt pt-10 pb-10">���璆�</div>
       <div class="ques-career__select" @click="openPopUp">
         <div class="ques-career__select-input">
           <span v-if="!syncCareerSelect">隢���</span>
@@ -10,9 +10,9 @@
           <i class="icon-down down-icon"></i>
         </div>
       </div>
-      <PopUpFrame :isOpen.sync="showJobDrawer">
+      <PopUpFrame :isOpen.sync="showJobDrawer" :dialogWidth="'400px'">
         <div class="pam-career">
-          <div class="subTitle">�璆�</div>
+          <div class="subTitle">���璆�</div>
           <el-radio-group class="pam-single__select--col" v-model="career" @change="handleChange">
             <el-radio-button v-for="(career,index) in options"
               :key="index"
@@ -20,14 +20,16 @@
               {{career.title}}
             </el-radio-button>
           </el-radio-group>
-          <div class="mt-10" v-if="career === '�隞�'">
-            <input class="pam-career__other-input"
+          <div class="mt-20 h-50 pam-career__other">
+            <input
+              v-if="career === '�隞�'"
+              class="pam-career__other-input"
               :class="{'warning':!career_Other}"
               v-model="career_Other" >
           </div>
           <el-button type="primary"
             class="pam-career__confirm"
-            :disabled="isCareerVerifyFailed"
+            :disabled="!isCareerValid"
             @click="patchCareer">
               蝣箏��
           </el-button>
@@ -35,19 +37,23 @@
       </PopUpFrame>
   </div>
 
-
 </template>
 
 <script lang="ts">
   import { Component , PropSync , Vue} from "vue-property-decorator";
   import * as _ from 'lodash';
+
   @Component
   export default class CareerSelect extends Vue {
-    @PropSync('careerSelect',{ type: String, default :''}) syncCareerSelect! :string;
+
+    @PropSync('careerSelect',{ type: String, default :''})
+    syncCareerSelect! :string;
+
     showJobDrawer = false;
-    career='';
-    career_Other='';
-    options= [
+    career        = '';
+    career_Other  = '';
+
+    options = [
       {
         title:'憭',
         label:'憭'
@@ -61,21 +67,21 @@
         label:'�隞�'
       }
     ];
-    get isCareerVerifyFailed():boolean{
-      return !this.career || (_.isEqual(this.career,'�隞�')&&!this.career_Other) ;
-    }
-    handleChange(event:any):void{
+
+    //////////////////////////////////////////////////////////////////////
+
+    handleChange(event:any): void{
       if(event !== '�隞�'){
-        this.career_Other='';
+        this.career_Other = '';
       }
     }
 
-    openPopUp():void{
+    openPopUp(): void{
       this.showJobDrawer = true;
       this.patchInitValue();
     }
 
-    patchInitValue():void{
+    patchInitValue(): void{
       if(this.syncCareerSelect){
         if(_.includes(['憭','��'],this.syncCareerSelect)){
           this.career = this.syncCareerSelect;
@@ -86,64 +92,78 @@
       }
     }
 
-    patchCareer():boolean {
+    patchCareer(): void {
       this.showJobDrawer = false;
-      this.syncCareerSelect = this.career === '�隞�' ? _.cloneDeep(this.career_Other):_.cloneDeep(this.career);
-      return true;
+      this.syncCareerSelect = this.career === '�隞�'
+                          ? _.cloneDeep(this.career_Other)
+                          : _.cloneDeep(this.career);
+    }
+
+    get isCareerValid(): boolean {
+      return !!(this.career === '�隞�'
+            ? this.career_Other
+            : this.career);
     }
   }
 </script>
 
 <style lang="scss" scoped>
   .pam-career{
-    display: flex;
+    display       : flex;
     flex-direction: column;
-    align-items: center;
+    align-items   : center;
   }
   .ques-career__select{
-    position: relative;
-    height: 50px;
+    position          : relative;
+    height            : 50px;
     -webkit-box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-    padding: 15px;
-    border-radius:10px;
-    border:1px solid #D0D0CE ;
-    background-color: $PRIMARY_WHITE;
+    -moz-box-sizing   : border-box;
+    box-sizing        : border-box;
+    padding           : 15px;
+    border-radius     : 10px;
+    border            : 1px solid #D0D0CE ;
+    background-color  : $PRIMARY_WHITE;
     .ques-career__select-input{
       width: 90%;
     }
     .ques-career__select--icon{
       position: absolute;
-      top: 0px;
-      right: 15px;
+      top     : 0px;
+      right   : 15px;
       .down-icon{
-        color:#ED1B2E;
-        font-size: 25px;
-        display: flex;
+        color          : #ED1B2E;
+        font-size      : 25px;
+        display        : flex;
         justify-content: flex-end;
-        padding-top: 11px;
-        margin-left: -20px;
+        padding-top    : 11px;
+        margin-left    : -20px;
       }
     }
   }
-  .pam-career__other-input{
+  .h-50 {
     height: 50px;
+  }
+  .pam-career__other {
     width: 100%;
-    border: 1px #CCCCCC solid;
-    width: 300px;
-    padding-left: 15px;
-    -webkit-box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-    &.warning{
-      border: 1px $PRIMARY_RED solid;
+    .pam-career__other-input {
+      height            : 50px;
+      border            : 1px #CCCCCC solid;
+      width             : 100%;
+      padding-left      : 15px;
+      -webkit-box-sizing: border-box;
+      -moz-box-sizing   : border-box;
+      box-sizing        : border-box;
+      border-radius     : 10px;
+      &.warning{
+        border: 1px $PRIMARY_RED solid;
+      }
     }
+
   }
   .pam-career__confirm{
-    width: 120px;
-    height: 50px;
-    margin-top: 30px;
+    width     : 120px;
+    height    : 50px;
+    margin-top: 20px;
   }
 
 </style>
diff --git a/PAMapp/components/editConsultantAvatar.vue b/PAMapp/components/editConsultantAvatar.vue
new file mode 100644
index 0000000..0b3832c
--- /dev/null
+++ b/PAMapp/components/editConsultantAvatar.vue
@@ -0,0 +1,133 @@
+<template>
+  <div>
+
+    <el-upload
+      class="pam-avatar-uploader"
+      ref="upload"
+      action="#"
+      :auto-upload="false"
+      :on-change="handleAvatarUploaded"
+      :show-file-list="false"
+      accept="image/png, image/jpeg, image/jpg">
+        <el-avatar
+          :size="150"
+          :src="imgSrc"
+          class="pam-avatar cursor--pointer fix-chrome-click--issue"
+        ></el-avatar>
+            <div class="text--center mt-10">
+              <el-button
+              >閮剖����</el-button>
+            </div>
+    </el-upload>
+      <div
+        v-if="showResetAvatarBtn"
+        class="pam-avatar-uploader__action-label text--center mt-10 cursor--pointer"
+        style="line-height: 1.5"
+        >
+        <i class="icon-information"></i>
+        隢����銝�������������
+        <span class="text--primary cursor--pointer text--underline" @click="resetAvatar">���迨����</span>
+
+      </div>
+
+  </div>
+</template>
+
+<script lang="ts">
+  import { Vue, Component, Prop, PropSync } from 'nuxt-property-decorator';
+
+  import { MessageBox } from 'element-ui';
+  import { MessageBoxData } from 'element-ui/types/message-box';
+  import _ from 'lodash';
+
+  import myConsultantService from '~/shared/services/my-consultant.service';
+
+  @Component
+  export default class editConsultantAvatar extends Vue {
+
+    @Prop({type:String, default:""})
+    agentNo!:string;
+
+    @PropSync('photoBase64',{type:String, default:""})
+    syncPhotoBase64!:string;
+
+    _imgSrc: string = '';
+    imgSrc: string='';
+
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+      if(this.agentNo) this.initConsultantAvatar()
+    }
+
+    private initConsultantAvatar(): void {
+      myConsultantService.getConsultantAvatar(this.agentNo)
+      .then(base64=>
+       this.splitBase64WithCommon(base64)
+      )
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    resetAvatar(): void {
+      this.imgSrc = this._imgSrc;
+    }
+
+    handleAvatarUploaded(file:any): void {
+      const isFollowUploadRule =_.includes(file.raw.type,'image/');
+      isFollowUploadRule ? this.getImgSrc(file) : this.showFileUploadErrorMsg()
+    }
+
+    private getImgSrc(file:any):void{
+      const blob = file.raw;
+      this.blobToBase64(blob).then(base64=>{
+        this.splitBase64WithCommon(base64 as string);
+      });
+    }
+
+    private blobToBase64(blob:File):Promise<string | ArrayBuffer | null> {
+      return new Promise((resolve,reject) => {
+        const reader = new FileReader();
+        reader.readAsDataURL(blob);
+        reader.onloadend = () => {
+          resolve(reader.result)
+        };
+      });
+    }
+
+    private splitBase64WithCommon(base64: string): void {
+      const splitBase64= _.split(base64, ','); // �鈭�� data:image , base64 閫������;
+      this.syncPhotoBase64 = splitBase64[1];
+      // NOTE: �����誑 agentNO ���� avatar ��仃����
+      // ����迨��靘蝭���*蝷�'������'���瘜�� [Tomas, 2022/1/3]
+      if (!this._imgSrc) {
+        this._imgSrc = base64;
+      }
+      this.imgSrc = base64;
+    }
+
+    private showFileUploadErrorMsg():Promise<MessageBoxData>{
+       return MessageBox({
+          message:`<div class="message-header">銝�撘�炊</div>
+                    <div class="message-content">隢�甇�蝣箏���</div>`,
+          dangerouslyUseHTMLString: true,
+          showClose:false,
+          showConfirmButton:true,
+          confirmButtonText:'蝣箄��',
+          customClass:'pam-message-box',
+          closeOnClickModal:false,
+        });
+    }
+
+    get showResetAvatarBtn(): boolean {
+      // NOTE: �����誑 agentNO ���� avatar ��仃����
+      // ����迨��靘蝭���*蝷�'������'���瘜�� [Tomas, 2022/1/3]
+      if (!this._imgSrc && !this.imgSrc) return false;
+      return this._imgSrc !== this.imgSrc;
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/PAMapp/components/loading.vue b/PAMapp/components/loading.vue
index f4099e8..8fd2578 100644
--- a/PAMapp/components/loading.vue
+++ b/PAMapp/components/loading.vue
@@ -17,16 +17,23 @@
     }
   })
   export default class Loading extends Vue {
+
     isLoading = false;
+
     defaultOptions = {
       animationData: require('@/assets/lottie/loading.json')
     };
+
+    //////////////////////////////////////////////////////////////////////
+
     start(): void {
       this.isLoading = true;
     }
+
     finish(): void {
       this.isLoading = false;
     }
+
   }
 
 </script>
@@ -38,7 +45,7 @@
     background-color: rgba(#222222, 0.5);
     width: 100%;
     height: 100%;
-    z-index: 99;
+    z-index: 2500;
     display: flex;
     justify-content: center;
     align-items: center;
diff --git a/PAMapp/components/multiSelectBtn.vue b/PAMapp/components/multiSelectBtn.vue
index 93faa28..707a96f 100644
--- a/PAMapp/components/multiSelectBtn.vue
+++ b/PAMapp/components/multiSelectBtn.vue
@@ -5,7 +5,7 @@
         v-for="(option, index) in options"
         :key="index"
         :label="option.label">
-          {{option.title}}
+          {{ option.title }}
         </el-checkbox>
       <template v-if="nameOfSelectAll">
         <button class="pam-selectAll-btn cursor--pointer fix-chrome-click--issue" :class="{'selected':isSelectAll}" :model="isSelectAll" @click="selectAll">
@@ -14,7 +14,7 @@
       </template>
       <template v-if="nameOfOtherOption">
         <button class="pam-selectAll-btn cursor--pointer fix-chrome-click--issue" :class="{'selected':isSelectOtherOption}" :model="isSelectOtherOption" @click="selectOther">
-         {{nameOfOtherOption}}
+         {{ nameOfOtherOption }}
         </button>
         <div>
           <input class="pam-muti-select-other cursor--pointer " v-if="isSelectOtherOption" v-model="syncOtherSelect" placeholder="隢撓�,���20摮�">
@@ -25,31 +25,59 @@
 </template>
 
 <script lang="ts">
-  import { Vue, Component, Prop, PropSync} from 'vue-property-decorator';
-  import { OptionBtnDto } from './singleSelectBtn.vue';
+  import { Vue, Component, Prop, PropSync, Watch} from 'vue-property-decorator';
+import { OptionBtnDto } from '~/shared/models/optionBtnDto.model';
 
   @Component
   export default class MultiSelectBtn extends Vue {
-    @PropSync('mutiSelect',{type:Array,default:()=>[]}) syncMutiSelect!:string[];
-    @Prop({default:()=>[]}) options!:OptionBtnDto[];
-    @Prop({default:''}) nameOfSelectAll!:string;
-    @PropSync('otherSelect',{default:''}) syncOtherSelect!:string;
-    @Prop({type:String,default:''}) nameOfOtherOption!:string;
+
+    @PropSync('mutiSelect',{type:Array,default:()=>[]})
+    syncMutiSelect!:string[];
+
+    @Prop({default:()=>[]})
+    options!:OptionBtnDto[];
+
+    @Prop({default:''})
+    nameOfSelectAll!:string;
+
+    @PropSync('otherSelect',{default:''})
+    syncOtherSelect!:string;
+
+    @Prop({type:String,default:''})
+    nameOfOtherOption!:string;
+
+    @Prop()
+    maxLength? : number;
+
+    @Watch('syncMutiSelect')
+    onMutiSelectChange(): void {
+      if (!this.maxLength) return;
+      if (this.syncMutiSelect.length > this.maxLength) {
+        this.syncMutiSelect.shift();
+      }
+    }
+
     isSelectOtherOption=false;
     isSelectAll=false;
+
+    //////////////////////////////////////////////////////////////////////
 
     updated() {
       this.isSelectAll = this.syncMutiSelect.length === this.options.length;
     }
 
-    selectAll():void{
+    //////////////////////////////////////////////////////////////////////
+
+    selectAll():void {
       this.isSelectAll= !this.isSelectAll;
       this.syncMutiSelect = this.isSelectAll ? this.optionsFormat(this.options):[];
     }
-    optionsFormat(optios:OptionBtnDto[]):string[]{
-      return optios.map(o=>o.title);
+
+    optionsFormat(options:OptionBtnDto[]): string[] {
+      return options.map((option)=> option.title );
     }
-    selectOther():void{
+
+    selectOther(): void {
       this.isSelectOtherOption = !this.isSelectOtherOption;
       if(!this.isSelectOtherOption){
         this.syncOtherSelect = '';
@@ -60,26 +88,26 @@
 
 <style lang="scss" scoped>
   .pam-selectAll-btn{
-    padding: 6px 20px;
-    border: 1px $LIGHT_GREY solid;
+    padding         : 10px 20px;
+    border          : 1px $LIGHT_GREY solid;
     background-color: $PRIMARY_WHITE;
-    border-radius: 30px;
-    color: $PRIMARY_BLACK;
-    font-size: 20px;
-    margin-right: 10px;
-    margin-bottom: 10px;
+    border-radius   : 30px;
+    color           : $PRIMARY_BLACK;
+    font-size       : 20px;
+    margin-right    : 10px;
+    margin-bottom   : 10px;
     &.selected{
-      background-color:$CORAL;
-      color: $PRIMARY_WHITE;
+      background-color: $CORAL;
+      color           : $PRIMARY_WHITE;
     }
   }
   .pam-muti-select-other {
-    height: 50px;
-    padding: 5px;
-    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
-    box-sizing: border-box;
-    width: 316px;
-    border: 1px solid #CCCCCC;
+    height            : 50px;
+    padding           : 5px;
+    -webkit-box-sizing: border-box;         /* Safari/Chrome, other WebKit */
+    -moz-box-sizing   : border-box;         /* Firefox, other Gecko */
+    box-sizing        : border-box;
+    width             : 316px;
+    border            : 1px solid #CCCCCC;
   }
 </style>
diff --git a/PAMapp/components/phoneContactTimePicker.vue b/PAMapp/components/phoneContactTimePicker.vue
index 6a4cb05..1055196 100644
--- a/PAMapp/components/phoneContactTimePicker.vue
+++ b/PAMapp/components/phoneContactTimePicker.vue
@@ -2,13 +2,13 @@
 
 <template>
   <div>
-    <div class="mt-10" v-for="(scheduleDto,index) in syncScheduleList" :key="index">
-      <div class="mdTxt">{{titleFormatByIndex(index)}}</div>
+    <div class="mt-10" v-for="(scheduleDto,index) in scheduleList" :key="index">
+      <div class="mdTxt">{{index | titleFormatByIndex}}</div>
       <div class="pam-contact-schedule cursor--pointer fix-chrome-click--issue" @click="openPopUp(scheduleDto,index)">
         <div class="pam-contact-schedule__text">
           <template v-if="checkFormHasDone(scheduleDto)">
-            <p>{{optionsFormat(scheduleDto.selectWeekOptions,weekOptions)}}</p>
-            <p>{{optionsFormat(scheduleDto.selectTimesOptions,timesOfDayOptions)}}</p>
+            <p>{{ scheduleDto.selectWeekOptions | optionsFormat(weekOptions)}}</p>
+            <p>{{ scheduleDto.selectTimesOptions| optionsFormat(timesOfDayOptions)}}</p>
           </template>
           <template v-else>
             隢���
@@ -17,51 +17,51 @@
         <div class="pam-contact-schedule__icon">
           <i v-if="checkFormHasDone(scheduleDto)"
             class="icon-delet"
-            :class="{'disable':syncScheduleList.length===1}"
-            @click.stop="deleteScheduleItem(index)">
+            :class="{'disable':scheduleList.length===1}"
+            @click.stop="deleteScheduleByIndex(index)">
           </i>
           <i v-else class="icon-calender"></i>
         </div>
       </div>
     </div>
     <div class="pam-add-schedule cursor--pointer"
-      :class="{'disable':!checkFormHasDone(syncScheduleList[syncScheduleList && syncScheduleList.length && syncScheduleList.length - 1])|| syncScheduleList.length ===7}"
+      :class="{'disable': !checkFormHasDone(scheduleList[scheduleList.length && scheduleList.length - 1]) || scheduleList.length===7 }"
       @click="addNewSchedule">
       <i class="icon-add"></i>
       �憓�挾
     </div>
 
     <PopUpFrame class="pam-popUpFrame"
-      :isOpen.sync="isOpenByStep_1"
-      :dialogWidth="dialogWidth">
-        <div class="pam-popUp-title">{{popUpTitle}}</div>
+      dialogWidth="376px"
+      :isOpen.sync="isOpenByDayPopUp">
+        <div class="pam-popUp-title">{{scheduleIndex | titleFormatByIndex}}</div>
           <MultiSelectBtn class="mt-30"
             :mutiSelect.sync="initPickerControl.selectWeekOptions"
             :options="weekOptions.options"
             :nameOfSelectAll="weekOptions.selectAll">
           </MultiSelectBtn>
-          <div class="pam-popUp-confirm-bolck mt-30">
+          <div class="pam-popUp-confirm-block  mt-30">
             <button class="pam-select-confirm"
               :class="[initPickerControl.selectWeekOptions.length?'el-button--primary' :'is-disabled']"
-              @click="confirmByStep_1">
+              @click="confirmBySelectDay">
               蝣箏��
             </button>
           </div>
     </PopUpFrame>
 
     <PopUpFrame class="pam-popUpFrame"
-      :isOpen.sync="isOpenByStep_2"
-      :dialogWidth="dialogWidth">
-        <div class="pam-popUp-title">{{popUpTitle}}</div>
+      dialogWidth="376px"
+      :isOpen.sync="isOpenByTimePopUp">
+        <div class="pam-popUp-title">{{scheduleIndex | titleFormatByIndex}}</div>
         <MultiSelectBtn class="mt-30"
           :mutiSelect.sync="initPickerControl.selectTimesOptions"
           :options="timesOfDayOptions.options"
           :nameOfSelectAll="timesOfDayOptions.selectAll">
         </MultiSelectBtn>
-        <div class="pam-popUp-confirm-bolck mt-30">
+        <div class="pam-popUp-confirm-block  mt-30">
           <button class="pam-select-confirm"
             :class="[initPickerControl.selectTimesOptions.length ?'el-button--primary' :'is-disabled']"
-            @click="confirmByStep_2">
+            @click="confirmBySelectTime">
             蝣箏��
           </button>
         </div>
@@ -70,180 +70,165 @@
 </template>
 
 <script lang="ts">
-  import { Component,PropSync,Vue } from "nuxt-property-decorator";
+  import { Component, Prop, PropSync, Vue } from "nuxt-property-decorator";
+  import { dayTimeFrames } from "~/shared/const/day-time-frames";
+  import { OptionBtnDto, OptionDto } from "~/shared/models/optionBtnDto.model";
+  import { weekDays } from "~/shared/const/week-days";
   import * as _ from "lodash";
-import { OptionBtnDto } from "./singleSelectBtn.vue";
-  @Component
+  @Component({
+    filters:{
+      titleFormatByIndex(index:number):string{
+        const chineseNumber = ['銝�','鈭�','銝�','���','鈭�','�','銝�','�','銋�','���'];
+        return '��挾'+chineseNumber[index];
+      },
+      optionsFormat(selectedOptions:string[]|[], compareOptions:OptionDto): string{
+        return _.isEqual(selectedOptions.length,compareOptions.options.length)
+                ? compareOptions.selectAll
+                : _.join(selectedOptions,',');
+      },
+    }
+  })
   export default class PhoneContactTimePicker extends Vue {
-    @PropSync('scheduleList',{type:Array,default:()=>[]}) syncScheduleList!:scheduleDto[];
-    private weekOptions ={
-      selectAll:'瘥予',
-      options:[
-        {
-          title:'蝳格��',
-          label:'蝳格��'
-        },
-         {
-          title:'蝳格���',
-          label:'蝳格���'
-        },
-         {
-          title:'蝳格���',
-          label:'蝳格���'
-        },
-         {
-          title:'蝳格���',
-          label:'蝳格���'
-        },
-         {
-          title:'蝳格���',
-          label:'蝳格���'
-        }, {
-          title:'蝳格�',
-          label:'蝳格�'
-        },
-         {
-          title:'蝳格�',
-          label:'蝳格�'
-        },
-      ],
-    };
-    private timesOfDayOptions ={
-      selectAll:'�憭�',
-      options:[
-        {
-          title:'9:00~12:00',
-          label:'9:00~12:00',
-        },
-        {
-          title:'12:00~14:00',
-           label:'12:00~14:00',
-        },
-        {
-          title:'14:00~18:00',
-           label:'14:00~18:00',
-        },
-        {
-          title:'18:00~21:00',
-          label:'18:00~21:00',
-        }
-      ],
-    };
-    private dialogWidth="376px";
-    private selectedSchedule!:scheduleDto;
+    @Prop({type:Array,default:()=>[]})
+    scheduleList!:scheduleDto[];
 
-    // popUp frame
-    private isOpenByStep_1=false;
-    private isOpenByStep_2=false;
-    private popUpTitle='';
-    private initPickerControl={
-      selectWeekOptions:[] as string[],
-      selectTimesOptions:[] as string[],
+    weekOptions = {
+      selectAll: '瘥予',
+      options  : weekDays,
+    };
+    timesOfDayOptions = {
+      selectAll: '�憭�',
+      options  : dayTimeFrames,
+    };
+    initPickerControl:scheduleDto = {
+      selectWeekOptions : [],
+      selectTimesOptions: [],
     }
+    popUpMode     : TimePickerMode = TimePickerMode.NONE;
+    scheduleIndex : number         = 0;
+
+    //////////////////////////////////////////////////////////////////////
+
+    get isOpenByDayPopUp(): boolean{
+      return _.isEqual(this.popUpMode , TimePickerMode.SELECT_DAY)
+    }
+
+    set isOpenByDayPopUp(value:boolean){
+      this.popUpMode = TimePickerMode.NONE;
+    }
+
+    get isOpenByTimePopUp(): boolean{
+      return _.isEqual(this.popUpMode , TimePickerMode.SELECT_TIME);
+    }
+
+    set isOpenByTimePopUp(value:boolean){
+      this.popUpMode = TimePickerMode.NONE;
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
     openPopUp(schedule:scheduleDto,index:number):void{
-      this.isOpenByStep_1 = true;
-      this.popUpTitle = this.titleFormatByIndex(index);
-      this.selectedSchedule = schedule;
       this.initPickerControl = _.cloneDeep(schedule);
+      this.popUpMode = TimePickerMode.SELECT_DAY;
+      this.scheduleIndex = index;
     }
 
-    confirmByStep_1():void{
-      this.isOpenByStep_1=false;
-      this.isOpenByStep_2=true;
+    confirmBySelectDay(): void {
+      this.popUpMode = TimePickerMode.SELECT_TIME;
     }
 
-    confirmByStep_2():void{
-      this.isOpenByStep_2=false;
-      // TODO: code ref
-      this.selectedSchedule.selectWeekOptions = this.getOptionsBySort(this.weekOptions.options,this.initPickerControl.selectWeekOptions);
-      this.selectedSchedule.selectTimesOptions = this.getOptionsBySort(this.timesOfDayOptions.options,this.initPickerControl.selectTimesOptions);
+    confirmBySelectTime(): void {
+      this.popUpMode = TimePickerMode.NONE;
+      // detect array change to parent
+      this.$set( this.scheduleList, this.scheduleIndex, this.initPickerFormatSort(this.initPickerControl) );
     }
-    getOptionsBySort(options:OptionBtnDto[],selectedOptions:string[]):string[]{
-      return options.map( o => _.includes(selectedOptions,o.title) ? o.title :'').filter(String);
-      // return
+
+    private initPickerFormatSort(initPickerControl:scheduleDto):scheduleDto{
+      _.keys(initPickerControl).forEach(keyName=>{
+        const options = _.isEqual(keyName,'selectWeekOptions') ? weekDays : dayTimeFrames;
+        initPickerControl[keyName] = this.getOptionsBySort(initPickerControl[keyName],options);
+      })
+      return initPickerControl;
     }
-    addNewSchedule():void{
+
+    // 鞈�������儔銝���������
+    private getOptionsBySort( selectedOptions:string[] , options:OptionBtnDto[]): string[] {
+      return options.map( o => _.includes(selectedOptions , o.label) ? o.label as string : '').filter(String);
+    }
+
+    addNewSchedule(): void {
       const newScheduleDto={
         selectWeekOptions:[],
         selectTimesOptions:[],
       }
-      this.syncScheduleList.push(newScheduleDto)
+      this.scheduleList.push(newScheduleDto)
     }
 
-    deleteScheduleItem(index:number):void{
-      this.syncScheduleList.splice(index,1);
+    deleteScheduleByIndex(index:number): void {
+      this.scheduleList.splice(index,1);
     }
-
-    checkFormHasDone(item:scheduleDto):boolean{
-      if (!item) return false;
-      return item.selectWeekOptions?.length>0 && item.selectTimesOptions?.length>0;
-    }
-
-    titleFormatByIndex(index:number):string{
-      const chineseNumber = ['銝�','鈭�','銝�','���','鈭�','�','銝�','�','銋�','���']
-      return '��挾'+chineseNumber[index];
-    }
-    optionsFormat(options:OptionBtnDto[],needToCompareList:OptionDto):string{
-      return _.isEqual(options.length,needToCompareList.options.length) ? needToCompareList.selectAll: _.join(options,',');
+    checkFormHasDone(item:scheduleDto): boolean {
+      return item&&item.selectWeekOptions?.length > 0
+          && item.selectTimesOptions?.length > 0;
     }
   }
-  export interface scheduleDto{
-    selectWeekOptions:string[]|[];
-    selectTimesOptions:string[]|[];
+  enum TimePickerMode{
+    SELECT_DAY="selectDay",
+    SELECT_TIME="selectTime",
+    NONE=""
   }
-  type scheduleKey = keyof scheduleDto
-  interface OptionDto{
-    selectAll:string,
-    options:string[],
+  interface scheduleDto {
+    selectWeekOptions : string[]|[];
+    selectTimesOptions: string[]|[];
   }
 </script>
 
 <style lang="scss" scoped>
   .pam-popUp-title{
-    font-size: 24px;
-    color:$PRIMARY_BLACK;
-    display: flex;
+    font-size      : 24px;
+    color          : $PRIMARY_BLACK;
+    display        : flex;
     justify-content: center;
   }
-  .pam-popUp-confirm-bolck{
-    display: flex;
+  .pam-popUp-confirm-block {
+    display        : flex;
     justify-content: center;
   }
   .pam-contact-schedule{
-    width: inherit;
-    background:$PRIMARY_WHITE;
-    border: 1px solid $LIGHT_GREY;
-    padding: 12px 20px;
-    border-radius: 10px;
-    display: flex;
+    width          : inherit;
+    background     : $PRIMARY_WHITE;
+    border         : 1px solid $LIGHT_GREY;
+    padding        : 12px 20px;
+    border-radius  : 10px;
+    display        : flex;
     justify-content: space-between;
-    margin-top: 10px;
+    margin-top     : 10px;
   }
   .pam-contact-schedule__text{
     align-self: center;
-    font-size: 20px;
-    width: 85%;
+    font-size : 20px;
+    width     : 85%;
     word-break: break-all;
-    color: $PRUDENTIAL_GREY;
+    color     : $PRUDENTIAL_GREY;
   }
   .pam-contact-schedule__icon{
-    width: 15%;
-    display: flex;
-    align-items: center;
+    width          : 15%;
+    display        : flex;
+    align-items    : center;
     justify-content: flex-end;
-    color: $PRIMARY_RED;
-    font-size: 25px;
+    color          : $PRIMARY_RED;
+    font-size      : 25px;
     .disable{
-      color:$LIGHT_GREY;
+      color         : $LIGHT_GREY;
       pointer-events: none;
     }
   }
   .pam-add-schedule{
-    color: $PRIMARY_RED;
+    color     : $PRIMARY_RED;
     margin-top: 10px;
-    font-size: 20px;
+    font-size : 20px;
      &.disable{
-        color:$LIGHT_GREY;
+        color         : $LIGHT_GREY;
         pointer-events: none;
     }
   }
diff --git a/PAMapp/components/popUpFrame.vue b/PAMapp/components/popUpFrame.vue
index f08993c..cfa9821 100644
--- a/PAMapp/components/popUpFrame.vue
+++ b/PAMapp/components/popUpFrame.vue
@@ -1,44 +1,59 @@
 <template>
   <div>
+
     <Ui-Drawer :isVisible.sync="isUseDrawer"
     @closeDrawer="closePopUp"
     :size="drawerSize">
       <slot></slot>
     </Ui-Drawer>
+
     <Ui-Dialog :isVisible.sync="isUseDialog"
     @closeDialog="closePopUp"
     :width="dialogWidth">
       <slot></slot>
     </Ui-Dialog>
+
   </div>
 </template>
 
 <script lang="ts">
-  import { Vue, Component, Prop,Emit, Watch, PropSync} from 'vue-property-decorator';
-  import { isMobileDevice } from '../assets/ts/device';
+  import { Vue, Component, Prop, Emit, PropSync} from 'vue-property-decorator';
+  import UtilsService from '~/shared/services/utils.service';
+
   @Component
   export default class PopUpFrame extends Vue {
-    @PropSync('isOpen',{type:Boolean,default:false}) syncIsOpen!:boolean;
-    @Prop({default:'auto'}) drawerSize!:string; // element UI drawer default size
-    @Prop({default:'50%'}) dialogWidth!:string; // element UI dialog default width
 
-    private get isUseDrawer() : boolean {
-      return this.syncIsOpen && isMobileDevice();
-    }
-    private set isUseDrawer(value: boolean) {
-      this.$emit('update:isOpen',value);
-    }
+    @PropSync('isOpen',{type:Boolean,default:false})
+    syncIsOpen!:boolean;
 
-    private get isUseDialog() : boolean {
-      return this.syncIsOpen && !isMobileDevice();
-    }
-    
-    private set isUseDialog(value: boolean) {
-      this.$emit('update:isOpen',value);
-    }
+    @Prop({default:'auto'})
+    drawerSize!:string; // element UI drawer default size
+
+    @Prop({default:'50%'})
+    dialogWidth!:string; // element UI dialog default width
+
+    //////////////////////////////////////////////////////////////////////
 
     @Emit('closePopUp') closePopUp() {
-        return;
+      return;
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    get isUseDrawer() : boolean {
+      return this.syncIsOpen && UtilsService.isMobileDevice();
+    }
+
+    set isUseDrawer(value: boolean) {
+      this.syncIsOpen = value
+    }
+
+    get isUseDialog() : boolean {
+      return this.syncIsOpen && !UtilsService.isMobileDevice();
+    }
+
+    set isUseDialog(value: boolean) {
+      this.syncIsOpen = value
     }
   }
 </script>
diff --git a/PAMapp/components/singleSelectBtn.vue b/PAMapp/components/singleSelectBtn.vue
index 99bc644..b7a4a55 100644
--- a/PAMapp/components/singleSelectBtn.vue
+++ b/PAMapp/components/singleSelectBtn.vue
@@ -20,25 +20,22 @@
 
 <script lang="ts">
   import { Component, Prop, PropSync, Vue } from "nuxt-property-decorator";
+  import { OptionBtnDto } from "~/shared/models/optionBtnDto.model";
   import * as _ from 'lodash';
+
   @Component
   export default class SingleSelectBtn extends Vue {
-    @PropSync('singleSelected', { default: '' }) syncSingleSelected!: string | number;
-    @Prop({ type:Array , default:()=>[] }) options!:OptionBtnDto[];
 
-    // 銝餉�圾瘙箸����甈∟��嚗暺������
-    patchValue(value: string): void {
+    @PropSync('singleSelected', { default: '' })
+    syncSingleSelected!: string | number;
+
+    @Prop({ type:Array , default:()=>[] })
+    options!:OptionBtnDto[];
+
+    //////////////////////////////////////////////////////////////////////
+    patchValue(value: string | number): void {
+      // 銝餉�圾瘙箸����甈∟��嚗暺������
       this.syncSingleSelected = _.isEqual(this.syncSingleSelected, value) ? "" : value;
     }
   }
-  export interface OptionBtnDto {
-    title: string,
-    subTitle?: string,
-    label: string | number,
-  }
 </script>
-
-<style lang="scss"
-  scoped>
-
-</style>
diff --git a/PAMapp/layouts/default.vue b/PAMapp/layouts/default.vue
index baab485..605a5b5 100644
--- a/PAMapp/layouts/default.vue
+++ b/PAMapp/layouts/default.vue
@@ -7,15 +7,15 @@
       :class="bannerClassName">
       <div class="pam-banner__text text--dark-blue">
         <div class="mt-5"
-          v-for="(item,index) in getBannerTextList"
+          v-for="(bannerText, index) in bannerTextList"
           :key="index">
-          {{item}}
+          {{ bannerText }}
         </div>
       </div>
     </div>
     <div
       class="pam-container"
-      :class="[containClassName,{'mt-navBar': bannerClassName === 'pam-no-banner'}]"
+      :class="[containClassName, {'mt-navBar': bannerClassName === 'pam-no-banner'} ]"
     >
       <Nuxt class="pam-page-container"></Nuxt>
     </div>
@@ -27,53 +27,60 @@
   import { Vue, Component } from 'vue-property-decorator';
   import * as _ from 'lodash';
 
-
   @Component
   export default class DefaultLayout extends Vue {
-    private bannerTextDto:BannerDto= {
-      [RouterPage.RECOMMEND_CONSULTANT]: ['頛詨������', '靘雿��瘙���憿批��'],
-      [RouterPage.QUICK_FILTER]: ['暺銝����', '撠雿�EST Match'],
-      [RouterPage.MY_CONSULTANT_LIST]:[],
-      [RouterPage.QUESTIONNAIRE]:[],
-    }
-    get getBannerTextList(): string[] {
-      return this.bannerTextDto[this.route] ? this.bannerTextDto[this.route] : [];
-    };
 
     get route(): string{
       const routeName = this.$route.name;
-      return routeName ? routeName:'';
+      return routeName ? routeName : '';
     };
 
-    get bannerClassName() {
-      return this.routeFormatBannerClass(this.route);
-    };
-
-    // format to {page}-banner or pam-no-banner tag
-    private routeFormatBannerClass(route: string): string {
-      const needBannerTags = ['recommendConsultant', 'quickFilter', 'myConsultantList-consultantList', 'myConsultantList-contactedList', 'myAppointmentList-appointmentList', 'myAppointmentList-contactedList', 'login'];
-      return _.includes(needBannerTags, route) ? route + '-banner' : 'pam-no-banner';
+    get bannerTextList(): string[] {
+      return this.bannerText[this.route];
     };
 
     get containClassName(): string {
       return this.routeFormatContainClass(this.route);
     };
 
+    get bannerClassName() {
+      return this.routeFormatBannerClass(this.route);
+    };
+
+    //////////////////////////////////////////////////////////////////////
+
     // format to {page}-container tag
     private routeFormatContainClass(route: string): string {
-      const needContainBgTags = ['recommendConsultant', 'questionnaire-agentNo'];
-      return _.includes(needContainBgTags, route) ? route + '-container' : '';
+      const needContainBgRoutes = ['recommendConsultant', 'questionnaire-agentNo'];
+      return _.includes(needContainBgRoutes, route) ? route + '-container' : '';
     };
+
+    // format to {page}-banner or pam-no-banner tag
+    private routeFormatBannerClass(route: string): string {
+      const needBannerRoutes = ['recommendConsultant', 'quickFilter', 'myConsultantList-consultantList', 'myConsultantList-contactedList', 'myAppointmentList-appointmentList', 'myAppointmentList-contactedList', 'login', 'notification'];
+      return _.includes(needBannerRoutes, route) ? route + '-banner' : 'pam-no-banner';
+    };
+
+    private bannerText: FeatureBannerTitle= {
+      [FeaturePage.RECOMMEND_CONSULTANT]: ['頛詨������', '靘����瘙���憿批��'],
+      [FeaturePage.QUICK_FILTER]        : ['暺銝����', '撠���EST Match'],
+      [FeaturePage.MY_CONSULTANT_LIST]  : [],
+      [FeaturePage.QUESTIONNAIRE]       : [],
+    }
+
   }
-  enum RouterPage {
+
+  enum FeaturePage {
     RECOMMEND_CONSULTANT = 'recommendConsultant',
-    QUICK_FILTER = "quickFilter",
-    MY_CONSULTANT_LIST = "myConsultantList",
-    QUESTIONNAIRE = 'questionnaire',
+    QUICK_FILTER         = "quickFilter",
+    MY_CONSULTANT_LIST   = "myConsultantList",
+    QUESTIONNAIRE        = 'questionnaire',
   }
-  type BannerDto={
-    [x:string]:string[];
+
+  interface FeatureBannerTitle {
+    [x:string]: string[];
   };
+
 </script>
 
 <style lang="scss"
@@ -107,6 +114,9 @@
   }
 
   @include desktop {
+    .pam-banner  {
+      height: 150px;
+    }
     .mt-navBar {
       margin-top: calc($DESKTOP_NAV_BAR + $MOB_NAV_BAR);
     }
@@ -120,8 +130,6 @@
       margin: 30px auto 0px auto;
     }
   }
-
-
 
   .pam-banner__text {
     font-size: 18px;
@@ -144,8 +152,8 @@
       background-image: url('~/assets/images/quickFilter/banner_mob.svg');
     }
 
-    @media (min-width: 768px) {
-      &-banner {
+    @include desktop {
+        &-banner {
         background-image: url('~/assets/images/quickFilter/banner_web.svg');
       }
     }
@@ -162,7 +170,7 @@
       background-size: contain;
     }
 
-    @media (min-width: 768px) {
+    @include desktop {
       &-banner {
         background-image: url('~/assets/images/recommendConsultant/banner_web.svg');
         background-size: cover;
@@ -173,6 +181,7 @@
         background-size: cover;
       }
     }
+
   }
 
   .myConsultantList-consultantList,.myConsultantList-contactedList {
@@ -180,7 +189,7 @@
       background-image: url('~/assets/images/myConsultantList/banner_mob.svg');
     }
 
-    @media (min-width: 768px) {
+    @include desktop {
       &-banner {
         background-image: url('~/assets/images/myConsultantList/banner_web.svg');
       }
@@ -193,7 +202,7 @@
       background-size: contain;
     }
 
-    @media (min-width: 768px) {
+    @include desktop {
       &-container {
         background-image: url('~/assets/images/recommendConsultant/bg_flower_web.svg');
         background-size: cover;
@@ -206,11 +215,23 @@
       background-image: url('~/assets/images/login/login_mob.svg');
     }
 
-    @media (min-width: 768px) {
+    @include desktop {
       &-banner {
         background-image: url('~/assets/images/login/login_web.svg');
       }
     }
   }
 
+  .notification {
+    &-banner {
+      background-image: url('~/assets/images/notification/banner_mob.svg');
+    }
+
+    @include desktop {
+      &-banner {
+        background-image: url('~/assets/images/notification/banner_web.svg');
+      }
+    }
+  }
+
 </style>
diff --git a/PAMapp/middleware/errorRoute.ts b/PAMapp/middleware/errorRoute.ts
new file mode 100644
index 0000000..d20dd73
--- /dev/null
+++ b/PAMapp/middleware/errorRoute.ts
@@ -0,0 +1,15 @@
+import { Middleware } from '@nuxt/types';
+
+const errorRoute: Middleware = (context) => {
+
+  if (!context.route.name) {
+    const isAdminLogin = context.store.getters['localStorage/isAdminLogin'];
+    if (isAdminLogin) {
+      context.redirect('/myAppointmentList/appointmentList');
+      return;
+    }
+    context.redirect('/')
+  }
+}
+
+export default errorRoute;
\ No newline at end of file
diff --git a/PAMapp/middleware/errorRouteMiddleware.ts b/PAMapp/middleware/errorRouteMiddleware.ts
deleted file mode 100644
index 5cf1133..0000000
--- a/PAMapp/middleware/errorRouteMiddleware.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Middleware } from '@nuxt/types';
-import { Role } from '~/assets/ts/models/enum/Role';
-
-const errorRouteMiddleware: Middleware = (context) => {
-  if (!context.route.name) {
-    if (context.store.getters['localStorage/currentRole'] === Role.ADMIN) {
-      context.redirect('/myAppointmentList/appointmentList');
-      return;
-    }
-    context.redirect('/')
-  }
-}
-
-export default errorRouteMiddleware
\ No newline at end of file
diff --git a/PAMapp/middleware/getUrlQuery.ts b/PAMapp/middleware/getUrlQuery.ts
new file mode 100644
index 0000000..5fb2841
--- /dev/null
+++ b/PAMapp/middleware/getUrlQuery.ts
@@ -0,0 +1,26 @@
+import { Middleware } from '@nuxt/types';
+
+const getUrlQuery: Middleware = (context) => {
+  const currentRouteName = context.route.name;
+  const satisfactionIdFromMsg = context.route.query.appointmentId;
+  const queryNotContactAppointmentId = context.route.query.notContactAppointmentId;
+  const isUserLogin = context.store.getters['localStorage/isUserLogin'];
+
+  if (currentRouteName === 'index' && queryNotContactAppointmentId) {
+    context.store.commit('localStorage/storageNotContactAppointmentIdFromMsg', queryNotContactAppointmentId);
+    if (!isUserLogin) {
+      context.redirect('/login');
+    }
+  }
+
+  if (currentRouteName === 'index' && satisfactionIdFromMsg) {
+    context.store.commit('localStorage/storageSatisfactionIdFromMsg', satisfactionIdFromMsg);
+    if (!isUserLogin) {
+      context.redirect('/login');
+    }
+  }
+
+
+}
+
+export default getUrlQuery
diff --git a/PAMapp/middleware/myAppointment.ts b/PAMapp/middleware/myAppointment.ts
new file mode 100644
index 0000000..d71ee64
--- /dev/null
+++ b/PAMapp/middleware/myAppointment.ts
@@ -0,0 +1,19 @@
+import { Middleware } from '@nuxt/types';
+
+const myAppointment: Middleware = (context) => {
+  const appointmentIdFromMsg = context.route.query.appointmentId;
+  if (appointmentIdFromMsg) {
+    context.store.commit('localStorage/storageAppointmentIdFromMsg', appointmentIdFromMsg);
+  };
+
+  const isAdminLogin = context.store.getters['localStorage/isAdminLogin'];
+  if (isAdminLogin) {
+    if (context.route.name === 'myAppointmentList') {
+      context.redirect('/myAppointmentList/appointmentList')
+    }
+  } else {
+    context.redirect('/consultantLogin');
+  }
+}
+
+export default myAppointment
\ No newline at end of file
diff --git a/PAMapp/middleware/myAppointmentMiddleware.ts b/PAMapp/middleware/myAppointmentMiddleware.ts
deleted file mode 100644
index eab3b12..0000000
--- a/PAMapp/middleware/myAppointmentMiddleware.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Middleware } from '@nuxt/types';
-import { Role } from '~/assets/ts/models/enum/Role';
-
-const myAppointmentMiddleware: Middleware = (context) => {
-  if (context.store.getters['localStorage/currentRole'] === Role.ADMIN) {
-    if (context.route.name === 'myAppointmentList') {
-      context.redirect('/myAppointmentList/appointmentList')
-    }
-  } else {
-    context.redirect('/consultantLogin');
-  }
-}
-
-export default myAppointmentMiddleware
\ No newline at end of file
diff --git a/PAMapp/nuxt.config.js b/PAMapp/nuxt.config.js
index 0822ef0..73033a1 100644
--- a/PAMapp/nuxt.config.js
+++ b/PAMapp/nuxt.config.js
@@ -39,6 +39,8 @@
     '~/plugins/vue-scroll-picker',
     '~/plugins/filters/date.filter.ts',
     '~/plugins/filters/age.filter.ts',
+    '~/plugins/filters/appointment-fail-reason.filter.ts',
+    '~/plugins/filters/serve-area.filter.ts',
   ],
 
   // Auto import components: https://go.nuxtjs.dev/config-components
@@ -70,6 +72,6 @@
   },
   router: {
     base: process.env.ENV === 'uat' ? '/pam/' : '',
-    middleware: 'errorRouteMiddleware'
+    middleware: ['getUrlQuery', 'errorRoute']
   }
 }
diff --git a/PAMapp/pages/accountSetting/index.vue b/PAMapp/pages/accountSetting/index.vue
index fb21f19..bf3a713 100644
--- a/PAMapp/pages/accountSetting/index.vue
+++ b/PAMapp/pages/accountSetting/index.vue
@@ -1,133 +1,221 @@
 <template>
-<div class="account-page">
-    <div class="account-page-title">�犖撣唾�身摰�</div>
-    <section class="account-card" :class="{'edit': !userNameDisabled }"> 
-        <div class="header">
-            <div class="block">
-                <div class="setting-title">憪��</div>
-                <div class="contact-type">
-                    <input
-                        :disabled="userNameDisabled"
-                        v-model="userNameValue" 
-                        ref="userName"
-                        class="input name-input"
-                        >
-                    <div class="error-txt">
-                        <span v-show="!nameValid" class="error">甇斗���‵</span>
-                    </div>
-                </div>
-                
-            </div>
-            <i class="icon-edit icon" @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled}"></i>
+  <div class="pam-account-setting">
+    <div class="pam-paragraph text--middle">�犖撣唾�身摰�</div>
+    <div class="pam-paragraph account-info " >
+      <div class="account-info__title text--middle">憪��</div>
+      <div class="account-info__input" :class="{'edit': !userNameDisabled }">
+        <input
+          :disabled="userNameDisabled"
+          v-model="userNameValue"
+          ref="userName"
+          class="account-info__input-text">
+        <div class="account-info__input-error">
+            <span v-show="!nameValid" class="error">甇斗���‵</span>
         </div>
-        
-    </section>
-
-    <section class="account-card" :class="{'edit': !userPhoneDisabled }" v-if="phoneValue"> 
-        <div class="header">
-            <div class="block">   
-            <div class="setting-title">蝬��</div>
-            <div class="contact-type">
-                ����Ⅳ
-                <input
-                    :disabled="userPhoneDisabled"
-                    v-model="phoneValue" 
-                    :class="{
-                    'is-invalid': !phoneValid
-                    }"
-                    ref="userPhone"
-                    class="contact-input input"
-                    :placeholder="phoneValue || '撠������Ⅳ'"
-                >
-                <div class="error-txt">
-                    <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span>
-                </div>
-            </div>
-            </div>
-            <!-- <i class="icon-edit icon" 
-                @click="editField('userPhone')"
-                :class="{'icon-color-change': !userPhoneDisabled}"></i> -->
-        </div>
-        
-    </section>
-
-    <section class="account-card" :class="{'edit': !userEmailDisabled }" v-if="emailValue"> 
-        <div class="header">
-            <div class="block">
-            <div class="setting-title">蝬��</div>
-                <div class="contact-type">Email
-                    <input 
-                        :disabled="userEmailDisabled"
-                        v-model="emailValue"
-                        :class="{
-                        'is-invalid': !emailValid
-                        }"
-                        ref="userEmail"
-                        class="contact-input input"
-                        :placeholder="emailValue || '撠���� Email'"
-                        >
-                    <div class="error-txt">
-                        <span v-show="!emailValid" class="error">靽∠拳�撘�炊</span>
-                    </div>
-                </div>
-                </div>
-                
-                <!-- <i class="icon-edit icon" @click="editField('userEmail')" 
-                        :class="{'icon-color-change': !userEmailDisabled}"></i> -->
-        </div>
-        
-    </section>
-
-    <div class="account-setting-btn mb-30">
-        <el-button 
-            :disabled="isSubmitBtnDisabled"
-            @click.native="updateAccountSetting">�</el-button>
+      </div>
+      <div class="account-info__icon text--middle">
+        <i class="icon-edit" @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled}"></i>
+      </div>
     </div>
 
-</div>
+    <!-- NOTE: 銝餉�蝯⊥撘� -->
+    <div class="pam-paragraph account-info" v-if="!isPrimaryContactTypeEmail">
+      <div class="account-info__title text--middle">蝬��</div>
+      <div class="account-info__input " :class="{'edit': !userPhoneDisabled }">
+        <div class="text--middle mb-10">����Ⅳ</div>
+        <input :disabled="userPhoneDisabled"
+          v-model="phoneValue"
+          :class="{'is-invalid': !phoneValid}"
+          ref="userPhone"
+          class="account-info__input-text"
+          :placeholder="phoneValue ||'撠������Ⅳ'">
+        <div class="account-info__input-error">
+            <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span>
+        </div>
+      </div>
+    </div>
+
+    <div class="pam-paragraph account-info" v-if="isPrimaryContactTypeEmail">
+      <div class="account-info__title text--middle">蝬��</div>
+      <div class="account-info__input" :class="{'edit': !userEmailDisabled }">
+        <div class="text--middle mb-10">Email</div>
+        <el-input
+              :disabled ="userEmailDisabled"
+              type="textarea"
+              autosize
+              resize="none"
+              v-model="emailValue"
+              :class="{'is-invalid': !emailValid }"
+              ref="userEmail"
+              class="account-info__input-text text--break-all"
+              style="margin-left:-10px"
+              :placeholder="emailValue || '撠���� Email'">
+          </el-input>
+        <div class="account-info__input-error">
+            <span v-show="!emailValue" class="error">靽∠拳�撘�炊</span>
+        </div>
+      </div>
+    </div>
+
+    <!-- NOTE: ���蝯⊥撘� -->
+
+    <div
+      v-if="(!defaultUserSetting.phone || !defaultUserSetting.email) && !otherContactType"
+      class="text--underline text--primary"
+      @click="editOtherContactType">+�隞��蝜急撘�</div>
+
+    <template v-if="(defaultUserSetting.phone && defaultUserSetting.email) || otherContactType">
+
+      <div v-if="!isPrimaryContactTypeEmail">
+
+         <div class="pam-paragraph account-info">
+        <div class="account-info__title text--middle">��</div>
+          <div class="account-info__input " :class="{'edit': !userEmailDisabled }" >
+          <div class="text--middle mb-10 account-info-dele-other-contact-type">
+            <div>Email</div>
+            <div class="account-info__icon text--middle">
+              <i class="icon-delet" v-if="defaultUserSetting.mail" @click="isShowDeleteDialog = true"></i>
+              <i class="icon-edit"  @click="editField('userEmail')" :class="{'icon-color-change': !userEmailDisabled}"></i>
+            </div>
+          </div>
+          <el-input
+              type="textarea"
+              autosize
+              :disabled="userEmailDisabled"
+              resize="none"
+              v-model="emailValue"
+              :class="{'is-invalid': !emailValid }"
+              ref="userEmail"
+              class="account-info__input-text text--break-all"
+              style="margin-left:-10px"
+              :placeholder="emailValue || '撠���� Email'">
+          </el-input>
+            <div class="account-info__input-error">
+              <span v-show="!emailValid" class="error">靽∠拳�撘�炊</span>
+            </div>
+        </div>
+          </div>
+
+      </div>
+
+      <div class="pam-paragraph account-info" v-if="isPrimaryContactTypeEmail">
+
+        <div class="account-info__title text--middle">��</div>
+          <div class="account-info__input" :class="{'edit': !userPhoneDisabled }">
+          <div class="text--middle mb-10 account-info-dele-other-contact-type">
+            <div>����Ⅳ</div>
+            <div class="account-info__icon text--middle">
+              <i class="icon-delet" v-if="defaultUserSetting.phone" @click="isShowDeleteDialog = true"></i>
+              <i class="icon-edit" @click="editField('userPhone')" :class="{'icon-color-change': !userPhoneDisabled}"></i>
+            </div>
+          </div>
+          <input
+            v-model="phoneValue"
+            :disabled="userPhoneDisabled"
+            :class="{'is-invalid': !phoneValid}"
+            ref="userPhone"
+            class="account-info__input-text"
+            :placeholder="phoneValue ||'撠������Ⅳ'">
+          <div class="account-info__input-error">
+              <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span>
+          </div>
+        </div>
+          </div>
+
+    </template>
+
+
+    <PopUpFrame :isOpen.sync="updateDone">
+      <div class="text--center mdTxt fs-18">
+        <p class="mt-20 text--center ">撣唾��������</p>
+        <el-button
+                type="primary"
+                @click="confirmUpdateAndBackToHome"
+                class="mt-20"
+              >������</el-button>
+      </div>
+    </PopUpFrame>
+
+    <PopUpFrame :isOpen.sync="isShowDeleteDialog">
+      <div class="text--center mdTxt fs-18">
+      <p class="mt-20 text--center ">��蝣箄����甈���</p>
+          <el-button
+              @click="isShowDeleteDialog = false"
+              class="mt-20"
+            >����</el-button>
+        <el-button
+                type="primary"
+                @click="deleteOtherContactType"
+                class="mt-20"
+              >蝣箄��</el-button>
+      </div>
+    </PopUpFrame>
+
+    <div class="pam-paragraph account-confirm">
+      <el-button :disabled="isSubmitBtnDisabled "
+        @click.native="updateAccountSetting">
+          �
+      </el-button>
+    </div>
+  </div>
 </template>
 
 <script lang="ts">
 import { Vue,Component } from 'vue-property-decorator'
-import { getUserAccountSetting, updateAccountSetting } from '~/assets/ts/api/consultant';
-import { UserSetting } from '~/assets/ts/models/account.model';
+import { namespace } from 'vuex-class';
+
+import _ from 'lodash';
+
+import accountSettingService from '~/shared/services/account-setting.service';
+import { UserSetting } from '~/shared/models/account.model';
+
+const localStorageStore = namespace('localStorage');
 
 @Component
 export default class AccountSetting extends Vue {
-        _userSetting!: UserSetting;
-        userNameDisabled = true;
-        userPhoneDisabled = true;
-        userEmailDisabled = true ;
-        userNameValue = '';
-        phoneValue = '' ;
-        emailValue = '' ;
 
-        onEditMode = false;
-        formValidStatus = {
-            name: true,
+  @localStorageStore.Getter
+  isPrimaryContactTypeEmail!: boolean;
+
+
+  defaultUserSetting: UserSetting = {
+    name :  '',
+    phone:  '',
+    email:  '',
+  };
+
+  userNameDisabled  = true;
+  userPhoneDisabled = true;
+  userEmailDisabled = true ;
+  otherContactType = false;
+  isShowDeleteDialog = false;
+
+  updateDone        = false;
+  userNameValue     = '';
+  phoneValue        = '' ;
+  emailValue        = '' ;
+  formValidStatus = {
+            name : true,
             phone: true,
             email: true,
-        };
+    };
 
-        get nameValid(): boolean {
-            this.formValidStatus.name = this.userNameValue ? true : false;
-            return this.formValidStatus.name;
+////////////////////////////////////////////////////////////
+  mounted(){
+            accountSettingService.getUserAccountSetting().then((userInfo: UserSetting)=>{
+                this.defaultUserSetting = _.cloneDeep({
+                    name : userInfo.name || '',
+                    phone: userInfo.phone || '',
+                    email: userInfo.email || '',
+                });
+                this.phoneValue    = this.defaultUserSetting.phone!;
+                this.userNameValue = this.defaultUserSetting.name!;
+                this.emailValue    = this.defaultUserSetting.email!;
+            })
         }
+////////////////////////////////////////////////////////////
 
-        get phoneValid(): boolean {
-            const rule = /^09[0-9]{8}$/;
-            this.formValidStatus.phone = this.phoneValue ? rule.test(this.phoneValue) : true;
-            return this.formValidStatus.phone;
-        }
-
-        get emailValid(): boolean {
-            const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
-            this.formValidStatus.email = this.emailValue ? rule.test(this.emailValue) : true;;
-            return this.formValidStatus.email;
-        }
-
-        editField(fieldName: string): void {
-            this.onEditMode = true;
+  editField(fieldName: string): void {
             const enablePromise = new Promise((resolve, reject) => { // 甇斤promise隤��
                 resolve((this as any)[`${fieldName}Disabled`] = false);
             });
@@ -136,178 +224,161 @@
                 targetInput.focus();
             });
         }
+  updateAccountSetting(): void {
+      const editSettingInfo: UserSetting = {
+          name: this.userNameValue,
+          phone: this.phoneValue,
+          email: this.emailValue
+      }
+      accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => {
+          this.resetSettingForm();
+          this.updateDone = true;
+          this.defaultUserSetting = editSettingInfo;
+      });
+  }
 
-        get isSubmitBtnDisabled(): boolean {
-            const isFormValid = this.formValidStatus.name && this.formValidStatus.phone && this.formValidStatus.email;
-            return !isFormValid || !this.onEditMode
-                || (!this.phoneValue && !this.emailValue);
-        }
-
-        updateAccountSetting(): void {
-            // const dataChanged = (): boolean => {
-            //     return this._userSetting.name !== this.userNameValue
-            //         || this._userSetting.phone !== this.phoneValue
-            //         || this._userSetting.email !== this.emailValue;
-            // };
-            // if (dataChanged) {
-
-            // }
-            if (!this.onEditMode) return;
-            const editSettingInfo: UserSetting = {
-                name: this.userNameValue,
-                phone: this.phoneValue,
-                email: this.emailValue
-            }
-            updateAccountSetting(editSettingInfo).then((res: any) => {
-                console.log('updateRes:', res);
-                this.resetSettingForm();
-            });
-        }
-
-        private resetSettingForm(): void {
-            this.onEditMode = false;
+  private resetSettingForm(): void {
             this.userNameDisabled = true;
             this.userPhoneDisabled = true;
             this.userEmailDisabled = true ;
         }
 
-        mounted(){
-            getUserAccountSetting().then((userInfo: UserSetting)=>{
-                this._userSetting = {
-                    name: userInfo.name || '',
-                    phone: userInfo.phone || '',
-                    email: userInfo.email || '',
-                };
+  editOtherContactType(){
+    this.otherContactType = true;
+    setTimeout(() => {
+      if (this.isPrimaryContactTypeEmail) {
+        this.editField('userPhone');
+      } else {
+        this.editField('userEmail');
+      }
+    }, 0);
+  }
 
-                this.phoneValue = this._userSetting.phone!;
-                this.userNameValue = this._userSetting.name!;
-                this.emailValue = this._userSetting.email!;
-            })
+  deleteOtherContactType(): void {
+    const editSettingInfo: UserSetting = {
+        name: this.userNameValue,
+        phone: '',
+        email: '',
+    };
+
+    if (this.isPrimaryContactTypeEmail) {
+      editSettingInfo.email = this.emailValue;
+    } else {
+      editSettingInfo.phone = this.phoneValue;
+    }
+
+    accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => {
+        this.resetSettingForm();
+        this.updateDone = true;
+        if (this.isPrimaryContactTypeEmail) {
+          this.phoneValue = '';
+          this.defaultUserSetting.phone = '';
+        } else {
+          this.emailValue = '';
+          this.defaultUserSetting.email = '';
         }
+        this.isShowDeleteDialog = false;
+        this.otherContactType = false;
+    });
+
+  }
+
+////////////////////////////////////////////////////////////
+
+  get nameValid(): boolean {
+            this.formValidStatus.name = this.userNameValue ? true : false;
+            return this.formValidStatus.name;
+        }
+
+  get phoneValid(): boolean {
+            const rule = /^09[0-9]{8}$/;
+            this.formValidStatus.phone = this.phoneValue ? rule.test(this.phoneValue) : true;
+            return this.formValidStatus.phone;
+        }
+
+  get emailValid(): boolean {
+            const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
+            this.formValidStatus.email = this.emailValue ? rule.test(this.emailValue) : true;
+            return this.formValidStatus.email;
+        }
+  get isSubmitBtnDisabled(): boolean {
+            const isFormValid = this.formValidStatus.name && this.formValidStatus.phone && this.formValidStatus.email;
+            const isOtherContactTypeChange = this.isPrimaryContactTypeEmail
+                                            ? this.defaultUserSetting.phone !== this.phoneValue
+                                            : this.defaultUserSetting.email !== this.emailValue;
+            return !isFormValid
+                  || (this.userNameValue === this.defaultUserSetting.name
+                  && !isOtherContactTypeChange);
+        }
+
+  confirmUpdateAndBackToHome():void{
+      this.updateDone = false
+      this.$router.push('/accountSetting')
+  }
 
 }
 
 
 </script>
 
-<style lang="scss" scoped>
-.account-page{
-    .block{
-        display: flex;
+<style lang="scss">
+.pam-account-setting {
+  .account-info{
+    display: flex;
+    align-items: baseline;
+    border-bottom: 1px gray solid;
+    padding: 15px 15px 15px 30px;
+    .account-info__title{
+      width: 58px;
     }
-    .account-page-title{
+    .account-info__input{
+      flex: 1;
+      &.edit {
+        .account-info__input-text{
+          border: 1px solid lightgray;
+          background-color: #fff;
+        }
+      }
+      .account-info__input-text{
+        border: 0;
+        background-color: rgba(0,0,0,0) ;
+        outline-color: gainsboro;
+        box-sizing: border-box;
+        -webkit-box-sizing: border-box;
+        -moz-box-sizing: border-box;
+        padding: 3px 10px;
+        width: 100%;
         font-size: 20px;
-        margin-bottom: 34px;
+        &:disabled{
+          padding: 0px;
+        }
+      }
+      .account-info__input-error{
+        @extend .smTxt_bold,.text--primary;
+        margin-top: 10px;
+      }
     }
-    .account-card{
-        display: flex;
-        flex-direction: column;
-        border-bottom: 1px solid gray;
-        margin-bottom: 33px;
-        .contact-type{
-            width: 184px;
-            margin-right: 16px;
-            font-size: 20px;
-            display: flex;
-            flex-direction: column;
-            align-items: flex-start;
-        }
-        &.edit {
-            input {
-                border: 1px solid lightgray;
-                background-color: #fff;
-            }
-        }
+    .account-info__icon{
+      margin-left: 20px;
+      .icon-color-change{
+        color:$PRIMARY_RED;
+      }
     }
-    .account-setting-btn{
-        display: flex;
-        justify-content: center;
-    }
-}
-.error-txt{
-    padding-bottom: 10px;
-    .error {
-        @extend .smTxt_bold;
-        @extend .text--primary;
-        height: 16px;
-        }
-}
-.name-input{
-            width: 184px;
-            height:27px;
-            margin-bottom: 20px;
-            font-size: 20px;
-            margin-top: -3px;
-        }
-.setting-title{
-            margin-left: 28px;
-            margin-bottom:10px;
-            width: 58px;
-            font-size: 20px;
-        }
-.header{
+  }
+  .account-confirm{
     display: flex;
-    align-items: baseline;
-}
-.contact-input{
-    font-size: 20px;
-    margin-bottom: 10px;
-    text-overflow: ellipsis;
-    margin-top: 10px;
-    width: 184px;
-}
-.input{
-    border: 0;
-    background-color: rgba(0,0,0,0) ;
-    outline-color: gainsboro;
-}
-.input:focus{
-    background-color: #fff;
-}
-.icon-color-change{
-    color:$PRIMARY_RED;
-    font-size: 20px;
-}
-.icon{
-    font-size:20px;
-    // color:#1B365D;
-}
-@include desktop{
-    
-    .header{
+    justify-content: center;
+  }
+  .account-info-dele-other-contact-type{
     display: flex;
-    align-items: baseline;
     justify-content: space-between;
-    }
-    .setting-title{
-            margin-bottom:10px;
-            width: 58px;
-            font-size: 18px;
-            font-weight: bold;
-        }
-    .account-page{
-    .account-page-title{
-        font-size: 20px;
-        margin-bottom: 34px;
-        font-weight: bold;
-    }
-    }
-    .account-card{
-        display: flex;
-        flex-direction: column;
-        border-bottom: 1px solid gray;
-        margin-bottom: 33px;
-        .contact-type{
-            margin-left: 10px;
-            font-size: 20px;
-        }
-    }
-    .name-input{
-        width: 550px;
-    }
-    .contact-input{
-        width:550px
-    }
-    }
+  }
 
-</style>
\ No newline at end of file
+  .el-textarea__inner{
+    background-color: rgba(0,0,0,0) ;
+    border: none !important;
+    padding:1px !important;
+  }
+}
+
+</style>
diff --git a/PAMapp/pages/agentInfo/_agentNo.vue b/PAMapp/pages/agentInfo/_agentNo.vue
index 738b438..9313a1a 100644
--- a/PAMapp/pages/agentInfo/_agentNo.vue
+++ b/PAMapp/pages/agentInfo/_agentNo.vue
@@ -3,14 +3,18 @@
       <el-row
         type="flex"
         justify="center">
-        <UiAvatar :size="150" :fileName="agentInfo.img"></UiAvatar>
+        <UiAvatar
+          :size="150"
+          :agentNo="agentInfo.agentNo">
+        </UiAvatar>
       </el-row>
 
       <el-row
         type="flex"
         class="pt-10"
         justify="center"
-        align="middle">
+        align="middle" v-if="!hideReviews">
+        <!-- TODO:���遛��漲 -->
           <i class="pam-icon icon--primary icon-star"></i>
           <h3 class="mdTxt">{{ agentInfo.avgScore }}</h3>
       </el-row>
@@ -20,6 +24,15 @@
         class="pt-10"
         justify="center">
         <h3 class="mdTxt">{{ agentName }}</h3>
+      </el-row>
+
+      <el-row
+        v-if="currentRole === role.ADMIN"
+        type="flex"
+        class="pam-paragraph">
+        <UiField :span="12" icon="phone" label="����Ⅳ">
+          {{ agentInfo.phoneNumber }}
+        </UiField>
       </el-row>
 
       <el-row
@@ -34,7 +47,7 @@
         type="flex"
         class="pam-paragraph">
         <UiField icon="company" label="�����">
-          {{ agentInfo.serveArea }}
+          {{ agentInfo.serveArea | toServeArea }}
         </UiField>
       </el-row>
 
@@ -109,12 +122,21 @@
         </el-col>
       </el-row>
 
+      <div class="consultant-edit-btn">
+        <UiField icon="flag" label="皞�◢�">
+          <div class="text--orange bold pr-10 "
+            v-for="(communicationStyle, index) in displayCommunicationStyleList"
+            :key="index">
+              #{{ communicationStyle }}</div>
+        </UiField>
+    </div>
+
       <el-row
         type="flex"
         class="pam-paragraph">
         <UiField icon="flag" label="撠����">
           <div class="pam-field-experts">
-            <div class="text--orange bold pr-10" v-for="(expert, index) in agentInfo.expertises" :key="index">
+            <div class="text--orange bold pr-10" v-for="(expert, index) in agentInfo.expertise" :key="index">
               #{{ expert }}
             </div>
           </div>
@@ -124,7 +146,7 @@
       <el-row
         type="flex"
         class="pam-paragraph">
-        <UiField icon="comment" label="�犖��艙">
+        <UiField icon="comment" label="�犖��艙" class="agent-info-textarea">
           {{ agentInfo.concept }}
         </UiField>
       </el-row>
@@ -132,9 +154,9 @@
       <el-row
         type="flex"
         class="pam-paragraph">
-        <UiField icon="school" label="�犖��">
-          <span v-for="(experience, index) in agentInfo.experiences" :key="index">
-            {{ experience }}<span v-if="index !== agentInfo.experiences.length - 1">, </span>
+        <UiField icon="school" label="�犖��" class="agent-info-textarea">
+          <span>
+            {{ agentInfo.experiences }}
           </span>
         </UiField>
       </el-row>
@@ -142,7 +164,7 @@
       <el-row
         type="flex"
         class="pam-paragraph">
-        <UiField icon="trophy" label="敺��風">
+        <UiField icon="trophy" label="敺��風" class="agent-info-textarea">
           {{ agentInfo.awards }}
         </UiField>
       </el-row>
@@ -181,6 +203,9 @@
             </div>
         </div>
     </PopUpFrame>
+    <div class="consultant-edit-btn" v-if="currentRole === role.ADMIN">
+      <el-button type="primary" @click.native="$router.push(`/agentInfo/edit/${agentInfo.agentNo}`)">蝺刻摩撣單鞈��</el-button>
+    </div>
     </div>
 </template>
 
@@ -188,33 +213,39 @@
 import { Context } from '@nuxt/types';
 import { namespace } from 'nuxt-property-decorator';
 import { Vue, Component } from 'vue-property-decorator';
-import { getConsultantDetail } from '~/assets/ts/api/consultant';
-import { Role } from '~/assets/ts//models/enum/Role';
+
+import myConsultantService from '~/shared/services/my-consultant.service';
+import { AgentInfo } from '~/shared/models/agent-info.model';
+import { hideReviews } from '~/shared/const/hide-reviews';
+import { Role } from '~/shared/models/enum/Role';
+
 const roleStorage = namespace('localStorage');
+
 @Component
 export default class AgentInfoComponent extends Vue {
+
   @roleStorage.Getter currentRole!:string|null;
-  role = Role;
+
   agentInfo!: AgentInfo;
+  role = Role;
   isAlertAddSuccess = false;
   isAlertFieldInfo = false;
   fieldInfoTitle = '';
   fieldInfoDesc = '';
+  hideReviews = hideReviews ;
+
+  //////////////////////////////////////////////////////////////////////
 
   async asyncData(context: Context) {
     const agentNo = context.route.params.agentNo;
-    let agentInfo = {};
-    await getConsultantDetail(agentNo).then((res) => agentInfo = res.data )
     return {
-      agentInfo
+      agentInfo: await myConsultantService.getConsultantDetail(agentNo).then((res) => res)
     }
   }
 
-  get agentName(): string {
-    return `${this.agentInfo.name}(${this.agentInfo.role})`;
-  }
+  //////////////////////////////////////////////////////////////////////
 
-  alertAddSuccess() {
+  alertAddSuccess(): void {
       this.isAlertAddSuccess = true;
   }
 
@@ -231,27 +262,17 @@
         break;
     }
   }
+
+  get agentName(): string {
+    return `${this.agentInfo.name}(${this.agentInfo.role})`;
+  }
+
+  get displayCommunicationStyleList(): string[] {
+    return this.agentInfo.communicationStyle.split('��').filter((item) => item);
+  }
+
 }
 
-interface AgentInfo {
-  name            : string;
-  agentNo         : string;
-  role            : string;
-  img             : string;
-  avgScore        : number;
-  title           : string;
-  phoneNumber     : string;
-  serveArea       : string;
-  companyAddress  : string;
-  lastestLoginTime: Date | null;
-  seniority       : string;
-  suitability     : number;
-  evaluation      : number;
-  expertises      : string[];
-  concept         : string;
-  experiences     : string[];
-  awards          : string;
-}
 </script>
 
 <style lang="scss">
@@ -303,5 +324,16 @@
   flex-wrap: wrap;
   line-height: 24px;
 }
+.consultant-edit-btn{
+  display: flex;
+  justify-content: center;
+}
 
+.pam-field{
+  display: flex;
+}
+.agent-info-textarea{
+  word-break: break-all;
+  word-wrap: break-word;
+}
 </style>
diff --git a/PAMapp/pages/agentInfo/edit/_agentNo.vue b/PAMapp/pages/agentInfo/edit/_agentNo.vue
new file mode 100644
index 0000000..ae47457
--- /dev/null
+++ b/PAMapp/pages/agentInfo/edit/_agentNo.vue
@@ -0,0 +1,520 @@
+<template>
+    <div class="edit-agent-info-page">
+
+      <el-row
+        type="flex"
+        justify="center">
+        <EditConsultantAvatar
+          :agentNo="agentInfo.agentNo"
+          :photoBase64.sync="editInfoValue.photoBase64"/>
+      </el-row>
+
+      <!-- NOTE: ���蝺刻摩��銝�閬*蝷� avgScore嚗���� [Tomas, 2022/2/10 13:55] -->
+      <!-- <el-row
+        type="flex"
+        class="pt-10"
+        justify="center"
+        align="middle" v-if="!hideReviews">
+          <i class="pam-icon icon--primary icon-star"></i>
+          <h3 class="mdTxt">{{ agentInfo.avgScore }}</h3>
+      </el-row> -->
+
+      <!-- <el-row
+        type="flex"
+        class="pam-paragraph"
+        justify="center">
+        <el-input class="mdTxt" v-model="editInfoValue.name"></el-input>
+      </el-row> -->
+       <el-row
+        type="flex"
+        class="pam-paragraph">
+        <el-col :span="24" class="pam-field">
+          <div class="pam-field__label pam-progress__label">
+            <div>
+              <div class="pam-field__title mb-10">
+                <i class="pam-icon icon-avatar"
+                  ></i>憿舐內��迂
+                  <span class="hint text--bold" v-show="!editInfoValue.name">憿舐內��迂�敹‵</span>
+              </div>
+            </div>
+            <el-input
+              v-model="editInfoValue.name"
+              :class="{'is-invalid': !nameValid}"
+              maxlength="10"
+              minlength="10"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <el-col :span="24" class="pam-field">
+          <div class="pam-field__label pam-progress__label">
+            <div>
+              <div class="pam-field__title mb-10">
+                <i class="pam-icon icon-phone"
+                  ></i>����Ⅳ
+                  <span class="hint text--bold" v-show="!phoneValid">����Ⅳ�撘�炊</span>
+                  <span class="hint text--bold" v-show="editInfoValue.phoneNumber.length === 0">����Ⅳ�敹‵</span>
+              </div>
+            </div>
+            <el-input
+            v-model="editInfoValue.phoneNumber"
+            :class="{'is-invalid': !phoneValid}"
+            maxlength="10"
+            minlength="10"></el-input>
+          </div>
+        </el-col>
+      </el-row>
+
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField :span="24" icon="agent" label="����">
+          <el-input  v-model="editInfoValue.title" class="mt-10"></el-input>
+        </UiField>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField icon="company" label="�����">
+          <MultiSelectBtn class="mt-30"
+            :mutiSelect.sync="editInfoValue.serveArea"
+            :nameOfSelectAll="'��'"
+            :options="serveAreaOptions"
+            >
+          </MultiSelectBtn>
+        </UiField>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField icon="address" label="�����">
+          <el-input  v-model="editInfoValue.companyAddress" class="mt-10"></el-input>
+        </UiField>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField :span="12" icon="time" label="��敺�����">
+          {{ agentInfo.latestLoginTime | formatDate }}
+        </UiField>
+        <UiField :span="12" icon="calender" label="����風">
+          <div class="mt-10" style="display: flex; align-items: center">
+            <el-input  v-model="editInfoValue.seniorityYear" class="seniority-input" ></el-input>撟�
+            <el-select  style="width:60px" v-model="editInfoValue.seniorityMonth" class="seniority-input">
+              <el-option
+                v-for="(month) in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]"
+                :value="month"
+                :key="month">
+                {{ month }}
+              </el-option>
+            </el-select>���
+          </div>
+        </UiField>
+      </el-row>
+
+      <!-- <el-row
+        type="flex"
+        class="pam-paragraph">
+        <el-col :span="24" class="pam-field">
+          <div class="pam-field__label pam-progress__label">
+            <div>
+              <div class="pam-field__title">
+                <i class="pam-icon icon-thumbs-up"
+                  ></i>隢株岷摨西”� <i class="pl-5 text--primary icon-information" @click="alertFieldInfo('evaluation')"></i>
+              </div>
+            </div>
+            <div class="xsTxt">
+              {{ agentInfo.evaluation }}/50 (餈����/蝝航��)
+            </div>
+          </div>
+          <div class="pam-field__content pam-field-evaluation pt-10">
+            <el-progress :show-text="false" :stroke-width="15" :percentage="agentInfo.evaluation * 2"></el-progress>
+          </div>
+        </el-col>
+      </el-row> -->
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <el-col :span="24" class="pam-field">
+          <div class="pam-field__label pam-progress__label">
+            <div>
+              <div class="pam-field__title">
+                <i class="pam-icon icon-flag"
+                  ></i>皞�◢�  <span class="hint text--bold">(�銴,��憭�2���)</span>
+              </div>
+            </div>
+            <MultiSelectBtn class="mt-30"
+              :mutiSelect.sync="editInfoValue.communicationStyle"
+              :options="agentCommunicationStyleList"
+              :maxLength="2"
+            >
+            </MultiSelectBtn>
+          </div>
+        </el-col>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <el-col :span="24" class="pam-field">
+          <div class="pam-field__label pam-progress__label">
+            <div>
+              <div class="pam-field__title">
+                <i class="pam-icon icon-flag"
+                  ></i>撠����  <span class="hint text--bold">(�銴)</span>
+              </div>
+            </div>
+            <MultiSelectBtn class="mt-30"
+              :mutiSelect.sync="editInfoValue.expertise"
+              :options="agentExpertList"
+            >
+            </MultiSelectBtn>
+          </div>
+        </el-col>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField icon="comment" label="�犖��艙">
+          <el-input type="textarea" autosize v-model="editInfoValue.concept" class="mt-10"></el-input>
+        </UiField>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField icon="school" label="�犖��">
+            <el-input
+              autosize
+              type="textarea"
+              class="mt-10"
+              v-model="editInfoValue.experiences">
+            </el-input>
+        </UiField>
+      </el-row>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField icon="trophy" label="敺��風">
+          <el-input type="textarea" autosize style="height:70%" v-model="editInfoValue.awards" class="mt-10"></el-input>
+        </UiField>
+      </el-row>
+
+    <PopUpFrame
+      :isOpen.sync="isAlertFieldInfo"
+      >
+        <div class="text--center mdTxt fs-18">
+            <p>{{ fieldInfoTitle }}</p>
+            <p class="mt-20 text--left text--regular">{{ fieldInfoDesc }}</p>
+            <div class="text--center mt-30">
+              <el-button
+                type="primary"
+                @click="isAlertFieldInfo = false"
+              >������</el-button>
+            </div>
+        </div>
+    </PopUpFrame>
+    <PopUpFrame :isOpen.sync="isInfoUpdate">
+      <div class="text--center mdTxt fs-18">
+        <p class="mt-20 text--center ">撣唾��������</p>
+        <el-button
+                type="primary"
+                @click="backToInfo"
+                class="mt-20"
+              >������</el-button>
+      </div>
+    </PopUpFrame>
+    <div class="pam-paragraph account-confirm">
+      <el-button :disabled="isSubmitBtnDisabled"
+        @click.native="editAgentInfoSetting">
+          �
+      </el-button>
+    </div>
+    </div>
+</template>
+
+<script lang="ts">
+import { Context } from '@nuxt/types';
+import { namespace } from 'nuxt-property-decorator';
+import { Vue, Component, Prop } from 'vue-property-decorator';
+import * as _ from "lodash";
+
+import myConsultantService from '~/shared/services/my-consultant.service';
+import accountSettingService from '~/shared/services/account-setting.service';
+
+import { AgentInfo } from '~/shared/models/agent-info.model';
+import { hideReviews } from '~/shared/const/hide-reviews';
+import { AgentInfoSetting } from '~/shared/models/account.model';
+import { Role } from '~/shared/models/enum/Role';
+import { agentCommunicationStyleList } from '~/shared/const/agent-communication-style-list';
+import { taiwanCities } from '~/shared/const/taiwan-cities';
+
+const localStorageTest = namespace('localStorage');
+const loginStore = namespace('login.store');
+
+@Component
+export default class AgentInfoEditComponent extends Vue {
+
+  @localStorageTest.State
+  current_role: any;
+
+  @loginStore.Action
+  updateConsultantDetail!: (agentNo: string) => Promise<AgentInfo>;
+
+  defaultAgentInfoSetting!: AgentInfoSetting;
+  agentInfo!      : AgentInfo
+  fieldInfoDesc   : string = '';
+  fieldInfoTitle  : string = '';
+  hideReviews     : boolean = hideReviews ;
+  isAlertFieldInfo: boolean = false;
+  isInfoUpdate    : boolean = false;
+  serveAreaOptions: any[] = taiwanCities.map((city) => ({ title: city, label: city }));
+
+  editInfoValue = {
+    agentNo           : '',
+    name              : '',
+    expertise         : [] as string[],
+    title             : '',
+    serveArea         : [] as string[],
+    companyAddress    : '',
+    seniorityYear     : 1,
+    seniorityMonth    : 0,
+    concept           : '',
+    experiences       : '',
+    awards            : '',
+    communicationStyle: [] as string[],
+    photoBase64       : '',
+    phoneNumber       : ''
+  };
+
+  communicationStyleList: string[] = agentCommunicationStyleList;
+  role           = Role;
+
+  agentExpertList = [
+    {
+        title:'�摨瑁����',
+        label:'�摨瑁����'
+    },
+    {
+        title:'摮戊��',
+        label:'摮戊��'
+    },
+    {
+        title:'鞈閬��',
+        label:'鞈閬��'
+    },
+    {
+        title:'璅暑��隡�',
+        label:'璅暑��隡�'
+    },
+    {
+        title:'靽�瑼�/閬��',
+        label:'靽�瑼�/閬��'
+    },
+    {
+        title:'����',
+        label:'����'
+    }];
+
+  agentCommunicationStyleList = [
+    {
+        title:'雓寞��祕',
+        label:'雓寞��祕'
+    },
+    {
+        title:'��翰銝餃��',
+        label:'��翰銝餃��'
+    },
+    {
+        title:'���',
+        label:'���'
+    },
+    {
+        title:'�隢◢頞�',
+        label:'�隢◢頞�'
+    }];
+
+  //////////////////////////////////////////////////////////////////////
+
+  async asyncData(context: Context) {
+    const agentNo = context.route.params.agentNo;
+    return {
+      agentInfo: await myConsultantService.getConsultantDetail(agentNo).then((res) => res)
+    }
+  }
+
+  mounted(){
+    this.setAgentInfo(this.agentInfo);
+  }
+
+  private setAgentInfo(agentInfo: AgentInfo): void {
+    const [agentYear, _yearUnit , agentMonth, _monthUnit] =  agentInfo.seniority.split(" ");
+    this.defaultAgentInfoSetting = {
+      agentNo           : agentInfo.agentNo||'',
+      name              : agentInfo.name || '',
+      expertise         : agentInfo.expertise || [],
+      title             : agentInfo.title || '',
+      role              : agentInfo.role||'',
+      serveArea         : agentInfo?.serveArea.split('��'),
+      gender            : agentInfo.gender||'',
+      phoneNumber       : agentInfo.phoneNumber||'',
+      companyAddress    : agentInfo.companyAddress || '',
+      seniorityYear     : agentYear? +agentYear : 0,
+      seniorityMonth    : agentMonth ? +agentMonth : 0,
+      concept           : agentInfo.concept || '',
+      experiences       : agentInfo.experiences  || '',
+      awards            : agentInfo.awards || '',
+      communicationStyle: agentInfo.communicationStyle || '',
+      photoBase64       : ''
+    };
+
+    this.editInfoValue = {
+      ...this.defaultAgentInfoSetting,
+      expertise          : _.cloneDeep(this.defaultAgentInfoSetting.expertise),
+      // TODO: 蝣箄��垢甇斗���垢���隞�" , "���� [Tomas, 2021/12/28]
+      communicationStyle : this.defaultAgentInfoSetting.communicationStyle.split('��'),
+    }
+  }
+
+  //////////////////////////////////////////////////////////////////////
+
+  editAgentInfoSetting(): void {
+    const editSettingInfo: any = {
+      ...this.editInfoValue,
+      communicationStyle: this.editInfoValue.communicationStyle.join('��'),
+      serveArea: this.editInfoValue.serveArea.join('��'),
+    }
+    accountSettingService.editAgentInfoSetting(editSettingInfo).then((res: AgentInfoSetting) => {
+      this.isInfoUpdate = true;
+      this.updateConsultantDetail(editSettingInfo.agentNo);
+    });
+  }
+
+  backToInfo() {
+    this.isInfoUpdate = false
+    this.$router.push(`/agentInfo/${this.agentInfo.agentNo}`);
+  }
+
+  selectCommunicationStyles(): void {
+    if (this.editInfoValue.communicationStyle.length > 2) {
+            this.editInfoValue.communicationStyle.shift();
+        }
+  }
+
+  alertFieldInfo(field: string): void {
+    this.isAlertFieldInfo = true;
+    switch(field) {
+      case 'suitability':
+        this.fieldInfoTitle = '���漲';
+        this.fieldInfoDesc = '���漲��������翰�祟�敺����雿�憿批����脰�������蝯行�����潘��隞乩������“������潦��';
+        break;
+      // case 'evaluation':
+      //   this.fieldInfoTitle = '隢株岷摨西”�';
+      //   this.fieldInfoDesc = '隢株岷摨西”��撠��雿�憿批�������垣閰X���脰�������蝯行�����潦��';
+      //   break;
+    }
+  }
+
+  ////////////////////////////////////////////////////////////
+  get nameValid(): boolean {
+    return !!this.defaultAgentInfoSetting?.name;
+  }
+
+  get phoneValid(): boolean {
+            const rule = /^09[0-9]{8}$/;
+            return this.editInfoValue.phoneNumber
+            ? rule.test(this.editInfoValue.phoneNumber) && _.isEqual(this.editInfoValue.phoneNumber.length,10)
+            : true;
+        }
+
+  get isSubmitBtnDisabled(): boolean {
+      const isFormValid =  this.editInfoValue.name
+                        && this.editInfoValue.title
+                        && this.editInfoValue.companyAddress
+                        && this.editInfoValue.serveArea
+                        && this.editInfoValue.concept
+                        && this.editInfoValue.experiences
+                        && this.editInfoValue.phoneNumber.length
+                        && this.editInfoValue.seniorityYear
+                        && this.editInfoValue.expertise.length
+                        && this.editInfoValue.communicationStyle.length;
+      return !isFormValid
+  }
+}
+
+</script>
+
+<style lang="scss">
+
+.pam-icon {
+  font-size    : 15px;
+  padding-right: 8px;
+  color        : $PRUDENTIAL_GREY;
+  &.icon--primary {
+    color: $PRIMARY_RED;
+  }
+}
+.pam-field {
+  display: flex;
+  flex-direction: column;
+  .pam-field__label {
+    display: flex;
+    align-items: center;
+    .pam-icon {
+      font-size: 12px;
+    }
+    .pam-field__title {
+      font-size  : 16px;
+      font-weight: bold;
+      display    : flex;
+      align-items: center;
+    }
+  }
+}
+
+.pam-field-suitability {
+  .el-progress-bar__inner {
+    background-color: $LIGHT_BLUE !important;
+  }
+}
+
+.pam-field-evaluation {
+  .el-progress-bar__inner {
+    background-color: $TEAL_GREEN!important;
+  }
+}
+
+.pam-field-experts {
+  display  : flex;
+  flex-wrap: wrap;
+}
+
+.pam-progress__label {
+  justify-content: space-between;
+  flex-wrap  : wrap;
+  line-height: 24px;
+}
+.account-confirm{
+  display: flex;
+  justify-content: center;
+}
+
+.seniority-input{
+  width       : 60px;
+  margin-right: 5px;
+}
+.el-input--suffix .el-input__inner {
+  padding-right: 20px;
+}
+
+</style>
diff --git a/PAMapp/pages/appointment/_appointmentId/close/index.vue b/PAMapp/pages/appointment/_appointmentId/close/index.vue
new file mode 100644
index 0000000..3fe2dae
--- /dev/null
+++ b/PAMapp/pages/appointment/_appointmentId/close/index.vue
@@ -0,0 +1,313 @@
+<template>
+  <div class="appointment-client-detail-close-page">
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField label="甇豢�撘�" :labelSize="20">
+          <SingleSelectBtn class="mt-10"
+            :singleSelected.sync="appointmentCloseInfo.selectCloseOption"
+            :options="closeOptions" />
+        </UiField>
+      </el-row>
+
+      <template v-if="appointmentCloseInfo.selectCloseOption === contactStatus.DONE">
+        <el-row
+          type="flex"
+          class="pam-paragraph" style="flex-direction: column">
+          <UiField label="頨怠�����/撅�����" :labelSize="20" class="required">
+            <input
+              class="appointment-client-detail-close__input"
+              :class="{'is-invalid':!identityIdValid}"
+              v-model="appointmentCloseInfo.policyholderIdentityId"
+              placeholder="隢撓�"
+              type="text">
+          </UiField>
+          <div class="error mt-5 mb-5" v-show="!identityIdValid">
+            <span>頨怠����撘�炊</span>
+          </div>
+        </el-row>
+
+        <el-row
+          type="flex"
+          class="pam-paragraph">
+          <UiField label="���誨蝣噗lan Code" :labelSize="20" class="required">
+            <input
+              class="appointment-client-detail-close__input"
+              v-model="appointmentCloseInfo.planCode"
+              placeholder="隢撓�"
+              type="text">
+          </UiField>
+        </el-row>
+
+        <el-row
+          type="flex"
+          class="pam-paragraph">
+          <UiField label="�脖辣����" :labelSize="20" class="required">
+            <DateTimePicker
+              :defaultValue="appointmentCloseInfo.policyEntryDate"
+              @changeDateTime="appointmentCloseDate = $event"></DateTimePicker>
+          </UiField>
+        </el-row>
+      </template>
+
+      <template v-if="appointmentCloseInfo.selectCloseOption === contactStatus.CLOSE">
+        <el-row
+          class="pam-paragraph">
+          <UiField label="���漱����" :labelSize="20" class="required">
+            <UiSelect :closeReason.sync="appointmentCloseInfo.closedReason"
+              :options="appointmentFailReason"/>
+          </UiField>
+          <input
+            v-if="appointmentCloseInfo.closedReason === 'other'
+                || appointmentCloseInfo.closedReason === 'no_suitable_commodity'"
+            class="appointment-client-detail-close__input mt-10"
+            v-model="appointmentCloseInfo.closedOtherReason"
+            placeholder="隢撓�������50摮��"
+            type="text">
+        </el-row>
+      </template>
+
+      <el-row
+        type="flex"
+        class="pam-paragraph">
+        <UiField label="��酉" :labelSize="20">
+          <el-input
+            type="textarea"
+            :rows="3"
+            placeholder="隢撓�"
+            v-model="appointmentCloseInfo.remark"
+            resize="none">
+          </el-input>
+        </UiField>
+      </el-row>
+
+      <el-row
+        type="flex"
+        justify="center"
+        class="pam-paragraph">
+        <el-button @click="$router.go(-1)">����</el-button>
+        <el-button @click="closeAppointment" :disabled="isSubmitBtnDisabled">蝣箄��</el-button>
+      </el-row>
+
+      <PopUpFrame :isOpen.sync="isShowSuccessAlert">
+        <div class="text--middle invite-review">
+          <div  class="mb-30 mt-10">蝯����</div>
+          <el-button type="primary" @click="closeAlert">蝣箏��</el-button>
+        </div>
+      </PopUpFrame>
+  </div>
+</template>
+
+<script lang="ts">
+
+import { namespace } from 'nuxt-property-decorator';
+import { Vue, Component } from 'vue-property-decorator';
+import { Appointment, ToCloseAppointment, ToDoneAppointment } from '~/shared/models/appointment.model';
+
+import appointmentService from '~/shared/services/appointment.service';
+import { appointmentFailReasonList } from '~/shared/const/appointment-fail-reason-list';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+
+const appointmentStore = namespace('appointment.store');
+
+@Component
+export default class AppointmentDetailCloseComponent extends Vue {
+
+  @appointmentStore.Action
+  updateAppointmentDetail!: (appointmentId: number) => Appointment;
+
+  @appointmentStore.State('appointmentDetail')
+  appointmentDetail!: Appointment;
+
+  contactStatus = ContactStatus;
+
+  appointmentCloseDate = '';
+  isShowSuccessAlert = false;
+
+  appointmentCloseInfo = {
+    closedOtherReason     : '',
+    closedReason          : 'other',
+    planCode              : '',
+    policyEntryDate       : '',
+    policyholderIdentityId: '',
+    remark                : '',
+    selectCloseOption     : this.contactStatus.DONE,
+  };
+
+  closeOptions = [
+    {
+      title:'��漱',
+      label: this.contactStatus.DONE,
+    },
+    {
+      title:'���漱',
+      label: this.contactStatus.CLOSE,
+    }
+  ];
+
+  appointmentFailReason = appointmentFailReasonList;
+
+  //////////////////////////////////////////////////////////////////////
+
+  mounted() {
+    const appointmentId = +this.$route.params.appointmentId;
+    const closedInfo = this.appointmentDetail.appointmentClosedInfo;
+    if (this.appointmentDetail.id === appointmentId
+        && (this.appointmentDetail.communicateStatus === this.contactStatus.DONE
+        || this.appointmentDetail.communicateStatus === this.contactStatus.CLOSE
+        || this.appointmentDetail.communicateStatus === this.contactStatus.CANCEL)
+        ) {
+        this.appointmentCloseInfo = {
+        closedOtherReason     : closedInfo?.closedOtherReason,
+        closedReason          : closedInfo?.closedReason,
+        planCode              : closedInfo?.planCode,
+        policyEntryDate       : closedInfo?.policyEntryDate,
+        policyholderIdentityId: closedInfo?.policyholderIdentityId,
+        remark                : closedInfo?.remark,
+        selectCloseOption     : this.appointmentDetail.communicateStatus === this.contactStatus.DONE
+                                ? this.contactStatus.DONE
+                                : this.contactStatus.CLOSE
+      };
+      this.appointmentCloseDate = closedInfo?.policyEntryDate;
+    }
+  }
+
+  //////////////////////////////////////////////////////////////////////
+
+  closeAppointment(): void {
+    const appointmentId = +this.$route.params.appointmentId;
+    if (this.appointmentCloseInfo.selectCloseOption === this.contactStatus.DONE) {
+      const toDoneAppointment: ToDoneAppointment = {
+        appointmentId         : appointmentId,
+        contactStatus         : this.contactStatus.DONE,
+        planCode              : this.appointmentCloseInfo.planCode,
+        policyEntryDate       : this.appointmentCloseDate,
+        policyholderIdentityId: this.appointmentCloseInfo.policyholderIdentityId,
+        remark                : this.appointmentCloseInfo.remark,
+      }
+      appointmentService.closeAppointment(toDoneAppointment).then((_) => this.updateAppointmentDetail(appointmentId));
+      this.isShowSuccessAlert = true;
+    } else {
+      const toCloseAppointment: ToCloseAppointment = {
+        appointmentId    : appointmentId,
+        closedOtherReason: this.appointmentCloseInfo.closedOtherReason,
+        closedReason     : this.appointmentCloseInfo.closedReason,
+        contactStatus    : this.contactStatus.CLOSE,
+        remark           : this.appointmentCloseInfo.remark,
+      }
+      appointmentService.closeAppointment(toCloseAppointment).then((_) => {
+        this.updateAppointmentDetail(appointmentId);
+        this.isShowSuccessAlert = true;
+      });
+
+    }
+  }
+
+  closeAlert(){
+    this.isShowSuccessAlert = false ;
+    this.$router.push(`/myAppointmentList/contactedList`);
+  }
+
+  checkIdentityId(id) {
+    const tab = 'ABCDEFGHJKLMNPQRSTUVXYWZIO';
+    const weight = [9, 8, 7, 6, 5, 4, 3, 2, 1, 1];
+    if (id.length !== 10) return false;
+    let i = tab.indexOf(id.charAt(0)) + 10;
+    if (i === 9) return false;
+    let sum = Math.floor((i % 100) / 10) + (i % 10) * 9;
+    for (i = 1; i < 10; i += 1) {
+      let v = parseInt(id.charAt(i), 10);
+      if (i === 1 && Number.isNaN(v)) {
+        switch (id.charAt(i)) {
+          case 'A':
+            v = 0;
+            break;
+          case 'B':
+            v = 1;
+            break;
+          case 'C':
+            v = 2;
+            break;
+          case 'D':
+            v = 3;
+            break;
+          default:
+            return false;
+        }
+      } else if (i === 1 && ([1, 2, 8, 9].indexOf(v) === -1)) {
+        return false;
+      }
+      if (i > 1 && Number.isNaN(v)) return false;
+      sum += v * weight[i];
+    }
+
+    if (sum % 10 !== 0) return false;
+    return true;
+  }
+
+  get isSubmitBtnDisabled() {
+    const {
+      selectCloseOption,
+      policyholderIdentityId,
+      planCode,
+      closedReason,
+      closedOtherReason,
+      remark
+    } = this.appointmentCloseInfo;
+    if (selectCloseOption === this.contactStatus.DONE) {
+      return !policyholderIdentityId || !this.identityIdValid || !planCode || !this.appointmentCloseDate
+    } else if (closedReason === 'other' || closedReason === 'no_suitable_commodity') {
+      return !closedOtherReason
+    }
+    return false
+  }
+
+  get identityIdValid() {
+    const identityId = this.appointmentCloseInfo.policyholderIdentityId;
+    return identityId ? this.checkIdentityId(identityId) : true;
+  }
+
+}
+</script>
+
+<style lang="scss" scoped>
+.appointment-close__remark,
+.appointment-client-detail-close__input {
+  border-radius: 5px;
+  border   : 1px solid #707070;
+  font-size: 20px;
+  padding  : 10px 20px;
+  width    : 100%;
+  box-sizing: border-box;
+  &::placeholder {
+    color: $MID_GREY;
+  }
+  &.is-invalid {
+    border-color: $PRIMARY_RED !important;
+  }
+}
+.invite-review{
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+ .error {
+    @extend .smTxt_bold;
+    @extend .text--primary;
+    height: 16px;
+  }
+  .required {
+    position: relative;
+
+    &::before {
+      content: '*';
+      font-size: 15px;
+      font-weight: bold;
+      position: absolute;
+      color: #FF0000;
+      transform: translateX(-2px);
+      z-index: 5;
+    }
+  }
+</style>
diff --git a/PAMapp/pages/appointment/_appointmentId/index.vue b/PAMapp/pages/appointment/_appointmentId/index.vue
new file mode 100644
index 0000000..ec303f0
--- /dev/null
+++ b/PAMapp/pages/appointment/_appointmentId/index.vue
@@ -0,0 +1,304 @@
+<template>
+  <div class="appointment-client-detail-page">
+    <div class="date-detail">
+      <div>{{ appointmentDetail.appointmentDate | formatDate }}����</div>
+      <div>{{ appointmentDetail.consultantReadTime | formatDate }}
+        <span v-if="appointmentDetail.consultantReadTime">撌脰�</span>
+      </div>
+    </div>
+
+    <AppointmentProgress
+      class="mt-10"
+      :currentStep="appointmentProgress"
+    ></AppointmentProgress>
+
+    <section class="client-detail">
+
+      <div class="client-detail-info mb-30">
+        <div class="client-detail-info__avatar">
+          <div class="circle">
+            {{ appointmentDetail.name || 'NO NAME' }}
+            <div class="sm-circle sm-circle-male" v-if="appointmentDetail.gender === 'male'">
+              <i class="icon-sex-male sex-icon"></i>
+            </div>
+            <div class="sm-circle sm-circle-female" v-if="appointmentDetail.gender === 'female'">
+              <i class="icon-sex-female sex-icon"></i>
+            </div>
+          </div>
+        </div>
+        <div class="client-detail-info__information">
+          <div>{{ appointmentDetail.age | toAgeLabel }}</div>
+          <div>{{ appointmentDetail.phone }}</div>
+          <div class="text--underline text--break-all">
+            {{ appointmentDetail.email }}
+          </div>
+        </div>
+      </div>
+
+      <div class="client-detail-demand mt-10">
+
+        <div class="client-detail-demand__demand-list mb-10">
+          <div class="client-detail-demand__demand-list-label">��瘙�</div>
+          <div class="client-detail-demand__demand-list-content">{{ appointmentDetail.requirement }}</div>
+        </div>
+
+        <div class="client-detail-demand__demand-list">
+          <div class="client-detail-demand__demand-list-label">�蝯�<br />��挾</div>
+          <div class="client-detail-demand__demand-list-content">
+            <div v-for="(hopeContactTime, index) in hopeContactTimeList" :key="index"
+              :class="{'mt-10': index > 0, 'pb-10': true, 'hope-contact-time__line': index + 1 < hopeContactTimeList.length }">
+              <div v-for="(item, index) in getHopeContactTimeContent(hopeContactTime)" :key="index" :class="{'mt-10': index < 0 }">
+                {{ item }}
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <div class=" btn-center" v-if="showWhenAppointmentHasClosed">
+        <el-button @click="inviteReview">��遛��漲</el-button>
+      </div>
+
+      <div class="client-detail-action" v-if="showWhenAppointmentHasContacted">
+        <el-button @click="closeAppointment" class="desktop-client-detail-action-btn" >蝯��</el-button>
+        <el-button @click="sendMsg" style="margin-left: 0px">�蝝赤</el-button>
+      </div>
+
+     <div class=" btn-center" v-if="showWhenAppointmentHasCreate">
+        <el-button @click="sendMsg">���赤�</el-button>
+      </div>
+    </section>
+
+
+    <template v-if="showWhenAppointmentHasClosed">
+      <AppointmentClosedInfo :appointmentDetail="appointmentDetail" />
+    </template>
+
+    <InterviewMsg
+      :isVisible.sync="isVisibleDialog"
+      :client="appointmentDetail">
+    </InterviewMsg>
+
+
+    <section class="mt-30" v-if="!showWhenAppointmentHasCreate">
+      <AppointmentInterviewList :interviewList="appointmentDetail.interviewRecordDTOs" />
+    </section>
+
+    <section class="mt-30" v-if="!showWhenAppointmentHasCreate">
+      <AppointmentRecordList :noticeLogs="appointmentDetail.appointmentNoticeLogs" />
+    </section>
+
+    <PopUpFrame :isOpen.sync="isShowInviteReviewDialog">
+          <div class="text--middle invite-review">
+            <div class="mb-30 mt-10">撌脩�遛��漲</div>
+            <div class="text--primary text--middle cursor--pointer text--underline" @click="isShowInviteReviewDialog = false" :size="'250px'">������</div>
+          </div>
+        </PopUpFrame>
+
+  </div>
+</template>
+
+<script lang="ts">
+import { Vue, Component } from 'vue-property-decorator';
+import { namespace } from 'nuxt-property-decorator';
+
+import { Appointment } from '~/shared/models/appointment.model';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+
+import reviewsService from '~/shared/services/reviews.service';
+
+
+const appointmentStore = namespace('appointment.store');
+
+@Component
+export default class AppointmentDetailComponent extends Vue {
+
+  @appointmentStore.State('appointmentDetail')
+  appointmentDetail!: Appointment;
+
+  @appointmentStore.Getter('appointmentProgress')
+  appointmentProgress!: ContactStatus;
+
+  isVisibleDialog = false;
+  isShowInviteReviewDialog = false ;
+  interviewTxt = "";
+  contactStatus = ContactStatus;
+
+
+  //////////////////////////////////////////////////////////////////////
+
+  closeAppointment(): void {
+    this.$router.push(`/appointment/${this.appointmentDetail.id}/close`);
+  }
+
+  sendMsg():void {
+    this.isVisibleDialog = true;
+  }
+
+  editAppointmentHasClosed(): void{
+    this.$router.push(`/appointment/${this.appointmentDetail.id}/close`);
+  }
+
+  get showWhenAppointmentHasClosed(): boolean {
+    return this.appointmentDetail.communicateStatus === this.contactStatus.DONE
+        || this.appointmentDetail.communicateStatus === this.contactStatus.CLOSE
+        || this.appointmentDetail.communicateStatus === this.contactStatus.CANCEL;
+  }
+
+  get showWhenAppointmentHasCreate(): boolean {
+    return this.appointmentDetail.communicateStatus === this.contactStatus.PICKED
+        || this.appointmentDetail.communicateStatus === this.contactStatus.RESERVED;
+  }
+
+  get showWhenAppointmentHasContacted() :boolean {
+    return this.appointmentDetail.communicateStatus === this.contactStatus.CONTACTED;
+  }
+
+  get hopeContactTimeList(): any[] {
+    return this.appointmentDetail.hopeContactTime.split("','")
+  }
+
+  getHopeContactTimeContent(hopeContactTimeString: string): string[] {
+    const result = hopeContactTimeString.replaceAll("'", '').split('��');
+    return result;
+  }
+
+  inviteReview(): void {
+    reviewsService.sendSatisfactionToClient(this.appointmentDetail.id).then(res => {
+        this.isShowInviteReviewDialog = true;
+    });
+  }
+}
+</script>
+
+<style lang="scss">
+.appointment-client-detail-page{
+  .date-detail{
+    display        : flex;
+    font-size      : 16px;
+    color          : #68737A;
+    justify-content: space-between;
+    margin-bottom  : 2px;
+  }
+  .client-detail{
+    background-color: #fff;
+    margin-top:10px;
+    padding: 17px 21px;
+    .client-detail-info {
+      display: flex;
+      .client-detail-info__avatar{
+        display: flex;
+        margin-right: 22px;
+        .circle{
+          height: 100px;
+          width: 100px;
+          border-radius: 50%;
+          background-image: url('~/assets/images/appointment/avatar_bg.svg');
+          position: relative;
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          .sm-circle{
+            position: absolute;
+            height: 30px;
+            width: 30px;
+            border-radius: 50%;
+            background-color: #fff;
+            bottom: 0;
+            right: 0;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            .sex-icon {
+              font-size: 20px;
+              &.icon-sex-male{
+                color: $SKY_BLUE;
+              }
+              &.icon-sex-female{
+                color: $CORAL;
+              }
+            }
+            &-male {
+              border: 1px solid $SKY_BLUE;
+            }
+            &-female {
+              border: 1px solid $LIGHT_RED;
+            }
+          }
+        }
+      }
+      .client-detail-info__information{
+        font-size: 20px;
+        line-height: 1.6;
+      }
+    }
+    .client-detail-demand{
+      background-color: #fff;
+      font-size: 20px;
+      display: flex;
+      flex-direction: column;
+      .client-detail-demand__demand-list{
+        display: flex;
+      }
+      .client-detail-demand__hope-contact-time{
+        display: flex;
+      }
+      .client-detail-demand__demand-list-label {
+        @extend .mb-10;
+        @extend .mdTxt;
+        @extend .mr-10;
+        line-height: 1.3;
+        color     : $DARK_BLUE;
+        flex-basis: auto;
+        min-width : 40px;
+      }
+      .client-detail-demand__demand-list-content {
+        text-align: justify;
+        line-height: 1.3;
+        text-justify: auto;
+        word-break: break-all;
+      }
+    }
+    .client-detail-action {
+      margin-left: 50px;
+    }
+  }
+}
+.invite-review{
+    align-items   : center;
+    display       : flex;
+    flex-direction: column;
+  }
+.close-appointment-detail{
+  background-color: #fff;
+  display: flex;
+  margin-top: 30px;
+  padding: 20px;
+  display: flex;
+  flex-direction: column;
+  font-size: 20px;
+}
+.close-appointment-detail-nav{
+  display: flex;
+  justify-content: space-between;
+  flex: 1;
+}
+.hope-contact-time__line {
+  border-bottom: 1px solid #CCCCCC;
+}
+.btn-center{
+    display: flex;
+    justify-content: center;
+  }
+
+  @include desktop {
+    .client-detail-action {
+    display: flex;
+    justify-content: center;
+    }
+    .desktop-client-detail-action-btn{
+      margin-right: 10px;
+    }
+  }
+
+</style>
diff --git a/PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue b/PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue
new file mode 100644
index 0000000..7d1fd02
--- /dev/null
+++ b/PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue
@@ -0,0 +1,14 @@
+<template>
+  <InterviewAdd></InterviewAdd>
+</template>
+<script lang="ts">
+import { Vue, Component } from 'nuxt-property-decorator';
+
+@Component
+export default class EditAppointmentInterview extends Vue {
+
+}
+</script>
+<style lang="scss" scoped>
+
+</style>
diff --git a/PAMapp/pages/appointment/_appointmentId/interview/new/index.vue b/PAMapp/pages/appointment/_appointmentId/interview/new/index.vue
new file mode 100644
index 0000000..e1f9420
--- /dev/null
+++ b/PAMapp/pages/appointment/_appointmentId/interview/new/index.vue
@@ -0,0 +1,55 @@
+<template>
+  <InterviewAdd></InterviewAdd>
+</template>
+<script lang="ts">
+import { Vue, Component } from 'nuxt-property-decorator';
+
+@Component
+export default class NewAppointmentInterview extends Vue {
+
+}
+</script>
+<style lang="scss" >
+.edit-appointment-record {
+    padding-left : 10px;
+    padding-right: 10px;
+    .edit-appointment-record-date{
+        color          : #68737A;
+        display        : flex;
+        justify-content: space-between;
+        margin-bottom  : 26px;
+    }
+}
+.date-input {
+    align-items     : center;
+    background-color: #fff;
+    border          : 1px solid #707070;
+    border-radius   : 5px;
+    display         : flex;
+    font-size       : 20px;
+    height          : 46px;
+    margin-bottom   : 30px;
+    padding-left    : 20px;
+    padding-right   : 20px;
+}
+.icon {
+    color          : $PRIMARY_RED;
+    display        : flex;
+    flex           : 1;
+    justify-content: flex-end;
+}
+.edit-appointment-record-btn{
+    margin-top: 30px;
+    display: flex;
+    justify-content: center;
+}
+.required {
+  position: relative;
+  &::before {
+      content: '*';
+      position: absolute;
+      color: #FF0000;
+      transform: translate(-12px, 0);
+  }
+}
+</style>
diff --git a/PAMapp/pages/appointment/_appointmentId/interviewList/index.vue b/PAMapp/pages/appointment/_appointmentId/interviewList/index.vue
new file mode 100644
index 0000000..197d949
--- /dev/null
+++ b/PAMapp/pages/appointment/_appointmentId/interviewList/index.vue
@@ -0,0 +1,38 @@
+
+<template>
+    <div>
+        <div class="text--right mb-30">
+            <div class="pam-link-button--lg"
+            @click="addInterview">+�憓�</div>
+        </div>
+        <InterviewCard :interviewList="appointmentDetail.interviewRecordDTOs"></InterviewCard>
+    </div>
+</template>
+
+<script lang="ts">
+import { Component, namespace, Vue } from "nuxt-property-decorator";
+import { Appointment } from "~/shared/models/appointment.model";
+
+const appointmentStore = namespace('appointment.store');
+
+@Component
+export default class InterviewList extends Vue {
+    @appointmentStore.State
+    appointmentDetail!: Appointment;
+
+    appointmentId!: number;
+
+    ////////////////////////////////////////////////////////
+
+    mounted() {
+      this.appointmentId = +this.$route.params.appointmentId;
+    }
+
+    ////////////////////////////////////////////////////////
+
+    addInterview(): void {
+        this.$router.push(`/appointment/${this.appointmentId}/interview/new`);
+    }
+
+}
+</script>
\ No newline at end of file
diff --git a/PAMapp/pages/appointment/_appointmentId/recordList/index.vue b/PAMapp/pages/appointment/_appointmentId/recordList/index.vue
new file mode 100644
index 0000000..89d7bf7
--- /dev/null
+++ b/PAMapp/pages/appointment/_appointmentId/recordList/index.vue
@@ -0,0 +1,32 @@
+
+
+<template>
+    <InterviewRecordCard :noticeLogsList="displayLogs"></InterviewRecordCard>
+</template>
+
+<script lang="ts">
+import { Component, namespace, Vue, Watch } from "nuxt-property-decorator";
+import { Appointment, NoticeLogs } from "~/shared/models/appointment.model";
+
+const appointmentStore = namespace('appointment.store');
+
+@Component
+export default class RecordList extends Vue {
+    @appointmentStore.State
+    appointmentDetail!: Appointment;
+
+    displayLogs: NoticeLogs[] = [];
+
+    ////////////////////////////////////////////////////////
+
+    @Watch('appointmentDetail', {immediate: true})
+    onAppointmentDetailChange() {
+      if (this.appointmentDetail?.appointmentNoticeLogs.length) {
+        this.displayLogs = this.appointmentDetail?.appointmentNoticeLogs
+                            .map((i) => ({ ...i, sortDate: new Date(i.createdDate)}))
+                            .sort((preItem, nextItem) => +nextItem.sortDate - +preItem.sortDate);
+      }
+    }
+
+}
+</script>
\ No newline at end of file
diff --git a/PAMapp/pages/appointmentAgenda/index.vue b/PAMapp/pages/appointmentAgenda/index.vue
new file mode 100644
index 0000000..4e3db90
--- /dev/null
+++ b/PAMapp/pages/appointmentAgenda/index.vue
@@ -0,0 +1,68 @@
+<template>
+  <div>
+    <div class="mdTxt">�撠�赤����(3)</div>
+
+    <div class="remind-container">
+            <div class="remind-date mr-10">
+              <div class="mb-3 smTxt bgc-primary-red date-year">
+                <div class="mb-3 mt-2">2021</div>
+                </div>
+              <div class="p mt-5">
+                <div>12/25</div>
+              </div>
+            </div>
+
+            <div class="remind-content-txt">
+                <div class="mb-3">09:00</div>
+                <div>蝝赤���</div>
+            </div>
+        </div>
+
+     <div class="remind-container">
+
+            <div class="remind-date mr-10">
+              <div class="mb-3 smTxt bgc-primary-red date-year">
+                <div class="mb-3 mt-2">2021</div>
+                </div>
+              <div class="p mt-5">
+                <div>12/25</div>
+              </div>
+            </div>
+
+            <div class="remind-content-txt">
+                <div class="mb-3">09:00</div>
+                <div>蝝赤���</div>
+            </div>
+
+        </div>
+     <div class="remind-container">
+
+            <div class="remind-date mr-10">
+              <div class="mb-3 smTxt bgc-primary-red date-year">
+                <div class="mb-3 mt-2">2021</div>
+                </div>
+              <div class="p mt-5">
+                <div>12/25</div>
+              </div>
+            </div>
+
+            <div class="remind-content-txt">
+                <div class="mb-3">09:00</div>
+                <div>蝝赤���</div>
+            </div>
+
+        </div>
+  </div>
+</template>
+
+<script lang="ts">
+import { Vue, Component } from 'nuxt-property-decorator';
+
+@Component
+export default class Agenda extends Vue {
+
+    //////////////////////////////////////////////////////////////////////
+}
+</script>
+<style lang="scss" scoped>
+</style>
diff --git a/PAMapp/pages/consultantLogin/index.vue b/PAMapp/pages/consultantLogin/index.vue
index 283f867..dcebb79 100644
--- a/PAMapp/pages/consultantLogin/index.vue
+++ b/PAMapp/pages/consultantLogin/index.vue
@@ -58,30 +58,40 @@
 <script lang="ts">
   import { Vue, Component , namespace } from 'nuxt-property-decorator';
   import { AxiosError } from 'axios';
-  import { getImgOfVerification, logInToConsultant, getVerificationStatus } from '~/assets/ts/api/consultant';
-  import { Role } from '~/assets/ts/models/enum/Role';
-  import ErrorMessageBox from '~/assets/ts/errorService';
+  import { Role } from '~/shared/models/enum/Role';
+  import messageBoxService from '~/shared/services/message-box.service';
+  import loginService from '~/shared/services/login.service'
+import { AgentInfo } from '~/shared/models/agent-info.model';
 
+  const loginStore  = namespace('login.store');
   const roleStorage = namespace('localStorage');
+
   @Component({
     layout: 'home'
   })
   export default class ConsultantLogin extends Vue {
-    @roleStorage.Mutation storageIdToken!: (token: string) => void;
-    @roleStorage.Mutation storageRole!: (role: string) => void;
-    @roleStorage.Mutation storageConsultantId!:(id:string) => void;
+    @roleStorage.Mutation
+    storageIdToken!: (token: string) => void;
+
+    @roleStorage.Mutation
+    storageRole!: (role: string) => void;
+
+    @roleStorage.Mutation
+    storageConsultantId!:(id:string) => void;
+
+    @loginStore.Action
+    getLoginConsultantDetail!: (agentNo: string) => Promise<AgentInfo>;
+
+    consultantDto = {
+      password: '',
+      username: '',
+    };
+    imgSrc = '';
     isRememberUserName = false;
     isShowPassword = false;
-    imgSrc = '';
     verificationCode='';
-    consultantDto = {
-      username: '',
-      password: '',
-    }
 
-    get isAlreadyDone():boolean{
-      return !!(this.verificationCode && this.consultantDto.username && this.consultantDto.password);
-    }
+    ////////////////////////////////////////////////////////////////////
 
     mounted() {
       this.getInitUserName();
@@ -96,8 +106,11 @@
       }
     }
 
+    ////////////////////////////////////////////////////////////////////
+
+
     public regenerateImgOfVerification(): void {
-      getImgOfVerification().then( imgOfBase64 =>
+      loginService.getImgOfVerification().then( imgOfBase64 =>
         this.imgSrc = imgOfBase64
       );
     };
@@ -108,23 +121,33 @@
     }
 
     public sendInfo():void{
-      this.isAlreadyDone ? this.verify() : ErrorMessageBox('隢Ⅱ隤董����Ⅳ隞亙���Ⅳ��憛怠神摰');
+      this.isAlreadyDone
+        ? this.verify()
+        : messageBoxService.showErrorMessage('隢Ⅱ隤董����Ⅳ隞亙���Ⅳ��憛怠神摰');
     }
 
+    get isAlreadyDone():boolean{
+      return !!(this.verificationCode && this.consultantDto.username && this.consultantDto.password);
+    }
+
+
+    ////////////////////////////////////////////////////////////////////
+
     private verify():void{
-      getVerificationStatus(this.verificationCode).then( verifySuccess => {
+      loginService.getVerificationStatus(this.verificationCode).then( verifySuccess => {
         if(verifySuccess.data){
-          this.loginWithConsultant()
+          this.loginWithConsultant();
         }else{
           this.clearValue();
           this.regenerateImgOfVerification();
-          ErrorMessageBox('撽�Ⅳ頛詨�隤�');
+          messageBoxService.showErrorMessage('撽�Ⅳ頛詨�隤�');
         }
       });
     }
 
     private loginWithConsultant(): void {
-      logInToConsultant(this.consultantDto).then(res => {
+      loginService.logInToConsultant(this.consultantDto).then(res => {
+        this.getLoginConsultantDetail(this.consultantDto.username);
         this.storageIdToken(res.data.id_token);
         this.storageRole(Role.ADMIN);
         this.storageConsultantId(this.consultantDto.username)
@@ -140,11 +163,11 @@
       switch (error.response.status) {
         case 401:
           const errorMsg = error.response.data.detail;
-          ErrorMessageBox(errorMsg);
+          messageBoxService.showErrorMessage(errorMsg);
           break;
 
         default:
-          ErrorMessageBox('',error);
+          messageBoxService.showErrorMessage('',error);
           break;
       }
     }
diff --git a/PAMapp/pages/faq/index.vue b/PAMapp/pages/faq/index.vue
new file mode 100644
index 0000000..8b7f2aa
--- /dev/null
+++ b/PAMapp/pages/faq/index.vue
@@ -0,0 +1,26 @@
+<template>
+    <el-tree
+        :data="faqList"
+        :props="defaultProps"
+        icon-class="icon-add"
+        class="fix-chrome-click--issue"
+    ></el-tree>
+</template>
+
+<script lang="ts">
+import { Vue, Component } from 'nuxt-property-decorator';
+import { faqList } from '~/shared/const/faqList';
+
+@Component
+export default class Faq extends Vue {
+
+    faqList = faqList;
+
+    defaultProps = {
+        children: 'details',
+        label: 'label'
+    }
+}
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/PAMapp/pages/index.vue b/PAMapp/pages/index.vue
index 4bd0a61..31d46cb 100644
--- a/PAMapp/pages/index.vue
+++ b/PAMapp/pages/index.vue
@@ -2,15 +2,15 @@
   <div>
     <Ui-Carousel></Ui-Carousel>
     <div class="page-container">
-      <div class="mb-30">
+      <div>
         <h5 class="mdTxt">����憿批��</h5>
         <div class="mt-10 pam-reserveBtn--block">
           <el-button class="reserveBtn recommendConsultant"
-            @click="routerPush('/recommendConsultant')">
+            @click="navigateToRoute('/recommendConsultant')">
             <p>������</p>
           </el-button>
           <el-button class="reserveBtn quickFilter"
-            @click="routerPush('/quickFilter')">
+            @click="navigateToRoute('/quickFilter')">
             <p>敹恍�祟�</p>
           </el-button>
         </div>
@@ -19,12 +19,12 @@
         <el-row class="rowStyle">
           <el-col :span="16">
             <span class="mdTxt">���“���</span>
-            <span class="smTxt_bold amount">� {{consultantList.length}} 蝑�</span>
+            <span class="smTxt_bold amount">� {{ consultantList.length }} 蝑�</span>
           </el-col>
           <el-col :span="8"
             class="mdTxt readMore fix-chrome-click--issue"
             v-if="consultantList.length > 3"
-            @click.native="routerPush('/myConsultantList/consultantList')">���憭�</el-col>
+            @click.native="navigateToRoute('/myConsultantList/consultantList')">���憭�</el-col>
         </el-row>
         <ConsultantList class="mt-10"
           :agents="consultantList.slice(0, 3)"></ConsultantList>
@@ -39,49 +39,394 @@
         <ConsultantSwiper :agents="recommendList"></ConsultantSwiper>
       </div>
     </div>
+
+    <Ui-Dialog
+        :isVisible.sync="isShowAppointmentDialog"
+        :width="appointmentDialogWidth"
+        class="pam-myDemand-dialog pam-dialog-reserved"
+      >
+          <div v-if="appointmentDetail">
+              <h5 class="subTitle text--center mb-30">������</h5>
+              <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}}</p>
+              <div class="reserved-info">
+                  <p>憪��{appointmentDetail.name}}</p>
+                  <p>�閰梧�{appointmentDetail.phone}}</p>
+                  <p>Email嚗{appointmentDetail.email}}</p>
+                  <p>�批嚗{gender}}</p>
+                  <p>撟湧翩嚗{appointmentDetail.age | toAgeLabel }}</p>
+                  <p>�璆哨�{appointmentDetail.job}}</p>
+                  <p>��瘙�{appointmentDetail.requirement.split(',').join('��')}}</p>
+                  <p
+                      v-for="(item, index) in hopeContactTime"
+                      :key="index"
+                  >��蝯⊥�挾{{index + 1 | formatNumber}}嚗{ item | formatHopeContactTime }}</p>
+                  <div v-if="appointmentDetail.satisfactionScore">
+                      <div class="mdTxt mt-10 mb-10">皛踵�漲</div>
+                      <el-rate
+                      :value="appointmentDetail.satisfactionScore"
+                      class="pam-myDemand-dialog__rate"
+                      disabled>
+                      </el-rate>
+                  </div>
+              </div>
+
+              <div v-if="notScoreAppointmentYet" class="reserved-btn">
+                  <el-button type="primary"
+                      @click.native="reviewsBtn = true">蝯虫�遛��漲閰��</el-button>
+              </div>
+
+              <div v-if="appointmentDetail.communicateStatus === 'reserved'" class="text--center mt-10">
+                  <el-button @click="isCancelPopup = true">������</el-button>
+                  <el-button @click="edit" type="primary">蝺刻摩</el-button>
+              </div>
+          </div>
+      </Ui-Dialog>
+
+      <PopUpFrame
+        :isOpen.sync="isShowReAppointmentDialog"
+        @closePopUp="removeUrlQueryParameter('notContactAppointmentId')"
+      >
+          <div class="pam-dialog-review">
+              <div class="mt-30 text--middle" v-if="agentInfo">
+                敺甇������<span class="text--bold">{{ consultantName }}</span>憿批�迤敹�葉嚗������蒂���隞“���
+              </div>
+
+                <el-row
+                  type="flex"
+                  class="mt-50"
+                  justify="center">
+                  <el-button
+                      type="primary"
+                      @click="reAppointment">��������隞“���</el-button>
+                </el-row>
+                <el-row
+                  type="flex"
+                  class="mt-20"
+                  justify="center">
+                  <el-button
+                      class="outline_btn"
+                      @click="cancelAppointment">������</el-button>
+                </el-row>
+          </div>
+      </PopUpFrame>
+
+      <PopUpFrame
+        :isOpen.sync="isShowReviewDialog"
+        @closePopUp="removeUrlQueryParameter('appointmentId')"
+      >
+          <div class="mdTxt pam-dialog-review">
+              靽憿批�遛��漲
+              <span class="hint">������</span>
+              <div class="mt-30 review-content" v-if="agentInfo">
+                  <UiAvatar :size="80" :agentNo="agentInfo.agentNo"></UiAvatar>
+                  <div class="review-text">撠憿批��
+                      <span class="text--primary">{{agentInfo.name}}</span>
+                      ��擃���蝯虫�嗾憿��嚗�
+                  </div>
+              </div>
+
+              <div class="review-score">
+                  <el-rate v-model="inputScore" class="pam-rate mt-30"></el-rate>
+              </div>
+
+              <div class="review-btn">
+                  <el-button
+                      type="primary"
+                      :disabled="!inputScore"
+                      @click="userReviewsConsultants">�</el-button>
+              </div>
+          </div>
+      </PopUpFrame>
   </div>
 </template>
 
 <script lang="ts">
   import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator';
-  import { Consultant } from '~/assets/ts/models/consultant.model';
+
+  import appointmentService from '~/shared/services/appointment.service';
+  import reviewsService from '~/shared/services/reviews.service';
+  import UtilsService from '~/shared/services/utils.service';
+  import myConsultantService from '~/shared/services/my-consultant.service';
+  import { Appointment, AppointmentClosedInfo } from '~/shared/models/appointment.model';
+  import { Consultant } from '~/shared/models/consultant.model';
+  import { UserReviewParams } from '~/shared/models/reviews.model';
+  import { StrictQueryParams } from '~/shared/models/strict-query.model';
+  import { AgentInfo } from '~/shared/models/agent-info.model';
+  import { ContactStatus } from '~/shared/models/enum/contact-status';
+import { SatisfactionType } from '~/shared/models/enum/satisfaction-type';
 
   const localStorage = namespace('localStorage');
+  const roleStorage = namespace('localStorage');
+
   @Component({
     layout: 'home'
   })
   export default class MainComponent extends Vue {
+
+    @State('recommendList')
+    recommendList!: Consultant[];
+
+    @State('myConsultantList')
+    myConsultantList!: Consultant[];
+
+    @roleStorage.Getter
+    isAdminLogin!: boolean;
+
+    @roleStorage.Getter
+    isUserLogin!: boolean;
+
+    @Action
+    storeRecommendList!: any;
+
+    @Action
+    storeConsultantList!: any;
+
+    @localStorage.Mutation
+    storageClearQuickFilter!: () => void;
+
+    @localStorage.Mutation
+    storageClearRecommendConsultant!: () => void;
+
+    @localStorage.Getter
+    currentSatisfactionIdFromMsg!: string;
+
+    @localStorage.Getter
+    currentNotContactAppointmentIdFromMsg!: string;
+
+    @localStorage.Mutation
+    storageClearSatisfactionIdFromMsg!: () => void;
+
+    @localStorage.Mutation
+    storageClearNotContactAppointmentIdFromMsg!: () => void;
+
+    @localStorage.Mutation
+    storageStrickQueryItem!: (strictQueryDto: StrictQueryParams) => void;
+
     consultantList: Consultant[] = [];
 
-    @State('recommendList') recommendList!: Consultant[];
-    @Action storeRecommendList!: any;
+    appointmentDialogWidth    = '';
+    inputScore                = 0;
+    isShowAppointmentDialog   = false;
+    isShowReAppointmentDialog = false;
+    isShowReviewDialog        = false;
+    consultantName = '';
+    contactStatus = ContactStatus;
 
-    @State('myConsultantList') myConsultantList!: Consultant[];
-    @Action storeConsultantList!: any;
+    appointmentDetail: Appointment = {
+      age               : '',
+      agentNo           : '',
+      appointmentClosedInfo: {} as AppointmentClosedInfo,
+      appointmentDate   : '',
+      appointmentMemoList: [],
+      appointmentNoticeLogs: [],
+      communicateStatus : this.contactStatus.PICKED,
+      consultantReadTime: '',
+      consultantViewTime: '',
+      contactTime       : '',
+      contactType       : '',
+      customerId        : 0,
+      email             : '',
+      gender            : '',
+      hopeContactTime   : '',
+      interviewRecordDTOs: [],
+      id                : 0,
+      job               : '',
+      lastModifiedDate  : '',
+      name              : '',
+      otherRequirement  : '',
+      phone             : '',
+      requirement       : '',
+      satisfactionScore : 0,
+    };
 
-    @localStorage.Mutation storageClearQuickFilter!: () => void;
-    @localStorage.Mutation storageClearRecommendConsultant!: () => void;
+    agentInfo: Consultant = {
+      agentNo            : '',
+      name               : '',
+      img                : '',
+      expertise          : [],
+      avgScore           : 0,
+      contactStatus      : '',
+      createTime         : '',
+      updateTime         : '',
+      customerViewTime   : '',
+      role               : '',
+      seniority          : '',
+      appointments       : []
+    };
+
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+      if (this.isAdminLogin) {
+        this.$router.push('/myAppointmentList/appointmentList');
+      } else {
+        if (!this.recommendList?.length) {
+          this.storeRecommendList();
+        }
+
+        this.storeConsultantList();
+        this.storageClearQuickFilter();
+        this.storageClearRecommendConsultant();
+
+        if (this.isUserLogin) {
+          appointmentService.getNotContactAppointment().then((appointment) => {
+            if (appointment) {
+              this.$router.push({ query: { notContactAppointmentId: appointment.id + ''}});
+              this.autoOpenAppointmentBy('askReAppointment', appointment.id);
+            }
+          });
+        }
+
+      }
+
+    }
+
+    destroyed() {
+      this.removeUrlQueryParameter();
+    }
+
+    //////////////////////////////////////////////////////////////////////
 
     @Watch('myConsultantList')
     onMyConsultantListChange() {
       this.consultantList = (this.myConsultantList || [])
-        .filter(item => item.contactStatus !== 'contacted')
-        .map((item) => ({ ...item, formatDate: new Date(item.updateTime)}))
-        .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate)
-    }
+        .map((item) => ({ ...item, formatDate: new Date(item.updateTime || item.createTime)}))
+        .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate);
 
-    mounted() {
-      if (!this.recommendList?.length) {
-        this.storeRecommendList();
+      if (this.currentNotContactAppointmentIdFromMsg) {
+        this.autoOpenAppointmentBy('askReAppointment', +this.currentNotContactAppointmentIdFromMsg);
+        return;
       }
 
-      this.storeConsultantList();
-      this.storageClearQuickFilter();
-      this.storageClearRecommendConsultant();
+      if (this.currentSatisfactionIdFromMsg) {
+        this.autoOpenAppointmentBy('inviteReviewConsultant',+this.currentSatisfactionIdFromMsg);
+        this.storageClearSatisfactionIdFromMsg();
+        return;
+      }
     }
 
-    routerPush(path: string) {
+    private autoOpenAppointmentBy(reason: string, targetAppointmentId: number): void {
+        const setAgentInfo = new Promise((resolve, reject) => {
+          this.agentInfo = this.myConsultantList.filter(item => {
+            const appointmentIndex = item.appointments?.findIndex(i => i.id === targetAppointmentId);
+            return appointmentIndex !== undefined && appointmentIndex > -1;
+          })[0];
+          if (this.agentInfo) {
+            myConsultantService.getConsultantDetail(this.agentInfo.agentNo).then((res) => resolve(res));
+          }
+        });
+
+        const setAppointment = new Promise((resolve, reject) => {
+           appointmentService.getAppointmentDetail(targetAppointmentId).then((res) => resolve(res));
+        });
+
+        Promise.all([setAgentInfo, setAppointment]).then((values) => {
+          const agentInfo = values[0] as AgentInfo;
+          const appointmentInfo = values[1] as Appointment;
+          this.consultantName = agentInfo.name;
+          this.appointmentDetail = appointmentInfo;
+          this.appointmentDialogWidth = UtilsService.isMobileDevice() ? '80%' : '';
+          this.isShowAppointmentDialog = true;
+          switch (reason) {
+            case 'inviteReviewConsultant':
+              if (this.notScoreAppointmentYet) {
+                setTimeout(() => {
+                  this.isShowReviewDialog = true;
+                }, 500);
+              }
+              break;
+            case 'askReAppointment':
+              setTimeout(() => {
+                this.isShowReAppointmentDialog = true;
+              }, 500);
+              break;
+          }
+        });
+
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    navigateToRoute(path: string): void {
       this.$router.push(path);
+    }
+
+    edit() {
+        this.isShowAppointmentDialog = false;
+        this.$router.push({path: `/questionnaire/${this.agentInfo.agentNo}`, query: {'edit': 'true'}});
+    }
+
+    reAppointment(): void {
+      appointmentService.cancelAppointment(this.appointmentDetail.id).then(() => {
+        const requirements = this.appointmentDetail.requirement.split(',');
+        this.storeConsultantList();
+        this.storageStrickQueryItem({ requirements: requirements });
+        this.storageClearNotContactAppointmentIdFromMsg();
+        this.removeUrlQueryParameter('notContactAppointmentId');
+        this.$router.push('/recommendConsultant');
+      });
+    }
+
+    cancelAppointment(): void {
+      appointmentService.cancelAppointment(this.appointmentDetail.id).then(() => {
+        this.storeConsultantList();
+        this.storageClearNotContactAppointmentIdFromMsg();
+        this.removeUrlQueryParameter('notContactAppointmentId');
+        this.isShowReAppointmentDialog = false;
+        this.isShowAppointmentDialog = false;
+        this.$router.push('/');
+      });
+    }
+
+    userReviewsConsultants() {
+      const reviewParams: UserReviewParams = {
+            appointmentId: this.appointmentDetail.id,
+            score: this.inputScore,
+            type: SatisfactionType.APPOINTMENT
+        }
+        this.appointmentDetail.satisfactionScore = this.inputScore;
+
+        reviewsService.userReviewsConsultants(reviewParams).then((res) => {
+            this.isShowReviewDialog = false;
+        });
+    }
+
+    removeUrlQueryParameter(targetKey?: string): void {
+        // NOTE: ���摰�� query parameter [Tomas, 2022/1/24 11:36]
+        // [REF] How to remove a parameter from this.$router.query Nuxt.js? https://reurl.cc/X45aMD
+        let newRouteQuery = {};
+        if (targetKey) {
+          Object.keys(this.$route.query).forEach((key) => {
+            if (key !== targetKey) {
+              newRouteQuery[key] = this.$route.query[key]
+            }
+          })
+        }
+        this.$router.push(newRouteQuery);
+        this.storageClearSatisfactionIdFromMsg();
+        this.storageClearNotContactAppointmentIdFromMsg();
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////
+
+    get gender(): string {
+        if (this.appointmentDetail.gender) {
+            return this.appointmentDetail.gender === 'male' ? '���' : '憟單��';
+        }
+        return ''
+    }
+
+    get hopeContactTime(): string[] {
+        const contactList = this.appointmentDetail.hopeContactTime
+            .split("'").map((item: any) => item.slice(0, item.length));
+        return contactList.filter((item: any) => !!item && item !== ",")
+    }
+
+    get notScoreAppointmentYet(): boolean {
+      if (this.appointmentDetail.communicateStatus === 'closed' || this.appointmentDetail.communicateStatus === 'done') {
+        return !this.appointmentDetail.satisfactionScore;
+      };
+      return false;
     }
 
   }
@@ -94,19 +439,19 @@
   }
 
   .reserveBtn.el-button--default {
-    width: 100%;
-    height: 110px;
-    border-radius: 10px;
-    margin-bottom: 15px;
-    font-size: 32px;
-    font-weight: 700;
+    width              : 100%;
+    height             : 110px;
+    border-radius      : 10px;
+    margin-bottom      : 15px;
+    font-size          : 32px;
+    font-weight        : 700;
     background-position: right;
-    background-size: cover;
-    color: #68737A;
-    text-align: left;
-    background-repeat: no-repeat;
-    box-shadow: 0px 0px 6px #a79b9b29;
-    border-width: 0;
+    background-size    : cover;
+    color              : #68737A;
+    text-align         : left;
+    background-repeat  : no-repeat;
+    box-shadow         : 0px 0px 6px #a79b9b29;
+    border-width       : 0;
 
     p {
       text-shadow: 1px 1px 5px $PRIMARY_WHITE;
@@ -141,7 +486,7 @@
     align-items: center;
   }
 
-  @media (min-width: 576px) and (max-width: 768px) {
+  @media (min-width: 576px) and (max-width: 767px) {
     .quickFilter.el-button--default {
       background-image: url('~/assets/images/quickFilter/banner_web.svg');
     }
@@ -166,5 +511,4 @@
       max-width: 335px;
     }
   }
-
 </style>
diff --git a/PAMapp/pages/login/index.vue b/PAMapp/pages/login/index.vue
index 863d242..2aacaec 100644
--- a/PAMapp/pages/login/index.vue
+++ b/PAMapp/pages/login/index.vue
@@ -64,7 +64,7 @@
               <el-row type="flex" justify="space-between">
                   <div class="mdTxt">頛詨撽�Ⅳ</div>
                   <div class="otp-count-timer">
-                    {{phoneCounter}}
+                    {{counterTime(otpCounterSec)}}
                   </div>
               </el-row>
 
@@ -115,7 +115,7 @@
               <el-row type="flex" justify="space-between">
                   <div class="mdTxt">頛詨撽�Ⅳ</div>
                   <div class="otp-count-timer">
-                    {{emailOtpCounter}}
+                    {{counterTime(emailCounterSec)}}
                   </div>
               </el-row>
 
@@ -171,7 +171,7 @@
         :isOpen.sync="registerDialogVisible"
         :dialogWidth="'90%'"
         class="pam-register-dialog"
-        @closePopUp="isReadContract = false"
+        @closePopUp="isReadContract = false;agreeContract = false"
       >
           <div class="subTitle text--center mb-20">甇∟�雿輻��</div>
           <el-row>
@@ -197,8 +197,7 @@
               @scroll="detectContractReadStatus">
               <h3>����犖鞈��鈭��</h3>
               <p class="mt-10">
-              �摰�犖鞈��風瘜��������犖鞈����������
-              �銝�����
+              �摰�犖鞈��風瘜��������犖鞈���������銝�����
               <p>
 
               <p class="mt-10">
@@ -217,13 +216,11 @@
               </p>
 
               <p class="mt-10">
-              �������������平���暑�������銝剛瘞���������犖鞈�
-              ����
+              �������������平���暑�������銝剛瘞���������犖鞈���
               </p>
 
               <p class="mt-10">
-              鈭���������摰���甈∩誑憭�璆凋�撱��恐撠����誑��隞
-              ���������銋����嚗�������犖鞈���
+              鈭���������摰���甈∩誑憭�璆凋�撱��恐撠����誑��隞���������銋����嚗�������犖鞈���
               </p>
 
               <p class="mt-10">
@@ -338,17 +335,29 @@
 <script lang="ts">
 import { namespace } from 'nuxt-property-decorator';
 import { Vue, Component, Ref } from 'vue-property-decorator';
-import { LoginRequest, LoginVerify, loginVerify, OtpInfo, register, RegisterInfo, sendOtp } from '~/assets/ts/api/consultant';
-import ErrorMessageBox from '~/assets/ts/errorService';
-import { OtpErrorCode } from '~/assets/ts/models/enum/otpErrorCode';
-import { Role } from '~/assets/ts/models/enum/Role';
+import { OtpErrorCode } from '~/shared/models/enum/otpErrorCode';
+import { Role } from '~/shared/models/enum/Role';
+import { LoginRequest } from '~/shared/models/loginRequest.model';
+import { LoginVerify } from '~/shared/models/loginVerify.model';
+import { OtpInfo } from '~/shared/models/otpInfo.model';
+import { RegisterInfo } from '~/shared/models/registerInfo';
+import loginService from '~/shared/services/login.service';
+import messageBoxService from '~/shared/services/message-box.service';
+import otpService, { OtpStorageName } from '~/shared/services/otp.service';
 
 const roleStorage = namespace('localStorage');
 
 @Component
 export default class Login extends Vue {
-  @roleStorage.Mutation storageIdToken!: (token:string) => void;
-  @roleStorage.Mutation storageRole!: (role:string) => void;
+  @roleStorage.Mutation
+  storageIdToken!: (token:string) => void;
+
+  @roleStorage.Mutation
+  storageRole!: (role:string) => void;
+
+  @roleStorage.Mutation
+  storageUserInfo!: (userInfo: RegisterInfo) => void;
+
   @Ref('contract') readonly contract!: any;
 
   connectDevice: 'MOBILE' | 'EMAIL' = 'MOBILE';
@@ -356,18 +365,18 @@
   phoneNumber = '';
   otpCode = '';
   onPhoneVerifyStep: 'APPLY_OTP' | 'INPUT_OTP' | 'SUBMIT_OTP' = 'APPLY_OTP';
-  otpCounterSec = 900;
+  otpCounterSec = 300;
   otpResendCounter = 30;
   otpInterval: any;
-  phoneOtpInfo!: OtpInfo;
+  phoneOtpIndexKey!: string;
 
   email = '';
   onEmailVerifyResendStatus: 'APPLY_OTP' | 'CAN_RESEND' = 'APPLY_OTP';
-  emailCounterSec = 900;
+  emailCounterSec = 300;
   emailResendCounter = 30;
   emailOtpCode = '';
   emailResendInterval: any;
-  emailOtpInfo!: OtpInfo;
+  emailOtpIndexKey!: string;
 
   autoRedirectCounter = 3;
   autoRedirectInterval: any;
@@ -385,100 +394,79 @@
   applyAccount_onAction = false;
 
   previousPath = '';
+
+  /////////////////////////////////////////////////////
+
+  beforeRouteEnter (to, from, next) {
+      next(vm => {
+        vm.previousPath = from.path;
+      })
+  }
+
   mounted() {
-    const phoneOtpTime = localStorage.getItem('phoneOtpTime');
-    const emailOtpTime = localStorage.getItem('emailOtpTime');
-    const parsePhoneOtpTime = phoneOtpTime ? JSON.parse(phoneOtpTime) : '';
-    const parseEmailOtpTime = emailOtpTime ? JSON.parse(emailOtpTime) : '';
-    if (parsePhoneOtpTime && parsePhoneOtpTime.contactType === 'SMS') {
-      this.phoneDiffTime(parsePhoneOtpTime);
-    }
-    if (parseEmailOtpTime && parseEmailOtpTime.contactType === 'EMAIL') {
-      this.emailDiffTime(parseEmailOtpTime);
+    this.parsePhoneOtpTimeFromStorage();
+    this.parseEmailOtpTimeFromStorage();
+  }
+
+  private parsePhoneOtpTimeFromStorage() {
+    const parsePhoneOtpTime = otpService.parseOtpTime(OtpStorageName.PHONE);
+    const diffSecs = otpService.diffOtpTime(OtpStorageName.PHONE, this.otpCounterSec);
+
+    if (parsePhoneOtpTime && diffSecs) {
+      this.otpResendCounter = diffSecs < 30 ? 30 - diffSecs : 0;
+      this.otpCounterSec -= diffSecs;
+      this.phoneNumber = parsePhoneOtpTime.phone ? parsePhoneOtpTime.phone : '';
+      this.onPhoneVerifyStep = 'INPUT_OTP';
+      this.phoneOtpIndexKey = parsePhoneOtpTime.indexKey;
+      this.startOtpCount('MOBILE');
     }
   }
 
-  detectContractReadStatus(event: any): void {
-    const scrollTop = Math.round(event.target.scrollTop);
-    const height = event.target.scrollHeight - event.target.clientHeight;
-    if (Math.floor(scrollTop/10) === (Math.floor(height/10))) {
-      this.isReadContract = true;
+  private parseEmailOtpTimeFromStorage() {
+    const parseEmailOtpTime = otpService.parseOtpTime(OtpStorageName.EMAIL);
+    const diffSecs = otpService.diffOtpTime(OtpStorageName.EMAIL, this.emailCounterSec);
+
+    if (parseEmailOtpTime && diffSecs) {
+      this.emailResendCounter =  diffSecs < 30 ? 30 - diffSecs : 0;
+      this.emailCounterSec -= diffSecs;
+      this.email = parseEmailOtpTime.email ? parseEmailOtpTime.email : '';
+      this.onEmailVerifyResendStatus = 'CAN_RESEND';
+      this.emailOtpIndexKey = parseEmailOtpTime.indexKey;
+      this.startOtpCount('EMAIL');
     }
-  };
-
-  get isSubmitBtnDisabled(): boolean {
-    return this.connectDevice === 'MOBILE'
-      ? (!this.otpCode || !this.phoneNumber || !this.phoneValid || !this.otpCounterSec)
-      : (!this.emailOtpCode || !this.email || !this.emailValid || !this.emailCounterSec)
   }
 
-  get phoneCounter() {
-    let min = Math.floor(this.otpCounterSec / 60);
-    let sec = Math.floor(this.otpCounterSec % 60);
-    return `${min < 10 ? '0' + min : min}:${sec < 10 ? '0' + sec : sec}`;
-  }
-
-  get emailOtpCounter() {
-    let min = Math.floor(this.emailCounterSec / 60);
-    let sec = Math.floor(this.emailCounterSec % 60);
-    return `${min < 10 ? '0' + min : min}:${sec < 10 ? '0' + sec : sec}`;
-  }
-
-  get showPhoneOtpCodeField(): boolean {
-    return this.connectDevice === 'MOBILE' && this.onPhoneVerifyStep === 'INPUT_OTP';
-  };
-
-  get showEmailVerifyField(): boolean {
-    return this.connectDevice === 'EMAIL' && this.onEmailVerifyResendStatus === 'CAN_RESEND';
-  };
-
-  get phoneValid() {
-    const rule = /^09[0-9]{8}$/;
-    return this.phoneNumber ? rule.test(this.phoneNumber) : true;
-  }
-
-  get emailValid() {
-    const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
-    return this.email ? rule.test(this.email) : true;
-  }
-
-  applyOtpVerification(type: string): void {
-    const isMobile = this.connectDevice === 'MOBILE';
-    const loginInfo: LoginRequest = {
-      loginType: isMobile ? 'SMS' : 'EMAIL',
-      account: isMobile ? this.phoneNumber : this.email,
-    }
-    sendOtp(loginInfo).then(otpInfo => {
-      if (otpInfo.success) {
-        this.storageOtpTime(type, otpInfo);
-        this.startOtpSetting(type);
-        this.startOtpCount(type);
-      } else {
-        const errorMsg = OtpErrorCode[otpInfo.failCode] ? OtpErrorCode[otpInfo.failCode]:'OTP蝟餌絞�隤�';
-        ErrorMessageBox(errorMsg);
-      }
-    });
-  };
-
-  resentOtp(type: string) {
-    this.resetOtpSetting(type);
-    this.applyOtpVerification(type);
-  }
-
-  deleteOtpInfo(type: string) {
-    this.resetOtpSetting(type);
-    if (type === 'MOBILE') {
-      this.onPhoneVerifyStep = 'APPLY_OTP';
-      this.phoneNumber = '';
-      this.otpCode = '';
-    } else {
-      this.onEmailVerifyResendStatus = 'APPLY_OTP';
-      this.email = '';
-      this.emailOtpCode = '';
-    }
+  destroyed() {
     this.removeOtpTime();
+    clearInterval(this.otpInterval);
+    clearInterval(this.emailResendInterval);
+    clearInterval(this.autoRedirectInterval);
   }
 
+  //////////////////////////////////////////////////////////
+
+  //////////////////// ��
+  login() {
+    const login: LoginVerify = this.setLoginInfo();
+    this.removeOtpTime();
+    loginService.loginVerify(login).then(res => {
+      this.storageIdToken(res.id_token);
+      this.storageRole(Role.USER);
+      this.phoneSuccessConfirmVisable = true;
+      this.autoRedirect();
+      this.storagePhoneOrEmail(this.setRegisterInfo());
+    }).catch(error => {
+      this.checkHttpErrorStatus(error);
+    });
+  }
+
+  confirmApplySuccess(): void {
+    this.phoneSuccessConfirmVisable = false;
+    this.registerSuccessConfirmVisable = false;
+    this.redirect();
+  }
+
+  //////////////////// 閮餃��
   applyAccount(): void {
     if (this.applyAccount_onAction) {
       return ;
@@ -487,8 +475,8 @@
     this.applyAccount_onAction = true;
     const registerInfo = this.setRegisterInfo();
 
-    register(registerInfo).then(res => {
-      this.storageIdToken(res.data.id_token);
+    loginService.register(registerInfo).then(res => {
+      this.storageIdToken(res.id_token);
       this.storageRole(Role.USER);
       this.storagePhoneOrEmail(registerInfo);
       this.autoRedirect();
@@ -497,12 +485,6 @@
       this.applyAccount_onAction = false;
     });
   };
-
-  confirmApplySuccess(): void {
-    this.phoneSuccessConfirmVisable = false;
-    this.registerSuccessConfirmVisable = false;
-    this.redirect();
-  }
 
   private autoRedirect() {
     this.autoRedirectInterval = setInterval(() => {
@@ -518,120 +500,42 @@
   private redirect() {
     const backToPrevious = ['questionnaire', 'myConsultantList'];
     const find = backToPrevious.findIndex(item => this.previousPath.includes(item));
-    console.log(this.previousPath, find, 'redirect');
     find > -1 ? this.$router.go(-1) : this.$router.push('/');
   }
 
-  beforeRouteEnter (to, from, next) {
-      next(vm => {
-        console.log(from.path, 'beforeRouteEnter');
-        vm.previousPath = from.path;
-      })
+  detectContractReadStatus(event: any): void {
+    const scrollTop = Math.round(event.target.scrollTop);
+    const height = event.target.scrollHeight - event.target.clientHeight;
+    if (Math.floor(scrollTop/10) === (Math.floor(height/10))) {
+      this.isReadContract = true;
     }
+  };
 
-  login() {
-    const login: LoginVerify = this.setLoginInfo();
-    this.removeOtpTime();
-    loginVerify(login).then(res => {
-      this.storageIdToken(res.data.id_token);
-      this.storageRole(Role.USER);
-      this.phoneSuccessConfirmVisable = true;
-      this.autoRedirect();
-      this.storagePhoneOrEmail(this.setRegisterInfo());
-    }).catch(error => {
-      this.checkHttpErrorStatus(error);
-    });
-  }
-  private checkHttpErrorStatus(error:any):void{
-    switch (error.response.status) {
-        case 401:
-          const errorMsg = OtpErrorCode[error.response?.data?.detail] ? OtpErrorCode[error.response?.data?.detail]:'OTP蝟餌絞�隤�';
-          ErrorMessageBox(errorMsg);
-          break;
-        case 403:
-          this.registerDialogVisible = true;
-          setTimeout(() => {
-            const isScrollBarNeedless = this.contract.scrollHeight <= this.contract.clientHeight;
-            if (isScrollBarNeedless) {
-              this.isReadContract = true;
-            }
-          }, 1000);
-          break;
-        default:
-          ErrorMessageBox('',error);
-          break;
+  //////////////////// ���/��/��撽�Ⅳ
+
+  applyOtpVerification(type: string): void {
+    const isMobile = this.connectDevice === 'MOBILE';
+    const loginInfo: LoginRequest = {
+      loginType: isMobile ? 'SMS' : 'EMAIL',
+      account: isMobile ? this.phoneNumber : this.email,
+    }
+    loginService.sendOtp(loginInfo).then(otpInfo => {
+      if (otpInfo.success) {
+        this.storageOtpTime(type, otpInfo);
+        this.startOtpSetting(type);
+        this.startOtpCount(type);
+      } else {
+        const errorMsg = OtpErrorCode[otpInfo.failCode] ? OtpErrorCode[otpInfo.failCode]:'OTP蝟餌絞�隤�';
+        messageBoxService.showErrorMessage(errorMsg);
       }
-  }
-
-  destroyed() {
-    this.removeOtpTime();
-    clearInterval(this.otpInterval);
-    clearInterval(this.emailResendInterval);
-    clearInterval(this.autoRedirectInterval);
-  }
-
-  private phoneDiffTime(parseOtpTime: any) {
-    const diffSecs = this.calcDiffSecs(parseOtpTime.time);
-
-    if (diffSecs < this.otpCounterSec) {
-      this.otpResendCounter = diffSecs < 30 ? 30 - diffSecs : 0;
-        this.otpCounterSec -= diffSecs;
-        this.phoneNumber = parseOtpTime.phone;
-        this.onPhoneVerifyStep = 'INPUT_OTP';
-        this.phoneOtpInfo = this.setOtpInfo(parseOtpTime);
-        this.startOtpCount('MOBILE');
-    } else {
-      localStorage.removeItem('phoneOtpTime');
-    }
-  }
-
-  private emailDiffTime(parseOtpTime: any) {
-    const diffSecs = this.calcDiffSecs(parseOtpTime.time);
-
-    if (diffSecs < this.emailCounterSec) {
-      this.emailResendCounter =  diffSecs < 30 ? 30 - diffSecs : 0;
-      this.emailCounterSec -= diffSecs;
-      this.email = parseOtpTime.email;
-      this.onEmailVerifyResendStatus = 'CAN_RESEND';
-      this.emailOtpInfo = this.setOtpInfo(parseOtpTime);
-      this.startOtpCount('EMAIL');
-    } else {
-      localStorage.removeItem('emailOtpTime');
-    }
-  }
-
-  private calcDiffSecs(parseOtpTime) {
-    const currentTime = new Date().getTime();
-    const storageTime = new Date(parseOtpTime).getTime();
-    return Math.floor((currentTime - storageTime) / 1000);
-  }
-
-  private resetOtpSetting(type: string) {
-    if (type === 'MOBILE') {
-      clearInterval(this.otpInterval);
-      this.otpResendCounter = 30;
-      this.otpCounterSec = 900;
-    } else {
-      clearInterval(this.emailResendInterval);
-      this.emailResendCounter = 30;
-      this.emailCounterSec = 900;
-    }
-  }
-
-  private setOtpInfo(parseOtpTime) {
-    return {
-      indexKey: parseOtpTime.indexKey,
-      success: true,
-      failCode: '',
-      failReason: '',
-    }
-  }
+    });
+  };
 
   private storageOtpTime(type: string, otpInfo: OtpInfo) {
-    type === 'MOBILE' ? this.phoneOtpInfo = otpInfo : this.emailOtpInfo = otpInfo;
+    type === 'MOBILE' ? this.phoneOtpIndexKey = otpInfo.indexKey : this.emailOtpIndexKey = otpInfo.indexKey;
     const info = {...this.setRegisterInfo(), time: new Date()}
-    type === 'MOBILE' ? localStorage.setItem('phoneOtpTime',JSON.stringify(info))
-                      : localStorage.setItem('emailOtpTime',JSON.stringify(info));
+    const storageName = type === 'MOBILE' ? OtpStorageName.PHONE : OtpStorageName.EMAIL;
+    otpService.setOtpTimeToStorage(storageName, info);
   }
 
   private startOtpSetting(type: string) {
@@ -671,41 +575,128 @@
     }, 1000)
   }
 
+  resentOtp(type: string) {
+    this.resetOtpSetting(type);
+    this.applyOtpVerification(type);
+  }
+
+  deleteOtpInfo(type: string) {
+    this.resetOtpSetting(type);
+    if (type === 'MOBILE') {
+      this.onPhoneVerifyStep = 'APPLY_OTP';
+      this.phoneNumber = '';
+      this.otpCode = '';
+    } else {
+      this.onEmailVerifyResendStatus = 'APPLY_OTP';
+      this.email = '';
+      this.emailOtpCode = '';
+    }
+    this.removeOtpTime();
+  }
+
+  private resetOtpSetting(type: string) {
+    if (type === 'MOBILE') {
+      clearInterval(this.otpInterval);
+      this.otpResendCounter = 30;
+      this.otpCounterSec = 300;
+    } else {
+      clearInterval(this.emailResendInterval);
+      this.emailResendCounter = 30;
+      this.emailCounterSec = 300;
+    }
+  }
+
+  counterTime(counterSec) {
+    let min = Math.floor(counterSec / 60);
+    let sec = Math.floor(counterSec % 60);
+    return `${min < 10 ? '0' + min : min}:${sec < 10 ? '0' + sec : sec}`;
+  }
+
+  //////////////////////////////////////////////////////////////////
+
+  private checkHttpErrorStatus(error:any):void{
+    switch (error.response.status) {
+        case 401:
+          const errorMsg = OtpErrorCode[error.response?.data?.detail] ? OtpErrorCode[error.response?.data?.detail]:'OTP蝟餌絞�隤�';
+          messageBoxService.showErrorMessage(errorMsg);
+          break;
+        case 403:
+          this.registerDialogVisible = true;
+          setTimeout(() => {
+            const isScrollBarNeedless = this.contract.scrollHeight <= this.contract.clientHeight;
+            if (isScrollBarNeedless) {
+              this.isReadContract = true;
+            }
+          }, 1000);
+          break;
+        default:
+          messageBoxService.showErrorMessage('',error);
+          break;
+      }
+  }
+
+  private storagePhoneOrEmail(registerInfo:RegisterInfo):void{
+    const info = {...registerInfo, time: new Date()}
+  // storageUserInfo!: (userInfo: RegisterInfo) => void;
+    this.storageUserInfo(info);
+    // localStorage.setItem('userInfo',JSON.stringify(info));
+  }
+
+  private removeOtpTime() {
+    otpService.removeOtpTimeToStorage(OtpStorageName.PHONE);
+    otpService.removeOtpTimeToStorage(OtpStorageName.EMAIL);
+  }
+
+
+  private setLoginInfo() {
+    const isMobile = this.connectDevice === 'MOBILE'
+    return {
+      account: isMobile ? this.phoneNumber : this.email,
+      indexKey: isMobile ? this.phoneOtpIndexKey : this.emailOtpIndexKey,
+      otpCode: isMobile ? this.otpCode : this.emailOtpCode
+    }
+  }
+
   private setRegisterInfo(): RegisterInfo {
     return this.connectDevice === 'MOBILE'
       ? {
           phone: this.phoneNumber,
-          indexKey: this.phoneOtpInfo.indexKey,
+          indexKey: this.phoneOtpIndexKey,
           otpCode: this.otpCode,
           name: this.name,
           contactType: 'SMS'
         }
       : {
           email: this.email,
-          indexKey: this.emailOtpInfo.indexKey,
-          otpCode: this.otpCode,
+          indexKey: this.emailOtpIndexKey,
+          otpCode: this.emailOtpCode,
           name: this.name,
           contactType: 'EMAIL'
         }
   }
 
-  private storagePhoneOrEmail(registerInfo:RegisterInfo):void{
-    const info = {...registerInfo, time: new Date()}
-    localStorage.setItem('userInfo',JSON.stringify(info));
+  get isSubmitBtnDisabled(): boolean {
+    return this.connectDevice === 'MOBILE'
+      ? (!this.otpCode || !this.phoneNumber || !this.phoneValid || !this.otpCounterSec)
+      : (!this.emailOtpCode || !this.email || !this.emailValid || !this.emailCounterSec)
   }
 
-  private removeOtpTime() {
-    localStorage.removeItem('emailOtpTime');
-    localStorage.removeItem('phoneOtpTime');
+  get showPhoneOtpCodeField(): boolean {
+    return this.connectDevice === 'MOBILE' && this.onPhoneVerifyStep === 'INPUT_OTP';
+  };
+
+  get showEmailVerifyField(): boolean {
+    return this.connectDevice === 'EMAIL' && this.onEmailVerifyResendStatus === 'CAN_RESEND';
+  };
+
+  get phoneValid() {
+    const rule = /^09[0-9]{8}$/;
+    return this.phoneNumber ? rule.test(this.phoneNumber) : true;
   }
 
-  private setLoginInfo() {
-    const isMobile = this.connectDevice === 'MOBILE'
-    return {
-      account: isMobile ? this.phoneNumber : this.email,
-      indexKey: isMobile ? this.phoneOtpInfo.indexKey : this.emailOtpInfo.indexKey,
-      otpCode: isMobile ? this.otpCode : this.emailOtpCode
-    }
+  get emailValid() {
+    const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
+    return this.email ? rule.test(this.email) : true;
   }
 }
 </script>
@@ -743,10 +734,11 @@
   }
 
 .pam-register-dialog__contract {
-  $DEVICE_EXTRA_HEIGHT: 42px;
+  $DEVICE_EXTRA_HEIGHT: 80px;
   $ALIGN_PADDING: 60px;
-  $TOP_CONTENT_HEIGHT: 186px;
-  $BOTTOM_CONTENT_HEIGHT: 131px;
+  $TOP_CONTENT_HEIGHT: 211px;
+  $BOTTOM_CONTENT_HEIGHT: 141px;
+  // text-align:start;
   max-height: calc(100vh - $DEVICE_EXTRA_HEIGHT - $ALIGN_PADDING - $TOP_CONTENT_HEIGHT - $BOTTOM_CONTENT_HEIGHT);
   overflow-y: scroll;
   border-radius: 6px;
diff --git a/PAMapp/pages/myAppointmentList.vue b/PAMapp/pages/myAppointmentList.vue
index 103b62a..646cede 100644
--- a/PAMapp/pages/myAppointmentList.vue
+++ b/PAMapp/pages/myAppointmentList.vue
@@ -1,118 +1,203 @@
 <template>
     <div>
-        <div class="pam-myAppointment-banner"></div>
+      <div class="pam-myAppointment-banner"></div>
         <div class="pam-container">
-            <div class="pam-cus-tabs mb-30">
+            <div class="pam-cus-tabs mb-10">
                 <div
                     class="cus-tab-item"
                     :class="{'is-active': activeTabName === 'appointmentList'}"
-                    @click="tabClick('appointmentList')"
-                >摰X����
-                    <span class="p">({{appointmentList.length}})</span>
+                    @click="clickTab('appointmentList')"
+                >
+                  <span class="smTxt">��蝯�({{ appointmentItemSum }})</span>
                 </div>
                 <div
                     class="cus-tab-item"
                     :class="{'is-active': activeTabName === 'contactedList'}"
-                    @click="tabClick('contactedList')"
-                >撌脰蝯�
-                    <span class="p">({{contactedList.length}})</span>
+                    @click="clickTab('contactedList')"
+                >
+                  <span class="smTxt">蝝赤銝�({{ contactedItemSum }})</span>
+                </div>
+                <div
+                    class="cus-tab-item"
+                    :class="{'is-active': activeTabName === 'closedList'}"
+                    @click="clickTab('closedList')"
+                >
+                  <span class="smTxt">蝯��({{ closedItemSum }})</span>
                 </div>
             </div>
 
-            <NuxtChild></NuxtChild>
+            <NuxtChild keep-alive></NuxtChild>
+
         </div>
 
+        <!-- DIALOG -->
         <PopUpFrame
-             :isOpen.sync="showNewAppointmentNumber"
+             :isOpen.sync="isShowNewAppointmentHint"
         >
             <div class="text--center mdTxt">
-                <p class="mb-50">雿�� <span class="text--primary">{{newAppointmentNumber}}</span> �������</p>
+                <p class="mb-50">���� <span class="text--primary">{{ newAppointmentSum }}</span> �������</p>
                 <div class="text--center">
                     <el-button
                         type="primary"
-                        @click="showNewAppointmentNumber = false"
+                        @click="isShowNewAppointmentHint = false"
                     >������</el-button>
                 </div>
             </div>
         </PopUpFrame>
+
+      <PopUpFrame
+        :isOpen.sync="isShowRemindAppointmentDialog"
+      >
+          <div class="text--center mdTxt">
+              <p class="mb-50">���� <span class="text--primary">{{ pendingAppointmentSum }}</span> ������脰�蝜恬������</p>
+              <div class="text--center">
+                  <el-button
+                      type="primary"
+                      @click="isShowRemindAppointmentDialog = false"
+                  >������</el-button>
+              </div>
+          </div>
+      </PopUpFrame>
     </div>
 </template>
 
 <script lang="ts">
-import { Vue, Component, State, Action, Watch } from 'nuxt-property-decorator';
-import { allAppointmentsView, ClientInfo } from '~/assets/ts/api/appointment';
+import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
+
 import * as _ from 'lodash';
+
+import appointmentService from '~/shared/services/appointment.service';
+import { Appointment } from '~/shared/models/appointment.model';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+
+const localStorage = namespace('localStorage');
+const appointmentStore = namespace('appointment.store');
 
 @Component({
     layout: 'home',
-    middleware: 'myAppointmentMiddleware'
+    middleware: 'myAppointment'
 })
 export default class ClientReservedList extends Vue {
-    activeTabName = 'appointmentList';
-    appointmentList: ClientInfo[] = [];
-    contactedList: ClientInfo[] = [];
-    clients: ClientInfo[] = [];
-    newAppointmentNumber: number = 0;
-    showNewAppointmentNumber = false;
 
-    @State('myAppointmentList') myAppointmentList!: ClientInfo[];
-    @Action storeMyAppointmentList!: () => Promise<number>;
+    @appointmentStore.State('myAppointmentList')
+    myAppointmentList!: Appointment[];
+
+    @appointmentStore.Getter('newAppointmentSum')
+    newAppointmentSum!: number;
+
+    @appointmentStore.Getter('appointmentItemSum')
+    appointmentItemSum!: number;
+
+    @appointmentStore.Getter('contactedItemSum')
+    contactedItemSum!: number;
+
+    @appointmentStore.Getter('closedItemSum')
+    closedItemSum!: number;
+
+    @appointmentStore.Action
+    getMyAppointmentList!: () => Promise<Appointment[]>;
+
+    @localStorage.Mutation
+    storageClearAppointmentIdFromMsg!: () => void;
+
+    @localStorage.Getter
+    currentAppointmentIdFromMsg!: string;
+
+    contactStatus          = ContactStatus;
+
+    activeTabName                 = 'appointmentList';
+    isShowNewAppointmentHint      = false;
+    isShowRemindAppointmentDialog = false;
+    pendingAppointmentSum         = 0;
+
+    //////////////////////////////////////////////////////////////////////
 
     mounted() {
-     this.storeMyAppointmentList().then(newDataLength => {
-         this.newAppointmentNumber = newDataLength;
-         if (this.newAppointmentNumber > 0) {
-             this.showNewAppointmentNumber = true;
-             allAppointmentsView().then(res => res);
-         }
-    });
-
-     if (this.$route.name) {
-         this.activeTabName = this.$route.name.split('-')[1]
-     }
+      this.getMyAppointmentList();
+        appointmentService.getPendingAppointmentSum().then((pendingAppointmentSum) => {
+        this.pendingAppointmentSum = pendingAppointmentSum;
+        if (this.pendingAppointmentSum) {
+          this.isShowRemindAppointmentDialog = true;
+        }
+      });
     }
+
+    destroyed() {
+        this.storageClearAppointmentIdFromMsg();
+    }
+
+    //////////////////////////////////////////////////////////////////////
 
     @Watch('myAppointmentList')
-    onMyAppointmentListChange() {
-        this.contactedList = this.myAppointmentList
-            .filter(item => item.communicateStatus === 'contacted');
-
-        this.appointmentList = this.myAppointmentList
-            .filter(item => item.communicateStatus !== 'contacted');
+    onMyAppointmentListChange(): void {
+        if (this.currentAppointmentIdFromMsg) {
+            this.redirectAppointmentStatus();
+        }
     }
 
-    tabClick(path: string) {
-        this.activeTabName = path;
-        this.$router.push('/myAppointmentList/' + this.activeTabName)
-    }
-
-    get route(): string{
-        const routeName = this.$route.name;
-        return routeName ? routeName:'';
+    private redirectAppointmentStatus() {
+        const currentAppointmentIndex = this.myAppointmentList
+            .findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
+        if (currentAppointmentIndex > -1) {
+            const communicateStatus = this.myAppointmentList[currentAppointmentIndex].communicateStatus;
+            let pathName = 'closedList'
+            if (communicateStatus === this.contactStatus.RESERVED || communicateStatus === this.contactStatus.PICKED) {
+              pathName = 'contactedList';
+            }
+            if (communicateStatus === this.contactStatus.CONTACTED) {
+              pathName = 'contactedList';
+            }
+            this.$router.push(
+                {
+                    path: '/myAppointmentList/' + pathName,
+                    query: {appointmentId: this.currentAppointmentIdFromMsg}
+                }
+            );
+        }
     };
 
+    @Watch('newAppointmentSum')
+    newAppointmentSumChange(): void {
+      this.isShowNewAppointmentHint = this.newAppointmentSum > 0;
+    }
+
+    @Watch('$route', {immediate: true})
+    onRouteChange() {
+        const routeFullName = this.$route.name;
+        if (routeFullName) {
+            this.activeTabName = routeFullName.split('-')[1];
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    clickTab(path: string): void {
+      this.activeTabName = path;
+      this.$router.push(`/myAppointmentList/${this.activeTabName}`);
+    }
+
     get bannerClassName() {
-        return this.routeFormatBannerClass(this.route);
+      const routeName = this.$route.name || '';
+      return this.routeFormatBannerClass(routeName);
     };
 
     // format to {page}-banner or pam-no-banner tag
     private routeFormatBannerClass(route: string): string {
-        const needBannerTags = ['myAppointmentList-appointmentList', 'myAppointmentList-contactedList'];
+        const needBannerTags = ['myAppointmentList-appointmentList', 'myAppointmentList-closedList'];
         return _.includes(needBannerTags, route) ? route + '-banner' : 'pam-no-banner';
     };
-
 }
 </script>
 
 <style lang="scss" scoped>
     .pam-myAppointment-banner {
-        width: 100%;
-        height: 120px;
-        background-size: cover;
-        background-repeat: no-repeat;
+        width              : 100%;
+        height             : 120px;
+        background-size    : cover;
+        background-repeat  : no-repeat;
         background-position: center;
-        position: relative;
-        background-image: url('~/assets/images/myAppointmentList/agent_banner_mob.svg');
+        position           : relative;
+        background-image   : url('~/assets/images/myAppointmentList/agent_banner_mob.svg');
     }
 
     @media (min-width: 768px) {
@@ -131,4 +216,4 @@
             margin: 30px auto;
         }
     }
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/pages/myAppointmentList/appointmentList.vue b/PAMapp/pages/myAppointmentList/appointmentList.vue
index 8cee481..e623916 100644
--- a/PAMapp/pages/myAppointmentList/appointmentList.vue
+++ b/PAMapp/pages/myAppointmentList/appointmentList.vue
@@ -5,9 +5,9 @@
             placeholder="隢撓���摮�"
             class="mb-30 pam-clientReserved-input"
             v-model="keyWord"
-            @keyup.enter.native="search"
+            @input="search"
         >
-            <i slot="suffix" class="icon-search search cursor--pointer" @click="search"></i>
+            <i slot="suffix" class="icon-search search cursor--pointer"></i>
         </el-input>
 
         <ClientList
@@ -17,51 +17,86 @@
 
         <UiPagination
             :totalList="filterList"
+            :currentPage="currentPage"
             @changePage="changePage"
         ></UiPagination>
     </div>
 </template>
 
 <script lang="ts">
-import { Vue, Component, State, Watch } from 'nuxt-property-decorator';
-import { ClientInfo } from '~/assets/ts/api/appointment';
+import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
 
+import { Appointment } from '~/shared/models/appointment.model';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+
+
+const localStorage     = namespace('localStorage');
+const appointmentStore = namespace('appointment.store');
 @Component
 export default class ClientReservedList extends Vue {
-    @State('myAppointmentList') myAppointmentList!: ClientInfo[];
 
-    appointmentList: ClientInfo[] = [];
-    pageList: ClientInfo[] = [];
-    keyWord: string = '';
-    filterList: ClientInfo[] = [];
+    @appointmentStore.State('myAppointmentList')
+    myAppointmentList!: Appointment[];
 
-    @Watch('myAppointmentList')
-    onMyAppointmentListChange() {
-        const unreadList = this.myAppointmentList
-            .filter(item => item.communicateStatus !== 'contacted' && !item.consultantReadTime)
-            .sort((a, b) => a.appointmentDate > b.appointmentDate ? -1 : 1);
+    @localStorage.Getter
+    currentAppointmentIdFromMsg!: string;
 
-        const readList = this.myAppointmentList
-            .filter(item => item.communicateStatus !== 'contacted' && item.consultantReadTime)
-            .sort((a, b) => a.consultantReadTime > b.consultantReadTime ? -1 : 1)
+    @appointmentStore.Action
+    getAppointmentDetail!: () => Promise<Appointment>;
 
-        this.appointmentList = unreadList.concat(readList);
-        this.filterList = this.appointmentList;
-    }
+    appointmentList: Appointment[]  = [];
+    currentPage     : number        = 1;
+    filterList      : Appointment[] = [];
+    keyWord         : string        = '';
+    pageList        : Appointment[] = [];
+
+    contactStatus  = ContactStatus;
+
+    //////////////////////////////////////////////////////////////////////
 
     mounted() {
         this.onMyAppointmentListChange();
     }
 
-    changePage(pageList: ClientInfo[]) {
+    //////////////////////////////////////////////////////////////////////
+
+    @Watch('myAppointmentList')
+    onMyAppointmentListChange(): void {
+      this.appointmentList = this.myAppointmentList
+          .filter(item => item.communicateStatus === this.contactStatus.RESERVED)
+          .map((item) => ({ ...item, sortTime: new Date(item.lastModifiedDate)}))
+          .sort((preItem, nextItem) => +nextItem.sortTime - +preItem.sortTime);
+
+      this.filterList = this.appointmentList;
+
+      this.getCurrentPage();
+    }
+
+    private getCurrentPage() {
+        const currentIndex = this.filterList
+            .findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
+        const pageSize = 5;
+        if (currentIndex > -1) {
+            this.currentPage = Math.ceil((currentIndex + 1) / pageSize);
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    search(): void {
+        if (this.keyWord) {
+            this.filterList = this.appointmentList.filter(item => {
+                return item.name.match(this.keyWord) || item.requirement.match(this.keyWord);
+            })
+        } else {
+            this.filterList = this.appointmentList;
+        }
+
+    }
+
+    changePage(pageList: Appointment[]): void {
         this.pageList = pageList;
     }
 
-    search() {
-        this.filterList = this.appointmentList.filter(item => {
-            return item.name.match(this.keyWord) || item.requirement.match(this.keyWord)
-        })
-    }
-
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/pages/myAppointmentList/closedList.vue b/PAMapp/pages/myAppointmentList/closedList.vue
new file mode 100644
index 0000000..42a54e1
--- /dev/null
+++ b/PAMapp/pages/myAppointmentList/closedList.vue
@@ -0,0 +1,156 @@
+<template>
+    <div class="pam-closed-appointment-list">
+        <el-input
+            type="text"
+            placeholder="隢撓���摮�"
+            class="mb-10 pam-clientReserved-input"
+            v-model="keyWord"
+            @input="search"
+        >
+            <i
+                slot="suffix"
+                class="icon-search search cursor--pointer"
+            ></i>
+        </el-input>
+
+        <div class="closed-appointment__tag-filter mb-10">
+          <el-radio v-model="selectedClosedCategory" :label="'all'" border>��({{ itemSum }})</el-radio>
+          <el-radio v-model="selectedClosedCategory" :label="'done'" border>��漱({{ doneItemSum }})</el-radio>
+          <el-radio v-model="selectedClosedCategory" :label="'closed'" border>���漱({{ closedItemSum }})</el-radio>
+        </div>
+
+        <ClientList
+            :clients="pageList"
+            :title="'closedList'"
+        ></ClientList>
+
+        <UiPagination
+            :totalList="filterList"
+            :currentPage="currentPage"
+            @changePage="changePage"
+        ></UiPagination>
+    </div>
+</template>
+
+<script lang="ts">
+import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
+
+import { Appointment } from '~/shared/models/appointment.model';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+
+
+const appointmentStore = namespace('appointment.store');
+const localStorage     = namespace('localStorage');
+
+@Component
+export default class ClientClosedList extends Vue {
+
+    @appointmentStore.State('myAppointmentList')
+    myAppointmentList!: Appointment[];
+
+    @localStorage.Getter
+    currentAppointmentIdFromMsg!: string;
+
+    contactStatus= ContactStatus;
+
+    closedItemSum = 0;
+    currentPage   = 1;
+    doneItemSum   = 0;
+    itemSum       = 0;
+    keyWord       = '';
+
+    closedList: Appointment[] = [];
+    filterList   : Appointment[] = [];
+    pageList     : Appointment[] = [];
+    selectedClosedCategory: 'all' | 'done' | 'closed' = 'all';
+
+    //////////////////////////////////////////////////////////////////////
+
+    mounted() {
+        this.onMyAppointmentListChange();
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    @Watch('myAppointmentList')
+    onMyAppointmentListChange() {
+        this.closedList = (this.myAppointmentList || [])
+            .filter(item => item.communicateStatus === this.contactStatus.DONE || item.communicateStatus === this.contactStatus.CLOSE || item.communicateStatus === this.contactStatus.CANCEL)
+            .map((item) => ({...item, sortTime: new Date(item.lastModifiedDate)}))
+            .sort((prevItem, nextItem) => +nextItem.sortTime - +prevItem.sortTime);
+        this.filterList = this.closedList;
+        this.itemSum = this.closedList.length;
+        this.doneItemSum = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.DONE).length;
+        this.closedItemSum = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.CLOSE).length;
+        this.getCurrentPage();
+    }
+
+    private getCurrentPage() {
+        const currentIndex = this.filterList.findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
+        const pageSize = 5;
+        if (currentIndex > -1) {
+            this.currentPage = Math.ceil((currentIndex + 1) / pageSize);
+        }
+    }
+
+    @Watch('selectedClosedCategory')
+    onSelectedClosedCategoryChanges() {
+      this.search();
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    search(): void {
+      if (this.selectedClosedCategory === this.contactStatus.DONE) {
+        this.filterList = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.DONE);
+      } else if (this.selectedClosedCategory === this.contactStatus.CLOSE) {
+        this.filterList = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.CLOSE);
+      } else {
+        this.filterList = this.closedList;
+      }
+
+      if (this.keyWord) {
+        this.filterList = this.filterList.filter(item => {
+            return item?.name?.match(this.keyWord) || item?.requirement?.match(this.keyWord)
+        })
+      }
+
+    }
+
+    changePage(pageList: Appointment[]): void {
+        this.pageList = pageList;
+    }
+
+}
+</script>
+
+<style lang="scss">
+.pam-closed-appointment-list {
+  .closed-appointment__tag-filter {
+    display: flex;
+    .el-radio {
+      border-color: $LIGHT_GREY;
+      border-radius: 30px;
+      border-width: 1px;
+      font-size   : 16px;
+      margin-left : 0 !important;
+      margin-right: 10px;
+      padding     : 10px;
+      @extend .fix-chrome-click--issue;
+      &.is-checked {
+        background-color: $CORAL;
+        .el-radio__label {
+          color  : $PRIMARY_WHITE !important;
+        }
+      }
+      .el-radio__input {
+        display: none;
+      }
+      .el-radio__label {
+        color  : $PRIMARY_BLACK !important;
+        padding: 0px !important;
+      }
+    }
+  }
+}
+</style>
diff --git a/PAMapp/pages/myAppointmentList/contactedList.vue b/PAMapp/pages/myAppointmentList/contactedList.vue
index 15954b7..5be7e6f 100644
--- a/PAMapp/pages/myAppointmentList/contactedList.vue
+++ b/PAMapp/pages/myAppointmentList/contactedList.vue
@@ -5,60 +5,145 @@
             placeholder="隢撓���摮�"
             class="mb-30 pam-clientReserved-input"
             v-model="keyWord"
-            @keyup.enter.native="search"
+            @input="search"
         >
             <i
                 slot="suffix"
                 class="icon-search search cursor--pointer"
-                @click="search"
             ></i>
         </el-input>
+
+        <div class="mb-10 sort-indicator-container">
+          <a class="sort-indicator cursor--pointer" @click="changeSortType">
+            {{ this.sortType === 'DESC' ? '�->���' : '���->�' }}
+            <i v-if="isSortType" class="icon-sort-add"></i>
+            <i v-else class="icon-sort-decrease"></i>
+          </a>
+        </div>
 
         <ClientList
             :clients="pageList"
             :title="'contactedList'"
+            class="mt-10"
         ></ClientList>
 
         <UiPagination
+            v-if="togglePagination"
             :totalList="filterList"
+            :currentPage="currentPage"
             @changePage="changePage"
         ></UiPagination>
     </div>
 </template>
 
 <script lang="ts">
-import { Vue, Component, Watch, State } from 'nuxt-property-decorator';
-import { ClientInfo } from '~/assets/ts/api/appointment';
+import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
+
+import { Appointment } from '~/shared/models/appointment.model';
+
+
+const appointmentStore = namespace('appointment.store');
+const localStorage     = namespace('localStorage');
 
 @Component
 export default class ClientContactedList extends Vue {
-    @State('myAppointmentList') myAppointmentList!: ClientInfo[];
 
-    contactedList: ClientInfo[] = [];
-    pageList: ClientInfo[] = [];
-    keyWord: string = '';
-    filterList: ClientInfo[] = [];
+    @appointmentStore.State('myAppointmentList')
+    myAppointmentList!: Appointment[];
 
-    @Watch('myAppointmentList')
-    onMyAppointmentListChange() {
-        this.contactedList = (this.myAppointmentList || [])
-            .filter(item => item.communicateStatus === 'contacted')
-            .sort((a, b) => a.contactTime > b.contactTime ? -1 : 1);
-        this.filterList = this.contactedList;
-    }
+    @localStorage.Getter
+    currentAppointmentIdFromMsg!: string;
+
+    contactedList   : Appointment[]  = [];
+    currentPage      : number        = 1;
+    filterList       : Appointment[] = [];
+    keyWord          : string        = '';
+    pageList         : Appointment[] = [];
+    sortType        : 'ASC' | 'DESC' = 'DESC';
+    togglePagination: boolean        = true;
+
+    //////////////////////////////////////////////////////////////////////
 
     mounted() {
         this.onMyAppointmentListChange();
     }
 
-    changePage(pageList: ClientInfo[]) {
+    //////////////////////////////////////////////////////////////////////
+
+    @Watch('myAppointmentList')
+    onMyAppointmentListChange() {
+      this.setContactedList();
+    }
+
+    @Watch('sortType')
+    onSortTypeChange() {
+      this.togglePagination = false;
+      setTimeout(() => {
+      this.togglePagination = true;
+        this.currentPage = 1;
+        this.setContactedList();
+      }, 0)
+    }
+
+    private setContactedList(): void {
+        this.contactedList = (this.myAppointmentList || [])
+            .filter(item => item.communicateStatus === 'contacted')
+            .map((item) => ({...item, sortTime: new Date(item.lastModifiedDate)}))
+            .sort((prevItem, nextItem) => {
+              return this.sortType === 'DESC' ? +nextItem.sortTime - +prevItem.sortTime : +prevItem.sortTime - +nextItem.sortTime
+            });
+        this.filterList = this.contactedList;
+
+        this.getCurrentPage();
+    }
+
+    private getCurrentPage(): void {
+        const currentIndex = this.filterList.findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
+        const pageSize = 5;
+        if (currentIndex > -1) {
+            this.currentPage = Math.ceil((currentIndex + 1) / pageSize);
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    search(): void {
+        if (this.keyWord) {
+          this.filterList = this.contactedList.filter(item => {
+              return item?.name?.match(this.keyWord) || item?.requirement?.match(this.keyWord)
+          })
+        } else {
+          this.filterList = this.contactedList;
+        }
+    }
+
+    changePage(pageList: Appointment[]): void {
         this.pageList = pageList;
     }
 
-    search() {
-        this.filterList = this.contactedList.filter(item => {
-            return item.name.match(this.keyWord) || item.requirement.match(this.keyWord)
-        })
+    changeSortType(): void {
+      if (this.sortType === 'DESC') {
+        this.sortType = 'ASC';
+      } else {
+        this.sortType = 'DESC';
+      }
     }
+
+    get isSortType () :boolean {
+      return this.sortType === 'DESC';
+    }
+
 }
-</script>
\ No newline at end of file
+</script>
+<style lang="scss" scoped>
+.sort-indicator-container{
+  margin-bottom: 20px;
+}
+.sort-indicator{
+  border-radius:30px;
+  border: 1px solid #D0D0CE;
+  background-color:#fff;
+  padding: 10px 20px;
+  color: #68737A;
+}
+</style>
diff --git a/PAMapp/pages/myConsultantList.vue b/PAMapp/pages/myConsultantList.vue
index 25fea68..33caf53 100644
--- a/PAMapp/pages/myConsultantList.vue
+++ b/PAMapp/pages/myConsultantList.vue
@@ -4,14 +4,14 @@
             <div
                 class="cus-tab-item"
                 :class="{'is-active': activeTabName === 'consultantList'}"
-                @click="tabClick('consultantList')"
+                @click="clickTab('consultantList')"
             >憿批��
                 <span class="p">({{consultantList.length}})</span>
             </div>
             <div
                 class="cus-tab-item"
                 :class="{'is-active': activeTabName === 'contactedList'}"
-                @click="tabClick('contactedList')"
+                @click="clickTab('contactedList')"
             >撌脰蝯�
                 <span class="p">({{contactedList.length}})</span>
             </div>
@@ -21,30 +21,33 @@
             :contactedList="contactedList"
             :consultantList="consultantList"
         ></NuxtChild>
+
     </div>
 </template>
 
 <script lang='ts'>
 import { Vue, Component, Watch, State, Action } from 'nuxt-property-decorator';
-import { Consultant } from '~/assets/ts/models/consultant.model';
+
+import authService from '~/shared/services/auth.service';
+import { Consultant, ConsultantWithAppointmentId } from '~/shared/models/consultant.model';
 
 @Component
 export default class myConsultantList extends Vue {
-    activeTabName = 'consultantList';
-    agents: Consultant[] = [];
-    contactedList: Consultant[] = [];
-    consultantList: Consultant[] = [];
 
-    @State('myConsultantList') myConsultantList!: Consultant[];
-    @Action storeConsultantList!: any;
+    @State('myConsultantList')
+    myConsultantList!: Consultant[];
 
-    @Watch('myConsultantList')
-    onMyConsultantListChange() {
-        this.filterContactedList();
-    }
-    
+    @Action
+    storeConsultantList!: any;
+
+    activeTabName : string                        = 'consultantList';
+    consultantList: Consultant[]                  = [];
+    contactedList : ConsultantWithAppointmentId[] = [];
+
+    //////////////////////////////////////////////////////////////////////
+
     beforeRouteEnter(to: any, from: any, next: any) {
-      next(vm => {
+      next((vm: any) => {
         if (to.name === 'myConsultantList') {
             vm.$router.push('myConsultantList/consultantList');
           return;
@@ -53,29 +56,62 @@
     }
 
     mounted() {
-        this.storeConsultantList();
+      this.storeConsultantList();
 
-        if (this.$route.name) {
-         this.activeTabName = this.$route.name.split('-')[1]
-        }
+      if (this.$route.name) {
+        this.activeTabName = this.$route.name.split('-')[1]
+      }
     }
 
-    tabClick(path: string) {
+    //////////////////////////////////////////////////////////////////////
+
+    @Watch('myConsultantList')
+    onMyConsultantListChange() {
+        this.setList();
+    }
+
+    private setList() {
+    // reset contacted list
+      this.contactedList = [];
+
+    // format consultant list
+      this.consultantList = (this.myConsultantList || [])
+        .filter(item => item.contactStatus !== 'contacted')
+        .map((item) => ({ ...item, formatDate: new Date(item.updateTime || item.createTime)}))
+        .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate );
+
+      if (authService.isUserLogin()) {
+        this.myConsultantList.filter((consultant) => consultant.appointments!.length)
+          .forEach((consultant) => {
+            consultant.appointments!.forEach((appointment) => {
+              const consultantWithAppointmentId: ConsultantWithAppointmentId = {
+                ...consultant,
+                appointmentId: appointment.id,
+                appointmentDate: appointment.appointmentDate,
+                appointmentScore: appointment.satisfactionScore,
+                appointmentStatus: appointment.communicateStatus,
+                appointmentLastModifiedDate: appointment.lastModifiedDate
+              };
+              this.contactedList.push(consultantWithAppointmentId);
+            })
+          });
+
+        this.contactedList = this.contactedList
+          .filter((appointment) => appointment['appointmentStatus'] !== 'reserved')
+          .map((appointment) => ({ ...appointment, sortTime: new Date(appointment.appointmentLastModifiedDate)}))
+          .sort((preAppointment, nextAppointment) => +nextAppointment.sortTime - +preAppointment.sortTime);
+      }
+
+    }
+
+    //////////////////////////////////////////////////////////////////////
+
+    clickTab(path: string) {
         this.activeTabName = path;
         this.$router.push('/myConsultantList/' + this.activeTabName)
     }
 
 
-    filterContactedList() {
-        this.consultantList = (this.myConsultantList || [])
-                .filter(item => item.contactStatus !== 'contacted')
-                .map((item) => ({ ...item, formatDate: new Date(item.updateTime)}))
-                .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate );
-        this.contactedList = (this.myConsultantList || [])
-                .filter(item => item.contactStatus === 'contacted')
-                .map((item) => ({ ...item, formDate: new Date(item.updateTime)}))
-                .sort((preItem, nextItem) => +nextItem.formDate - +preItem.formDate);
-    }
-
 }
-</script>
\ No newline at end of file
+</script>
+
diff --git a/PAMapp/pages/myConsultantList/consultantList.vue b/PAMapp/pages/myConsultantList/consultantList.vue
index 356baeb..00dc3e7 100644
--- a/PAMapp/pages/myConsultantList/consultantList.vue
+++ b/PAMapp/pages/myConsultantList/consultantList.vue
@@ -2,6 +2,7 @@
     <div>
         <ConsultantList
             :agents="pageList"
+            :title="'consultantList'"
         ></ConsultantList>
 
         <UiPagination
@@ -13,17 +14,21 @@
 
 <script lang="ts">
 import { Vue, Component, Prop } from 'nuxt-property-decorator';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-
+import { Consultant } from '~/shared/models/consultant.model';
 
 @Component
 export default class ConsultantPage extends Vue {
-    @Prop() consultantList!: Consultant[];
+
+    @Prop()
+    consultantList!: Consultant[];
+
     pageList: Consultant[] = [];
+
+    //////////////////////////////////////////////////////////////////////
 
     changePage(pageList: Consultant[]) {
         this.pageList = pageList;
     }
 
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/pages/myConsultantList/contactedList.vue b/PAMapp/pages/myConsultantList/contactedList.vue
index a9d3d72..4f8ace8 100644
--- a/PAMapp/pages/myConsultantList/contactedList.vue
+++ b/PAMapp/pages/myConsultantList/contactedList.vue
@@ -2,6 +2,7 @@
     <div>
         <ConsultantList
             :agents="pageList"
+            :title="'contactedList'"
         ></ConsultantList>
 
         <UiPagination
@@ -13,16 +14,20 @@
 
 <script lang="ts">
 import { Vue, Component, Prop } from 'nuxt-property-decorator' ;
-import { Consultant } from '~/assets/ts/models/consultant.model';
-
+import { Consultant } from '~/shared/models/consultant.model';
 
 @Component
 export default class ContactedList extends Vue {
-    @Prop() contactedList!: Consultant[];
+
+    @Prop()
+    contactedList!: Consultant[];
+
     pageList: Consultant[] = [];
+
+    //////////////////////////////////////////////////////////////////////
 
     changePage(pageList: Consultant[]) {
         this.pageList = pageList;
     }
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/PAMapp/pages/notification/index.vue b/PAMapp/pages/notification/index.vue
index 6d66b10..c6c9ac9 100644
--- a/PAMapp/pages/notification/index.vue
+++ b/PAMapp/pages/notification/index.vue
@@ -1,5 +1,124 @@
 <template>
-    <div>���
-        <el-button @click="$router.push('/notification/detail')">�蝝啁�</el-button>
+    <div>
+        <div
+            v-if="isUserLogin && unReviewLogList.length"
+            class="satisfaction-banner my-10 cursor--pointer"
+            @click="$router.push('/satisfactionList')"
+        >
+        </div>
+        <el-row
+            v-for="(item, index) in notificationList"
+            :key="index"
+            type="flex"
+            justify="space-between"
+            align="middle"
+            class="notification-card"
+        >
+            <el-col class="unRead" :span="3" v-if="!item.readDate"></el-col>
+            <el-col :span="18">
+                <p class="text">{{item.content}}</p>
+            </el-col>
+            <el-col :span="3" class="notification-period text--right">
+                <div>
+                    <UiDateFormat
+                        class="date"
+                        :date="item.createdDate"
+                        onlyShowSection="DAY" />
+                </div>
+                <div>
+                    <UiDateFormat
+                        class="time"
+                        :date="item.createdDate"
+                        onlyShowSection="TIME" />
+                </div>
+
+            </el-col>
+        </el-row>
     </div>
-</template>
\ No newline at end of file
+</template>
+
+<script lang="ts">
+import { Component, State, Vue } from "nuxt-property-decorator";
+import { AppointmentLog } from "~/shared/models/appointment.model";
+import { NotificationList } from "~/shared/models/reviews.model";
+import authService from "~/shared/services/auth.service";
+import reviewsService from "~/shared/services/reviews.service";
+
+@Component
+export default class Notification extends Vue {
+
+    @State
+    unReviewLogList!: AppointmentLog[];
+
+    @State
+    notificationList!: NotificationList[];
+
+    isUserLogin = false;
+
+    ////////////////////////////////////////////////////////////
+
+    mounted() {
+        this.isUserLogin = authService.isUserLogin();
+        reviewsService.readAllMyNotification().then(res => res);
+    }
+
+}
+</script>
+
+<style lang="scss" scoped>
+    .satisfaction-banner {
+        width: 100%;
+        height: 60px;
+        background-image: url('~/assets/images/satisfaction/satisfactionBtn_s_mob.svg');
+        background-repeat: no-repeat;
+        background-size: cover;
+        background-position: center;
+        border-radius: 10px;
+
+        .satisfaction-text {
+            @extend .mdTxt;
+            @extend .text--PRIMARY_WHITE;
+            line-height: 60px;
+        }
+
+        @include desktop {
+            height: 110px;
+            background-image: url('~/assets/images/satisfaction/satisfactionBtn_s_web.svg');
+
+            .satisfaction-text {
+                font-size: 24px;
+                line-height: 110px;
+            }
+        }
+    }
+
+    .notification-card {
+        padding: 10px;
+        border-bottom: solid 1px #CCCCCC;
+
+        .unRead {
+            width: 10px;
+            height: 10px;
+            border-radius: 50px;
+            background-color: $PRIMARY_RED;
+        }
+
+        .notification-period {
+            color: #707070;
+            .date {
+                font-size: 10px;
+                line-height: 12px;
+            }
+            .time {
+                font-size: 12px;
+                line-height: 14px;
+            }
+        }
+
+    }
+
+    .satisfaction-icon {
+        font-size: 24px;
+        @extend .cursor--pointer;
+    }
+</style>
diff --git a/PAMapp/pages/questionnaire/_agentNo.vue b/PAMapp/pages/questionnaire/_agentNo.vue
index 402e190..213a636 100644
--- a/PAMapp/pages/questionnaire/_agentNo.vue
+++ b/PAMapp/pages/questionnaire/_agentNo.vue
@@ -1,12 +1,12 @@
 <template>
-  <div class="ques-page--reset" v-if="isLogin">
+  <div class="ques-page--reset" v-if="isUserLogin">
     <div class="ques-header">
         <div class="ques-header__mob-banner"></div>
         <div
           class="ques-header__info"
           v-if="myRequest.contactType==='phone'">
           <div class="text--middle">
-              <div class="mdTxt">雿���蝜急撘�</div>
+              <div class="mdTxt">�����蝜急撘�</div>
               <div class="mt-10">
                   <span>�����</span>
                   <span>{{myRequest.phone}}</span>
@@ -16,32 +16,36 @@
               <div class="datepicker required">
                   <span class="mdTxt">�����蝯∠�靘踵���</span>
                   <PhoneContactTimePicker
-                  :scheduleList.sync="myRequest.hopeContactTime"/>
+                  :scheduleList="myRequest.hopeContactTime"/>
               </div>
           </div>
           <div class="mt-30">
               <div class="mdTxt">�隞��蝜急撘�</div>
               <div class="ques-header__input-block">
                   <span>Email嚗�</span>
-                  <input class="ques-header__input"
+                  <input class="ques-header__input  break"
+                    :class="{ 'is-invalid': !emailValid}"
                     placeholder="隢撓�"
                     v-model="myRequest.email">
+              </div>
+              <div class="error mt-5 mb-5" style="margin-left:65px">
+                  <span v-show="!emailValid">Email�撘�炊</span>
               </div>
           </div>
         </div>
         <div class="ques-header__info" v-else>
           <div class="text--middle">
-              <div class="mdTxt">雿���蝜急撘�</div>
+              <div class="mdTxt">�����蝜急撘�</div>
               <div class="mt-10 ques-header__input-block">
                   <span>Email嚗�</span>
-                  <span>{{myRequest.email}}</span>
+                  <span class=" break">{{myRequest.email}}</span>
               </div>
           </div>
           <div class="mt-30">
               <div class="mdTxt">�隞��蝜急撘�</div>
               <div class="ques-header__input-block">
-                  <span>�����</span>
-                  <input class="ques-header__input"
+                  <span>���� : </span>
+                  <input class="ques-header__input ml-4"
                     :class="{'is-invalid': !phoneValid}"
                     placeholder="隢撓�"
                     maxlength="10"
@@ -55,7 +59,7 @@
               <div class="datepicker">
                   <span class="mdTxt">�����蝯∠�靘踵���</span>
                   <PhoneContactTimePicker
-                  :scheduleList.sync="myRequest.hopeContactTime"/>
+                  :scheduleList="myRequest.hopeContactTime"/>
               </div>
           </div>
         </div>
@@ -80,7 +84,7 @@
           :options="genderOptions" />
       </div>
       <div class="pam-paragraph">
-        <div class="mdTxt">撟湧翩</div>
+        <div class="mdTxt">���僑朣�</div>
         <SingleSelectBtn class="mt-10"
           :singleSelected.sync="myRequest.age"
           :options="ageRangeOptions" />
@@ -115,18 +119,30 @@
     </PopUpFrame>
 
     <PopUpFrame :isOpen.sync="sendReserve" @update:isOpen="closeReservePopUp">
-        <div class="text--middle  mt-30 sendReserve-txt">�����������憿批���</div>
-        <div class="text--middle  sendReserve-txt">�����蝯∴��</div>
+        <div class="mdTxt mt-30 sendReserve-txt">�������</div>
+        <div class="mdTxt sendReserve-txt mb-30">�����“�������蝯∴��</div>
+        <div class="pam-app-review mb-10">
+          <div class="mdTxt mb-10">撠
+                <span class="mdTxt text--primary text--bold ">������</span>
+                撟喳��擃����
+            </div>
+          <div class="mdTxt">�蝯虫�嗾憿��嚗�</div>
+        </div>
+        <el-rate v-model="score" class="pam-satisfaction-rate fix-chrome-click--issue"></el-rate>
         <div class="text--center mdTxt">
+          <el-button @click="closeReservePopUp">����</el-button>
           <el-button type="primary"
-            @click="closeReservePopUp">
-            ������
+            @click="reviewPlatform">
+            �
           </el-button>
         </div>
     </PopUpFrame>
 
     <PopUpFrame :isOpen.sync="isEditPopup">
-      <div class="text--middle mt-30 sendReserve-txt">��蝜潛�楊頛舫��嚗�</div>
+      <div class="text--middle text--center mb-10">撌脫
+        <span class="bold">{{appointmentTime | formatDate}}</span>
+      �脰�����</div>
+      <div class="text--middle text--center mb-30">��蝜潛�楊頛荔��</div>
       <div class="text--center mdTxt">
         <el-button @click="$router.go(-1)">餈��</el-button>
         <el-button @click="isEditPopup = false" type="primary">蝺刻摩</el-button>
@@ -137,20 +153,42 @@
 
 <script lang="ts">
 import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator';
-import { addFavoriteConsultant, appointmentDemand, AppointmentParams, AppointmentRequests ,editAppointment,RegisterInfo } from '~/assets/ts/api/consultant';
-import { getRequestQuestionFromStorage, getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/assets/ts/storageRequests';
+import { getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/shared/storageRequests';
 import _ from 'lodash';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-import { ContactType } from '~/assets/ts/models/enum/ContactType';
-import { Gender } from '~/assets/ts/models/enum/Gender';
-import { Role } from '~/assets/ts/models/enum/Role';
+
+import accountSettingService from '~/shared/services/account-setting.service';
+import appointmentService from '~/shared/services/appointment.service';
+import authService from '~/shared/services/auth.service';
+import queryConsultantService from '~/shared/services/query-consultant.service';
+import reviewsService from '~/shared/services/reviews.service';
+import { Consultant } from '~/shared/models/consultant.model';
+import { ContactType } from '~/shared/models/enum/ContactType';
+import { Gender } from '~/shared/models/enum/Gender';
+import { RegisterInfo } from '~/shared/models/registerInfo';
+import { AppointmentParams, AppointmentRequests } from '~/shared/models/appointment.model';
+import { UserSetting } from '~/shared/models/account.model';
+import { SatisfactionType } from '~/shared/models/enum/satisfaction-type';
+import { UserReviewParams } from '~/shared/models/reviews.model';
 
   const roleStorage = namespace('localStorage');
   @Component
   export default class Questionnaire extends Vue {
-    @State('myConsultantList') myConsultantList!: Consultant[];
-    @Action storeConsultantList!: () => Promise<number>;
-    @roleStorage.Getter currentRole!:string;
+    @State('myConsultantList')
+    myConsultantList!: Consultant[];
+
+    @Action
+    storeConsultantList!: () => Promise<number>;
+
+    @roleStorage.Getter
+    isUserLogin!:boolean;
+
+    @roleStorage.State
+    recommendConsultantItem!:string;
+
+    @roleStorage.Mutation
+    storageUserInfo!: (params: RegisterInfo) => void;
+
+    score = 0;
 
     genderOptions=[
       {
@@ -244,13 +282,14 @@
                   },
                   {
                       title:'����',
-                      content:'���� ���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�'
+                      content:'���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�'
                   }
     ];
 
     myRequest: AppointmentRequests = {
-      phone          : this.userInfo?.phone ? this.userInfo.phone                               : '',
-      email          : this.userInfo?.email ? this.userInfo.email                               : '',
+      name           : '',
+      phone          : '',
+      email          : '',
       contactType    : _.isEqual(this.userInfo?.contactType,ContactType.SMS) ? ContactType.PHONE: ContactType.EMAIL,
       gender         : '',
       age            : '',
@@ -269,33 +308,35 @@
     isEditBtn = false;
 
     appointmentId = 0;
+    appointmentTime = '';
+
+    ////////////////////////////////////////////////////////////////////////////
 
     beforeRouteEnter(to: any, from: any, next: any) {
       next(vm => {
-        if (from.name === 'login' && !vm.isLogin) {
+        const isUserLogin = authService.isUserLogin();
+        if (from.name === 'login' && !isUserLogin) {
           vm.$router.go(-1);
           return;
         }
 
-        if (!vm.isLogin) {
+        if (!isUserLogin) {
           vm.$router.push('/login');
         }
       })
     }
 
-    async fetch() {
-      if (this.isLogin) {
-        await this.storeConsultantList();
-      };
-    }
-
     mounted(): void {
+      if (authService.isUserLogin()) {
+        this.storeConsultantList();
+      };
       this.setMyRequest();
     }
 
     private setMyRequest(): void {
       const storageMyRequest = getRequestsFromStorage();
-      const storageMyQuestion = getRequestQuestionFromStorage();
+      const storageMyRequirement = this.recommendConsultantItem ? JSON.parse(this.recommendConsultantItem).requirements:[];
+      const contactTypePromise = accountSettingService.getUserAccountSetting();
 
       if (storageMyRequest) {
         this.myRequest = {
@@ -309,48 +350,115 @@
         };
       }
 
-      if (storageMyQuestion) {
+      if (storageMyRequirement) {
         this.myRequest = {
           ...this.myRequest,
-          requirement: storageMyQuestion
+          requirement: storageMyRequirement
         }
         removeRequestQuestionFromStorage();
       }
+
+      contactTypePromise.then((contactTypeDetail) => {
+            this.myRequest = {
+              ...this.myRequest,
+              ...contactTypeDetail
+            }
+      })
+
     }
 
-    get phoneValid(): boolean {
-      const rule = /^09[0-9]{8}$/;
-      return this.myRequest.phone
-            ? rule.test(this.myRequest.phone) && _.isEqual(this.myRequest.phone.length,10)
-            : true;
+    ////////////////////////////////////////////////////////////////////////////
+
+    @Watch('myConsultantList')
+    onMyConsultantListChange() {
+      if (authService.isUserLogin() && this.myConsultantList.length > 0) {
+          const editAppointment = this.getLatestReserved(this.$route.params.agentNo);
+
+          if (editAppointment && editAppointment.agentNo) {
+            this.myRequest = JSON.parse(JSON.stringify(editAppointment));
+            if (!this.$route.query || this.$route.query.edit !== 'true') {
+              this.isEditPopup = true;
+            }
+            this.isEditBtn = true;
+          }
+      }
     }
 
-    get userInfo(): RegisterInfo {
-      const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!);
-      return initUserInfo;
+    private getLatestReserved(agentNo) {
+      const agentInfo = this.myConsultantList.filter(item => item.agentNo === agentNo);
+      const appointmentInfo = agentInfo.length > 0 && agentInfo[0].appointments
+        ? agentInfo[0].appointments!
+              .filter((appointment) => appointment.communicateStatus === 'reserved')
+              .map((reversedAppointment) => (
+                { ...reversedAppointment,
+                  sortDate: new Date(reversedAppointment.appointmentDate)
+                }))
+              .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0]
+        : null;
+      return this.getReservedData(appointmentInfo);
     }
 
-    get isDisabledSubmitBtn(): boolean {
-           return _.includes(this.myRequest.contactType,ContactType.PHONE)
-      ? !this.isHopeContactTimeDone()
-      : !this.phoneValid;
+    private getReservedData(appointmentInfo) {
+      if (appointmentInfo) {
+        const hopeContactTime = appointmentInfo!.hopeContactTime.split("'")
+              .filter(item => item && item !== ',');
+        this.getAppointmentId(appointmentInfo);
+
+        return {
+            ...appointmentInfo,
+            hopeContactTime: hopeContactTime.map(item => {
+                const info = item.split('��');
+                return {
+                    selectWeekOptions: info[0].split(','),
+                    selectTimesOptions: info[1].split(',')
+                }
+            }),
+            requirement: appointmentInfo.requirement.split(',')
+          }
+      } else {
+        return null;
+      }
     }
 
-    get isLogin() {
-      return this.currentRole === Role.USER;
+    private getAppointmentId(appointmentInfo) {
+      this.appointmentId = appointmentInfo.id;
+      this.appointmentTime = appointmentInfo.lastModifiedDate
+                  ? appointmentInfo.lastModifiedDate
+                  : appointmentInfo.appointmentDate;
     }
 
-    private isHopeContactTimeDone():boolean{
-      return this.myRequest.hopeContactTime[0]?.selectWeekOptions.length >0 && this.myRequest.hopeContactTime[0]?.selectTimesOptions.length >0;
-    }
+    ////////////////////////////////////////////////////////////////////////////
 
     sentDemand() {
       if (this.isEditBtn) {
-        this.sentEditAppointmentDemand();
+        this.editAppointmentDemand();
       } else {
-        addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand());
+        queryConsultantService.addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand());
+      }
+       const editSettingInfo: UserSetting = {
+          name: this.myRequest.name,
+          phone: this.myRequest.phone,
+          email: this.myRequest.email,
       }
 
+      accountSettingService.updateAccountSetting(editSettingInfo).then((_) => {
+          this.storageUserInfo(this.userInfo);
+      });
+    }
+
+    private editAppointmentDemand() {
+      const info = {
+          ...this.myRequest,
+          requirement: _.map(this.myRequest.requirement,o=>o).toString(),
+          hopeContactTime: this.myRequest.phone && this.phoneValid ? this.getHopeContactTime() :'',
+          id: this.appointmentId,
+          otherRequirement: null
+        }
+      appointmentService.editAppointment(info).then(res => {
+        this.sendReserve = true;
+        this.myRequest.hopeContactTime = [];
+        setRequestsToStorage(this.myRequest);
+      });
     }
 
     private sentAppointmentDemand() {
@@ -361,33 +469,30 @@
           agentNo: this.$route.params.agentNo
         };
 
-        appointmentDemand(data).then(res => {
+        queryConsultantService.appointmentDemand(data).then(res => {
             this.sendReserve = true;
             this.myRequest.hopeContactTime = [];
+            this.appointmentId = res['id'];
             setRequestsToStorage(this.myRequest);
         });
     }
 
-    private sentEditAppointmentDemand() {
-      const info = {
-          ...this.myRequest,
-          requirement: _.map(this.myRequest.requirement,o=>o).toString(),
-          hopeContactTime: this.myRequest.phone && this.phoneValid ? this.getHopeContactTime() :'',
-          id: this.appointmentId,
-          otherRequirement: null
-        }
-        editAppointment(info).then(res => {
-          this.sendReserve = true;
-          this.myRequest.hopeContactTime = [];
-          setRequestsToStorage(this.myRequest);
-        });
-    }
-
-    getHopeContactTime() {
+    private getHopeContactTime() {
         const selectedHopeContactTime = this.myRequest.hopeContactTime.filter((i) => i.selectWeekOptions?.length && i.selectTimesOptions?.length);
         return selectedHopeContactTime.map(i => {
             return `'${i.selectWeekOptions}��${i.selectTimesOptions}'`}
         ).toString();
+    }
+
+    reviewPlatform(): void {
+      const reviewPlatformParams: UserReviewParams = {
+        appointmentId: this.appointmentId,
+        score: this.score,
+        type: SatisfactionType.SYSTEM
+      };
+      reviewsService.reviewPlatform(reviewPlatformParams).then((_) => {
+        this.closeReservePopUp();
+      });
     }
 
     closeReservePopUp() {
@@ -395,74 +500,35 @@
         this.$router.push('/')
     }
 
-    private getLatestReserved(agentNo) {
-      const agentInfo = this.myConsultantList.filter(item => item.agentNo === agentNo);
+    ////////////////////////////////////////////////////////////////////////////
 
-      const appointmentInfo = agentInfo.length > 0 && agentInfo[0].appointments
-        ? agentInfo[0].appointments!
-              .filter((appointment) => appointment.communicateStatus !== 'contacted')
-              .map((reversedAppointment) => {
-                return {
-                  ...reversedAppointment,
-                  sortDate: new Date(reversedAppointment.appointmentDate)
-                }
-              })
-              .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0]
-        : null;
-      return this.getReservedData(appointmentInfo);
+    get phoneValid(): boolean {
+      const rule = /^09[0-9]{8}$/;
+      return this.myRequest.phone
+            ? rule.test(this.myRequest.phone) && _.isEqual(this.myRequest.phone.length,10)
+            : true;
     }
 
-    private getReservedData(appointmentInfo) {
-      if (appointmentInfo) {
-        const hopeContactTime = appointmentInfo!.hopeContactTime.split("'")
-              .filter(item => item && item !== ',');
-        this.appointmentId = appointmentInfo.id;
-        return {
-            age: appointmentInfo.age,
-            agentNo: appointmentInfo.agentNo,
-            contactType: appointmentInfo.contactType,
-            email: appointmentInfo.email || '',
-            gender: appointmentInfo.gender,
-            hopeContactTime: hopeContactTime.map(item => {
-                const info = item.split('��');
-                return {
-                    selectWeekOptions: info[0].split(','),
-                    selectTimesOptions: info[1].split(',')
-                }
-            }),
-            job: appointmentInfo.job,
-            phone: appointmentInfo.phone || '',
-            requirement: appointmentInfo.requirement.split(',')
-          }
-      } else {
-        return {
-          age: '',
-          agentNo: '',
-          contactType: '',
-          email: '',
-          gender: '',
-          hopeContactTime: [],
-          job: '',
-          phone: '',
-          requirement: []
-        }
-      }
+    get emailValid() {
+      const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
+      return this.myRequest.email ? rule.test(this.myRequest.email) : true;
     }
 
-    @Watch('myConsultantList') onMyConsultantListChange() {
-      if (this.isLogin && this.myConsultantList.length > 0) {
-          const editAppointment = this.getLatestReserved(this.$route.params.agentNo);
-
-          if (editAppointment.agentNo) {
-            this.myRequest = JSON.parse(JSON.stringify(editAppointment));
-            if (!this.$route.query || this.$route.query.edit !== 'true') {
-              this.isEditPopup = true;
-            }
-            this.isEditBtn = true;
-            return;
-          }
-      }
+    get userInfo(): RegisterInfo {
+      const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!);
+      return initUserInfo;
     }
+
+    get isDisabledSubmitBtn(): boolean {
+           return _.includes(this.myRequest.contactType,ContactType.PHONE)
+      ? !this.isHopeContactTimeDone() || !this.emailValid
+      : !this.phoneValid;
+    }
+
+    private isHopeContactTimeDone():boolean{
+      return this.myRequest.hopeContactTime[0]?.selectWeekOptions.length >0 && this.myRequest.hopeContactTime[0]?.selectTimesOptions.length >0;
+    }
+
   }
 </script>
 
@@ -471,7 +537,6 @@
   display: flex;
   justify-content: center;
   margin-top: 10px;
-  margin-bottom: 26px;
 }
 
 //drawer��摨���見撘�
@@ -482,7 +547,9 @@
   color: #ED1B2E;
   cursor: pointer;
 }
-
+.error {
+  color:$PRIMARY_RED
+}
 //����見撘����
 .ques-footer{
   justify-content: center;
@@ -544,7 +611,10 @@
       transform: translate(-12px, 0);
   }
 }
-
+.break{
+  word-break: break-all;
+  line-height: 1.2;
+}
 .ques-page--reset.pam-page-container {
   margin: 0px auto;
 }
@@ -577,7 +647,7 @@
     @extend .text--middle,.mt-10 ;
     .ques-header__input{
       &.is-invalid{
-        border: 2px solid $PRIMARY_RED !important;
+        border: 1px solid $PRIMARY_RED !important;
       }
       flex: 1;
       height: 50px;
@@ -590,12 +660,24 @@
       -moz-box-sizing: border-box;
     }
   }
-
+  .ml-4{
+    margin-left: 4px;
+  }
   .ques-container {
     position: relative;
     margin: 0px 20px;
   }
 
+.pam-app-review{
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+}
+
+.pam-satisfaction-rate{
+  margin-bottom: 45px;
+}
 
   @include desktop{
   .ques-header{
@@ -623,5 +705,6 @@
   }
 }
 
+
 </style>
 
diff --git a/PAMapp/pages/quickFilter/index.vue b/PAMapp/pages/quickFilter/index.vue
index 44e739e..5ec1194 100644
--- a/PAMapp/pages/quickFilter/index.vue
+++ b/PAMapp/pages/quickFilter/index.vue
@@ -1,275 +1,272 @@
 <template>
-    <div>
-        <div class="quickBtnBlock">
-            <el-button
-                v-for="(question, index) in questionList"
-                :key="index"
-                class="subTitle quickBtn"
-                :class="{'isActive': isActive(question.name)}"
-                @click="openPopUp(question)"
-            >{{question.title}}</el-button>
-        </div>
-        <h5 class="mdTxt mb-10 mt-30">蝭拚璇辣</h5>
-        <div>
-            <template v-if="confirmItem.length > 0">
-                <UiTags
-                    v-for="(item, index) in confirmItem" :key="index"
-                    @removeTag="removeTag(item.value)"
-                >
-                    <span v-if="item.option === 'gender'">{{item.value === 'male' ? '���' : '憟單��'}}</span>
-                    <span v-else-if="item.option === 'avgScore'">{{item.value + '��誑銝遛��漲'}}</span>
-                    <span v-else>{{item.value}}</span>
-                </UiTags>
-            </template>
-            <div
-                v-else
-                class="emptyBox text--mid_grey"
-            >
-                <p class="smTxt">撠蝭拚</p>
-            </div>
-        </div>
-
-        <div class="mb-10 mt-30">
-            <span class="mdTxt">敹恍�祟���</span>
-            <span class="smTxt_bold text--prudential_grey ml-10">� {{consultantList.length}} 蝑�</span>
-        </div>
-        <div class="recommend pam-paragraph">
-            <img class="img" src="~/assets/images/quickFilter/recommend.svg" alt="">
-
-            <template v-if="consultantList.length > 0">
-                <QuickFilterConsultantList :consultantList="consultantList"></QuickFilterConsultantList>
-            </template>
-
-            <template v-else>
-                <div class="emptyBox text--mid_grey recommendStyle">
-                    <p class="smTxt">撠��鞈��</p>
-                </div>
-            </template>
-        </div>
-
-        <PopUpFrame
-            :isOpen.sync="isOpenQuestionPopUp"
-            :dialogWidth="'400px'"
-            class="pam-myDemand-dialog"
-        >
-            <QuickFilterSelector
-                ref="quickFilterRef"
-                :isOpenQuestionPopUp="isOpenQuestionPopUp"
-                :questionOption="questionOption"
-                @confirm="confirm"
-                :confirmItem="confirmItem"
-            ></QuickFilterSelector>
-        </PopUpFrame>
+  <div>
+    <div class="pam-paragraph pam-quick-filter__options">
+      <el-button v-for="(question, index) in questionList"
+        :key="index"
+        class="subTitle pam-quick-filter__btn"
+        :class="{'is-active': isActive(question.name)}"
+        @click="openPopUp(question)">{{question.title}}</el-button>
     </div>
+
+    <div class="pam-paragraph">
+      <div class="mdTxt">蝭拚璇辣</div>
+      <div class="mt-10">
+        <template v-if="confirmItem.length > 0">
+          <UiTags v-for="(item, index) in confirmItem"
+            :key="index"
+            @removeTag="removeTag(item.value)">
+            <span v-if="item.option === 'gender'">
+              {{item.value === 'male' ? '���' : '憟單��'}}
+            </span>
+            <span v-else-if="item.option === 'seniority'">
+              {{item.value | formatSeniorityTitle}}
+              <span class="smTxt">{{item.value | formatSenioritySubTitle}}</span>
+            </span>
+            <span v-else-if="item.option === 'avgScore' && !hideReviews">{{item.value + '��誑銝遛��漲'}}</span>
+            <span v-else>{{item.value}}</span>
+          </UiTags>
+        </template>
+        <div v-else
+          class="pam-quick-filter__empty text--mid_grey">
+          <p class="smTxt">撠蝭拚</p>
+        </div>
+      </div>
+    </div>
+
+    <div class="pam-paragraph">
+      <span class="mdTxt">敹恍�祟���</span>
+      <span class="smTxt_bold text--prudential_grey ml-10">� {{consultantList.length}} 蝑�</span>
+    </div>
+
+    <div class="pam-paragraph pam-quick-filter__recommend">
+      <img class="img"
+        alt=""
+        src="~/assets/images/quickFilter/recommend.svg">
+      <template v-if="consultantList.length > 0">
+        <QuickFilterConsultantList :consultantList="consultantList"></QuickFilterConsultantList>
+      </template>
+      <template v-else>
+        <div class="pam-quick-filter__empty text--mid_grey pam-quick-filter__empty--white">
+          <p class="smTxt">撠��鞈��</p>
+        </div>
+      </template>
+    </div>
+
+    <PopUpFrame class="pam-myDemand-dialog"
+      dialogWidth="400px"
+      :isOpen.sync="isOpenQuestionPopUp">
+      <QuickFilterSelector ref="quickFilterRef"
+        :isOpenQuestionPopUp="isOpenQuestionPopUp"
+        :questionOption="questionOption"
+        @confirm="confirm"
+        :confirmItem="confirmItem"></QuickFilterSelector>
+    </PopUpFrame>
+  </div>
 </template>
 
 <script lang="ts">
-import { Vue, Component, namespace } from 'nuxt-property-decorator';
-import { FastQueryParams } from '~/assets/ts/api/consultant';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-import { Selected } from '~/components/QuickFilter/QuickFilterSelector.vue';
-import { fastQuery } from '~/assets/ts/api/consultant';
+  import { Consultant } from '~/shared/models/consultant.model';
+  import { FastQueryParams, QuestionOption, Selected } from '~/shared/models/quick-filter.model';
+  import { questionList } from '~/shared/const/quickFilter-questionList';
+  import { Seniority } from '~/shared/models/enum/seniority';
+  import { Vue, Component, namespace } from 'nuxt-property-decorator';
+  import queryConsultantService from '~/shared/services/query-consultant.service';
+  import _ from 'lodash';
 
-const localStorage = namespace('localStorage');
-@Component
-export default class QuickFilter extends Vue {
-    @localStorage.Mutation storageQuickFilter!: (token: string) => void;
-    @localStorage.Getter quickFilterSelectedData!: Selected[];
+  const localStorage = namespace('localStorage');
+  const seniorityMap={
+    [Seniority.SENIOR]:{
+      title:'鞈楛',
+      subTitle:'����麾'
+    },
+    [Seniority.YOUNG]:{
+      title:'撟渲��',
+      subTitle:'蝯血僑頛犖銝�����'
+    },
+    [Seniority.UNLIMITED]:{
+      title:'銝��',
+      subTitle:'撟湧翩銝����'
+    },
+  }
+  @Component({
+    filters: {
+      formatSeniorityTitle(value): string{
+        return seniorityMap[value].title
+      },
+      formatSenioritySubTitle(value): string {
+        return seniorityMap[value].subTitle
+      }
+    }
+  })
+  export default class QuickFilter extends Vue {
+    @localStorage.Mutation
+    storageQuickFilter!: (token: string) => void;
+
+    @localStorage.Getter
+    quickFilterSelectedData!: Selected[];
 
     isOpenQuestionPopUp = false;
     consultantList: Consultant[] = [];
     questionOption = {};
     confirmItem: Selected[] = [];
-    questionList: QuestionOption[] = [
-        {
-            name: 'gender',
-            title: '憿批��批',
-            detail: [
-                { name: '���', value: 'male', className: 'btn_man'},
-                { name: '憟單��', value: 'female', className: 'btn_woman'}
-            ],
-            type: 'radio'
-        },
-        {
-            name: 'avgScore',
-            title: '憿批�遛��漲',
-            detail: [],
-            type: ''
-        },
-        {
-            name: 'communicationStyles',
-            title: '皞�◢�',
-            detail: [
-                { value: '雓寞��祕', className: 'btn_owl'},
-                { value: '��翰銝餃��', className: 'btn_tiger'},
-                { value: '���', className: 'btn_koala'},
-                { value: '�隢◢頞�', className: 'btn_peacock'}
-            ],
-            type: 'checkbox'
-        },
-        // {
-        //     name: 'status',
-        //     title: '銝�����',
-        //     detail: [],
-        //     type: 'radio'
-        // }
-    ];
+    questionList = questionList;
 
+    ////////////////////////////////////////////////////////////////////// Vue lifeCycle
     mounted() {
-        if (this.quickFilterSelectedData && this.quickFilterSelectedData.length > 0) {
-            this.confirmItem = this.quickFilterSelectedData;
-            this.getRecommendList();
-        }
+      if (this.quickFilterSelectedData && this.quickFilterSelectedData.length > 0) {
+        this.confirmItem = this.quickFilterSelectedData;
+        this.getRecommendList();
+      }
     }
 
-    gender(): string {
-        const filter = this.confirmItem.filter(item => item.option === 'gender').map(i => i.value);
-        return filter.length === 0 ? '' : filter[0];
-    }
 
-    avgScore(): number {
-        const filter = this.confirmItem.filter(item => item.option === 'avgScore').map(i => i.value);
-        return filter.length === 0 ? '' : filter[0];
-    }
-
-    communicationStyles(): string[] {
-        return this.confirmItem.filter(item => item.option === 'communicationStyles').map(i => i.value);
-    }
-
-    isActive(name: string) {
-        return name === 'gender' && !!this.gender()
-            || name === 'avgScore' && !!this.avgScore()
-            || name === 'communicationStyles' && !!this.communicationStyles().length
-    }
-
+    //////////////////////////////////////////////////////////////////////
     openPopUp(question: QuestionOption) {
-        this.questionOption = question;
-        this.isOpenQuestionPopUp =true;
+      this.questionOption = question;
+      this.isOpenQuestionPopUp = true;
     }
 
     removeTag(value: string) {
-        this.confirmItem = this.confirmItem.filter(item => item.value !== value);
-        this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
+      this.confirmItem = this.confirmItem.filter(item => item.value !== value);
+      this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
     }
 
     confirm(event: Selected) {
-        this.setConfirmData(event);
-        this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
-        this.isOpenQuestionPopUp = false;
+      this.setConfirmData(event);
+      this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
+      this.isOpenQuestionPopUp = false;
     }
 
-    setConfirmData(event: Selected) {
-        if (event.option === 'communicationStyles') {
-            this.filterCommunicationStyles(event);
-        } else {
-            const findIndex = this.confirmItem.findIndex(item => item.option === event.option);
-            findIndex === -1 ? this.confirmItem.push(event) : this.confirmItem[findIndex] = event;
+    isActive(name: string) {
+      return name === 'gender' && !!this.getGender()
+          || name === 'avgScore' && !!this.getAvgScore()
+          || name === 'communicationStyles' && !!this.getCommunicationStyles().length
+          || name === 'seniority' && !!this.getSeniority()
+    }
+
+
+    //////////////////////////////////////////////////////////////////////
+    private getGender(): string {
+      return this.filterSingleSelected('gender'); // maybe can use enum ?
+    }
+
+    private getAvgScore(): number {
+      return this.filterSingleSelected('avgScore');
+    }
+
+    private getSeniority(): string {
+      return this.filterSingleSelected('seniority');
+    }
+
+    private getCommunicationStyles(): string[] {
+      return this.confirmItem.filter(item => item.option === 'communicationStyles').map(i => i.value);
+    }
+
+    private filterSingleSelected(name: string) {
+      const filter = this.confirmItem.filter(item => item.option === name);
+      return filter.length > 0 ?
+        filter[0].value :
+        (name === 'avgScore' ? 0 : '');
+    }
+
+    private setConfirmData(event: Selected) {
+      if (event.option === 'communicationStyles') {
+        this.filterCommunicationStyles(event);
+      } else {
+        const findIndex = this.confirmItem.findIndex(item => item.option === event.option);
+        findIndex === -1 ? this.confirmItem.push(event) : this.confirmItem[findIndex] = event;
+      }
+    }
+
+    private filterCommunicationStyles(event: Selected) {
+      const confirmValue = this.confirmItem
+        .filter(item => item.option === 'communicationStyles')
+        .map(i => i.value);
+      const pickerValue = event.value;
+
+      this.confirmItem = this.confirmItem
+        .filter(item => pickerValue.includes(item.value) || item.option !== 'communicationStyles');
+
+      const addValue = pickerValue.filter(item => !confirmValue.includes(item)).map(i => {
+        return {
+          option: 'communicationStyles',
+          value: i
         }
+      })
+      if (addValue.length > 0) {
+        this.confirmItem.push(...addValue);
+      }
     }
 
-    filterCommunicationStyles(event: Selected) {
-        const confirmValue = this.confirmItem
-            .filter(item => item.option === 'communicationStyles')
-            .map(i => i.value);
-        const pickerValue = event.value;
+    private getRecommendList() {
+      const data: FastQueryParams = {
+        gender: this.getGender(),
+        communicationStyles: this.getCommunicationStyles(),
+        avgScore: this.getAvgScore(),
+        status: '',
+        seniority: this.getSeniority()
+      }
 
-        this.confirmItem = this.confirmItem
-            .filter(item => pickerValue.includes(item.value) || item.option !== 'communicationStyles');
-
-        const addValue = pickerValue.filter(item => !confirmValue.includes(item)).map(i => {
-            return {
-                option: 'communicationStyles',
-                value: i
-            }
-        })
-        if (addValue.length > 0) {
-            this.confirmItem.push(...addValue);
-        }
+      queryConsultantService.fastQuery(data).then((consultantList) => {
+        this.consultantList = consultantList;
+        this.storageQuickFilter(JSON.stringify(this.confirmItem))
+      })
     }
 
-    getRecommendList() {
-        const data: FastQueryParams = {
-            gender: this.gender(),
-            communicationStyles: this.communicationStyles(),
-            avgScore: this.avgScore(),
-            status: ''
-        }
-
-        fastQuery(data).then((res) => {
-            this.consultantList = res.data;
-            this.storageQuickFilter(JSON.stringify(this.confirmItem))
-        })
-    }
-
-}
-
-export interface QuestionOption {
-    title: string;
-    detail: Detail[];
-    type: string;
-    name: string;
-}
-
-interface Detail {
-    value: string;
-    name?: string;
-    className: string;
-}
+  }
 
 </script>
 
 <style lang="scss" scoped>
-    .emptyBox {
-        width: 100%;
-        height: 100px;
-        border: solid 1px $LIGHT_GREY;
-        text-align: center;
-        border-radius: 10px;
+  .pam-quick-filter__options {
+    display: flex;
+    width: 100%;
+    height: 132px;
+    flex-wrap: wrap;
+    justify-content: space-between;
 
-        .smTxt {
-            line-height: 100px;
-        }
+    .pam-quick-filter__btn {
+      width: 48%;
+      height: 56px;
+      text-align: center;
+      box-shadow: 0 0 6px #22222229;
+      border-radius: 10px;
+      border-color: $CORAL;
+
+      &.is-active {
+        background-color: $CORAL;
+        color: $PRIMARY_WHITE;
+      }
     }
 
-    .recommendStyle {
-        box-shadow: 0 0 6px #00000029;
-        background-color: $PRIMARY_WHITE;
+    .pam-quick-filter__btn+.pam-quick-filter__btn {
+      margin-left: 0;
     }
+  }
 
-    .quickBtnBlock {
-        display: flex;
-        width: 100%;
-        height: 132px;
-        flex-wrap: wrap;
-        justify-content: space-between;
+  .pam-quick-filter__empty {
+    width: 100%;
+    height: 100px;
+    border: solid 1px $LIGHT_GREY;
+    text-align: center;
+    border-radius: 10px;
 
-        .quickBtn {
-            width: 48%;
-            height: 56px;
-            text-align: center;
-            box-shadow: 0 0 6px #22222229;
-            border-radius: 10px;
-            border-color: $CORAL;
-
-            &.isActive {
-                background-color: $CORAL;
-                color: $PRIMARY_WHITE;
-            }
-        }
-        .quickBtn+.quickBtn {
-            margin-left: 0;
-        }
-
+    .smTxt {
+      line-height: 100px;
     }
-
-    .recommend {
-        position: relative;
-
-        .img {
-            position: absolute;
-            top: -50px;
-            right: 10px;
-        }
+    .pam-quick-filter__empty--white{
+      box-shadow: 0 0 6px #00000029;
+      background-color: $PRIMARY_WHITE;
     }
+  }
 
-</style>
\ No newline at end of file
+  .pam-quick-filter__recommend {
+    position: relative;
+
+    .img {
+      position: absolute;
+      top: -50px;
+      right: 10px;
+    }
+  }
+</style>
diff --git a/PAMapp/pages/recommendConsultant/index.vue b/PAMapp/pages/recommendConsultant/index.vue
index e313313..0a405f6 100644
--- a/PAMapp/pages/recommendConsultant/index.vue
+++ b/PAMapp/pages/recommendConsultant/index.vue
@@ -1,9 +1,10 @@
 <template>
-  <div class="pam-rec-cosultant-page">
+  <div class="pam-rec-consultant-page">
     <div class="pb-10 mdTxt">憿批��批</div>
-    <SingleSelectBtn :singleSelected.sync="strictQueryDto.gender" :options="genderOptions"/>
+    <SingleSelectBtn :singleSelected.sync="strictQueryDto.gender"
+      :options="genderOptions" />
     <div class="pam-paragraph">
-      <div class="pb-10 mdTxt required">憿批������</div>
+      <div class="pb-10 mdTxt required">憿批�����</div>
       <div class="job-pick"
         @click="showAddress = true">
         <input class="text--middle cursor--pointer input pl-10"
@@ -12,10 +13,8 @@
           readonly>
         <i class="icon-down down-icon"></i>
       </div>
-      <PopUpFrame :isOpen.sync="showAddress"
-      >
-        <AddressPicker
-          @confirm="confirmAddress" />
+      <PopUpFrame :isOpen.sync="showAddress">
+        <AddressPicker @confirm="confirmAddress" />
       </PopUpFrame>
     </div>
     <div class="pam-paragraph">
@@ -24,16 +23,20 @@
         <span class="hint text--bold">
           (�銴)
         </span>
-        <i class="icon-information text--bold fix-chrome-click--issue" @click="showDialog = true"></i>
+        <i class="icon-information text--bold fix-chrome-click--issue"
+          @click="showDialog = true"></i>
       </div>
-      <MultiSelectBtn :mutiSelect.sync="strictQueryDto.requirements" :options="requirementOptions" class="rec-multi-select" />
+      <MultiSelectBtn :mutiSelect.sync="strictQueryDto.requirements"
+        :options="requirementOptions"
+        class="rec-multi-select" />
     </div>
     <div class="pam-paragraph">
       <div class="pb-10 mdTxt">憿批�僑鞈�</div>
-        <SingleSelectBtn :singleSelected.sync="strictQueryDto.seniority" :options="seniorityOptions"/>
+      <SingleSelectBtn :singleSelected.sync="strictQueryDto.seniority"
+        :options="seniorityOptions" />
     </div>
-    <div class="pam-paragraph">
-      <div class="pb-10 mdTxt">靽憿批�遛��漲</div>
+    <div class="pam-paragraph" v-if="!hideReviews">
+      <div class="pb-10 mdTxt">憿批�遛��漲</div>
       <el-rate class="pam-consultant-rate" v-model="strictQueryDto.avgScore">
       </el-rate>
     </div>
@@ -43,10 +46,12 @@
         <div class="hint text--bold ml-10">(�銴)</div>
       </div>
       <div class="rec-pop-container">
-      <MultiSelectBtn :mutiSelect.sync="strictQueryDto.popularTags"
-        :options="popularOptions"
-        :nameOfOtherOption="'#�隞�'" :otherSelect.sync="strictQueryDto.otherPopularTags" class="rec-pop-options"/>
-        </div>
+        <MultiSelectBtn :mutiSelect.sync="strictQueryDto.popularTags"
+          :options="popularOptions"
+          :nameOfOtherOption="'#�隞�'"
+          :otherSelect.sync="strictQueryDto.otherPopularTags"
+          class="rec-pop-options" />
+      </div>
     </div>
     <div class="rec-footer pam-paragraph">
       <el-button type="primary"
@@ -54,8 +59,7 @@
         @click="makePair">擐砌����</el-button>
     </div>
 
-    <PopUpFrame :isOpen.sync="showDialog"
-    >
+    <PopUpFrame :isOpen.sync="showDialog">
       <div class="qaTextTitle mdTxt">
         <strong>�閬岷������</strong>
       </div>
@@ -69,119 +73,112 @@
         </div>
       </div>
       <div class="text--center mdTxt mt-30">
-        <el-button type="primary" @click="showDialog = false">������</el-button>
+        <el-button type="primary"
+          @click="showDialog = false">������</el-button>
       </div>
     </PopUpFrame>
 
     <PopUpFrame :isOpen.sync="isVisiblePopUp">
       <div class="text--center mdTxt">
-            <p class="mb-50">撠��鞈��</p>
-            <div class="text--center mdTxt">
-              <el-button type="primary" @click="isVisiblePopUp = false">������</el-button>
-            </div>
+        <p class="mb-50">撠��鞈��</p>
+        <div class="text--center mdTxt">
+          <el-button type="primary"
+            @click="isVisiblePopUp = false">������</el-button>
         </div>
+      </div>
     </PopUpFrame>
   </div>
 </template>
 
 <script lang="ts">
-  import {
-    Vue,
-    Component,
-    Mutation,
-    namespace,
-    Action,
-    State
-  } from 'nuxt-property-decorator';
-  import * as _ from 'lodash';
-  import { Seniority } from '~/assets/ts/models/enum/seniority';
-  import { setRequestQuestionToStorage } from '~/assets/ts/storageRequests';
+  import { Action, Component, Mutation, namespace ,State,Vue } from "nuxt-property-decorator";
+  import { StrictQueryDto } from "~/shared/models/strictQueryDto.model";
+  import { Gender } from "~/shared/models/enum/Gender";
+  import { Seniority } from "~/shared/models/enum/seniority";
+  import { hideReviews } from '~/shared/const/hide-reviews';
+
 
   const localStorage = namespace('localStorage');
-
   @Component
   export default class RecommendConsultant extends Vue {
     isVisiblePopUp = false;
-    strictQueryDto: StrictQueryDto ={
-      gender:'',
-      area:'',
-      status:'',
+    hideReviews = hideReviews;
+    strictQueryDto: StrictQueryDto = {
+      gender: '',
+      area: '',
+      status: '',
       requirements: [],
-      otherRequirement:'',
-      seniority:'',
-      avgScore:0,
+      otherRequirement: '',
+      seniority: '',
+      avgScore: 0,
       popularTags: [],
-      otherPopularTags:'',
+      otherPopularTags: '',
     };
-    genderOptions=[
-      {
-        title:'���',
-        label:Gender.MALE,
+    genderOptions = [{
+        title: '���',
+        label: Gender.MALE,
       },
       {
-        title:'憟單��',
-        label:Gender.FEMALE,
+        title: '憟單��',
+        label: Gender.FEMALE,
       }
     ];
-    requirementOptions=[
-      {
-        title:'�摨瑁����',
-        label:'�摨瑁����',
+    requirementOptions = [{
+        title: '�摨瑁����',
+        label: '�摨瑁����',
       },
       {
-        title:'摮戊��',
-        label:'摮戊��',
+        title: '摮戊��',
+        label: '摮戊��',
       },
       {
-        title:'鞈閬��',
-        label:'鞈閬��',
+        title: '鞈閬��',
+        label: '鞈閬��',
       },
       {
-        title:'璅暑��隡�',
-        label:'璅暑��隡�',
+        title: '璅暑��隡�',
+        label: '璅暑��隡�',
       },
       {
-        title:'靽�瑼�/閬��',
-        label:'靽�瑼�/閬��',
+        title: '靽�瑼�/閬��',
+        label: '靽�瑼�/閬��',
       },
       {
-        title:'����',
-        label:'����',
+        title: '����',
+        label: '����',
       },
     ];
-    seniorityOptions=[
-      {
-        title:'銝��',
-        subTitle:'撟湧翩銝����',
-        label:Seniority.UNLIMITED,
+    seniorityOptions = [{
+        title: '銝��',
+        subTitle: '撟湧翩銝����',
+        label: Seniority.UNLIMITED,
       },
       {
-        title:'撟渲��',
-        subTitle:'蝯血僑頛犖銝�����',
-        label:Seniority.YOUNG,
+        title: '撟渲��',
+        subTitle: '蝯血僑頛犖銝�����',
+        label: Seniority.YOUNG,
       },
       {
-        title:'鞈楛',
-        subTitle:'����麾',
-        label:Seniority.SENIOR,
+        title: '鞈楛',
+        subTitle: '����麾',
+        label: Seniority.SENIOR,
       }
     ];
-    popularOptions=[
-      {
+    popularOptions = [{
         title: '#��',
-        label:'��'
+        label: '��'
       },
       {
         title: '#憭梯',
-        label:'憭梯'
+        label: '憭梯'
       },
       {
         title: '#����',
-        label:'����'
+        label: '����'
       },
       {
         title: '#����',
-        label:'����'
+        label: '����'
       },
       {
         title: '#憯賡',
@@ -189,19 +186,18 @@
       },
       {
         title: '#����',
-        label:'����'
+        label: '����'
       },
       {
         title: '#����',
-        label:'����'
+        label: '����'
       },
       {
         title: '#����',
-        label:'����'
+        label: '����'
       }
     ];
-    queaAboutList = [
-      {
+    queaAboutList = [{
         title: '�摨瑁����',
         content: '����澈擃憿批末嚗�靽�兢蝳�嚗��������嚗��飩������摮拙��粥銝��頝荔�犖����迤閬����'
       },
@@ -223,26 +219,34 @@
       },
       {
         title: '����',
-        content: '���� ���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�'
+        content: '���������憸券�����鈭怒�����嚗���摰帘摰漲嚗��隞亙��澈��ˊ�靽���嚗�'
       }
     ];
     showDialog = false;
     showAddress = false;
 
-    @Mutation updateStrictQueryList!: (data: any) => void;
-    @Action storeStrictQueryList!: (data: any) => Promise<number>;
-    @State strictQueryList!: any;
-    @localStorage.State recommendConsultantItem!: string;
+    @Mutation
+    updateStrictQueryList!: (data: any) => void;
 
+    @Action
+    storeStrictQueryList!: (data: any) => Promise < number > ;
+
+    @State
+    strictQueryList!: any;
+
+    @localStorage.State
+    recommendConsultantItem!: string;
+
+    //////////////////////////////////////////////////////////////////////
     mounted() {
       if (!!this.recommendConsultantItem) {
         this.strictQueryDto = JSON.parse(this.recommendConsultantItem);
       }
     }
+
+    //////////////////////////////////////////////////////////////////////
     async makePair() {
       await this.storeStrictQueryList(this.strictQueryDto).then(dataLength => {
-        const questions = this.strictQueryDto.requirements.length ? this.strictQueryDto.requirements : [];
-        setRequestQuestionToStorage(questions);
         if (dataLength === 0) {
           this.isVisiblePopUp = true;
           return;
@@ -250,329 +254,321 @@
         this.$router.push('/recommendConsultant/result');
       });
     }
-    get notFinishByRequireRules():boolean{
-      const area = this.strictQueryDto.area;
-      const requirementLength = this.strictQueryDto.requirements
-        ? this.strictQueryDto.requirements.length
-        : 0;
-      return !(area && requirementLength >0)
-    }
 
     confirmAddress(area: string) {
       this.strictQueryDto.area = area;
       this.showAddress = false;
     }
 
-  }
-  enum Gender{
-    MALE="male",
-    FEMALE="female",
+    //////////////////////////////////////////////////////////////////////
+    get notFinishByRequireRules(): boolean {
+      const area = this.strictQueryDto.area;
+      const requirementLength = this.strictQueryDto.requirements
+              ? this.strictQueryDto.requirements.length
+              : 0;
+      return !(area && requirementLength > 0)
+    }
   }
 
-  export interface StrictQueryDto {
-    gender: string,
-    area: string,
-    status: string,
-    requirements: string[],
-    otherRequirement: string,
-    seniority: string,
-    avgScore: number,
-    popularTags: string[],
-    otherPopularTags: string
-  }
 </script>
 
 <style lang="scss">
+  .pam-rec-consultant-page {
+    .rec-pop-container {
+      width: 310px;
 
-.pam-rec-cosultant-page {
-  .rec-pop-container{
-    width:310px;
-    .rec-pop-options{
-      .el-checkbox-group{
-        display: flex;
-        flex-wrap: wrap;
-        flex-direction: row;
-        .el-checkbox{
-          width:90px;
-          height: 50px;
-          padding:0;
-          .el-checkbox__label{
-            justify-content: center;
-            align-items: center;
-            display: flex;
-            padding:15px 20px;
-            text-align: center;
+      .rec-pop-options {
+        .el-checkbox-group {
+          display: flex;
+          flex-wrap: wrap;
+          flex-direction: row;
+
+          .el-checkbox {
+            width: 90px;
+            height: 50px;
+            padding: 0;
+
+            .el-checkbox__label {
+              justify-content: center;
+              align-items: center;
+              display: flex;
+              padding: 15px 20px;
+              text-align: center;
+            }
           }
-        }
-        .pam-selectAll-btn{
-          margin-top: 60px;
-          margin-left:-203px;
-          height: 50px;
-          width: 90px;
-          padding: 10px;
-        }
 
+          .pam-selectAll-btn {
+            margin-top: 60px;
+            margin-left: -203px;
+            height: 50px;
+            width: 90px;
+            padding: 10px;
+          }
+
+        }
+      }
+
+    }
+
+    .rec-multi-select {
+      .el-checkbox-group {
+        display: flex;
+        flex-direction: column;
+        align-items: flex-start;
       }
     }
 
-  }
-  .rec-multi-select{
-    .el-checkbox-group {
+    input:focus,
+    textarea:focus {
+      outline: none;
+    }
+
+    .input {
+      border: none;
+      width: 90%;
+      border-radius: 10px;
+    }
+
+    .job-pick {
+      height: 50px;
+      border-radius: 10px;
+      border: 1px solid #D0D0CE;
       display: flex;
-      flex-direction: column;
-      align-items: flex-start;
+      justify-content: space-between;
+      background-color: #FFFFFF;
     }
-  }
 
-  input:focus,
-  textarea:focus {
-    outline: none;
-  }
-
-  .input {
-    border: none;
-    width: 90%;
-    border-radius: 10px;
-  }
-
-  .job-pick {
-    height: 50px;
-    border-radius: 10px;
-    border: 1px solid #D0D0CE;
-    display: flex;
-    justify-content: space-between;
-    background-color: #FFFFFF;
-  }
-
-  .down-icon {
-    color: #ED1B2E;
-    font-size: 25px;
-    align-self: center;
-    margin-right: 15px;
-  }
-
-  .popOtherBtn {
-    margin-left: -190px;
-    margin-top: 45px;
-  }
-
-  .genderBtn {
-    width: 80px;
-    height: 47px;
-    display: contents;
-  }
-
-  .qa-dialog {
-    overflow-y: auto;
-    height: 60vh;
-    margin-top: 20px;
-    text-align: justify;
-  }
-
-  .qaTextTitle {
-    margin-top: 30px
-  }
-
-  .qa-dialog-footer {
-    display: flex;
-    justify-content: center;
-    margin-bottom: 81px;
-    color: #ED1B2E;
-    cursor: pointer;
-  }
-
-  .el-drawer__container ::-webkit-scrollbar {
-    display: none;
-  }
-  .el-button+.el-button {
-    margin-left: 0;
-  }
-
-  .seniority-choice {
-    display: flex;
-    flex-wrap: wrap;
-  }
-
-  .area-choice {
-    height: 50px;
-    border-radius: 10px;
-    border: 1px solid #D0D0CE;
-    display: flex;
-    justify-content: space-between;
-    background-color: #FFFFFF;
-  }
-
-  .area-icon {
-    color: #ED1B2E;
-    font-size: 25px;
-    display: flex;
-    justify-content: flex-end;
-    padding-right: 16px;
-    padding-top: 11px;
-  }
-
-  input::-webkit-input-placeholder {
-    font-size: 20px;
-    padding-left: 10px;
-  }
-
-  .el-button.is-disabled {
-    font-size: 20px;
-    border-radius: 20px;
-    color: #FFFFFF;
-    background-color: #A7A8AA;
-    border: 1px solid #A7A8AA;
-  }
-
-  .rec-footer {
-    height: 70px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-  }
-
-  .other-PopBtn {
-    width: 90px;
-    height: 47px;
-    margin-top: 10px;
-  }
-
-
-
-  .rec-ques-location {
-    display: flex;
-    align-items: center;
-  }
-
-  .pop-tag {
-    display: flex;
-    flex-wrap: wrap;
-    margin: -10px;
-
-  }
-
-  .rec-popular {
-    display: flex;
-    align-items: baseline;
-    padding-top: 10px;
-    margin-bottom: 10px;
-  }
-
-  .rec-btn-type {
-    padding-bottom: 10px;
-  }
-
-  .rec-question {
-    display: flex;
-    flex-direction: column;
-
-  }
-
-  .rec-banner {
-    height: 120px;
-    background-color: #D0D0CE;
-
-  }
-
-  .rec-btn {
-    font-size: 20px;
-    border-radius: 20px;
-    color: black;
-    border: 1px solid #D0D0CE;
-  }
-
-  .rec-pop-btn {
-    font-size: 20px;
-    border-radius: 20px;
-    color: black;
-    margin: 0px 0px 10px 10px;
-    border: 1px solid #D0D0CE;
-    width: 90px;
-    height: 47px;
-  }
-
-  .el-progress__text {
-    display: none;
-  }
-
-  .el-progress-bar {
-    padding-right: 0;
-  }
-
-  .el-progress-bar__inner {
-    background-color: #ED1B2E;
-  }
-
-  .required {
-    position: relative;
-
-    &::before {
-      content: '*';
-      position: absolute;
-      color: #FF0000;
-      transform: translate(-12px, 0);
-      z-index: 5;
-    }
-  }
-
-  .area-txt {
-    display: flex;
-    align-items: center;
-    margin-left: 18px;
-  }
-
-  @include desktop {
-
-    .desktopBtn {
-      margin-right: 10px;
-      height: 47px
+    .down-icon {
+      margin-right: 15px;
     }
 
     .popOtherBtn {
-      margin-left: 10px;
-      margin-top: -10px;
+      margin-left: -190px;
+      margin-top: 45px;
     }
 
-    .rec-pop-container{
-      width:auto;
-    .rec-pop-options{
-      .el-checkbox-group{
-        display: flex;
-        flex-wrap:wrap;
-        flex-direction: none;
-        .el-checkbox{
-          width:90px;
-          height: 50px;
-          padding:0;
-          .el-checkbox__label{
-            justify-content: center;
-            align-items: center;
-            display: flex;
-            padding:15px 20px;
-            text-align: center;
-          }
-        }
-        .pam-selectAll-btn{
-          margin-top:0px;
-          margin-left:0px;
-          height: 50px;
-          width: 90px;
-          padding: 10px;
-        }
+    .genderBtn {
+      width: 80px;
+      height: 47px;
+      display: contents;
+    }
+
+    .qa-dialog {
+      overflow-y: auto;
+      height: 60vh;
+      margin-top: 20px;
+      text-align: justify;
+    }
+
+    .qaTextTitle {
+      margin-top: 30px
+    }
+
+    .qa-dialog-footer {
+      display: flex;
+      justify-content: center;
+      margin-bottom: 81px;
+      color: #ED1B2E;
+      cursor: pointer;
+    }
+
+    .el-drawer__container ::-webkit-scrollbar {
+      display: none;
+    }
+
+    .el-button+.el-button {
+      margin-left: 0;
+    }
+
+    .seniority-choice {
+      display: flex;
+      flex-wrap: wrap;
+    }
+
+    .area-choice {
+      height: 50px;
+      border-radius: 10px;
+      border: 1px solid #D0D0CE;
+      display: flex;
+      justify-content: space-between;
+      background-color: #FFFFFF;
+    }
+
+    .area-icon {
+      color: #ED1B2E;
+      font-size: 25px;
+      display: flex;
+      justify-content: flex-end;
+      padding-right: 16px;
+      padding-top: 11px;
+    }
+
+    input::-webkit-input-placeholder {
+      font-size: 20px;
+      padding-left: 10px;
+    }
+
+    .el-button.is-disabled {
+      font-size: 20px;
+      border-radius: 20px;
+      color: #FFFFFF;
+      background-color: #A7A8AA;
+      border: 1px solid #A7A8AA;
+    }
+
+    .rec-footer {
+      height: 70px;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+
+    .other-PopBtn {
+      width: 90px;
+      height: 47px;
+      margin-top: 10px;
+    }
+
+
+
+    .rec-ques-location {
+      display: flex;
+      align-items: center;
+    }
+
+    .pop-tag {
+      display: flex;
+      flex-wrap: wrap;
+      margin: -10px;
+
+    }
+
+    .rec-popular {
+      display: flex;
+      align-items: baseline;
+      padding-top: 10px;
+      margin-bottom: 10px;
+    }
+
+    .rec-btn-type {
+      padding-bottom: 10px;
+    }
+
+    .rec-question {
+      display: flex;
+      flex-direction: column;
+
+    }
+
+    .rec-banner {
+      height: 120px;
+      background-color: #D0D0CE;
+
+    }
+
+    .rec-btn {
+      font-size: 20px;
+      border-radius: 20px;
+      color: black;
+      border: 1px solid #D0D0CE;
+    }
+
+    .rec-pop-btn {
+      font-size: 20px;
+      border-radius: 20px;
+      color: black;
+      margin: 0px 0px 10px 10px;
+      border: 1px solid #D0D0CE;
+      width: 90px;
+      height: 47px;
+    }
+
+    .el-progress__text {
+      display: none;
+    }
+
+    .el-progress-bar {
+      padding-right: 0;
+    }
+
+    .el-progress-bar__inner {
+      background-color: #ED1B2E;
+    }
+
+    .required {
+      position: relative;
+
+      &::before {
+        content: '*';
+        position: absolute;
+        color: #FF0000;
+        transform: translate(-12px, 0);
+        z-index: 5;
       }
     }
 
-  }
-
-    .rec-multi-select{
-    .el-checkbox-group {
+    .area-txt {
       display: flex;
-      flex-direction: row;
-      align-items: flex-start;
-      flex-wrap: wrap;
+      align-items: center;
+      margin-left: 18px;
+    }
+
+    @include desktop {
+
+      .desktopBtn {
+        margin-right: 10px;
+        height: 47px
+      }
+
+      .popOtherBtn {
+        margin-left: 10px;
+        margin-top: -10px;
+      }
+
+      .rec-pop-container {
+        width: auto;
+
+        .rec-pop-options {
+          .el-checkbox-group {
+            display: flex;
+            flex-wrap: wrap;
+            flex-direction: none;
+
+            .el-checkbox {
+              width: 90px;
+              height: 50px;
+              padding: 0;
+
+              .el-checkbox__label {
+                justify-content: center;
+                align-items: center;
+                display: flex;
+                padding: 15px 20px;
+                text-align: center;
+              }
+            }
+
+            .pam-selectAll-btn {
+              margin-top: 0px;
+              margin-left: 0px;
+              height: 50px;
+              width: 90px;
+              padding: 10px;
+            }
+          }
+        }
+
+      }
+
+      .rec-multi-select {
+        .el-checkbox-group {
+          display: flex;
+          flex-direction: row;
+          align-items: flex-start;
+          flex-wrap: wrap;
+        }
+      }
     }
   }
-  }
-}
 
 </style>
diff --git a/PAMapp/pages/recommendConsultant/result.vue b/PAMapp/pages/recommendConsultant/result.vue
index 0c06be1..1bbf19f 100644
--- a/PAMapp/pages/recommendConsultant/result.vue
+++ b/PAMapp/pages/recommendConsultant/result.vue
@@ -4,9 +4,25 @@
     <ul class="pam-rec-agent__list">
         <li class="pam-rec-agent-card" v-for="(info,index) in pageList" :key="index">
             <div class="pam-rec-agent-card__content">
+
+              <div
+                class="pam-rec-agent-card-suitability"
+                :class="{
+                  'match--level1': info.suitability === 100,
+                  'match--level2': 50 < info.suitability && info.suitability < 100,
+                  'match--level3': info.suitability < 51
+                }">
+                </div>
+
+                <div class="pam-rec-agent-card-suitability-text">
+                  <div class="label">���漲</div>
+                  <div class="value">{{info.suitability}}%</div>
+                </div>
                 <div class="pam-rec-agent-card__content-header">
                     <div class="pam-rec-agent-card__avatar">
-                        <UiAvatar :fileName="info.img" ></UiAvatar>
+                        <UiAvatar
+                          :agentNo="info.agentNo" >
+                        </UiAvatar>
                     </div>
                     <div class="pam-rec-agent-card__main-info">
                         <div class="text--middle  pt-10 rec-desktop-name">{{ info.name }}</div>
@@ -35,7 +51,7 @@
                             {{ info.seniority }}
                             </div>
                         </el-col>
-                        <el-col :span="12">
+                        <el-col :span="12" v-if="!hideReviews">
                             <div class="field__label">
                             摰X皛踵�漲
                             </div>
@@ -60,7 +76,7 @@
 
     <UiPagination
         class="mb-30"
-        :totalList="strictQueryList"
+        :totalList="strictResultList"
         @changePage="changePage"
         :pageSize = 6
     ></UiPagination>
@@ -81,35 +97,50 @@
 </div>
 </template>
 <script lang="ts">
-import {Vue,Component, State, namespace, Action} from 'nuxt-property-decorator';
-import { AgentOfStrictQuery } from '~/assets/ts/api/consultant';
+import { AgentOfStrictQuery } from '~/shared/models/strict-query.model';
+import { hideReviews } from '~/shared/const/hide-reviews';
+import { Vue,Component, State, namespace, Action, Getter} from 'nuxt-property-decorator';
 
 const localStorage = namespace('localStorage');
 
 @Component
-export default class Reslut extends Vue{
-    @State('strictQueryList') strictQueryList!: AgentOfStrictQuery[];
-    @Action storeStrictQueryList!: (data: any) => Promise<number>;
-    @localStorage.State recommendConsultantItem!: string;
+export default class Result extends Vue{
+    @State('strictQueryList')
+    strictQueryList!: AgentOfStrictQuery[];
+
+    @Action
+    storeStrictQueryList!: (data: any) => Promise<number>;
+
+    @Getter('strictResultList')
+    strictResultList!: AgentOfStrictQuery[];
+
+    @localStorage.State
+    recommendConsultantItem!: string;
 
     pageList: any[] = [];
     isVisiblePopUp = false;
-    popUpTxt = '';
-    mounted() {
+    popUpTxt = '撌脣�憿批��';
+    hideReviews = hideReviews;
+
+    //////////////////////////////////////////////////////////////////////
+    mounted(): void {
         if (this.recommendConsultantItem && this.strictQueryList.length === 0) {
             const strictQueryDto = JSON.parse(this.recommendConsultantItem);
             this.storeStrictQueryList(strictQueryDto);
         }
+
     }
 
+    //////////////////////////////////////////////////////////////////////
     changePage(pageList: any[]) {
         this.pageList = pageList;
     }
+
     showAgentDetail(agentNo: string): void {
         this.$router.push(`/agentInfo/${agentNo}`);
     }
+
     openPopUp(txt: string) {
-        this.popUpTxt = txt;
         this.isVisiblePopUp = true;
     }
 }
@@ -121,8 +152,48 @@
     border-radius: 10px;
     border: 1px solid $LIGHT_GREY;
     padding: 20px 33px;
+    overflow: hidden;
 
     .pam-rec-agent-card__content {
+      position: relative;
+        .pam-rec-agent-card-suitability{
+          left: -125px;
+          top: -108px;
+          width: 150px;
+          height: 150px;
+          transform: rotate(45deg);
+          position:absolute;
+          &.match--level3 {
+            background-color: #C3A787;
+          }
+          &.match--level2 {
+            background-color: #D0D0CE;
+          }
+          &.match--level1 {
+            background-color: #F2C75C;
+          }
+        }
+        .pam-rec-agent-card-suitability-text{
+          position: absolute;
+          left: -25px;
+          top: -10px;
+          z-index: 5;
+          line-height: 1.3;
+          .label {
+            font-size: 10px;
+            color: #68737A;
+            @include desktop {
+              display: none;
+            }
+          }
+          .value {
+            font-size: 12px;
+            color: #222222;
+            @include desktop {
+              padding-left: 8px;
+            }
+          }
+        }
         .pam-rec-agent-card__content-header {
             display: flex;
             .pam-rec-agent-card__avatar {
diff --git a/PAMapp/pages/record.vue b/PAMapp/pages/record.vue
deleted file mode 100644
index bf002b7..0000000
--- a/PAMapp/pages/record.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-<template>
-    <!-- <div>record-�������
-        <el-tabs
-            v-model="activeTabName"
-            @tab-click="tabClick"
-        >
-            <el-tab-pane
-                label="�������"
-                name="contactRecord"
-            >
-            </el-tab-pane>
-            <el-tab-pane
-                label="皛踵�漲蝝����"
-                name="reviews"
-            ></el-tab-pane>
-        </el-tabs> -->
-
-        <NuxtChild></NuxtChild>
-    <!-- </div> -->
-</template>
-
-<script lang="ts">
-import { Vue, Component, Watch } from 'vue-property-decorator';
-import { Route } from 'vue-router/types/router.d';
-
-@Component
-export default class Record extends Vue {
-    activeTabName = 'contactRecord';
-
-    tabClick() {
-        this.$router.push('/record/' + this.activeTabName);
-    }
-
-    @Watch('$route') watchRouter(currentRoute: Route) {
-        const pathArray = currentRoute.fullPath.split('/');
-        this.activeTabName = pathArray[pathArray.length - 1];
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-    .el-tabs__item:hover {
-        color: #303133;
-    }
-</style>
\ No newline at end of file
diff --git a/PAMapp/pages/record/contactRecord.vue b/PAMapp/pages/record/contactRecord.vue
deleted file mode 100644
index eebe275..0000000
--- a/PAMapp/pages/record/contactRecord.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-    <div>�������(�������)</div>
-</template>
\ No newline at end of file
diff --git a/PAMapp/pages/record/index.vue b/PAMapp/pages/record/index.vue
index 692841f..be49f11 100644
--- a/PAMapp/pages/record/index.vue
+++ b/PAMapp/pages/record/index.vue
@@ -1,70 +1,21 @@
 <template>
-
-<div class="user-reviews-page">
-    <section class="mdTxt">
-        �������
-    </section>
-
-    <section class="user-reviews-header">
-        <div class="header-title mdTxt">
-            皛踵�漲蝝����
-        </div>
-    </section>
-
-    <section class="user-reviews-content">
-        <div 
-            class="user-reviews-card"
-            v-for="(appointmentLog, index) in myAppointmentReviewLogList"
-            :key="index">
-            <div class="user-reviews-card-content" v-if="currentRole === 'user'">
-                �撠�<span class="mdTxt">{{ ` ${appointmentLog.agentName} ` }}</span>���� <UiReviewScore :score="appointmentLog.score" /> 閰嚗�
-            </div>
-            <div class="user-reviews-card-content" v-else>
-                {{ `${appointmentLog.customerName} `}} 撠���� <UiReviewScore :score="appointmentLog.score" /> 閰嚗�
-            </div>
-            <div class="user-reviews-card-date">
-                <div class="date">
-                    <UiDateFormat 
-                        :date="appointmentLog.lastModifiedDate"
-                        onlyShowSection="DAY" />
-                </div>
-                <div class="time">
-                    <UiDateFormat 
-                        :date="appointmentLog.lastModifiedDate"
-                        onlyShowSection="TIME" />
-                </div>
-            </div>
-        </div>
-    </section>
-  
+<div>
+    <ReviewRecords
+      :reviewLogList="reviewLogList"
+    ></ReviewRecords>
 </div>
-
 </template>
 <script lang="ts">
-import { Vue, Component, Action, State, namespace } from 'nuxt-property-decorator';
-import { AppointmentLog } from '~/assets/ts/models/appointment.model';
+import { Vue, Component, Action, State } from 'nuxt-property-decorator';
 
-const roleStorage = namespace('localStorage');
+import { AppointmentLog } from '~/shared/models/appointment.model';
 
 @Component
 export default  class Reviews extends Vue{
 
-    today = new Date();
+    @State('reviewLogList')
+    reviewLogList!: AppointmentLog[];
 
-    @roleStorage.Getter currentRole!:string;
-
-    @State('myAppointmentReviewLogList') myAppointmentReviewLogList!: AppointmentLog[];
-
-    @Action storeMyAppointmentReviewLog!: any;
-
-    appointmentLogList: AppointmentLog[] = [];
-
-    mounted() {
-        this.storeMyAppointmentReviewLog();
-    }
-
-    
-    
 }
 </script>
 <style lang="scss" scoped>
@@ -101,7 +52,7 @@
                 width:52px;
                 .date{
                     margin-bottom: 2px;
-                    
+
                 }
             }
         }
@@ -112,4 +63,4 @@
         flex: 1;
     }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/pages/record/reviews.vue b/PAMapp/pages/record/reviews.vue
deleted file mode 100644
index 792609c..0000000
--- a/PAMapp/pages/record/reviews.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-    <div>�������(皛踵�漲蝝����)</div>
-</template>
\ No newline at end of file
diff --git a/PAMapp/pages/satisfactionList.vue b/PAMapp/pages/satisfactionList.vue
new file mode 100644
index 0000000..dbf2330
--- /dev/null
+++ b/PAMapp/pages/satisfactionList.vue
@@ -0,0 +1,185 @@
+<template>
+  <div>
+    <div class="pam-satisfaction-banner"></div>
+    <div class="pam-container">
+      <div class="satisfaction-title">
+        <span class="mdTxt">皛踵�漲隤踵</span>
+        <span class="ml-10 text--prudential_grey smTxt_bold">� {{mapUnReviewLogList.length}} 蝑�</span>
+      </div>
+      <template v-if="mapUnReviewLogList.length">
+        <div class="satisfaction-card" v-for="(item, index) in mapUnReviewLogList" :key="index">
+          <div class="satisfaction-card-content"  v-if="item.agentName">
+            <UiAvatar :size="80" :agentNo="item.agentNo"></UiAvatar>
+            <div class="satisfaction-card-text">撠憿批��
+                <span class="text--primary text--bold">{{item.agentName}}</span>
+                ��擃���蝯虫�嗾憿��嚗�
+            </div>
+          </div>
+           <div class="satisfaction-card-content"  v-else>
+            <div class="pam-satisfaction-avatar">
+              <span class="pam-satisfaction-avatar-txt">撟喳</span>
+              </div>
+            <div class="satisfaction-card-text" >撠
+                <span class="text--primary text--bold">������</span>
+                撟喳��擃���蝯虫�嗾憿��嚗�
+            </div>
+          </div>
+          <el-rate
+            v-model="item.satisfaction"
+            class="pam-satisfaction-rate mt-10 fix-chrome-click--issue"
+            @change="isBtnDisabled = false"
+          ></el-rate>
+        </div>
+        <div class="text--center mt-30" v-if="mapUnReviewLogList.length">
+          <el-button type="primary" :disabled="isBtnDisabled" @click="sent">�</el-button>
+        </div>
+      </template>
+      <template v-else>
+         <div class="satisfaction-card">
+          <div class="satisfaction-card-content">
+            ������閬憛怠神��遛��漲隤踵
+          </div>
+         </div>
+      </template>
+    </div>
+
+    <PopUpFrame :isOpen.sync="showConfirmPopup"
+        @closePopUp="closePopup">
+        <div class="text--center mdTxt">�����</div>
+        <div class="text--center mt-30">
+            <el-button @click="closePopup" type="primary">蝣箏��</el-button>
+        </div>
+      </PopUpFrame>
+  </div>
+</template>
+
+<script lang="ts">
+import { Vue, Component, Action, State, Watch } from 'nuxt-property-decorator';
+
+import reviewsService from '~/shared/services/reviews.service';
+import { AppointmentLog } from '~/shared/models/appointment.model';
+import { UserReviewParams } from '~/shared/models/reviews.model';
+
+@Component({
+  layout: 'home'
+})
+export default class MySatisfactionList extends Vue {
+
+  @State
+  unReviewLogList!: AppointmentLog[];
+
+  @Action
+  storeMyAppointmentReviewLog!: () => void;
+
+  mapUnReviewLogList: AppointmentReviewLog[] = [];
+  showConfirmPopup = false;
+  isBtnDisabled = true;
+
+  ///////////////////////////////////////////////////////
+
+  @Watch('unReviewLogList')
+  onUnReviewLogListChange() {
+      this.mapUnReviewLogList = this.unReviewLogList.map(item => {
+        return {
+          ...item,
+          satisfaction: 0
+        }
+      })
+  }
+
+  ///////////////////////////////////////////////////////
+
+  sent() {
+    const reviewParams: UserReviewParams[] = this.mapUnReviewLogList
+                .filter(item => item.satisfaction > 0)
+                .map(item => {
+                  return {
+                    appointmentId: item.appointmentId,
+                    score: item.satisfaction,
+                    type: item.type
+                  }
+                })
+
+        reviewsService.allUserReviewsConsultants(reviewParams).then((res) => {
+            this.showConfirmPopup = true;
+        });
+  }
+
+  closePopup() {
+    this.showConfirmPopup = false;
+    this.storeMyAppointmentReviewLog();
+  }
+
+}
+
+interface AppointmentReviewLog extends AppointmentLog {
+  satisfaction: number;
+}
+</script>
+
+<style lang="scss" scoped>
+.pam-satisfaction-banner {
+    width              : 100%;
+    height             : 120px;
+    background-size    : cover;
+    background-repeat  : no-repeat;
+    background-position: center;
+    position           : relative;
+    background-image   : url('~/assets/images/satisfaction/banner_mob.svg');
+}
+
+@media (min-width: 768px) {
+    .pam-satisfaction-banner {
+        height          : 150px;
+        background-image: url('~/assets/images/satisfaction/banner_web.svg');
+    }
+}
+
+.pam-container {
+    margin: 30px 20px;
+}
+
+@include desktop {
+    .pam-container {
+        width : 700px;
+        margin: 30px auto;
+    }
+}
+.satisfaction-card {
+  margin-top       : 20px;
+  .satisfaction-card-content {
+    display        : flex;
+    flex-direction : row;
+    justify-content: space-between;
+    .satisfaction-card-text {
+      width        : 75%;
+      line-height  : 28px;
+      align-self: center;
+      font-size: 20px;
+      padding-left: 10px;
+    }
+    .pam-satisfaction-avatar{
+      height: 80px;
+      width: 80px;
+      border-radius: 50%;
+      background-color:#F09491;
+      justify-content: center;
+      align-items: center;
+      display: flex;
+      .pam-satisfaction-avatar-txt{
+        font-size: 18px;
+        color: #fff;
+      }
+    }
+
+    @include desktop {
+        justify-content: flex-start;
+        .satisfaction-card-text {
+          width        : auto;
+          padding-left: 30px;
+        }
+      }
+  }
+
+}
+</style>
diff --git a/PAMapp/pages/userReviews/index.vue b/PAMapp/pages/userReviews/index.vue
index 96b0cd9..03e9059 100644
--- a/PAMapp/pages/userReviews/index.vue
+++ b/PAMapp/pages/userReviews/index.vue
@@ -1,109 +1,104 @@
-<template> 
-<div class="reviews-page">
-    <!-- 憿批恥��遛��漲蝯阡“��� -->
-    <div class="reviews-banner"></div>
+<template>
+    <div class="reviews-page">
+        <!-- 憿批恥��遛��漲蝯阡“��� -->
+        <div class="reviews-banner"></div>
 
-    <section class="reviews-container"> 
-        <section class="reviews-header">
-            <div class="reviews-header-container">
-                <div class="reviews-header-title">皛踵�漲隤踵</div>
-                <!-- <div class="reviews-header-subTitle">�{{ reviewsList.length }}蝑�</div> -->
-            </div>
-        </section>
+        <section class="reviews-container">
+            <section class="reviews-header">
+                <div class="reviews-header-container">
+                    <div class="reviews-header-title">皛踵�漲隤踵</div>
+                    <!-- <div class="reviews-header-subTitle">�{{ reviewsList.length }}蝑�</div> -->
+                </div>
+            </section>
 
-        <section class="reviews-content">
-            <div class="reviews-content-card" v-for="(item,index) in reviewsList" :key="(index)">
-                <div class="card-body">
-                    <div class="card-avatar">
-                        <img :src="item.avatar" class="img">
-                    </div>
-                    <div class="card-txt">
-                        撠憿批��
-                        <span class="p">{{item.name}}</span>��擃���,�蝯虫�嗾憿���?
-                        <div 
-                            class="card-score"
-                            v-if="!isMobileDevice">
-                            <el-rate class="user-reviews-rate" v-model="item.avgScore"></el-rate>
+            <section class="reviews-content">
+                <div class="reviews-content-card" v-for="(item,index) in reviewsList" :key="(index)">
+                    <div class="card-body">
+                        <div class="card-avatar">
+                            <img :src="item.avatar" class="img">
+                        </div>
+                        <div class="card-txt">
+                            撠憿批��
+                            <span class="p">{{item.name}}</span>��擃���,�蝯虫�嗾憿���?
+                            <div
+                                class="card-score"
+                                v-if="!isMobileDevice">
+                                <el-rate class="user-reviews-rate" v-model="item.avgScore"></el-rate>
+                            </div>
                         </div>
                     </div>
+                    <div
+                        class="card-score"
+                        v-if="isMobileDevice">
+                        <el-rate
+                            class="user-reviews-rate"
+                            v-model="item.avgScore"></el-rate>
+                    </div>
                 </div>
-                <div 
-                    class="card-score"
-                    v-if="isMobileDevice">
-                    <el-rate 
-                        class="user-reviews-rate"
-                        v-model="item.avgScore"></el-rate>
-                </div>
-            </div>
+            </section>
         </section>
-    </section>
 
-    <section class="reviews-footer">
-        <el-button type="primary" class="reviews-footer-btn" @click.native="sendReviews">�</el-button>
-    </section>
-    <PopUpFrame :isOpen.sync="showReviews">
-        <div class="reviews-dialog">
-            <span class="reviews-dialog-title">閰摰��!</span>
-        </div>
-        <div class="reviews-btn-block">
-            <el-button type="primary" class="reviews-dialog-btn" @click.native="reviewsDialogCheck">������</el-button>
-        </div>
-    </PopUpFrame>
-    
-
-</div>
+        <section class="reviews-footer">
+            <el-button type="primary" class="reviews-footer-btn" @click.native="sendReviews">�</el-button>
+        </section>
+        <PopUpFrame :isOpen.sync="showReviews">
+            <div class="reviews-dialog">
+                <span class="reviews-dialog-title">閰摰��!</span>
+            </div>
+            <div class="reviews-btn-block">
+                <el-button type="primary" class="reviews-dialog-btn" @click.native="reviewsDialogCheck">������</el-button>
+            </div>
+        </PopUpFrame>
+    </div>
 </template>
-<script lang="ts">
-import { Vue,Component } from 'vue-property-decorator'
-import { isMobileDevice } from '~/assets/ts/device';
 
+<script lang="ts">
+import { ReviewsList } from '~/shared/models/reviewsList.model';
+import { Vue,Component } from 'vue-property-decorator'
+import UtilsService from '~/shared/services/utils.service';
 
 @Component({
     layout: 'home'
 })
 export default class UserReviews extends Vue{
+  isMobileDevice = true;
+  showReviews = false;
+  reviewsList:ReviewsList[] = [
+      {
+          avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
+          name:'�蝢��',
+          avgScore: 0
+      },
+      {
+          avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
+          name:'鞈�',
+          avgScore: 0
+      },
+      {
+          avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
+          name:'������',
+          avgScore: 0
+      }
+  ];
 
-    isMobileDevice = true;
+  //////////////////////////////////////////////////////////////////////
+  mounted() {
+      this.isMobileDevice = UtilsService.isMobileDevice();
+  };
 
-    showReviews = false;
+  //////////////////////////////////////////////////////////////////////
+  reviewsDialogCheck(): void {
+      this.reviewsList = this.reviewsList.filter((reviewItem) => !reviewItem.avgScore);
+      this.showReviews = false;
+  };
 
-    reviewsList:ReviewsList[] = [
-        {
-            avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
-            name:'�蝢��',
-            avgScore: 0
-        },
-        {
-            avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
-            name:'鞈�',
-            avgScore: 0
-        },
-        {
-            avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
-            name:'������',
-            avgScore: 0
-        }
-    ];
-
-    reviewsDialogCheck(): void {
-        this.reviewsList = this.reviewsList.filter((reviewItem) => !reviewItem.avgScore);
-        this.showReviews = false;
-    };
-
-    mounted() {
-        this.isMobileDevice = isMobileDevice();
-    };
-
-    sendReviews() {
-        this.showReviews = true;
-    };
+  sendReviews() {
+      this.showReviews = true;
+  };
 }
-export interface ReviewsList{
-    avatar:any;
-    name:string;
-    avgScore:number;
-}
+
 </script>
+
 <style lang="scss" scoped>
 .reviews-page{
     background-color: #F8F9FA;
@@ -209,4 +204,4 @@
 
 }
 
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/pages/userReviewsRecord/index.vue b/PAMapp/pages/userReviewsRecord/index.vue
index a0665d9..a161107 100644
--- a/PAMapp/pages/userReviewsRecord/index.vue
+++ b/PAMapp/pages/userReviewsRecord/index.vue
@@ -1,68 +1,20 @@
 <template>
-
-<div class="user-reviews-page">
-    <section class="mdTxt">
-        �������
-    </section>
-
-    <section class="user-reviews-header">
-        <div class="header-title mdTxt">
-            皛踵�漲蝝����
-        </div>
-    </section>
-
-    <section class="user-reviews-content">
-        <div 
-            class="user-reviews-card"
-            v-for="(appointmentLog, index) in myAppointmentReviewLogList"
-            :key="index">
-            <div class="user-reviews-card-content" v-if="currentRole === 'user'">
-                �撠�<span class="mdTxt">{{ ` ${appointmentLog.agentName} ` }}</span>���� <UiReviewScore :score="appointmentLog.score" /> 閰嚗�
-            </div>
-            <div class="user-reviews-card-content" v-else>
-                {{ `${appointmentLog.clientName} `}} 撠���� <UiReviewScore :score="appointmentLog.score" /> 閰嚗�
-            </div>
-            <div class="user-reviews-card-date">
-                <div class="date">
-                    <UiDateFormat 
-                        :date="appointmentLog.lastModifiedDate"
-                        onlyShowSection="DAY" />
-                </div>
-                <div class="time">
-                    <UiDateFormat 
-                        :date="appointmentLog.lastModifiedDate"
-                        onlyShowSection="TIME" />
-                </div>
-            </div>
-        </div>
-    </section>
-  
-</div>
-
+  <div>
+    <ReviewRecords
+      :reviewLogList="reviewLogList"
+    ></ReviewRecords>
+  </div>
 </template>
 <script lang="ts">
-import { Vue, Component, Action, State, namespace } from 'nuxt-property-decorator';
-import { AppointmentLog } from '~/assets/ts/models/appointment.model';
-
-const roleStorage = namespace('localStorage');
+import { AppointmentLog } from '~/shared/models/appointment.model';
+import { Vue, Component, Action, State } from 'nuxt-property-decorator';
 
 @Component
 export default  class UserReviewsRecord extends Vue{
 
-    today = new Date();
+    @State('reviewLogList')
+    reviewLogList!: AppointmentLog[];
 
-    @roleStorage.Getter currentRole!:string;
-
-    @State('myAppointmentReviewLogList') myAppointmentReviewLogList!: AppointmentLog[];
-
-    @Action storeMyAppointmentReviewLog!: any;
-
-    appointmentLogList: AppointmentLog[] = [];
-
-    mounted() {
-        this.storeMyAppointmentReviewLog();
-    }
-    
 }
 </script>
 <style lang="scss" scoped>
@@ -99,7 +51,7 @@
                 width:52px;
                 .date{
                     margin-bottom: 2px;
-                    
+
                 }
             }
         }
@@ -110,4 +62,4 @@
         flex: 1;
     }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/PAMapp/plugins/filters/appointment-fail-reason.filter.ts b/PAMapp/plugins/filters/appointment-fail-reason.filter.ts
new file mode 100644
index 0000000..7df365f
--- /dev/null
+++ b/PAMapp/plugins/filters/appointment-fail-reason.filter.ts
@@ -0,0 +1,16 @@
+import Vue from 'vue'
+import { appointmentFailReasonList } from '~/shared/const/appointment-fail-reason-list';
+
+Vue.filter('toFailReasonLabel', (value: string): string => {
+
+  if (!value ||  typeof value !== 'string') {
+    return '--';
+  };
+
+  let failReasonLabel = {};
+  appointmentFailReasonList.forEach((failReason) => {
+    failReasonLabel[failReason.value] = failReason.key;
+  });
+
+  return  failReasonLabel[value];
+})
diff --git a/PAMapp/plugins/filters/date.filter.ts b/PAMapp/plugins/filters/date.filter.ts
index 069a7af..daa1f12 100644
--- a/PAMapp/plugins/filters/date.filter.ts
+++ b/PAMapp/plugins/filters/date.filter.ts
@@ -29,9 +29,9 @@
   if (isThisYear(date)) {
     return isToday(date)
           ? `隞予 ${date.getHours()}:${minutes}`
-          : `${date.getMonth() + 1}���${date.getDate()}� ${date.getHours()}:${minutes}`;
+          : `${date.getMonth() + 1}/${date.getDate()} ${date.getHours()}:${minutes}`;
   } else {
-    return `${date.getFullYear()}撟�${date.getMonth() + 1}���${date.getDate()}� ${date.getHours()}:${minutes}`;
+    return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()} ${date.getHours()}:${minutes}`;
   };
 
 })
diff --git a/PAMapp/plugins/filters/serve-area.filter.ts b/PAMapp/plugins/filters/serve-area.filter.ts
new file mode 100644
index 0000000..fea5751
--- /dev/null
+++ b/PAMapp/plugins/filters/serve-area.filter.ts
@@ -0,0 +1,16 @@
+import { taiwanCities } from '~/shared/const/taiwan-cities';
+
+import Vue from 'vue'
+
+Vue.filter('toServeArea', (value: string): string => {
+
+  if (!value || typeof value !== 'string') {
+    return '--';
+  }
+
+  const serveAreaLength = value.split('��').length;
+
+  return serveAreaLength === taiwanCities.length
+        ? '��'
+        : value;
+})
diff --git a/PAMapp/shared/const/agent-communication-style-list.ts b/PAMapp/shared/const/agent-communication-style-list.ts
new file mode 100644
index 0000000..75c41a7
--- /dev/null
+++ b/PAMapp/shared/const/agent-communication-style-list.ts
@@ -0,0 +1 @@
+export const agentCommunicationStyleList = ['雓寞��祕', '��翰銝餃��', '���', '�隢◢頞�'];
diff --git a/PAMapp/shared/const/agent-expert-list.ts b/PAMapp/shared/const/agent-expert-list.ts
new file mode 100644
index 0000000..2926d45
--- /dev/null
+++ b/PAMapp/shared/const/agent-expert-list.ts
@@ -0,0 +1 @@
+export const agentExpertList = ['�摨瑁����', '摮戊��', '鞈閬��', '璅暑��隡�', '靽�瑼�/閬��', '����'];
diff --git a/PAMapp/shared/const/appointment-fail-reason-list.ts b/PAMapp/shared/const/appointment-fail-reason-list.ts
new file mode 100644
index 0000000..3e8f309
--- /dev/null
+++ b/PAMapp/shared/const/appointment-fail-reason-list.ts
@@ -0,0 +1,26 @@
+export const appointmentFailReasonList = [
+  {
+    key: '�瘜蝜怠恥�',
+    value: 'cannot_to_contact_customer'
+  },
+  {
+    key: '�蝝垣閰�',
+    value: 'only_consultation'
+  },
+  {
+    key: '�������',
+    value: 'no_suitable_commodity'
+  },
+  {
+    key: '�靽���- 擃��瓷���璆�',
+    value: 'prohibited_factors'
+  },
+  {
+    key: '蝬����',
+    value: 'economy'
+  },
+  {
+    key: '�隞�',
+    value: 'other'
+  },
+];
diff --git a/PAMapp/shared/const/consult-questions.ts b/PAMapp/shared/const/consult-questions.ts
new file mode 100644
index 0000000..61e7846
--- /dev/null
+++ b/PAMapp/shared/const/consult-questions.ts
@@ -0,0 +1 @@
+export const consultantQuestions = ['�摨瑁����', '摮戊��', '鞈閬��', '璅暑��隡�', '靽�瑼�/閬��', '����'];
diff --git a/PAMapp/shared/const/day-time-frames.ts b/PAMapp/shared/const/day-time-frames.ts
new file mode 100644
index 0000000..bfd8537
--- /dev/null
+++ b/PAMapp/shared/const/day-time-frames.ts
@@ -0,0 +1,18 @@
+export const dayTimeFrames = [
+  {
+    title:'9:00~12:00',
+    label:'9:00~12:00',
+  },
+  {
+    title:'12:00~14:00',
+     label:'12:00~14:00',
+  },
+  {
+    title:'14:00~18:00',
+     label:'14:00~18:00',
+  },
+  {
+    title:'18:00~21:00',
+    label:'18:00~21:00',
+  }
+];
diff --git a/PAMapp/shared/const/faqList.ts b/PAMapp/shared/const/faqList.ts
new file mode 100644
index 0000000..fc1a25e
--- /dev/null
+++ b/PAMapp/shared/const/faqList.ts
@@ -0,0 +1,43 @@
+export const faqList = [
+    {
+        label: '�����閮餃���',
+        details: [
+            { label: '��暺�銝����內敺�����嚚酉����脰����酉����' }
+        ]
+    },
+    {
+        label: '���閮餃���雿瘜�撽�Ⅳ嚗�',
+        details: [
+            { label: '����閮餃���' },
+            { label: ' (嚗�) 隢��靽⊥平�Ⅱ隤������隡平蝪∟��誨��陛閮�Ⅱ隤靽⊥平�垢閮剖���敺��銝�撠�������' },
+            { label: ' (嚗�) 隢蝣箄���摮蝪∟�捆��征���撌脫遛嚗撌脫遛嚗�����陛閮����������' },
+            { label: ' (嚗�) 隢蝣箄�����閮�帘��閮�����嚗�嚗���閮憟賜���嚗�������'},
+            { label: ' (嚗�) ��������車��蕪靘頠�����hoscall�瘥����閮剖���靘�陛閮��迂�蝬◤閮剖���'},
+            { label: '�mail��閮餃���'},
+            { label: ' (嚗�) ����憛怠神��mail撣唾����撓���隤歹��瑼X甇�蝣箇�mail��活����酉����'},
+            { label: ' (嚗�) ������mail�����撽�縑���靽∴�遣霅唳����隞嗅銝剛����蒂撠�身摰����隞嗚��'},
+            { label: ' (嚗�) ������mail������璈�����縑嚗遣霅唳��蝯⊥��mail�����雿輻�隞�mail撣唾��閮餃���'}
+        ]
+    },
+    {
+        label: '�����脰�“������',
+        details: [
+            { label: '(嚗�) ���擐����翰�祟������������脰�“������'},
+            { label: '(嚗�) 敹恍�祟�嚗隞仿��遙銝���辣嚗翰��蝚血���瘙�“��������撓������������瘙���憿批���'}
+        ]
+    },
+    {
+        label: '������“����',
+        details: [
+            { label: '靘�翰�祟�������������������憿批������脣憿批���������脰�����‵撖怨蝯⊥���閰W����誑���犖鞈���������'}
+        ]
+    },
+    {
+        label: '����������楊頛舫��嚗�',
+        details: [{ label: '���憿批��銝剝���歇�����“����脣������嚗�脰��������楊頛胯��'}]
+    },
+    {
+        label: '���脰�����“���隞�暻潭撘蝜急���',
+        details: [{ label: '憿批���������酉��������蝯∟������MAIL嚗銝餉�蝜急��撘��'}]
+    }
+]
\ No newline at end of file
diff --git a/PAMapp/shared/const/hide-reviews.ts b/PAMapp/shared/const/hide-reviews.ts
new file mode 100644
index 0000000..35d2e34
--- /dev/null
+++ b/PAMapp/shared/const/hide-reviews.ts
@@ -0,0 +1 @@
+export const hideReviews = false;
diff --git a/PAMapp/shared/const/quickFilter-questionList.ts b/PAMapp/shared/const/quickFilter-questionList.ts
new file mode 100644
index 0000000..3539755
--- /dev/null
+++ b/PAMapp/shared/const/quickFilter-questionList.ts
@@ -0,0 +1,48 @@
+import { Seniority } from "../models/enum/seniority";
+import { QuestionOption } from "../models/quick-filter.model";
+
+
+export const questionList: QuestionOption[] = [
+    {
+        name: 'gender',
+        title: '憿批��批',
+        detail: [
+            { name: '���', value: 'male', className: 'btn_man'},
+            { name: '憟單��', value: 'female', className: 'btn_woman'}
+        ],
+        type: 'radio'
+    },
+    {
+        name: 'avgScore',
+        title: '憿批�遛��漲',
+        detail: [],
+        type: ''
+    },
+    {
+        name: 'communicationStyles',
+        title: '皞�◢�',
+        detail: [
+            { value: '雓寞��祕', className: 'btn_owl'},
+            { value: '��翰銝餃��', className: 'btn_tiger'},
+            { value: '���', className: 'btn_koala'},
+            { value: '�隢◢頞�', className: 'btn_peacock'}
+        ],
+        type: 'checkbox'
+    },
+    {
+        name: 'seniority',
+        title: '憿批�僑鞈�',
+        detail: [
+            { name: '銝��', value: Seniority.UNLIMITED, subTitle: '撟湧翩銝����', className: 'btn_unlimited' },
+            { name: '撟渲��', value: Seniority.YOUNG, subTitle: '蝯血僑頛犖銝�����', className: 'btn_young' },
+            { name: '鞈楛', value: Seniority.SENIOR, subTitle: '����麾', className: 'btn_senior' }
+        ],
+        type: 'radio'
+    }
+    // {
+    //     name: 'status',
+    //     title: '銝�����',
+    //     detail: [],
+    //     type: 'radio'
+    // }
+];
diff --git a/PAMapp/shared/const/taiwan-cities.ts b/PAMapp/shared/const/taiwan-cities.ts
new file mode 100644
index 0000000..d1946cd
--- /dev/null
+++ b/PAMapp/shared/const/taiwan-cities.ts
@@ -0,0 +1 @@
+export const taiwanCities = ['�����', '�����', '�����', '獢���', '�蝡孵��', '�蝡寧腦', '���腦', '�銝剖��', '敶啣�腦', '���腦', '���腦', '��儔撣�', '��儔蝮�', '�����', '擃���', '撅蝮�', '��蝮�', '��蝮�', '摰蝮�', '瞉�腦', '���蝮�', '��瘙腦'];
diff --git a/PAMapp/shared/const/week-days.ts b/PAMapp/shared/const/week-days.ts
new file mode 100644
index 0000000..16f6b68
--- /dev/null
+++ b/PAMapp/shared/const/week-days.ts
@@ -0,0 +1,29 @@
+export const weekDays = [
+  {
+    title:'����',
+    label:'����'
+  },
+   {
+    title:'�����',
+    label:'�����'
+  },
+   {
+    title:'�����',
+    label:'�����'
+  },
+   {
+    title:'�����',
+    label:'�����'
+  },
+   {
+    title:'�����',
+    label:'�����'
+  }, {
+    title:'���',
+    label:'���'
+  },
+   {
+    title:'���',
+    label:'���'
+  },
+];
diff --git a/PAMapp/assets/ts/models/ConsultantLoginInfo.ts b/PAMapp/shared/models/ConsultantLoginInfo.ts
similarity index 100%
rename from PAMapp/assets/ts/models/ConsultantLoginInfo.ts
rename to PAMapp/shared/models/ConsultantLoginInfo.ts
diff --git a/PAMapp/shared/models/account.model.ts b/PAMapp/shared/models/account.model.ts
new file mode 100644
index 0000000..f2e0e03
--- /dev/null
+++ b/PAMapp/shared/models/account.model.ts
@@ -0,0 +1,24 @@
+export interface UserSetting {
+    name  : string;
+    phone?: string;
+    email?: string;
+}
+
+export interface AgentInfoSetting{
+    agentNo           : string;
+    name              : string;
+    expertise         : string[];
+    title             : string;
+    role              : string;
+    serveArea         : string[];
+    gender            : string;
+    phoneNumber       : string;
+    companyAddress    : string;
+    seniorityYear     : number;
+    seniorityMonth    : number;
+    concept           : string;
+    experiences        : string;
+    awards           : string;
+    communicationStyle: string;
+    photoBase64       : string;
+}
diff --git a/PAMapp/shared/models/agent-info.model.ts b/PAMapp/shared/models/agent-info.model.ts
new file mode 100644
index 0000000..e6af754
--- /dev/null
+++ b/PAMapp/shared/models/agent-info.model.ts
@@ -0,0 +1,22 @@
+export interface AgentInfo {
+  agentNo           : string;
+  avgScore          : number;
+  awards            : string;
+  communicationStyle: string;
+  companyAddress    : string;
+  concept           : string;
+  email?            : string;
+  evaluation        : number;
+  experiences       : string;
+  expertise         : string[];
+  gender            : string,
+  img               : string;
+  latestLoginTime   : Date  ;
+  name              : string;
+  phoneNumber       : string;
+  role              : string;
+  seniority         : string;
+  serveArea         : string;
+  suitability       : number;
+  title             : string;
+}
diff --git a/PAMapp/shared/models/appointment.model.ts b/PAMapp/shared/models/appointment.model.ts
new file mode 100644
index 0000000..9bb43ba
--- /dev/null
+++ b/PAMapp/shared/models/appointment.model.ts
@@ -0,0 +1,187 @@
+import { ContactStatus } from "./enum/contact-status";
+import { SatisfactionType } from "./enum/satisfaction-type";
+
+export interface AppointmentLog {
+  id              : number;
+  createdDate     : string;
+  lastModifiedDate: string;
+  customerId      : number;
+  agentNo         : string;
+  status          : 'UNFILLED' | 'FILLED';
+  score           : number;
+  appointmentId   : number;
+  customerName    : string;
+  agentName       : string;
+  type            : SatisfactionType;
+}
+
+export interface Appointment {
+  age                  : string;
+  agentNo              : string;
+  appointmentClosedInfo: AppointmentClosedInfo;
+  appointmentDate      : string;
+  appointmentMemoList  : AppointmentMemoInfo[]
+  appointmentNoticeLogs: NoticeLogs[];
+  communicateStatus    : ContactStatus;
+  consultantReadTime   : string;
+  consultantViewTime   : string;
+  contactTime          : string;
+  contactType          : string;
+  customerId           : number;
+  email                : string;
+  gender               : string;
+  hopeContactTime      : string;
+  id                   : number;
+  interviewRecordDTOs  : InterviewRecord[];
+  job                  : string;
+  lastModifiedDate     : string;
+  name                 : string;
+  otherRequirement     : string;
+  phone                : string;
+  requirement          : string;
+  satisfactionScore    : number;
+};
+
+export interface AppointmentClosedInfo {
+  appointmentId         : number;
+  closedOtherReason     : string;
+  closedReason          : string;
+  id                    : number;
+  planCode              : string;
+  policyEntryDate       : string;
+  policyholderIdentityId: string;
+  remark                : string;
+}
+
+export interface AppointmentMemoInfo {
+  appointmentId: number;
+  content      : string;
+  id           : number;
+}
+
+export interface InterviewRecord {
+  appointmentId   : number;
+  content         : string;
+  createdBy       : string;
+  createdDate     : string;
+  id              : number;
+  interviewDate   : string;
+  lastModifiedBy  : string;
+  lastModifiedDate: string;
+}
+
+export interface NoticeLogs {
+  appointmentId: number,
+  content      : string,
+  createdDate  : string
+  email        : string,
+  id           : number,
+  phone        : string,
+}
+
+export interface AppointmentWithConsultantInfo extends Appointment {
+  consultantAvatar    : string;
+  consultantExpertList: string[];
+  consultantName      : string;
+  contactStatus       : string;
+  updateTime          : string;
+}
+
+export interface AppointmentParams {
+  age            : string;
+  agentNo        : string;
+  contactType    : string;
+  email          : string;
+  gender         : string;
+  hopeContactTime: string;
+  job            : string;
+  phone          : string;
+  requirement    : string;
+}
+
+export interface EditAppointmentParams {
+  age             : string;
+  contactType     : string;
+  email           : string;
+  gender          : string;
+  hopeContactTime : string;
+  id              : number;
+  job             : string;
+  otherRequirement: null;
+  phone           : string;
+  requirement     : string;
+}
+
+export interface AppointmentRequests {
+  age            : string;
+  agentNo        : string;
+  contactType    : string;
+  email          : string;
+  name           : string;
+  gender         : string;
+  hopeContactTime: ContactTime[];
+  job            : string;
+  phone          : string;
+  requirement    : string[];
+}
+
+export interface ContactTime {
+  selectTimesOptions: string[];
+  selectWeekOptions : string[];
+}
+
+export interface createdMemoInfo {
+  appointmentId: number;
+  content      : string;
+}
+
+export interface updatedMemoInfo {
+  content: string;
+  id     : number;
+}
+
+export interface ToDoneAppointment {
+    appointmentId         : number;
+    contactStatus         : ContactStatus;
+    planCode              : string;
+    policyEntryDate       : string;
+    policyholderIdentityId: string;
+    remark?               : string;
+}
+
+export interface ToCloseAppointment {
+  appointmentId    : number;
+  closedOtherReason: string;
+  closedReason     : string;
+  contactStatus    : ContactStatus;
+  remark?          : string;
+}
+
+export interface NoticeLogs {
+  appointmentId: number;
+  content      : string;
+  createdDate  : string;
+  email        : string;
+  id           : number;
+  interviewDate: string;
+  phone        : string;
+}
+
+export interface ToInformAppointment {
+  appointmentId: number;
+  email        : string;
+  interviewDate: string;
+  message      : string;
+  phone        : string;
+}
+
+export interface InterviewRecordInfo {
+  content: string;
+  interviewDate: string;
+  appointmentId: number;
+}
+
+export interface UpdateInterviewRecordInfo {
+  /** interviewRecord id */
+  id: number;
+}
diff --git a/PAMapp/shared/models/consultant.model.ts b/PAMapp/shared/models/consultant.model.ts
new file mode 100644
index 0000000..69bb11c
--- /dev/null
+++ b/PAMapp/shared/models/consultant.model.ts
@@ -0,0 +1,25 @@
+import { Appointment } from "./appointment.model";
+
+export interface Consultant {
+    agentNo          : string;
+    appointments?    : Appointment[];
+    avgScore         : number;
+    contactStatus?   : string;
+    createTime       : string;
+    customerViewTime?: string;
+    expertise        : string[];
+    img              : string;
+    name             : string;
+    role             : string;
+    seniority        : string;
+    updateTime       : string;
+}
+
+export interface ConsultantWithAppointmentId extends Consultant {
+  appointmentDate            : string;
+  appointmentId              : number;
+  appointmentLastModifiedDate: string;
+  appointmentScore?          : number;
+  appointmentStatus          : string;
+}
+
diff --git a/PAMapp/shared/models/editAppointmentParams.model.ts b/PAMapp/shared/models/editAppointmentParams.model.ts
new file mode 100644
index 0000000..39d8078
--- /dev/null
+++ b/PAMapp/shared/models/editAppointmentParams.model.ts
@@ -0,0 +1,12 @@
+export interface editAppointmentParams {
+  id: number,
+  phone: string,
+  email: string,
+  contactType: string,
+  gender: string,
+  age: string,
+  job: string,
+  requirement: string,
+  hopeContactTime: string,
+  otherRequirement: null
+}
diff --git a/PAMapp/assets/ts/models/enum/ContactType.ts b/PAMapp/shared/models/enum/ContactType.ts
similarity index 100%
rename from PAMapp/assets/ts/models/enum/ContactType.ts
rename to PAMapp/shared/models/enum/ContactType.ts
diff --git a/PAMapp/assets/ts/models/enum/Gender.ts b/PAMapp/shared/models/enum/Gender.ts
similarity index 100%
rename from PAMapp/assets/ts/models/enum/Gender.ts
rename to PAMapp/shared/models/enum/Gender.ts
diff --git a/PAMapp/shared/models/enum/Role.ts b/PAMapp/shared/models/enum/Role.ts
new file mode 100644
index 0000000..1b2823c
--- /dev/null
+++ b/PAMapp/shared/models/enum/Role.ts
@@ -0,0 +1,5 @@
+export enum Role{
+    ADMIN     = 'admin',
+    USER      = 'user',
+    NOT_LOGIN = ''
+}
diff --git a/PAMapp/shared/models/enum/contact-status.ts b/PAMapp/shared/models/enum/contact-status.ts
new file mode 100644
index 0000000..f38805f
--- /dev/null
+++ b/PAMapp/shared/models/enum/contact-status.ts
@@ -0,0 +1,8 @@
+export enum ContactStatus {
+  PICKED    = 'picked',
+  RESERVED  = 'reserved',
+  CONTACTED = 'contacted',
+  DONE      = 'done',
+  CLOSE     = 'closed',
+  CANCEL    = 'cancel',
+}
diff --git a/PAMapp/assets/ts/models/enum/otpErrorCode.ts b/PAMapp/shared/models/enum/otpErrorCode.ts
similarity index 100%
rename from PAMapp/assets/ts/models/enum/otpErrorCode.ts
rename to PAMapp/shared/models/enum/otpErrorCode.ts
diff --git a/PAMapp/shared/models/enum/satisfaction-type.ts b/PAMapp/shared/models/enum/satisfaction-type.ts
new file mode 100644
index 0000000..56cd162
--- /dev/null
+++ b/PAMapp/shared/models/enum/satisfaction-type.ts
@@ -0,0 +1,5 @@
+export enum SatisfactionType {
+  SYSTEM = 'SYSTEM',
+  APPOINTMENT = 'APPOINTMENT',
+}
+
diff --git a/PAMapp/assets/ts/models/enum/seniority.ts b/PAMapp/shared/models/enum/seniority.ts
similarity index 100%
rename from PAMapp/assets/ts/models/enum/seniority.ts
rename to PAMapp/shared/models/enum/seniority.ts
diff --git a/PAMapp/shared/models/loginRequest.model.ts b/PAMapp/shared/models/loginRequest.model.ts
new file mode 100644
index 0000000..99c2559
--- /dev/null
+++ b/PAMapp/shared/models/loginRequest.model.ts
@@ -0,0 +1,7 @@
+
+export interface LoginRequest {
+  /** "SMS"=�����"EMAIL"=email */
+  loginType: string;
+  /** �loginType憛俟MS��府甈葆�����MAIL��葆��隞嗡縑蝞� */
+  account: string;
+}
diff --git a/PAMapp/shared/models/loginSuccessToken.model.ts b/PAMapp/shared/models/loginSuccessToken.model.ts
new file mode 100644
index 0000000..98dfcd0
--- /dev/null
+++ b/PAMapp/shared/models/loginSuccessToken.model.ts
@@ -0,0 +1,4 @@
+
+export interface LoginSuccessToken {
+  id_token: string;
+}
diff --git a/PAMapp/shared/models/loginVerify.model.ts b/PAMapp/shared/models/loginVerify.model.ts
new file mode 100644
index 0000000..15ed5a6
--- /dev/null
+++ b/PAMapp/shared/models/loginVerify.model.ts
@@ -0,0 +1,9 @@
+
+export interface LoginVerify {
+  /** �撣嗅����mail */
+  account: string;
+  /** �otp��pi���ndex key */
+  indexKey: string;
+  /** �����縑蝞望�����Ⅳ */
+  otpCode: string;
+}
diff --git a/PAMapp/shared/models/optionBtnDto.model.ts b/PAMapp/shared/models/optionBtnDto.model.ts
new file mode 100644
index 0000000..474d2e5
--- /dev/null
+++ b/PAMapp/shared/models/optionBtnDto.model.ts
@@ -0,0 +1,9 @@
+export interface OptionBtnDto {
+  title    : string,
+  subTitle?: string,
+  label    : string | number,
+}
+export interface OptionDto{
+  selectAll: string,
+  options  : OptionBtnDto[],
+}
diff --git a/PAMapp/shared/models/otpInfo.model.ts b/PAMapp/shared/models/otpInfo.model.ts
new file mode 100644
index 0000000..657e006
--- /dev/null
+++ b/PAMapp/shared/models/otpInfo.model.ts
@@ -0,0 +1,9 @@
+
+export interface OtpInfo {
+  /** ��撣嗅otp隤��� */
+  indexKey: string;
+  /** Otp�������� */
+  success: boolean;
+  failCode: string;
+  failReason: string;
+}
diff --git a/PAMapp/shared/models/quick-filter.model.ts b/PAMapp/shared/models/quick-filter.model.ts
new file mode 100644
index 0000000..0516095
--- /dev/null
+++ b/PAMapp/shared/models/quick-filter.model.ts
@@ -0,0 +1,27 @@
+export interface QuestionOption {
+    title : string;
+    detail: Detail[];
+    type  : string;
+    name  : string;
+}
+
+interface Detail {
+    value    : string;
+    name?    : string;
+    className: string;
+    subTitle?: string
+}
+
+export interface FastQueryParams {
+    gender             : string,
+    communicationStyles: string[],
+    avgScore           : number,
+    status             : string,
+    /** "鞈楛"撣�"SENIOR"��"撟渲��"撣�"YOUNG"��"銝��"撣�"UNLIMITED" */
+    seniority          : string
+}
+
+export interface Selected {
+    option: string;
+    value : any;
+}
diff --git a/PAMapp/shared/models/registerInfo.ts b/PAMapp/shared/models/registerInfo.ts
new file mode 100644
index 0000000..e752493
--- /dev/null
+++ b/PAMapp/shared/models/registerInfo.ts
@@ -0,0 +1,10 @@
+
+export interface RegisterInfo {
+  phone?: string;
+  email?: string;
+  indexKey: string;
+  otpCode: string;
+  name: string;
+  /** "SMS"嚗tp������"EMAIL":Otp�email */
+  contactType: string;
+}
diff --git a/PAMapp/shared/models/reviews.model.ts b/PAMapp/shared/models/reviews.model.ts
new file mode 100644
index 0000000..e8eba03
--- /dev/null
+++ b/PAMapp/shared/models/reviews.model.ts
@@ -0,0 +1,32 @@
+import { SatisfactionType } from './enum/satisfaction-type';
+export interface UserReviewParams{
+  appointmentId: number,
+  score        : number,
+  type         : SatisfactionType,
+}
+
+export interface NotificationList {
+  id: number;
+  /** 璅�� */
+  title: string;
+  /** ��摰� */
+  content: string;
+  /** ACTIVITY(�犖瘣餃��)�YSTEM(蝟餌絞�) */
+  notificationType: string;
+  /** CUSTOMER(摰X)�ONSULTANT(憿批��) */
+  ownerRole: string;
+  /** ���d */
+  ownerId: number
+  createdDate: string;
+  /** 撌脰����� */
+  readDate: string;
+}
+
+export interface UserReviewPlatformRes {
+  agentNo?     : string;
+  appointmentId: number;
+  customerId   : string;
+  id           : number,
+  score        : string;
+  type         : SatisfactionType;
+}
diff --git a/PAMapp/shared/models/reviewsList.model.ts b/PAMapp/shared/models/reviewsList.model.ts
new file mode 100644
index 0000000..51eefb7
--- /dev/null
+++ b/PAMapp/shared/models/reviewsList.model.ts
@@ -0,0 +1,5 @@
+export interface ReviewsList{
+  avatar:any;
+  name:string;
+  avgScore:number;
+}
diff --git a/PAMapp/shared/models/strict-query.model.ts b/PAMapp/shared/models/strict-query.model.ts
new file mode 100644
index 0000000..a0e4738
--- /dev/null
+++ b/PAMapp/shared/models/strict-query.model.ts
@@ -0,0 +1,27 @@
+
+export interface StrictQueryParams {
+  gender?          : string;
+  avgScore?        : number;
+  status?          : string;    //phase 1 disable
+  area?            : string;
+  requirements?    : string[];
+  otherRequirement?: string;
+  seniority?       : string;
+  popularTags?     : string[];
+  otherPopularTags?: string;
+}
+
+export interface AgentOfStrictQuery {
+  agentNo      : string;
+  name         : string;
+  img          : string;
+  expertise    : string[];
+  suitability  : number;
+  avgScore     : number;
+  contactStatus: null;
+  updateTime   : null;
+  seniority    : string;
+  role         : string;
+  new          : boolean;
+  latestAppointmentId :null
+}
diff --git a/PAMapp/shared/models/strictQueryDto.model.ts b/PAMapp/shared/models/strictQueryDto.model.ts
new file mode 100644
index 0000000..cd65db6
--- /dev/null
+++ b/PAMapp/shared/models/strictQueryDto.model.ts
@@ -0,0 +1,11 @@
+export interface StrictQueryDto {
+  gender: string,
+  area: string,
+  status: string,
+  requirements: string[],
+  otherRequirement: string,
+  seniority: string,
+  avgScore: number,
+  popularTags: string[],
+  otherPopularTags: string
+}
diff --git a/PAMapp/shared/services/account-setting.service.ts b/PAMapp/shared/services/account-setting.service.ts
new file mode 100644
index 0000000..f938e76
--- /dev/null
+++ b/PAMapp/shared/services/account-setting.service.ts
@@ -0,0 +1,22 @@
+import { http } from "./httpClient";
+
+import { AgentInfoSetting, UserSetting } from "~/shared/models/account.model";
+
+class AccountSettingService{
+
+  //���蝙��董�����
+  async getUserAccountSetting() : Promise<UserSetting> {
+    return http.get<UserSetting>('/customer/info').then(res => res.data);
+  }
+  //��雿輻�董�����
+  async updateAccountSetting(params: any) : Promise<any> {
+    return http.put('/customer/info', params ).then(res => res.data);
+  }
+
+  //蝺刻摩憿批�董�����
+  async editAgentInfoSetting(params:any):  Promise<AgentInfoSetting>{
+    return http.post('/consultant/edit',params).then(res => res.data);
+  }
+
+}
+export default new AccountSettingService();
diff --git a/PAMapp/shared/services/appointment.service.ts b/PAMapp/shared/services/appointment.service.ts
new file mode 100644
index 0000000..6ba2c18
--- /dev/null
+++ b/PAMapp/shared/services/appointment.service.ts
@@ -0,0 +1,95 @@
+import { http } from "./httpClient";
+
+import { Appointment, AppointmentMemoInfo, createdMemoInfo, EditAppointmentParams,  InterviewRecordInfo, ToCloseAppointment, ToDoneAppointment, ToInformAppointment, updatedMemoInfo, UpdateInterviewRecordInfo } from "~/shared/models/appointment.model";
+
+class AppointmentService {
+
+  // 憿批������撌梁���API
+  async getMyAppointmentList(): Promise<Appointment[]> {
+    return http.get('/consultant/getMyAppointment').then((res) => {
+      const hasNewAppointment = res.data.find((appointment: Appointment) => !appointment.consultantViewTime);
+      if (hasNewAppointment) {
+        this.viewAllAppointment();
+      }
+      return res.data;
+    });
+  }
+
+  // 憿批��汗�撌望������蝝���孛�API
+  private viewAllAppointment(): void {
+    http.post('/consultant/record/allAppointmentsView').then();
+  }
+
+  // 霈�������孛�嚗������������
+  recordRead(appointmentId: number): Promise<void> {
+    return http.post(`/appointment/recordRead/${appointmentId}`);
+  }
+
+  // �����蝝啁�
+  async getAppointmentDetail(appointmentId: number):Promise<Appointment> {
+    return http.get(`/appointment/getDetail/${appointmentId}`).then((res) => res.data);
+  }
+
+  // ������
+  cancelAppointment(appointmentId: number): Promise<void> {
+    return http.delete(`/appointment/${appointmentId}`);
+  }
+
+  // 蝺刻摩����
+  editAppointment(editAppointmentParams: EditAppointmentParams) {
+    return http.put('/appointment', editAppointmentParams);
+  }
+
+  // �憓酉閮�
+  async createMemo(memoInfo: createdMemoInfo): Promise<AppointmentMemoInfo> {
+    return http.post('/appointment/memo/create', memoInfo).then(res => res.data);
+  }
+
+  // 蝺刻摩閮餉��
+  async updateMemo(memoInfo: updatedMemoInfo): Promise<AppointmentMemoInfo> {
+    return http.post('/appointment/memo/update', memoInfo).then(res => res.data);
+  }
+
+  // ��閮餉��
+  deleteMemo(appointmentMemoId: number) {
+    return http.delete(`/appointment/memo/${appointmentMemoId}`)
+  }
+
+  // ���蝯��, ��蝯��敦
+  async closeAppointment(appointmentInfo: ToDoneAppointment | ToCloseAppointment) {
+    return http.post(`/appointment/close`, appointmentInfo).then((res) => res.data);
+  }
+
+  // 蝝赤� API
+  async informAppointment(appointmentInformation: ToInformAppointment) {
+    return http.post(`/notice/send`, appointmentInformation).then((res) => res.data);
+  }
+
+  // �憓�赤閮��
+  async createInterviewRecord(interviewRecordInfo: InterviewRecordInfo) {
+    return http.post('/interview_record/create', interviewRecordInfo).then(res => res.data);
+  }
+
+  // 靽格蝝赤閮��
+  async updateInterviewRecord(updateInterviewRecordInfo: UpdateInterviewRecordInfo) {
+    return http.post('/interview_record/update', updateInterviewRecordInfo)
+  }
+
+  // ��蝝赤閮��
+  async deleteInterviewRecord(interviewRecordId) {
+    return http.delete(`/interview_record/${interviewRecordId}`);
+  }
+
+  // 摰X��������������
+  async getNotContactAppointment(): Promise<Appointment> {
+    return http.get(`/appointment/customer/expiring/newest`).then((res) => res.data);
+  }
+
+  // 憿批������������
+  async getPendingAppointmentSum(): Promise<number> {
+    return http.get(`/appointment/consultant/pending/sum`).then((res) => res.data)
+  }
+
+}
+
+export default new AppointmentService();
diff --git a/PAMapp/shared/services/auth.service.ts b/PAMapp/shared/services/auth.service.ts
new file mode 100644
index 0000000..e467576
--- /dev/null
+++ b/PAMapp/shared/services/auth.service.ts
@@ -0,0 +1,14 @@
+import { Role } from "../models/enum/Role";
+
+class AuthService {
+
+  isAdminLogin(): boolean {
+    return localStorage.getItem('current_role') === Role.ADMIN;
+  }
+
+  isUserLogin(): boolean {
+    return localStorage.getItem('current_role') === Role.USER;
+  }
+}
+
+export default new AuthService();
diff --git a/PAMapp/shared/services/httpClient.ts b/PAMapp/shared/services/httpClient.ts
new file mode 100644
index 0000000..bafed6e
--- /dev/null
+++ b/PAMapp/shared/services/httpClient.ts
@@ -0,0 +1,83 @@
+import { AxiosRequestConfig, AxiosError, AxiosResponse} from 'axios';
+import axios from 'axios';
+import _ from 'lodash';
+
+import messageBoxService from './message-box.service';
+
+const notRequireInterceptorErrorUrl = [
+  '/otp/verify',
+  '/eService/authenticate',
+  '/login/validate/get_img_code',
+  '/login/validate/verify_img_code',
+];
+
+export const http = axios.create({
+  baseURL: process.env.BASE_URL,
+  withCredentials: true
+});
+
+let apiNumber = 0;
+
+http.interceptors.request.use(
+  (config: AxiosRequestConfig) => {
+    apiNumber += 1;
+    loadingStart();
+    addHttpHeader(config);
+    return config;
+  }
+);
+
+http.interceptors.response.use(
+  (response: AxiosResponse) => {
+    apiNumber -= 1;
+    if (apiNumber === 0) {
+      loadingFinish();
+    }
+    return response;
+  },
+  (error: AxiosError) => {
+    apiNumber -= 1;
+    if (apiNumber === 0) {
+      loadingFinish();
+    }
+    showErrorMessageBox(error)
+    return Promise.reject(error);
+  }
+);
+
+function addHttpHeader(config: AxiosRequestConfig): void {
+  config.headers = {
+    Authorization: 'Bearer ' + localStorage.getItem('id_token')
+  }
+}
+
+function loadingStart(): void {
+  setTimeout(() => {
+    window.$nuxt.$loading.start();
+  }, 0);
+};
+
+function loadingFinish(): void {
+  setTimeout(() => {
+    window.$nuxt.$loading.finish();
+  }, 0);
+};
+
+function showErrorMessageBox(error: any): void {
+  // console.log('error', error, error.response);
+  setTimeout(() => {
+    if (!_.includes(notRequireInterceptorErrorUrl, error.config.url)) {
+      switch (error.response.status) {
+        case 401:
+          Promise.all([messageBoxService.showErrorMessage('���暹��'), window.$nuxt.$store.dispatch('localStorage/actionStorageClear')]).then(() => {
+            _.isEqual(window.$nuxt.$route.name, 'index') ? location.reload() : window.$nuxt.$router.push('/');
+          });
+          break;
+
+        default:
+          messageBoxService.showErrorMessage('', error);
+          break;
+      }
+    }
+  }, 0)
+};
diff --git a/PAMapp/shared/services/login.service.ts b/PAMapp/shared/services/login.service.ts
new file mode 100644
index 0000000..26bf0f2
--- /dev/null
+++ b/PAMapp/shared/services/login.service.ts
@@ -0,0 +1,52 @@
+import { http } from "./httpClient";
+import { AxiosResponse } from 'axios';
+import _ from "lodash";
+
+import { ConsultantLoginInfo } from "../models/ConsultantLoginInfo";
+import { LoginRequest } from "../models/loginRequest.model";
+import { LoginSuccessToken } from "../models/loginSuccessToken.model";
+import { LoginVerify } from "../models/loginVerify.model";
+import { OtpInfo } from "../models/otpInfo.model";
+import { RegisterInfo } from "../models/registerInfo";
+
+class LoginService {
+    /** 憿批恥��-��TP **/
+  async sendOtp(loginInfo: LoginRequest):Promise<OtpInfo> {
+    return http.post('/otp/sendOtp', loginInfo).then( res => res.data );
+  }
+
+  /** 憿批恥��-撽�TP **/
+  async loginVerify(loginVerify: LoginVerify):Promise<LoginSuccessToken>{
+    return http.post('/otp/verify', loginVerify).then(res => res.data);
+  }
+
+  /** 憿批恥閮餃�� **/
+  async register(registerInfo: RegisterInfo):Promise<LoginSuccessToken>{
+    return http.post('/otp/register', registerInfo).then(res => res.data);
+  }
+
+  /** �����Ⅳ���� **/
+  async getImgOfVerification():Promise<string>{
+    return http.get('/login/validate/get_img_code',{ responseType : 'arraybuffer' })
+      .then( response => {
+        const toBase64 = window.btoa(
+                          _.reduce( new Uint8Array(response.data),(data,byte) =>
+                            data + String.fromCharCode(byte),'')
+                        );
+        const imgSrc = `data:image/jpeg;base64,${toBase64}`;
+        return imgSrc;
+    });
+  }
+
+  /** 撽�Ⅳ-撽�� **/
+  getVerificationStatus(imgCode:string):Promise<AxiosResponse<boolean>>{
+    return http.get('/login/validate/verify_img_code/'+imgCode);
+  }
+
+  /** 憿批�� **/
+  logInToConsultant(consultantDto:ConsultantLoginInfo):Promise<AxiosResponse<LoginSuccessToken>>{
+    return http.post('/eService/authenticate',consultantDto);
+  }
+}
+
+export default new LoginService();
diff --git a/PAMapp/shared/services/message-box.service.ts b/PAMapp/shared/services/message-box.service.ts
new file mode 100644
index 0000000..e138c01
--- /dev/null
+++ b/PAMapp/shared/services/message-box.service.ts
@@ -0,0 +1,30 @@
+import { MessageBox } from 'element-ui';
+import { MessageBoxData } from "element-ui/types/message-box";
+import _ from "lodash";
+
+class MessageBoxService {
+
+  showErrorMessage(errorMsg?:string, errorObj?: any): Promise<MessageBoxData> {
+    const messageBoxConfig = {
+      message: errorMsg
+      ? `${this.breakTextByComma(errorMsg)}`
+      : `<div class="message-header"> 蝟餌絞���隤�: ${errorObj?.response?.status} </div>
+          <div class="message-content">${errorObj?.response?.data?.detail}</div>`,
+      dangerouslyUseHTMLString: true,
+      showClose:false,
+      showConfirmButton:true,
+      confirmButtonText:'蝣箄��',
+      customClass:'pam-message-box',
+      closeOnClickModal:false,
+    };
+    return MessageBox(messageBoxConfig);
+  }
+
+  // ������銵�
+  private breakTextByComma(errorMsg:string):string{
+    return _.split(errorMsg,"嚗�").join('<br>');
+  }
+
+}
+
+export default new MessageBoxService();
diff --git a/PAMapp/shared/services/my-consultant.service.ts b/PAMapp/shared/services/my-consultant.service.ts
new file mode 100644
index 0000000..3d4dd78
--- /dev/null
+++ b/PAMapp/shared/services/my-consultant.service.ts
@@ -0,0 +1,52 @@
+import _ from "lodash";
+
+import { http } from "./httpClient";
+import { AgentInfo } from '~/shared/models/agent-info.model';
+import { Consultant } from "../models/consultant.model";
+import { Appointment } from "../models/appointment.model";
+class MyConsultantService {
+
+  async getFavoriteConsultantList(): Promise<Consultant[]> {
+    return http.get<Consultant[]>('/consultant/favorite').then((res) => {
+      const hasNewConsultant = res.data.find((consultant) => !consultant.customerViewTime);
+      if (hasNewConsultant) {
+        this.viewMyConsultantList();
+      };
+      return res.data;
+    });
+  }
+
+  private viewMyConsultantList(): void {
+    http.post('/consultant/favorite/view');
+  }
+
+  //憿批�底蝝啗���
+  async getConsultantDetail(agentNo:string): Promise<AgentInfo> {
+    return http.get('/consultant/detail', {params:{agentNo:agentNo}}).then((res) => res.data);
+  }
+
+  // 蝘駁憿批��
+  async deleteConsultant(agentId: string) {
+    return http.delete(`/consultant/favorite/${agentId}`);
+  }
+
+  // 璅�撌脰蝯�
+  markAsContact(appointmentId: number): Promise<Appointment> {
+    return http.post(`/appointment/markAsContacted/${appointmentId}`).then(res => res.data);
+  }
+
+  // ���“�����
+  getConsultantAvatar(agentNo:string):Promise<string>{
+    return http.get(`/consultant/avatar/${agentNo}`,{ responseType : 'arraybuffer' })
+      .then( response => {
+        const toBase64 = window.btoa(
+                          _.reduce( new Uint8Array(response.data),(data,byte) =>
+                            data + String.fromCharCode(byte),'')
+                        );
+        const imgSrc = `data:image/png;base64,${toBase64}`;
+        return imgSrc;
+    });
+  }
+}
+
+export default new MyConsultantService();
diff --git a/PAMapp/shared/services/otp.service.ts b/PAMapp/shared/services/otp.service.ts
new file mode 100644
index 0000000..84a7bed
--- /dev/null
+++ b/PAMapp/shared/services/otp.service.ts
@@ -0,0 +1,57 @@
+import { RegisterInfo } from "../models/registerInfo";
+
+class OtpService {
+
+    setOtpTimeToStorage(name: string, info) {
+        localStorage.setItem(name,JSON.stringify(info));
+    }
+
+    getOtpTime(name: string) {
+        return localStorage.getItem(name);
+    }
+
+    removeOtpTimeToStorage(name: string) {
+        localStorage.removeItem(name);
+    }
+
+    parseOtpTime(name): OtpTime | null {
+        const otpTime = this.getOtpTime(name);
+        return otpTime ? JSON.parse(otpTime) : null;
+    }
+
+    diffOtpTime(storageName: string, otpCounterSec: number) {
+        const parseOtpTime = this.parseOtpTime(storageName);
+
+        if (parseOtpTime) {
+            const diffSecs = this.calcDiffSecs(parseOtpTime.time);
+
+            if (diffSecs < otpCounterSec) {
+                return diffSecs;
+            } else {
+                this.removeOtpTimeToStorage(storageName);
+                return false;
+            }
+        }
+
+        return false;
+    }
+
+    private calcDiffSecs(parseOtpTime) {
+        const currentTime = new Date().getTime();
+        const storageTime = new Date(parseOtpTime).getTime();
+        return Math.floor((currentTime - storageTime) / 1000);
+    }
+
+}
+
+export default new OtpService();
+
+
+export interface OtpTime extends RegisterInfo {
+    time: string;
+}
+
+export enum OtpStorageName {
+    EMAIL = 'emailOtpTime',
+    PHONE = 'phoneOtpTime'
+}
\ No newline at end of file
diff --git a/PAMapp/shared/services/query-consultant.service.ts b/PAMapp/shared/services/query-consultant.service.ts
new file mode 100644
index 0000000..8a5a139
--- /dev/null
+++ b/PAMapp/shared/services/query-consultant.service.ts
@@ -0,0 +1,37 @@
+import { http } from "./httpClient";
+
+import { Consultant } from "~/shared/models/consultant.model";
+import { FastQueryParams } from "~/shared/models/quick-filter.model";
+import { AgentOfStrictQuery, StrictQueryParams } from "~/shared/models/strict-query.model";
+import { AppointmentParams } from "~/shared/models/appointment.model";
+
+class QueryConsultantService {
+
+  // ��靽憿批��
+  async getRecommendConsultantList(): Promise<Consultant[]> {
+    return http.get<Consultant[]>('/consultant/recommend').then((res) => res.data);
+  }
+
+  // 敹恍�祟�
+  async fastQuery(data: FastQueryParams): Promise<Consultant[]> {
+    return http.post<Consultant[]>('/consultant/fastQuery', data).then(res => res.data);
+  }
+
+  // ������
+  async strictQuery(data:StrictQueryParams): Promise<AgentOfStrictQuery[]>{
+    return http.post('/consultant/strictQuery', data).then((res) => res.data);
+  }
+
+  // ��憿批��
+  async addFavoriteConsultant(agentNoList: string[]) {
+    return http.post('/consultant/favorite', { agentNoList });
+  }
+
+  // ����岷���
+  async appointmentDemand(data: AppointmentParams) {
+    return http.post('/appointment/customer/create', data).then((res) => res.data);
+  }
+
+}
+
+export default new QueryConsultantService();
diff --git a/PAMapp/shared/services/reviews.service.ts b/PAMapp/shared/services/reviews.service.ts
new file mode 100644
index 0000000..48a55a0
--- /dev/null
+++ b/PAMapp/shared/services/reviews.service.ts
@@ -0,0 +1,45 @@
+import { http } from "./httpClient";
+
+import { NotificationList, UserReviewPlatformRes, UserReviewParams } from "../models/reviews.model";
+import { AppointmentLog } from "../models/appointment.model";
+
+class ReviewsService {
+
+  //摰X�脰�遛��漲閰��(�蝑�)
+  userReviewsConsultants(data: UserReviewParams) {
+    return http.post('/satisfaction/score', data);
+  }
+
+  // 摰X�脰�遛��漲(憭��)
+  allUserReviewsConsultants(data: UserReviewParams[]) {
+    return http.post('/satisfaction/score/all', data);
+  }
+
+
+  //������������
+  async getMyReviewLog(): Promise<AppointmentLog[]> {
+    return http.get('/satisfaction/getMySatisfaction').then(res => res.data);
+  }
+
+  // 憿批�蜓���遛��漲�
+  sendSatisfactionToClient(appointmentId: number) {
+    return http.post(`/consultant/sendSatisfactionToClient/${appointmentId}`).then((res) => res);
+  }
+
+  // �撠�
+  getMyPersonalNotification(): Promise<NotificationList[]> {
+    return http.get('/personal_notification/getMyPersonalNotification').then(res => res.data);
+  }
+
+  // ������������閮剖�撌脰�
+  readAllMyNotification() {
+    return http.post('/personal_notification/readAllMyNotification')
+  }
+
+  // 摰X憛怠神撟喳皛踵�漲
+  reviewPlatform(params: UserReviewParams): Promise<UserReviewPlatformRes> {
+    return http.post('/satisfaction/score', params);
+  }
+}
+
+export default new ReviewsService();
diff --git a/PAMapp/assets/ts/device.ts b/PAMapp/shared/services/utils.service.ts
similarity index 64%
rename from PAMapp/assets/ts/device.ts
rename to PAMapp/shared/services/utils.service.ts
index 25f6f91..5d3f877 100644
--- a/PAMapp/assets/ts/device.ts
+++ b/PAMapp/shared/services/utils.service.ts
@@ -1,4 +1,10 @@
-export function isMobileDevice(): boolean {
+class UtilsService {
+
+  isMobileDevice(): boolean {
     const mobileDevices = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'Windows Phone'];
     return mobileDevices.some(e => navigator.userAgent.match(e));
+  }
+
 }
+
+export default new UtilsService();
diff --git a/PAMapp/assets/ts/storageConsultant.ts b/PAMapp/shared/storageConsultant.ts
similarity index 100%
rename from PAMapp/assets/ts/storageConsultant.ts
rename to PAMapp/shared/storageConsultant.ts
diff --git a/PAMapp/assets/ts/storageRequests.ts b/PAMapp/shared/storageRequests.ts
similarity index 91%
rename from PAMapp/assets/ts/storageRequests.ts
rename to PAMapp/shared/storageRequests.ts
index 4b499a5..a50917f 100644
--- a/PAMapp/assets/ts/storageRequests.ts
+++ b/PAMapp/shared/storageRequests.ts
@@ -1,4 +1,4 @@
-import { AppointmentRequests } from "./api/consultant";
+import { AppointmentRequests } from "./models/appointment.model";
 
 export function getRequestsFromStorage(): AppointmentRequests {
   const requests = localStorage.getItem('myRequests');
diff --git a/PAMapp/store/appointment.store.ts b/PAMapp/store/appointment.store.ts
new file mode 100644
index 0000000..e8c8eff
--- /dev/null
+++ b/PAMapp/store/appointment.store.ts
@@ -0,0 +1,84 @@
+import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
+
+import appointmentService from '~/shared/services/appointment.service';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+import { Appointment } from '~/shared/models/appointment.model';
+
+@Module
+export default class AppointmentStore extends VuexModule {
+
+  contactStatus = ContactStatus;
+
+  appointmentDetail: Appointment | null = JSON.parse(localStorage.getItem('appointment')!);
+  myAppointmentList: Appointment[]      = [];
+
+  //////////////////////////////////////////////////////////////////////
+
+  get appointmentProgress(): ContactStatus {
+    return this.appointmentDetail!.communicateStatus;
+  }
+
+  get newAppointmentSum(): number {
+    return this.myAppointmentList.filter(item => !item.consultantViewTime || item.consultantViewTime === null).length;
+  }
+
+  get appointmentItemSum(): number {
+    return this.myAppointmentList.filter(item => item.communicateStatus === this.contactStatus.RESERVED).length;
+  }
+
+  get contactedItemSum(): number {
+    return this.myAppointmentList.filter((item) => item.communicateStatus === this.contactStatus.CONTACTED).length;
+  }
+
+  get closedItemSum(): number {
+    return this.myAppointmentList
+    .filter(item => item.communicateStatus === this.contactStatus.DONE || item.communicateStatus === this.contactStatus.CLOSE ).length;
+  }
+
+  get isCloseAppointment(): boolean {
+    const closedStatusList = [this.contactStatus.DONE, this.contactStatus.CLOSE, this.contactStatus.CANCEL];
+    return closedStatusList.includes(this.appointmentDetail!.communicateStatus);
+  }
+
+  //////////////////////////////////////////////////////////////////////
+
+  @Mutation
+  SET_MY_APPOINTMENT_LIST(appointmentList: Appointment[]): void {
+    this.myAppointmentList = appointmentList;
+  }
+
+  @Mutation
+  SET_APPOINTMENT(appointmentDetail: Appointment): void {
+    this.appointmentDetail = appointmentDetail;
+    localStorage.setItem('appointment', JSON.stringify(appointmentDetail));
+  }
+
+  //////////////////////////////////////////////////////////////////////
+
+  @Action({ commit: 'SET_MY_APPOINTMENT_LIST' })
+  async getMyAppointmentList(): Promise<Appointment[]> {
+    return await appointmentService.getMyAppointmentList().then((res) => res);
+  }
+
+  @Action({ commit: 'SET_MY_APPOINTMENT_LIST' })
+  updateMyAppointmentList(appointment: Appointment): Appointment[] {
+    const tempList = this.myAppointmentList.filter((item) => item.id !== appointment.id);
+    tempList.unshift(appointment);
+    return tempList;
+  }
+
+  @Action({ commit: 'SET_APPOINTMENT'})
+  async getAppointmentDetail(appointmentId: number): Promise<Appointment> {
+    if (this.appointmentDetail && this.appointmentDetail.id === appointmentId) {
+      return this.appointmentDetail;
+    } else {
+      return await appointmentService.getAppointmentDetail(appointmentId).then((res) => res);
+    }
+  }
+
+  @Action({ commit: 'SET_APPOINTMENT'})
+  async updateAppointmentDetail(appointmentId: number): Promise<Appointment> {
+    return await appointmentService.getAppointmentDetail(appointmentId).then((res) => res);
+  }
+
+}
diff --git a/PAMapp/store/index.ts b/PAMapp/store/index.ts
index 7b8173f..b4cd250 100644
--- a/PAMapp/store/index.ts
+++ b/PAMapp/store/index.ts
@@ -1,10 +1,13 @@
 import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
-import { ClientInfo, getMyAppointmentList, getMyReviewLog } from '~/assets/ts/api/appointment';
-import { recommend, AgentOfStrictQuery, getFavoriteConsultant, addFavoriteConsultant, deleteConsultant, strictQuery } from '~/assets/ts/api/consultant';
-import { Consultant } from '~/assets/ts/models/consultant.model';
-import { AppointmentLog } from '~/assets/ts/models/appointment.model';
-import { getFavoriteFromStorage, setFavoriteToStorage } from '~/assets/ts/storageConsultant';
-import { Role } from '~/assets/ts/models/enum/Role';
+
+import myConsultantService from '~/shared/services/my-consultant.service';
+import queryConsultantService from '~/shared/services/query-consultant.service';
+import reviewsService from '~/shared/services/reviews.service';
+import { Consultant } from '~/shared/models/consultant.model';
+import { getFavoriteFromStorage, setFavoriteToStorage } from '~/shared/storageConsultant';
+import { AppointmentLog } from '~/shared/models/appointment.model';
+import { AgentOfStrictQuery, StrictQueryParams } from '~/shared/models/strict-query.model';
+import { NotificationList } from '~/shared/models/reviews.model';
 
 @Module
 export default class Store extends VuexModule {
@@ -12,32 +15,54 @@
     strictQueryList: AgentOfStrictQuery[] = [];
     myConsultantList: Consultant[] = [];
 
-    myAppointmentList: ClientInfo[] = [];
+    reviewLogList: AppointmentLog[] = [];
+    unReviewLogList: AppointmentLog[] = [];
+    notificationList: NotificationList[] = [];
 
-    myAppointmentReviewLogList: AppointmentLog[] = [];
-
-    @Mutation updateRecommend(data: Consultant[]) {
-        this.recommendList = data;
+    get isUserLogin() {
+        return this.context.getters['localStorage/isUserLogin'];
     }
 
-    @Mutation updateConsultantList(data: Consultant[]) {
+    get strictResultList(): AgentOfStrictQuery[] {
+      const perfectMatchList = this.strictQueryList.filter((i) => i.suitability === 100);
+      return perfectMatchList.length > 5
+            ? perfectMatchList
+            : this.strictQueryList;
+    }
+
+    @Mutation
+    updateRecommend(data: Consultant[]) {
+      this.recommendList = data;
+    }
+
+    @Mutation
+    updateConsultantList(data: Consultant[]) {
         this.myConsultantList = data;
     }
 
-    @Mutation updateStrictQueryList(data: AgentOfStrictQuery[]) {
-        this.strictQueryList = data;
+    @Mutation
+    updateStrictQueryList(data: AgentOfStrictQuery[]) {
+        this.strictQueryList = data.sort((a, b) => b.suitability - a.suitability);
     }
 
-    @Mutation updateMyAppointmentList(data: ClientInfo[]) {
-        this.myAppointmentList = data;
+    @Mutation
+    updateReviewLog(data: AppointmentLog[]) {
+        this.reviewLogList = data;
     }
 
-    @Mutation updateMyAppointmentReviewLog(data: AppointmentLog[]) {
-        this.myAppointmentReviewLogList = data;
+    @Mutation
+    updateUnReviewLog(data: AppointmentLog[]) {
+        this.unReviewLogList = data;
     }
 
-    @Action storeRecommendList() {
-        recommend().then(data => {
+    @Mutation
+    updateNotification(data: NotificationList[]) {
+        this.notificationList = data;
+    }
+
+    @Action
+    storeRecommendList() {
+        queryConsultantService.getRecommendConsultantList().then(data => {
             this.context.commit('updateRecommend', data)
         })
     }
@@ -45,7 +70,8 @@
     @Action
     async storeConsultantList() {
         const localData = getFavoriteFromStorage();
-        if (this.context.getters['localStorage/currentRole'] !== Role.USER) {
+
+        if (!this.isUserLogin) {
             this.context.commit('updateConsultantList', localData)
             return;
         };
@@ -53,13 +79,13 @@
 
         if (localData?.length) {
             const agentNoList = localData.map(i => i.agentNo)
-            await addFavoriteConsultant(agentNoList).then(res => {
+            await queryConsultantService.addFavoriteConsultant(agentNoList).then(res => {
                 localStorage.removeItem('favoriteConsultant')
             })
         }
 
-        getFavoriteConsultant().then(data => {
-            this.context.commit('updateConsultantList', data)
+        myConsultantService.getFavoriteConsultantList().then(data => {
+            this.context.commit('updateConsultantList', data);
         })
     }
 
@@ -70,10 +96,10 @@
         // no agent was removed
         if (left.length === this.myConsultantList.length) return false;
 
-        if (this.context.getters['localStorage/currentRole'] !== Role.USER) {
+        if (!this.isUserLogin) {
             setFavoriteToStorage(left);
         } else {
-            await deleteConsultant(agentNo)
+            await myConsultantService.deleteConsultant(agentNo)
         }
 
         this.context.commit('updateConsultantList', left)
@@ -87,9 +113,8 @@
             const found = this.myConsultantList.find(item => item.agentNo === consultantToAdd.agentNo);
             if (!found) {
                 const newData = [consultantToAdd].concat(this.myConsultantList);
-
-                if (this.context.getters['localStorage/currentRole'] === Role.USER) {
-                    await addFavoriteConsultant([consultantToAdd.agentNo])
+                if (this.isUserLogin) {
+                    await queryConsultantService.addFavoriteConsultant([consultantToAdd.agentNo])
                 } else {
                     setFavoriteToStorage(newData);
                 }
@@ -104,16 +129,8 @@
     }
 
     @Action
-    async storeMyAppointmentList() {
-        return await getMyAppointmentList().then((data) => {
-            this.context.commit('updateMyAppointmentList', data);
-            return data.filter(item => !item.consultantViewTime || item.consultantViewTime === null).length
-        });
-    }
-
-    @Action
     storeMyAppointmentReviewLog() {
-        getMyReviewLog().then((data) => {
+        reviewsService.getMyReviewLog().then((data) => {
             const dataWithLatestDate = data.map((item) => {
                 return {
                     ...item,
@@ -121,23 +138,29 @@
                 }
             });
             const sortedData = dataWithLatestDate.sort((a, b) => +b.compareDate - +a.compareDate);
-            this.context.commit('updateMyAppointmentReviewLog', sortedData);
+            const reviewLog = sortedData.filter(item => item.score);
+            const unReviewLog = sortedData.filter(item => !item.score);
+            this.context.commit('updateReviewLog', reviewLog);
+            this.context.commit('updateUnReviewLog', unReviewLog);
         });
-    }
-
-    @Action updateMyAppointment(myAppointment: ClientInfo) {
-        const data = this.myAppointmentList.filter(item => item.id !== myAppointment.id);
-        data.unshift(myAppointment);
-        this.context.commit('updateMyAppointmentList', data)
     }
 
     @Action
-    async storeStrictQueryList(strictQueryDto) {
-        return await strictQuery(strictQueryDto).then(res=>{
+    async storeStrictQueryList(strictQueryDto: StrictQueryParams) {
+        return await queryConsultantService.strictQuery(strictQueryDto).then(res=>{
             this.context.commit('localStorage/storageRecommendConsultant', JSON.stringify(strictQueryDto));
-            this.context.commit('updateStrictQueryList', res.data)
-            return res.data.length;
+            this.context.commit('updateStrictQueryList', res)
+            return res.length;
         });
     }
 
-}
\ No newline at end of file
+    @Action
+    storeMyPersonalNotification() {
+        reviewsService.getMyPersonalNotification().then(data => {
+            const sortData = data
+                .sort((preItem, nextItem) => +new Date(nextItem.createdDate) - +new Date(preItem.createdDate))
+            this.context.commit('updateNotification', sortData);
+        })
+    }
+
+}
diff --git a/PAMapp/store/localStorage.service.ts b/PAMapp/store/localStorage.service.ts
new file mode 100644
index 0000000..6ff4d9e
--- /dev/null
+++ b/PAMapp/store/localStorage.service.ts
@@ -0,0 +1,109 @@
+import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators';
+import _ from 'lodash';
+
+
+export enum LocalStorageItem {
+  ID_TOKEN                  = "id_token",
+  CURRENT_ROLE              = "current_role",
+  CONSULTANT_ID             = "consultant_id",
+  USER_INFO                 = "user_info",
+  QUICK_FILTER              = "quick_filter",
+  RECOMMEND_CONSULTANT_ITEM = "recommend_consultant_item",
+  MY_REQUESTS               = "my_requests",
+  FAVORITE_CONSULTANT       = "favorite_consultant",
+}
+
+export type storageDataDto = Record<LocalStorageItem, any>
+
+export const initialValueOfStorageItemDto = {
+  [LocalStorageItem.ID_TOKEN]                 : String,
+  [LocalStorageItem.CURRENT_ROLE]             : String,
+  [LocalStorageItem.CONSULTANT_ID]            : String,
+  [LocalStorageItem.RECOMMEND_CONSULTANT_ITEM]: String,
+  [LocalStorageItem.USER_INFO]                : Object,
+  [LocalStorageItem.MY_REQUESTS]              : Object,
+  [LocalStorageItem.FAVORITE_CONSULTANT]      : Object,
+  [LocalStorageItem.QUICK_FILTER]             : Array,
+}
+
+@Module
+export default class commonLocalStorage extends VuexModule {
+  localStorageDto = this.getInitLocalStorageDto();
+   //** ���隞嗥���� **//
+  private getInitLocalStorageDto(): storageDataDto {
+    const initLocalStorageDto = {} as storageDataDto;
+    _.forEach( LocalStorageItem , keyName =>
+      initLocalStorageDto[keyName] = this.processOfStorageGetItem(keyName)
+    )
+    return initLocalStorageDto;
+  }
+  //** ���� localStorage鞈�� **/
+  private processOfStorageGetItem( keyName:string ): any {
+    const storageData = localStorage.getItem(keyName);
+    const itemType = initialValueOfStorageItemDto[keyName];
+    const prepareData = storageData
+                          ? _.isEqual(itemType,String)
+                            ? storageData
+                            : JSON.parse(storageData)
+                          : null;
+    return prepareData
+  }
+
+  ///////////////////////////////////////////////// Mutation
+
+  /** �摮�� localStorageDto **/
+  @Mutation setLocalStorageDto( setItem:SetItemDto ): void {
+    this.localStorageDto[setItem.keyName] = setItem.value ;
+  }
+
+  //** 蝘駁�銝� **//
+  @Mutation clearStoreByKeyName( keyName:string ): void {
+    localStorage.removeItem(keyName)
+    this.localStorageDto[keyName]=null;
+  }
+
+  //** 蝘駁���隞� **//
+  @Mutation clearStoreData(): void {
+      _.keys(this.localStorageDto)
+      .forEach(keyName => {
+        localStorage.removeItem(keyName);
+        this.localStorageDto[keyName]=null;
+      });
+  }
+
+  ///////////////////////////////////////////////// Action
+
+  //** �隞嗅摮� **//
+  @Action storeData( data: storageDataDto ): void {
+    _.keys(data).forEach(keyName=>{
+      const newObj = {
+        keyName:keyName,
+        value:data[keyName]
+      }
+      this.context.dispatch('localStorageSet',newObj);
+    });
+  }
+
+  //** 撠�閬� 摮�� localStorage �撘� **//
+  @Action localStorageSet( setItem:SetItemDto ): void {
+    const itemType = initialValueOfStorageItemDto[setItem.keyName];
+    const prepareData = _.isEqual(itemType,String)
+                          ? setItem.value
+                          : JSON.stringify(setItem.value);
+    localStorage.setItem(setItem.keyName,prepareData);
+
+    this.context.commit('setLocalStorageDto',setItem)
+  }
+
+  //** ��蝘駁 **//
+  @Action clearStorage(keyName?:string): Promise<boolean> {
+    return new Promise((resolve, reject) => {
+      keyName ? this.context.commit('clearStoreByKeyName',keyName) : this.context.commit('clearStoreData');
+      resolve(true)
+    });
+  }
+}
+export interface SetItemDto{
+  keyName:string,
+  value:any,
+}
diff --git a/PAMapp/store/localStorage.ts b/PAMapp/store/localStorage.ts
index d93aa2c..6fd79e3 100644
--- a/PAMapp/store/localStorage.ts
+++ b/PAMapp/store/localStorage.ts
@@ -1,12 +1,20 @@
-import { Selected } from '~/components/QuickFilter/QuickFilterSelector.vue';
 import { Module, Mutation, VuexModule ,Action } from 'vuex-module-decorators';
+import { ContactType } from '~/shared/models/enum/ContactType';
+import { Role } from '~/shared/models/enum/Role';
+import { Selected } from '~/shared/models/quick-filter.model';
+import { RegisterInfo } from '~/shared/models/registerInfo';
+import { StrictQueryParams } from '~/shared/models/strict-query.model';
 @Module
 export default class LocalStorage extends VuexModule {
   id_token = localStorage.getItem('id_token');
   current_role= localStorage.getItem('current_role');
   consultant_id = localStorage.getItem('consultant_id');
+  userInfo = JSON.parse(localStorage.getItem('userInfo')!);
   quickFilterSelectedItem = localStorage.getItem('quickFilter');
   recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
+  appointmentIdFromMsg = localStorage.getItem('appointmentIdFromMsg');
+  satisfactionIdFromMsg = localStorage.getItem('satisfactionIdFromMsg');
+  notContactAppointmentIdFromMsg = localStorage.getItem('notContactAppointmentIdFromMsg');
 
   get idToken(): string|null {
     return this.id_token;
@@ -20,11 +28,39 @@
     return this.consultant_id;
   }
 
+  get isPrimaryContactTypeEmail(): boolean {
+    return this.userInfo.contactType === ContactType.EMAIL;
+  }
+
+
   get quickFilterSelectedData(): Selected[] {
     return JSON.parse(this.quickFilterSelectedItem || '[]') as Selected[];
   }
 
+  get isAdminLogin(): boolean {
+    return this.currentRole === Role.ADMIN;
+  }
 
+  get isUserLogin(): boolean {
+    return this.currentRole === Role.USER;
+  }
+
+  get currentAppointmentIdFromMsg(): string|null {
+    return this.appointmentIdFromMsg;
+  }
+
+  get currentSatisfactionIdFromMsg(): string|null {
+    return this.satisfactionIdFromMsg;
+  }
+
+  get currentNotContactAppointmentIdFromMsg(): string|null {
+    return this.notContactAppointmentIdFromMsg;
+  }
+
+  @Mutation storageUserInfo(userInfo: RegisterInfo): void {
+    localStorage.setItem('userInfo', JSON.stringify(userInfo));
+    this.userInfo = JSON.parse(localStorage.getItem('userInfo')!);
+  }
 
   @Mutation storageIdToken(token: string): void {
     localStorage.setItem('id_token', token);
@@ -51,12 +87,29 @@
     this.recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
   }
 
+  @Mutation storageAppointmentIdFromMsg(id: string) {
+    localStorage.setItem('appointmentIdFromMsg', id);
+    this.appointmentIdFromMsg = localStorage.getItem('appointmentIdFromMsg');
+  }
+
+  @Mutation storageSatisfactionIdFromMsg(id: string) {
+    localStorage.setItem('satisfactionIdFromMsg', id);
+    this.satisfactionIdFromMsg = localStorage.getItem('satisfactionIdFromMsg');
+  }
+
+  @Mutation storageNotContactAppointmentIdFromMsg(id: string) {
+    localStorage.setItem('notContactAppointmentIdFromMsg', id);
+    this.notContactAppointmentIdFromMsg = id;
+  }
+
   @Mutation storageClear(): void {
     localStorage.removeItem('myRequests');
     localStorage.removeItem('userInfo');
     localStorage.removeItem('id_token');
     localStorage.removeItem('current_role');
     localStorage.removeItem('consultant_id');
+    localStorage.removeItem('appointment');
+    localStorage.removeItem('login_consultant');
     this.id_token = localStorage.getItem('id_token');
     this.current_role = localStorage.getItem('current_role');
     this.consultant_id = localStorage.getItem('consultant_id');
@@ -73,6 +126,26 @@
     this.recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
   }
 
+  @Mutation storageClearAppointmentIdFromMsg() {
+    localStorage.removeItem('appointmentIdFromMsg');
+    this.appointmentIdFromMsg = localStorage.getItem('appointmentIdFromMsg');
+  }
+
+  @Mutation storageClearSatisfactionIdFromMsg() {
+    localStorage.removeItem('satisfactionIdFromMsg');
+    this.appointmentIdFromMsg = localStorage.getItem('satisfactionIdFromMsg');
+  }
+
+  @Mutation storageClearNotContactAppointmentIdFromMsg() {
+    localStorage.removeItem('notContactAppointmentIdFromMsg');
+    this.appointmentIdFromMsg = localStorage.getItem('notContactAppointmentIdFromMsg');
+  }
+
+  @Mutation storageStrickQueryItem(queryItem: StrictQueryParams): void {
+    localStorage.setItem('recommendConsultantItem', JSON.stringify(queryItem));
+    this.recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
+  }
+
   @Action actionStorageClear(): void {
     this.context.commit("storageClear");
   }
diff --git a/PAMapp/store/login.store.ts b/PAMapp/store/login.store.ts
new file mode 100644
index 0000000..8ca0fae
--- /dev/null
+++ b/PAMapp/store/login.store.ts
@@ -0,0 +1,33 @@
+import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
+
+import myConsultantService from '~/shared/services/my-consultant.service';
+import { AgentInfo } from '~/shared/models/agent-info.model';
+
+@Module
+export default class AppointmentStore extends VuexModule {
+
+  loginConsultant?: AgentInfo = JSON.parse(localStorage.getItem('login_consultant')!);
+
+  //////////////////////////////////////////////////////////////////////
+
+  //////////////////////////////////////////////////////////////////////
+
+  @Mutation
+  SET_LOGIN_CONSULTANT(agentInfo: AgentInfo): void {
+    this.loginConsultant = agentInfo;
+    localStorage.setItem('login_consultant', JSON.stringify(agentInfo));
+  }
+
+  //////////////////////////////////////////////////////////////////////
+
+  @Action({ commit: 'SET_LOGIN_CONSULTANT' })
+  async getLoginConsultantDetail(agentNo: string): Promise<AgentInfo> {
+    return await myConsultantService.getConsultantDetail(agentNo).then((res) => res);
+  }
+
+  @Action({ commit: 'SET_LOGIN_CONSULTANT' })
+  async updateConsultantDetail(agentNo: string): Promise<AgentInfo> {
+    return await myConsultantService.getConsultantDetail(agentNo).then((res) => res);
+  }
+
+}
diff --git a/pamapi/src/doc/sql/20211213_w.sql b/pamapi/src/doc/sql/20211213_w.sql
new file mode 100644
index 0000000..5f011b2
--- /dev/null
+++ b/pamapi/src/doc/sql/20211213_w.sql
@@ -0,0 +1 @@
+ALTER TABLE omo.customer_favorite_consultant ADD view_time timestamp NULL;
diff --git a/pamapi/src/doc/sql/20211222_w.sql b/pamapi/src/doc/sql/20211222_w.sql
new file mode 100644
index 0000000..a6bdd67
--- /dev/null
+++ b/pamapi/src/doc/sql/20211222_w.sql
@@ -0,0 +1 @@
+ALTER TABLE omo.consultant ADD email varchar NULL;
diff --git a/pamapi/src/doc/sql/20211229_j.sql b/pamapi/src/doc/sql/20211229_j.sql
new file mode 100644
index 0000000..e948384
--- /dev/null
+++ b/pamapi/src/doc/sql/20211229_j.sql
@@ -0,0 +1,10 @@
+CREATE TABLE omo.appointment_memo (
+     id bigserial NOT NULL,
+     "content" varchar NOT NULL,
+     appointment_id int8 NOT NULL,
+     created_date timestamp NOT NULL,
+     created_by varchar NOT NULL,
+     last_modified_date timestamp NOT NULL,
+     last_modified_by varchar NOT NULL,
+     CONSTRAINT appointment_memo_pkey PRIMARY KEY (id)
+);
diff --git a/pamapi/src/doc/sql/20211229_w.sql b/pamapi/src/doc/sql/20211229_w.sql
new file mode 100644
index 0000000..3df94cd
--- /dev/null
+++ b/pamapi/src/doc/sql/20211229_w.sql
@@ -0,0 +1,2 @@
+UPDATE omo.consultant SET phone_number='', email='charles.cw.lin@pcalife.com.tw';
+UPDATE omo.consultant SET phone_number='0930018913' WHERE agent_no = 'AG0101234567';
diff --git a/pamapi/src/doc/sql/20220103_w.sql b/pamapi/src/doc/sql/20220103_w.sql
new file mode 100644
index 0000000..b48b238
--- /dev/null
+++ b/pamapi/src/doc/sql/20220103_w.sql
@@ -0,0 +1,10 @@
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_AGAM11249699.jpg' WHERE agent_no='AGAM11249699';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_B282677963.jpg' WHERE agent_no='B282677963';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_AG0101234567.jpg' WHERE agent_no='AG0101234567';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_R221444250.jpg' WHERE agent_no='R221444250';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_AG0109051204.jpg' WHERE agent_no='AG0109051204';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_A183619275.jpg' WHERE agent_no='A183619275';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_X147309614.jpg' WHERE agent_no='X147309614';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_D265260662.jpg' WHERE agent_no='D265260662';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_J149388015.jpg' WHERE agent_no='J149388015';
+UPDATE omo.consultant SET photo_path='C://pam_file/consultant_Z152717443.jpg' WHERE agent_no='Z152717443';
diff --git a/pamapi/src/doc/sql/20220112_j.sql b/pamapi/src/doc/sql/20220112_j.sql
new file mode 100644
index 0000000..504c4da
--- /dev/null
+++ b/pamapi/src/doc/sql/20220112_j.sql
@@ -0,0 +1,66 @@
+-- �憓���甇瑞�able
+
+CREATE TABLE public.appointment_notice_log (
+	id bigserial NOT NULL,
+	appointment_id bigserial NOT NULL,
+	email varchar NULL,
+	phone varchar NULL,
+	"content" varchar NULL,
+	created_date timestamp NULL,
+	CONSTRAINT appointment_notice_log_pkey PRIMARY KEY (id)
+);
+
+
+-- �憓����酉table
+
+CREATE TABLE public.appointment_memo (
+	id bigserial NOT NULL,
+	"content" varchar NOT NULL,
+	appointment_id int8 NOT NULL,
+	created_date timestamp NOT NULL,
+	created_by varchar NOT NULL,
+	last_modified_date timestamp NOT NULL,
+	last_modified_by varchar NOT NULL,
+	CONSTRAINT appointment_memo_pkey PRIMARY KEY (id)
+);
+
+
+-- �憓�赤蝝���able
+
+CREATE TABLE public.interview_record (
+	id bigserial NOT NULL,
+	created_date timestamp NOT NULL,
+	created_by varchar NOT NULL,
+	last_modified_date timestamp NOT NULL,
+	last_modified_by varchar NOT NULL,
+	"content" varchar NULL,
+	interview_date timestamp NULL,
+	appointment_id bigserial NOT NULL,
+	status varchar NULL,
+	CONSTRAINT interview_record_pkey PRIMARY KEY (id)
+);
+
+-- �憓��蝯���able
+
+-- Drop table
+
+-- DROP TABLE public.appointment_closed_info;
+
+-- Drop table
+
+-- DROP TABLE public.appointment_closed_info;
+
+CREATE TABLE public.appointment_closed_info (
+	id bigserial NOT NULL,
+	policyholder_identity_id varchar NULL,
+	plan_code varchar NULL,
+	policy_entry_date date NULL,
+	remark varchar NULL,
+	closed_reason varchar NULL,
+	closed_other_reason varchar NULL,
+	appointment_id bigserial NOT NULL,
+	CONSTRAINT appointment_closed_info_pkey PRIMARY KEY (id)
+);
+
+
+
diff --git a/pamapi/src/doc/sql/20220114_j.sql b/pamapi/src/doc/sql/20220114_j.sql
new file mode 100644
index 0000000..1d10e9d
--- /dev/null
+++ b/pamapi/src/doc/sql/20220114_j.sql
@@ -0,0 +1,2 @@
+-- appointment_notice_log �憓�赤������
+ALTER TABLE appointment_notice_log ADD interview_date timestamp null;
\ No newline at end of file
diff --git a/pamapi/src/doc/sql/20220120_j.sql b/pamapi/src/doc/sql/20220120_j.sql
new file mode 100644
index 0000000..72f8d15
--- /dev/null
+++ b/pamapi/src/doc/sql/20220120_j.sql
@@ -0,0 +1,13 @@
+-- 撱箇������able
+
+CREATE TABLE public.personal_notification (
+	id bigserial NOT NULL,
+	title varchar NULL,
+	"content" varchar NOT NULL,
+	notification_type varchar NOT NULL,
+	owner_role varchar NOT NULL,
+	owner_id bigserial NOT NULL,
+	created_date timestamp NOT NULL,
+	read_date timestamp NULL,
+	CONSTRAINT personal_notification_pkey PRIMARY KEY (id)
+);
diff --git a/pamapi/src/doc/sql/20220121_j.sql b/pamapi/src/doc/sql/20220121_j.sql
new file mode 100644
index 0000000..294abe9
--- /dev/null
+++ b/pamapi/src/doc/sql/20220121_j.sql
@@ -0,0 +1,3 @@
+-- 隤踵policy_entry_date ����
+ALTER TABLE appointment_closed_info
+ALTER COLUMN policy_entry_date TYPE timestamp;
\ No newline at end of file
diff --git a/pamapi/src/doc/sql/20220122_w.sql b/pamapi/src/doc/sql/20220122_w.sql
new file mode 100644
index 0000000..09e5acd
--- /dev/null
+++ b/pamapi/src/doc/sql/20220122_w.sql
@@ -0,0 +1,7 @@
+-- 撱箇�� 撌脩��摰X������������ table
+CREATE TABLE public.appointment_expiring_notify_record (
+   id bigserial NOT NULL,
+   appointment_id bigserial NOT NULL,
+   send_time timestamp NULL,
+   CONSTRAINT appointment_expiring_notify_record_pk PRIMARY KEY (id)
+);
diff --git a/pamapi/src/doc/sql/20220126_w.sql b/pamapi/src/doc/sql/20220126_w.sql
new file mode 100644
index 0000000..7b79825
--- /dev/null
+++ b/pamapi/src/doc/sql/20220126_w.sql
@@ -0,0 +1,6 @@
+ALTER TABLE public.satisfaction ALTER COLUMN customer_id DROP NOT NULL;
+ALTER TABLE public.satisfaction ADD "type" varchar NULL;
+
+-- Auto-generated SQL script #202201261717
+UPDATE public.satisfaction SET "type"='APPOINTMENT';
+
diff --git a/pamapi/src/doc/sql/20220210_w.sql b/pamapi/src/doc/sql/20220210_w.sql
new file mode 100644
index 0000000..fa65143
--- /dev/null
+++ b/pamapi/src/doc/sql/20220210_w.sql
@@ -0,0 +1,10 @@
+update public.consultant set "role" = '����蝬�鈭�' where agent_no = 'A183619275';
+update public.consultant set "role" = '��陸靽蝬�鈭�' where agent_no = 'AGAM11249699';
+update public.consultant set "role" = '憭扯��蝬�鈭�' where agent_no = 'Z152717443';
+update public.consultant set "role" = '����蝬�鈭�' where agent_no = 'D265260662';
+update public.consultant set "role" = '甈��靽蝬�鈭�' where agent_no = 'AG0109051204';
+update public.consultant set "role" = '憭扯��蝬�鈭�' where agent_no = 'B282677963';
+update public.consultant set "role" = '憡��蝬�鈭�' where agent_no = 'AG0101234567';
+update public.consultant set "role" = '甈��靽蝬�鈭�' where agent_no = 'X147309614';
+update public.consultant set "role" = '����蝬�鈭�' where agent_no = 'J149388015';
+update public.consultant set "role" = '����蝬�鈭�' where agent_no = 'R221444250';
diff --git a/pamapi/src/doc/sql/20220215_w.sql b/pamapi/src/doc/sql/20220215_w.sql
new file mode 100644
index 0000000..9117f1f
--- /dev/null
+++ b/pamapi/src/doc/sql/20220215_w.sql
@@ -0,0 +1,2 @@
+update public.consultant set serve_area = '�����' where agent_no = 'AG0109051204';
+update public.consultant set serve_area = '���蝮�' where agent_no = 'R221444250';
diff --git a/pamapi/src/doc/sql/20220216_w.sql b/pamapi/src/doc/sql/20220216_w.sql
new file mode 100644
index 0000000..4c9ee45
--- /dev/null
+++ b/pamapi/src/doc/sql/20220216_w.sql
@@ -0,0 +1,22 @@
+update public.consultant set avg_score = 1 where agent_no = 'A183619275';
+update public.consultant set avg_score = 2 where agent_no = 'AGAM11249699';
+update public.consultant set avg_score = 3 where agent_no = 'Z152717443';
+update public.consultant set avg_score = 4 where agent_no = 'D265260662';
+update public.consultant set avg_score = 5 where agent_no = 'AG0109051204';
+update public.consultant set avg_score = 1 where agent_no = 'B282677963';
+update public.consultant set avg_score = 2 where agent_no = 'AG0101234567';
+update public.consultant set avg_score = 3 where agent_no = 'X147309614';
+update public.consultant set avg_score = 4 where agent_no = 'J149388015';
+update public.consultant set avg_score = 5 where agent_no = 'R221444250';
+
+do
+$$
+declare
+avg_row record;
+begin
+for avg_row in select round(cast(avg(score) as numeric), 1) as avg_score, agent_no from public.satisfaction where "type" = 'APPOINTMENT' and score is not null group by agent_no
+    loop
+update public.consultant set avg_score = avg_row.avg_score where agent_no = avg_row.agent_no;
+end loop;
+end
+$$
diff --git "a/pamapi/src/doc/sql/\346\267\250\347\251\272\346\225\264\345\200\213\347\263\273\347\265\261\350\263\207\346\226\231\050\351\231\244\351\241\247\345\225\217\051.sql" "b/pamapi/src/doc/sql/\346\267\250\347\251\272\346\225\264\345\200\213\347\263\273\347\265\261\350\263\207\346\226\231\050\351\231\244\351\241\247\345\225\217\051.sql"
new file mode 100644
index 0000000..963ed9f
--- /dev/null
+++ "b/pamapi/src/doc/sql/\346\267\250\347\251\272\346\225\264\345\200\213\347\263\273\347\265\261\350\263\207\346\226\231\050\351\231\244\351\241\247\345\225\217\051.sql"
@@ -0,0 +1,12 @@
+truncate public.appointment;
+truncate public.appointment_closed_info;
+truncate public.appointment_expiring_notify_record;
+truncate public.appointment_memo;
+truncate public.appointment_notice_log;
+truncate public.customer;
+truncate public.interview_record;
+truncate public.login_record;
+truncate public.otp_tmp;
+truncate public.personal_notification;
+truncate public.satisfaction;
+truncate public.customer_favorite_consultant;
diff --git "a/pamapi/src/doc/\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API/\345\217\226\345\276\227\347\231\273\345\205\245\350\200\205\346\211\200\346\234\211\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API" "b/pamapi/src/doc/\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API/\345\217\226\345\276\227\347\231\273\345\205\245\350\200\205\346\211\200\346\234\211\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API"
new file mode 100644
index 0000000..cca0197
--- /dev/null
+++ "b/pamapi/src/doc/\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API/\345\217\226\345\276\227\347\231\273\345\205\245\350\200\205\346\211\200\346\234\211\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API"
@@ -0,0 +1,38 @@
+http get:
+
+http://localhost:8080/api/personal_notification/getMyPersonalNotification
+
+title: 璅��
+content: ��摰�
+notificationType: ACTIVITY(�犖瘣餃��)�YSTEM(蝟餌絞�)
+ownerRole: CUSTOMER(摰X)�ONSULTANT(憿批��)
+ownerId: ���d
+readDate: 撌脰�����
+
+request body :
+
+[
+    {
+        "id": 1,
+        "title": "title test",
+        "content": "content test",
+        "notificationType": "ACTIVITY",
+        "ownerRole": "CONSULTANT",
+        "ownerId": 11,
+        "createdDate": "2022-01-20T10:53:53.022Z",
+        "readDate": null
+    },
+    {
+        "id": 2,
+        "title": "title test",
+        "content": "content test",
+        "notificationType": "ACTIVITY",
+        "ownerRole": "CONSULTANT",
+        "ownerId": 11,
+        "createdDate": "2022-01-20T10:59:17.242Z",
+        "readDate": null
+    }
+]
+
+
+
diff --git "a/pamapi/src/doc/\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API/\346\211\200\346\234\211\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245\350\250\255\347\202\272\345\267\262\350\256\200.txt" "b/pamapi/src/doc/\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API/\346\211\200\346\234\211\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245\350\250\255\347\202\272\345\267\262\350\256\200.txt"
new file mode 100644
index 0000000..6ac6db5
--- /dev/null
+++ "b/pamapi/src/doc/\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245API/\346\211\200\346\234\211\345\260\217\351\210\264\351\220\272\351\200\232\347\237\245\350\250\255\347\202\272\345\267\262\350\256\200.txt"
@@ -0,0 +1,6 @@
+http post : 
+
+撠�����������閮剖�撌脰�
+
+http://localhost:8080/api/personal_notification/readAllMyNotification
+
diff --git "a/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\345\256\242\346\210\266\345\241\253\345\257\253\346\273\277\346\204\217\345\272\246.txt" "b/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\345\256\242\346\210\266\345\241\253\345\257\253\346\273\277\346\204\217\345\272\246.txt"
deleted file mode 100644
index cad48d7..0000000
--- "a/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\345\256\242\346\210\266\345\241\253\345\257\253\346\273\277\346\204\217\345\272\246.txt"
+++ /dev/null
@@ -1,24 +0,0 @@
-http post :
-
-http://localhost:8080/api/satisfaction/create
-
-
-
-request body:
-
-{
-    "appointmentId": 67,
-    "score":4
-}
-
-
-
-response body:
-
-{
-    "id": 3,
-    "customerId": 2,
-    "agentNo": "admin",
-    "status": "UNFILLED",
-    "score": 4
-}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\345\256\242\346\210\266\345\241\253\345\257\253\346\273\277\346\204\217\345\272\246\345\225\217\345\215\267.txt" "b/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\345\256\242\346\210\266\345\241\253\345\257\253\346\273\277\346\204\217\345\272\246\345\225\217\345\215\267.txt"
new file mode 100644
index 0000000..97a5e8f
--- /dev/null
+++ "b/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\345\256\242\346\210\266\345\241\253\345\257\253\346\273\277\346\204\217\345\272\246\345\225\217\345\215\267.txt"
@@ -0,0 +1,56 @@
+http post :
+
+http://localhost:8080/api/satisfaction/score
+
+
+憛怠神銝�蝑�:
+
+request body:
+
+{
+    "appointmentId": 482,
+    "score":4,
+    "type": "APPOINTMENT"   // "APPOINTMENT" 銵券��迨甈⊿���“��遛��漲�� "SYSTEM" �����像���遛��漲
+}
+
+response body:
+{
+    "id": 84,
+    "customerId": 165,
+    "agentNo": "AGAM11249699",
+    "status": "FILLED",
+    "score": 4.0,
+    "appointmentId": 482,
+    "type": "APPOINTMENT"
+}
+=====================================================
+
+憛怠神憭�遛��漲:
+
+http post :
+
+http://localhost:8080/api/satisfaction/score/all
+
+request body:
+
+[{
+    "appointmentId": 482,
+    "score":4,
+    "type": "APPOINTMENT"   // "APPOINTMENT" 銵券��迨甈⊿���“��遛��漲�� "SYSTEM" �����像���遛��漲
+}]
+
+
+
+response body:
+
+
+[{
+     "id": 84,
+     "customerId": 165,
+     "agentNo": "AGAM11249699",
+     "status": "FILLED",
+     "score": 4.0,
+     "appointmentId": 482,
+     "type": "APPOINTMENT"
+}]
+
diff --git "a/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\346\237\245\350\251\242\347\231\273\345\205\245\350\200\205\346\211\200\346\234\211\347\232\204\346\273\277\346\204\217\345\272\246\345\225\217\345\215\267.txt" "b/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\346\237\245\350\251\242\347\231\273\345\205\245\350\200\205\346\211\200\346\234\211\347\232\204\346\273\277\346\204\217\345\272\246\345\225\217\345\215\267.txt"
index 73ae4c7..920f61e 100644
--- "a/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\346\237\245\350\251\242\347\231\273\345\205\245\350\200\205\346\211\200\346\234\211\347\232\204\346\273\277\346\204\217\345\272\246\345\225\217\345\215\267.txt"
+++ "b/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\346\237\245\350\251\242\347\231\273\345\205\245\350\200\205\346\211\200\346\234\211\347\232\204\346\273\277\346\204\217\345\272\246\345\225\217\345\215\267.txt"
@@ -7,39 +7,41 @@
 
 [
     {
-        "id": 11,
-        "createdDate": "2021-12-03T03:59:07.854Z",
-        "lastModifiedDate": "2021-12-03T03:59:07.854Z",
-        "customerId": 90,
-        "agentNo": "B282677963",
-        "status": "FILLED",
-        "score": 4.0,
-        "appointmentId": 134,
-        "customerName": "Jack",
-        "agentName": "�憒�"
+        "id" : 85,
+        "createdDate" : "2022-01-24T11:48:58.039Z",
+        "lastModifiedDate" : "2022-01-24T11:48:58.039Z",
+        "customerId" : 165,
+        "agentNo" : "AGAM11249699",
+        "status" : "UNFILLED",
+        "score" : null,
+        "appointmentId" : 483,
+        "customerName" : "Mila la",
+        "agentName" : "���� lala",
+        "type" : "APPOINTMENT"      // "APPOINTMENT"�撠“�����遛��漲嚗�"SYSTEM"�撠像���遛��漲
     },
     {
-        "id": 12,
-        "createdDate": "2021-12-03T04:00:43.181Z",
-        "lastModifiedDate": "2021-12-03T04:00:43.181Z",
-        "customerId": 90,
-        "agentNo": "B282677963",
-        "status": "FILLED",
-        "score": 4.0,
-        "appointmentId": 135,
-        "customerName": "Jack",
-        "agentName": "�憒�"
-    },
-    {
-        "id": 13,
-        "createdDate": "2021-12-03T04:01:20.095Z",
-        "lastModifiedDate": "2021-12-03T04:01:20.095Z",
-        "customerId": 90,
-        "agentNo": "B282677963",
-        "status": "FILLED",
-        "score": 2.0,
-        "appointmentId": 136,
-        "customerName": "Jack",
-        "agentName": "�憒�"
+      "id" : 84,
+      "createdDate" : "2022-01-24T10:31:03.799Z",
+      "lastModifiedDate" : "2022-01-24T10:31:03.799Z",
+      "customerId" : 165,
+      "agentNo" : "AGAM11249699",
+      "status" : "FILLED",
+      "score" : 1.0,
+      "appointmentId" : 482,
+      "customerName" : "Mila la",
+      "agentName" : "���� lala",
+      "type" : "APPOINTMENT"
+    }, {
+      "id" : 95,
+      "createdDate" : "2022-02-10T07:28:39.095Z",
+      "lastModifiedDate" : "2022-02-10T07:28:39.095Z",
+      "customerId" : 165,
+      "agentNo" : null,
+      "status" : "UNFILLED",
+      "score" : null,
+      "appointmentId" : 527,
+      "customerName" : "Mila la",
+      "agentName" : null,
+      "type" : "SYSTEM"
     }
-]
\ No newline at end of file
+]
diff --git "a/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\351\241\247\345\225\217\344\270\273\345\213\225\347\231\274\351\200\201\346\273\277\346\204\217\345\272\246\351\200\232\347\237\245API.txt" "b/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\351\241\247\345\225\217\344\270\273\345\213\225\347\231\274\351\200\201\346\273\277\346\204\217\345\272\246\351\200\232\347\237\245API.txt"
new file mode 100644
index 0000000..54e337d
--- /dev/null
+++ "b/pamapi/src/doc/\346\273\277\346\204\217\345\272\246/\351\241\247\345\225\217\344\270\273\345\213\225\347\231\274\351\200\201\346\273\277\346\204\217\345\272\246\351\200\232\347\237\245API.txt"
@@ -0,0 +1 @@
+http://localhost:8080/api/consultant/sendSatisfactionToClient/{appointmentId}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\344\277\256\346\224\271\347\264\204\350\250\252\347\264\200\351\214\204.txt" "b/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\344\277\256\346\224\271\347\264\204\350\250\252\347\264\200\351\214\204.txt"
new file mode 100644
index 0000000..2575b5d
--- /dev/null
+++ "b/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\344\277\256\346\224\271\347\264\204\350\250\252\347\264\200\351\214\204.txt"
@@ -0,0 +1,31 @@
+http post :
+
+http://localhost:8080/api/interview_record/update
+
+
+id : interviewRecord id
+content : 蝝赤蝝���摰�
+interviewDate: ����赤����
+appointmentId: ���id
+
+
+
+request body :
+
+{
+    "id":5,
+    "content":"test record content2",
+    "interviewDate":"2021-01-01T08:00:00.000",
+    "appointmentId": 385
+}
+
+
+
+response body :
+
+{
+    "id": 5,
+    "content": "test record content2",
+    "interviewDate": "2021-01-01T08:00:00.000+00:00",
+    "appointmentId": 385
+}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\345\210\252\351\231\244\347\264\204\350\250\252\347\264\200\351\214\204.txt" "b/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\345\210\252\351\231\244\347\264\204\350\250\252\347\264\200\351\214\204.txt"
new file mode 100644
index 0000000..2f1e4a2
--- /dev/null
+++ "b/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\345\210\252\351\231\244\347\264\204\350\250\252\347\264\200\351\214\204.txt"
@@ -0,0 +1,6 @@
+http delete :
+
+http://localhost:8080/api/interview_record/{interviewRecordId}
+
+http://localhost:8080/api/interview_record/5
+
diff --git "a/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\346\226\260\345\242\236\347\264\204\350\250\252\347\264\200\351\214\204.txt" "b/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\346\226\260\345\242\236\347\264\204\350\250\252\347\264\200\351\214\204.txt"
new file mode 100644
index 0000000..afd43d6
--- /dev/null
+++ "b/pamapi/src/doc/\347\264\204\350\250\252\347\264\200\351\214\204API/\346\226\260\345\242\236\347\264\204\350\250\252\347\264\200\351\214\204.txt"
@@ -0,0 +1,27 @@
+http post :
+
+http://localhost:8080/api/interview_record/create
+
+
+interviewDate: ����赤����
+content : 蝝���摰�
+appointmentId: ���id
+
+
+request body :
+
+{
+    "content":"test record content",
+    "interviewDate":"2021-01-01T08:00:00.000",
+    "appointmentId": 385
+}
+
+
+response body :
+
+{
+    "id": 5,
+    "content": "test record content",
+    "interviewDate": "2021-01-01T08:00:00.000+00:00",
+    "appointmentId": 385
+}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\347\264\204\350\250\252\351\200\232\347\237\245API/\347\231\274\351\200\201\347\264\204\350\250\252\351\200\232\347\237\245API.txt" "b/pamapi/src/doc/\347\264\204\350\250\252\351\200\232\347\237\245API/\347\231\274\351\200\201\347\264\204\350\250\252\351\200\232\347\237\245API.txt"
new file mode 100644
index 0000000..6ccd657
--- /dev/null
+++ "b/pamapi/src/doc/\347\264\204\350\250\252\351\200\232\347\237\245API/\347\231\274\351\200\201\347\264\204\350\250\252\351\200\232\347\237\245API.txt"
@@ -0,0 +1,17 @@
+http post :
+
+http://localhost:8080/api/notice/send
+
+message: �����摰�
+appointmentId : 蝝赤�����id
+interviewDate: ����赤��挾
+
+request body:
+
+{
+    "message":"notice customer invterview time",
+    "email":"pollex@gmail.com",
+    "phone":"0912345678",
+    "appointmentId": 406,
+    "interviewDate":"2022-11-01T08:00:00.000"
+}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\210\252\351\231\244\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\210\252\351\231\244\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt"
new file mode 100644
index 0000000..91a8699
--- /dev/null
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\210\252\351\231\244\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt"
@@ -0,0 +1,6 @@
+http delete:
+
+http://localhost:8080/api/appointment/memo/{appointmentMemoId}
+
+http://localhost:8080/api/appointment/memo/1
+
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\217\226\345\276\227\351\240\220\347\264\204\345\226\256\347\264\260\347\257\200API.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\217\226\345\276\227\351\240\220\347\264\204\345\226\256\347\264\260\347\257\200API.txt"
index f8c11af..b453c56 100644
--- "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\217\226\345\276\227\351\240\220\347\264\204\345\226\256\347\264\260\347\257\200API.txt"
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\217\226\345\276\227\351\240\220\347\264\204\345\226\256\347\264\260\347\257\200API.txt"
@@ -3,24 +3,62 @@
 http://localhost:8080/api/appointment/getDetail/{appointmentId}
 
 
-response body:
+appointmentNoticeLogs: ��������風蝔�
+appointmentClosedInfo: ���蝯����
 
+
+response body:
 {
-    "id": 26,
-    "phone": "09123456789",
-    "email": "123",
-    "contactType": "email",
-    "gender": "male",
-    "age": "20",
-    "job": "憭",
-    "requirement": "��靽����",
-    "communicateStatus": "contacted",
-    "hopeContactTime": "','",
-    "otherRequirement": "",
-    "appointmentDate": "2021-11-12T10:17:14.107Z",
-    "agentNo": "6",
-    "customerId": 2,
-    "name": "Jack",
-    "consultantViewTime": "2021-12-01T08:04:59.369Z",
-    "consultantReadTime": "2021-12-01T08:05:59.857Z"
-}
+    "id": 385,
+    "phone": "0911223344",
+    "email": "SDD",
+    "contactType": "phone",
+    "gender": "female",
+    "age": "21-30",
+    "job": "��",
+    "requirement": "�摨瑁����",
+    "communicateStatus": "done",
+    "hopeContactTime": "'����,�����,�����,�����,�����,���,�����9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
+    "otherRequirement": null,
+    "appointmentDate": "2021-12-16T07:11:05.400Z",
+    "lastModifiedDate": "2022-01-19T10:57:51.380Z",
+    "agentNo": "A568420",
+    "customerId": 139,
+    "name": "Angula-test",
+    "consultantViewTime": "2021-12-27T02:02:18.711Z",
+    "consultantReadTime": "2021-12-28T07:16:01.295Z",
+    "contactTime": "2021-12-28T07:16:37.004Z",
+    "satisfactionScore": null,
+    "appointmentMemoList": [],
+    "interviewRecordDTOs": [],
+    "appointmentNoticeLogs": [
+        {
+            "id": 4,
+            "phone": "0912345678",
+            "email": "pollex@gmail.com",
+            "appointmentId": 385,
+            "content": "notice customer invterview time",
+            "createdDate": "2022-01-11T09:33:57.754Z",
+            "interviewDate": null
+        },
+        {
+            "id": 6,
+            "phone": "0912345678",
+            "email": "pollex@gmail.com",
+            "appointmentId": 385,
+            "content": "notice customer invterview time",
+            "createdDate": "2022-01-19T10:38:42.187Z",
+            "interviewDate": "2022-11-01T08:00:00.000+00:00"
+        }
+    ],
+    "appointmentClosedInfo": {
+        "id": 9,
+        "policyholderIdentityId": "A123456789",
+        "planCode": "ATMdd",
+        "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
+        "remark": "test remark",
+        "closedReason": "other2",
+        "closedOtherReason": "敹��末銝鞎�2",
+        "appointmentId": 385
+    }
+}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\256\242\346\210\266\345\217\226\345\276\227\346\234\200\346\226\260\351\240\220\347\264\204\347\232\204\346\234\252\350\231\225\347\220\206\351\240\220\347\264\204\345\226\256.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\256\242\346\210\266\345\217\226\345\276\227\346\234\200\346\226\260\351\240\220\347\264\204\347\232\204\346\234\252\350\231\225\347\220\206\351\240\220\347\264\204\345\226\256.txt"
new file mode 100644
index 0000000..f4e02f9
--- /dev/null
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\345\256\242\346\210\266\345\217\226\345\276\227\346\234\200\346\226\260\351\240\220\347\264\204\347\232\204\346\234\252\350\231\225\347\220\206\351\240\220\347\264\204\345\226\256.txt"
@@ -0,0 +1,61 @@
+http get :
+
+http://localhost:8080/api/appointment/customer/expiring/newest
+
+蝪∟��mail��誑閰脩雯���脣擐�� -> http://localhost:3000?notContactAppointmentId={���銝�蝑�����}
+
+response body: ����200銝衣策隞乩�����(���遙雿�暹������嚗���ull)
+{
+    "id": 385,
+    "phone": "0911223344",
+    "email": "SDD",
+    "contactType": "phone",
+    "gender": "female",
+    "age": "21-30",
+    "job": "��",
+    "requirement": "�摨瑁����",
+    "communicateStatus": "done",
+    "hopeContactTime": "'����,�����,�����,�����,�����,���,�����9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
+    "otherRequirement": null,
+    "appointmentDate": "2021-12-16T07:11:05.400Z",
+    "lastModifiedDate": "2022-01-19T10:57:51.380Z",
+    "agentNo": "A568420",
+    "customerId": 139,
+    "name": "Angula-test",
+    "consultantViewTime": "2021-12-27T02:02:18.711Z",
+    "consultantReadTime": "2021-12-28T07:16:01.295Z",
+    "contactTime": "2021-12-28T07:16:37.004Z",
+    "satisfactionScore": null,
+    "appointmentMemoList": [],
+    "interviewRecordDTOs": [],
+    "appointmentNoticeLogs": [
+        {
+            "id": 4,
+            "phone": "0912345678",
+            "email": "pollex@gmail.com",
+            "appointmentId": 385,
+            "content": "notice customer invterview time",
+            "createdDate": "2022-01-11T09:33:57.754Z",
+            "interviewDate": null
+        },
+        {
+            "id": 6,
+            "phone": "0912345678",
+            "email": "pollex@gmail.com",
+            "appointmentId": 385,
+            "content": "notice customer invterview time",
+            "createdDate": "2022-01-19T10:38:42.187Z",
+            "interviewDate": "2022-11-01T08:00:00.000+00:00"
+        }
+    ],
+    "appointmentClosedInfo": {
+        "id": 9,
+        "policyholderIdentityId": "A123456789",
+        "planCode": "ATMdd",
+        "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
+        "remark": "test remark",
+        "closedReason": "other2",
+        "closedOtherReason": "敹��末銝鞎�2",
+        "appointmentId": 385
+    }
+}
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\226\260\345\242\236\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\226\260\345\242\236\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt"
new file mode 100644
index 0000000..8d69884
--- /dev/null
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\226\260\345\242\236\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt"
@@ -0,0 +1,14 @@
+http post :
+
+http://localhost:8080/api/appointment/memo/create
+
+
+content : �����酉�摰�
+appointmentId : ���id
+
+request body:
+
+{
+    "content":"test",
+    "appointmentId":368
+}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\233\264\346\226\260\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\233\264\346\226\260\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt"
new file mode 100644
index 0000000..c297eb4
--- /dev/null
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\233\264\346\226\260\351\240\220\347\264\204\345\226\256\345\202\231\350\250\273.txt"
@@ -0,0 +1,12 @@
+http post :
+
+http://localhost:8080/api/appointment/memo/update
+
+id : memo id
+
+
+request body:
+{
+    "id": 1 ,
+    "content":"test4"
+}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\250\231\350\250\230\347\202\272\345\267\262\350\201\257\347\265\241API.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\250\231\350\250\230\347\202\272\345\267\262\350\201\257\347\265\241API.txt"
index 80ef9a6..ad86aac 100644
--- "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\250\231\350\250\230\347\202\272\345\267\262\350\201\257\347\265\241API.txt"
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\346\250\231\350\250\230\347\202\272\345\267\262\350\201\257\347\265\241API.txt"
@@ -1,2 +1,58 @@
-http post : 
+http post :
 http://localhost:8080/api/appointment/markAsContacted/{appointmentId}
+
+response body:
+{
+    "id": 385,
+    "phone": "0911223344",
+    "email": "SDD",
+    "contactType": "phone",
+    "gender": "female",
+    "age": "21-30",
+    "job": "��",
+    "requirement": "�摨瑁����",
+    "communicateStatus": "done",
+    "hopeContactTime": "'����,�����,�����,�����,�����,���,�����9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
+    "otherRequirement": null,
+    "appointmentDate": "2021-12-16T07:11:05.400Z",
+    "lastModifiedDate": "2022-01-19T10:57:51.380Z",
+    "agentNo": "A568420",
+    "customerId": 139,
+    "name": "Angula-test",
+    "consultantViewTime": "2021-12-27T02:02:18.711Z",
+    "consultantReadTime": "2021-12-28T07:16:01.295Z",
+    "contactTime": "2021-12-28T07:16:37.004Z",
+    "satisfactionScore": null,
+    "appointmentMemoList": [],
+    "interviewRecordDTOs": [],
+    "appointmentNoticeLogs": [
+        {
+            "id": 4,
+            "phone": "0912345678",
+            "email": "pollex@gmail.com",
+            "appointmentId": 385,
+            "content": "notice customer invterview time",
+            "createdDate": "2022-01-11T09:33:57.754Z",
+            "interviewDate": null
+        },
+        {
+            "id": 6,
+            "phone": "0912345678",
+            "email": "pollex@gmail.com",
+            "appointmentId": 385,
+            "content": "notice customer invterview time",
+            "createdDate": "2022-01-19T10:38:42.187Z",
+            "interviewDate": "2022-11-01T08:00:00.000+00:00"
+        }
+    ],
+    "appointmentClosedInfo": {
+        "id": 9,
+        "policyholderIdentityId": "A123456789",
+        "planCode": "ATMdd",
+        "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
+        "remark": "test remark",
+        "closedReason": "other2",
+        "closedOtherReason": "敹��末銝鞎�2",
+        "appointmentId": 385
+    }
+}
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\347\265\220\346\241\210API.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\347\265\220\346\241\210API.txt"
new file mode 100644
index 0000000..5597199
--- /dev/null
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\347\265\220\346\241\210API.txt"
@@ -0,0 +1,32 @@
+http post : 
+�憓���敦, ��蝯��敦:
+http://localhost:8080/api/appointment/close
+
+
+
+request body :
+
+��漱
+contactStatus: done
+
+{
+    "policyholderIdentityId":"A123456789",
+    "planCode":"ATM",
+    "policyEntryDate":"2022-01-12",
+    "contactStatus":"done",
+    "appointmentId": 385,
+    "remark":"test remark"
+}
+
+
+
+���漱
+contactStatus: closed
+
+{
+    "contactStatus":"closed",
+    "closedReason":"other",
+    "closedOtherReason":"敹��末銝鞎�",
+    "appointmentId": 385,
+    "remark":"test remark"
+}
\ No newline at end of file
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\240\220\347\264\204\345\211\215\350\251\242\345\225\217.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\240\220\347\264\204\345\211\215\350\251\242\345\225\217.txt"
index 77a306f..ef19a01 100644
--- "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\240\220\347\264\204\345\211\215\350\251\242\345\225\217.txt"
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\240\220\347\264\204\345\211\215\350\251\242\345\225\217.txt"
@@ -4,7 +4,7 @@
 
 
 contactType: email,phone
-gender: male, female 
+gender: male, female
 
 request body:
 
@@ -19,4 +19,27 @@
     "hopeContactTime":"'����~�����, 12:00~14:00, 18:00~21:00'",
     "otherRequirement":"憭馳����",
     "agentNo":"admin"
-}
\ No newline at end of file
+}
+
+�����鞈��
+response body:
+{
+  "id" : 493,
+  "phone" : "",
+  "email" : "wayne8692wayne8692@gmail.com",
+  "contactType" : "EMAIL",
+  "gender" : "female",
+  "age" : "31-40",
+  "job" : "��",
+  "requirement" : "����,鞈閬��",
+  "communicateStatus" : "reserved",
+  "hopeContactTime" : "",
+  "otherRequirement" : null,
+  "appointmentDate" : "2022-02-08T06:57:05.661Z",
+  "lastModifiedDate" : "2022-02-08T06:57:05.661Z",
+  "agentNo" : "AG0101234567",
+  "customerId" : 167,
+  "consultantViewTime" : null,
+  "consultantReadTime" : null,
+  "contactTime" : null
+}
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\241\247\345\225\217\345\217\226\345\276\227\346\211\200\346\234\211\350\207\252\345\267\261\347\232\204\351\240\220\347\264\204\345\226\256API.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\241\247\345\225\217\345\217\226\345\276\227\346\211\200\346\234\211\350\207\252\345\267\261\347\232\204\351\240\220\347\264\204\345\226\256API.txt"
index 24949fd..9072a0f 100644
--- "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\241\247\345\225\217\345\217\226\345\276\227\346\211\200\346\234\211\350\207\252\345\267\261\347\232\204\351\240\220\347\264\204\345\226\256API.txt"
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\241\247\345\225\217\345\217\226\345\276\227\346\211\200\346\234\211\350\207\252\345\267\261\347\232\204\351\240\220\347\264\204\345\226\256API.txt"
@@ -2,139 +2,62 @@
 
 http://localhost:8080/api/consultant/getMyAppointment
 
-
+appointmentMemoList : ��酉鞈��
+interviewRecordDTOs : 蝝赤蝝����
 
 [
     {
-        "id": 110,
-        "phone": "09123456789",
-        "email": "",
-        "contactType": "mobile",
-        "gender": "male",
-        "age": "30",
-        "job": "��",
-        "requirement": "摮戊��,鞈閬��,��靽����",
-        "communicateStatus": "contacted",
-        "hopeContactTime": "'蝳格���,蝳格����12:00~14:00,14:00~18:00'",
-        "otherRequirement": null,
-        "appointmentDate": "2021-12-02T09:58:58.932Z",
-        "lastModifiedDate": "2021-12-02T09:58:58.932Z",
-        "agentNo": "AG0109051204",
-        "customerId": 70,
-        "name": null,
-        "consultantViewTime": "2021-12-02T09:58:12.066Z",
-        "consultantReadTime": "2021-12-02T09:58:58.930Z",
-        "contactTime": "2021-12-02T09:58:58.930Z",
-        "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
-    },
-    {
-        "id": 109,
-        "phone": "09123456789",
-        "email": "",
-        "contactType": "mobile",
-        "gender": "male",
-        "age": "20",
-        "job": "��",
-        "requirement": "�摨瑁����,摮戊��,靽�瑼�/閬��,��靽����",
-        "communicateStatus": "contacted",
-        "hopeContactTime": "'蝳格��,蝳格���,蝳格���,蝳格���,蝳格���,蝳格�,蝳格���12:00~14:00,14:00~18:00'",
-        "otherRequirement": null,
-        "appointmentDate": "2021-12-02T10:12:24.613Z",
-        "lastModifiedDate": "2021-12-02T10:12:24.613Z",
-        "agentNo": "AG0109051204",
-        "customerId": 67,
-        "name": null,
-        "consultantViewTime": "2021-12-02T09:58:12.066Z",
-        "consultantReadTime": "2021-12-02T10:12:24.612Z",
-        "contactTime": null,
-        "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
-    },
-    {
-        "id": 114,
-        "phone": "09123456789",
-        "email": "",
-        "contactType": "mobile",
-        "gender": "male",
-        "age": "70",
-        "job": "��",
-        "requirement": "�摨瑁����,摮戊��,鞈閬��,璅暑��隡�,��靽����",
-        "communicateStatus": "contacted",
-        "hopeContactTime": "'蝳格��,蝳格���,蝳格���,蝳格���,蝳格���,蝳格�,蝳格���12:00~14:00,14:00~18:00'",
-        "otherRequirement": null,
-        "appointmentDate": "2021-12-02T09:58:12.248Z",
-        "lastModifiedDate": "2021-12-02T09:58:12.248Z",
-        "agentNo": "AG0109051204",
-        "customerId": 71,
-        "name": null,
-        "consultantViewTime": "2021-12-02T09:58:12.066Z",
-        "consultantReadTime": null,
-        "contactTime": null,
-        "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
-    },
-    {
-        "id": 121,
-        "phone": "09123456789",
-        "email": "",
-        "contactType": "mobile",
-        "gender": "male",
-        "age": "20",
-        "job": "��",
-        "requirement": "摮戊��",
-        "communicateStatus": "contacted",
-        "hopeContactTime": "'蝳格��,蝳格���,蝳格���,蝳格���,蝳格���,蝳格�,蝳格���9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
-        "otherRequirement": null,
-        "appointmentDate": "2021-12-02T09:58:12.248Z",
-        "lastModifiedDate": "2021-12-02T09:58:12.248Z",
-        "agentNo": "AG0109051204",
-        "customerId": 76,
-        "name": "��蝬�",
-        "consultantViewTime": "2021-12-02T09:58:12.066Z",
-        "consultantReadTime": "2021-12-02T09:54:20.872Z",
-        "contactTime": null,
-        "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
-    },
-    {
-        "id": 118,
-        "phone": "09123456789",
-        "email": "",
-        "contactType": "mobile",
-        "gender": "male",
-        "age": "20",
-        "job": "��",
-        "requirement": "�摨瑁����",
-        "communicateStatus": "contacted",
-        "hopeContactTime": "'蝳格��,蝳格���,蝳格���,蝳格���,蝳格���,蝳格�,蝳格���12:00~14:00,14:00~18:00'",
-        "otherRequirement": null,
-        "appointmentDate": "2021-12-02T10:02:52.797Z",
-        "lastModifiedDate": "2021-12-02T10:02:52.797Z",
-        "agentNo": "AG0109051204",
-        "customerId": 72,
-        "name": null,
-        "consultantViewTime": "2021-12-02T09:58:12.066Z",
-        "consultantReadTime": "2021-12-02T10:02:52.796Z",
-        "contactTime": null,
-        "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
-    },
-    {
-        "id": 180,
-        "phone": "0911111111",
-        "email": "",
+        "id": 385,
+        "phone": "0911223344",
+        "email": "SDD",
         "contactType": "phone",
         "gender": "female",
-        "age": "31-40",
+        "age": "21-30",
         "job": "��",
-        "requirement": "摮戊��,�摨瑁����",
-        "communicateStatus": "contacted",
-        "hopeContactTime": "'蝳格���,蝳格���,蝳格���,蝳格���,蝳格���9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00','蝳格��,蝳格���,蝳格���,蝳格���,蝳格���,蝳格���12:00~14:00,14:00~18:00,18:00~21:00','蝳格��,蝳格���,蝳格�,蝳格���14:00~18:00,18:00~21:00'",
+        "requirement": "�摨瑁����",
+        "communicateStatus": "done",
+        "hopeContactTime": "'����,�����,�����,�����,�����,���,�����9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
         "otherRequirement": null,
-        "appointmentDate": "2021-12-02T10:10:53.341Z",
-        "lastModifiedDate": "2021-12-03T03:40:16.344Z",
-        "agentNo": "AG0109051204",
-        "customerId": 77,
-        "name": "111",
-        "consultantViewTime": "2021-12-02T10:10:46.358Z",
-        "consultantReadTime": "2021-12-02T10:10:53.340Z",
-        "contactTime": "2021-12-03T03:40:16.215Z",
-        "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
+        "appointmentDate": "2021-12-16T07:11:05.400Z",
+        "lastModifiedDate": "2022-01-19T10:57:51.380Z",
+        "agentNo": "A568420",
+        "customerId": 139,
+        "name": "Angula-test",
+        "consultantViewTime": "2021-12-27T02:02:18.711Z",
+        "consultantReadTime": "2021-12-28T07:16:01.295Z",
+        "contactTime": "2021-12-28T07:16:37.004Z",
+        "satisfactionScore": null,
+        "appointmentMemoList": [],
+        "interviewRecordDTOs": [],
+        "appointmentNoticeLogs": [
+            {
+                "id": 4,
+                "phone": "0912345678",
+                "email": "pollex@gmail.com",
+                "appointmentId": 385,
+                "content": "notice customer invterview time",
+                "createdDate": "2022-01-11T09:33:57.754Z",
+                "interviewDate": null
+            },
+            {
+                "id": 6,
+                "phone": "0912345678",
+                "email": "pollex@gmail.com",
+                "appointmentId": 385,
+                "content": "notice customer invterview time",
+                "createdDate": "2022-01-19T10:38:42.187Z",
+                "interviewDate": "2022-11-01T08:00:00.000+00:00"
+            }
+        ],
+        "appointmentClosedInfo": {
+            "id": 9,
+            "policyholderIdentityId": "A123456789",
+            "planCode": "ATMdd",
+            "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
+            "remark": "test remark",
+            "closedReason": "other2",
+            "closedOtherReason": "敹��末銝鞎�2",
+            "appointmentId": 385
+        }
     }
 ]
diff --git "a/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\241\247\345\225\217\345\217\226\345\276\227\346\234\252\350\231\225\347\220\206\351\240\220\347\264\204\345\226\256\346\225\270\351\207\217\351\200\232\347\237\245.txt" "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\241\247\345\225\217\345\217\226\345\276\227\346\234\252\350\231\225\347\220\206\351\240\220\347\264\204\345\226\256\346\225\270\351\207\217\351\200\232\347\237\245.txt"
new file mode 100644
index 0000000..4582f1e
--- /dev/null
+++ "b/pamapi/src/doc/\351\240\220\347\264\204\345\226\256/\351\241\247\345\225\217\345\217\226\345\276\227\346\234\252\350\231\225\347\220\206\351\240\220\347\264\204\345\226\256\346\225\270\351\207\217\351\200\232\347\237\245.txt"
@@ -0,0 +1,5 @@
+http get :
+http://localhost:8080/api/appointment/consultant/pending/sum
+
+response body:
+2
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\217\226\345\276\227\351\241\247\345\225\217\351\240\255\345\203\217.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\217\226\345\276\227\351\241\247\345\225\217\351\240\255\345\203\217.txt"
index 7c61a74..621e7de 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\217\226\345\276\227\351\241\247\345\225\217\351\240\255\345\203\217.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\217\226\345\276\227\351\241\247\345\225\217\351\240\255\345\203\217.txt"
@@ -1,8 +1,8 @@
-http get: http://localhost:8080/api/consultant/avatar/{fileName}
-����“����ㄐ��mg甈�����迂嚗��“�����pg瑼��
+http get: http://localhost:8080/api/consultant/avatar/{agentNo}
+���“���gentNo ���“������
 
 example request:
-http://localhost:8080/api/consultant/avatar/avatar1.jpg
+http://localhost:8080/api/consultant/avatar/A568420
 
 response body嚗� 鈭�脣瑼��
 
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\232\264\351\201\270\351\205\215\345\260\215.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\232\264\351\201\270\351\205\215\345\260\215.txt"
index 9401136..40de4b8 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\232\264\351\201\270\351\205\215\345\260\215.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\232\264\351\201\270\351\205\215\345\260\215.txt"
@@ -8,7 +8,7 @@
     "area":"獢��",
     "requirements": ["�摨瑁����","靽�瑼�/閬��"],
     "otherRequirement": "���",
-    "seniority":        // "鞈楛"撣�"SENIOR"��"撟渲��"撣�"YOUNG"��"銝��"撣�"UNLIMITED"
+    "seniority": "SENIOR"       // "鞈楛"撣�"SENIOR"��"撟渲��"撣�"YOUNG"��"銝��"撣�"UNLIMITED"
     "popularTags":["��","憭梯","����"],
     "otherPopularTags":"���",
 }
@@ -23,6 +23,7 @@
             "鞎∪����",
             "鞈頧宏"
         ],
+        "suitability": 50       // ���漲
         "avgScore": 4.7,
         "contactStatus": null,
         "updateTime": null,
@@ -40,6 +41,7 @@
             "蝭�蝔�",
             "璅暑��隡�"
         ],
+        "suitability": 100         // ���漲
         "avgScore": 3.8,
         "contactStatus": null,
         "updateTime": null,
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt"
index eb81537..b48703c 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\256\242\346\210\266\347\232\204\351\241\247\345\225\217\346\270\205\345\226\256.txt"
@@ -18,6 +18,7 @@
         "contactStatus": "reserved",        // ��脰�����icked (�脰����)�eserved (撌脤���)�ontacted (撌脤��蝜�)
         "createTime": "2021-12-02T10:55:53.939Z",   // ��憿批������
         "updateTime": "2021-12-02T10:56:32.741Z",   // ��餈�����
+        "customerViewTime": "2021-12-13T02:20:52.932Z", // 摰X������
         "role": "憡��蝬�鈭�",
         "seniority": "22 撟� 8 ���",
         "appointments": [       // 摰X撌脤���“���
@@ -42,8 +43,7 @@
                 "consultantReadTime": null,
                 "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
             }
-        ],
-        "new": true
+        ]
     },
     {
         "agentNo": "B282677963",
@@ -61,6 +61,7 @@
         "contactStatus": "reserved",
         "createTime": "2021-12-02T10:55:57.423Z",
         "updateTime": "2021-12-02T10:56:56.946Z",
+        "customerViewTime": "2021-12-13T02:20:52.932Z", // 摰X������
         "role": "����蝬�鈭�",
         "seniority": "30 撟� 8 ���",
         "appointments": [
@@ -85,8 +86,7 @@
                 "consultantReadTime": null,
                 "satisfactionScore":3 // null 隞�銵刻府蝑��撠憛怠神皛踵�漲
             }
-        ],
-        "new": true
+        ]
     },
     {
         "agentNo": "R221444250",
@@ -104,10 +104,10 @@
         "contactStatus": "picked",
         "createTime": "2021-12-02T10:56:01.004Z",
         "updateTime": null,
+        "customerViewTime": "2021-12-13T02:20:52.932Z", // 摰X������
         "role": "����蝬�鈭�",
         "seniority": "38 撟� ",
-        "appointments": [],
-        "new": true
+        "appointments": []
     },
     {
         "agentNo": "Z152717443",
@@ -125,8 +125,8 @@
         "contactStatus": "picked",
         "createTime": "2021-12-02T10:56:04.620Z",
         "updateTime": null,
+        "customerViewTime": "2021-12-13T02:20:52.932Z", // 摰X������
         "role": "��陸靽蝬�鈭�",
-        "appointments": [],
-        "new": true
+        "appointments": []
     }
 ]
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\277\253\351\200\237\347\257\251\351\201\270.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\277\253\351\200\237\347\257\251\351\201\270.txt"
index b5a98d3..12f1f08 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\345\277\253\351\200\237\347\257\251\351\201\270.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\345\277\253\351\200\237\347\257\251\351\201\270.txt"
@@ -5,7 +5,8 @@
     "gender": "female",
     "communicationStyles": [],
     "avgScore": 4,
-    "status": "online"
+    "status": "online",
+    "seniority": "SENIOR"   // "鞈楛"撣�"SENIOR"��"撟渲��"撣�"YOUNG"��"銝��"撣�"UNLIMITED"
 }
 
 response body:
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
index 4207ebd..9e345bd 100644
--- "a/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt"
@@ -2,27 +2,21 @@
 
 response body:
 {
-    "name": "皜祈岫��璆剖�",
-    "agentNo": "12345",
-    "role": "靽蝬�鈭�",
-    "img": "",
-    "avgScore": 4.7,
-    "title": "撠����",
-    "phoneNumber": "0912345678",
-    "serveArea": "������",
-    "companyAddress": "����縑蝢拙�敹�頝臭�畾�1���",
-    "latestLoginTime": "2021-11-29T07:39:22.135Z",      // ����敺�蝝�����葆null
-    "seniority": "4撟�2���",
-    "suitability": 0,
-    "evaluation": 0,
-    "expertise": [
-        "鞎∪����",
-        "鞈頧宏"
-    ],
-    "concept": "憯賡頝臭���敺���策摰X靽∩遙����������憟賜�瘜��平隞乩�����蝘���鈭箇敹急����縑敹萄����旦�靽∴���末��平��犖�嚗������憿敹鈭箇����瘞貊���ˊ�鈭平��������",
-    "experiences": [
-        "�憭扯瓷��頂",
-        "蝢��移蝞葦��"
-    ],
-    "awards": "��嚗�2020撟港摩璅�之��雿單平�� ����嚗犖頨思�璆剖�霅��馳�隞�霅�犖頨思�隞���犖霅�瓷�靽隞���犖霅"
+  "name" : "撏祠",
+  "agentNo" : "R221444250",
+  "role" : "����蝬�鈭�",
+  "avgScore" : 3.1,
+  "title" : "�����(DM)",
+  "phoneNumber" : "0987168787",
+  "serveArea" : "���腦������蝮�",
+  "companyAddress" : "��蝮����銝剜迤頝�30���9璅�",
+  "latestLoginTime" : "2021-12-24T08:48:21.497Z",
+  "seniority" : "38 撟� ",
+  "evaluation" : 50,
+  "expertise" : [ "�摨瑁����", "摮戊��", "鞈閬��", "璅暑��隡�", "靽�瑼�/閬��", "����" ],
+  "concept" : "瘥遢靽閬������\r\n�敹�敹�票敹����恥�\r\n\r\n����之靽∪艙\r\n��� 擃p�� ���祥�����r\n��� 蝪∪��� ��������r\n��� 摰Zˊ��� �銝�隞賡������r\n\r\n���������風�������犖",
+  "experiences" : "暻餌��極摮賊������飛蝟�,�憭余MBA,銝剖�之摮貉瓷��頂,鈭箄澈靽霅,鞎∠靽霅,�����霅,憭馳�隞�霅,��隡��移蝞葦霅,��靽鴽方�犖��岫霅,蝢�ˊ�蝞∴坐撣怨�,蝢�ˊ�鴽方�葦霅,蝢�瓷������靽葦霅",
+  "awards" : "20甈∪��匱蝥���(IQA)\r\n30甈∠�������(MDRT)��\r\n��瓷閬�“�����(CFP)",
+  "gender" : "female",
+  "communicationStyle" : "雓寞��祕��翰銝餃������隢◢頞�"
 }
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\347\264\200\351\214\204\345\256\242\346\210\266\346\237\245\347\234\213\351\241\247\345\225\217\346\270\205\345\226\256\347\232\204view_time API.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\347\264\200\351\214\204\345\256\242\346\210\266\346\237\245\347\234\213\351\241\247\345\225\217\346\270\205\345\226\256\347\232\204view_time API.txt"
new file mode 100644
index 0000000..b56821c
--- /dev/null
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\347\264\200\351\214\204\345\256\242\346\210\266\346\237\245\347\234\213\351\241\247\345\225\217\346\270\205\345\226\256\347\232\204view_time API.txt"
@@ -0,0 +1,6 @@
+http post:
+http://localhost:8080/api/consultant/favorite/view
+
+no request body
+
+response body: 204 NO_CONTENT
diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\347\267\250\350\274\257\344\277\256\346\224\271\351\241\247\345\225\217\350\263\207\346\226\231.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\347\267\250\350\274\257\344\277\256\346\224\271\351\241\247\345\225\217\350\263\207\346\226\231.txt"
new file mode 100644
index 0000000..aa25bc6
--- /dev/null
+++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\347\267\250\350\274\257\344\277\256\346\224\271\351\241\247\345\225\217\350\263\207\346\226\231.txt"
@@ -0,0 +1,26 @@
+��閬“��鈭箇���隞乩耨��撌梁����
+
+http post :
+
+http://localhost:8080/api/consultant/edit
+
+
+request body :
+{
+    "agentNo":"A568420",
+    "name":"雓�◢",
+    "expertise":["�摨瑁����","摮戊��"],
+    "title":"璆剖�� (SC)",
+    "role":"����蝬�鈭�",
+    "serveArea":"������蝮�",
+    "gender":"male",
+    "phoneNumber":"09123456789",
+    "companyAddress":"摰蝮�鈭����楝3���3璅�",
+    "seniorityYear":40,
+    "seniorityMonth":10,
+    "concept":"�����銝撥餈急�銝虫�������!�蝡���摰X���������!�憭拙�����憟賜�� �������撌梁��!",
+    "experiences":"�摨瑁����,摮戊��,鞈閬��",
+    "awards":"26甈∪��匱蝥���(IQA)",
+    "communicationStyle":"����",
+    "photoBase64":"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"
+}
\ No newline at end of file
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java
new file mode 100644
index 0000000..846287c
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java
@@ -0,0 +1,57 @@
+package com.pollex.pam.appointment.process;
+
+import java.time.Instant;
+import java.util.List;
+import java.util.Optional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.AppointmentClosedInfo;
+import com.pollex.pam.enums.ContactStatusEnum;
+import com.pollex.pam.repository.AppointmentClosedInfoRepository;
+import com.pollex.pam.repository.AppointmentRepository;
+import com.pollex.pam.service.AppointmentClosedInfoService;
+import com.pollex.pam.service.AppointmentService;
+import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
+import com.pollex.pam.service.dto.DoneProcessDTO;
+
+@Service
+public class AppointmentProcess{
+	
+	@Autowired
+	List<AppointmentProcessInterface> processList;
+	
+	@Autowired
+	AppointmentService appointmentService;
+	
+	@Autowired
+	AppointmentRepository appointmentRepository;
+	
+	@Autowired
+	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
+	
+	public void process(AbstractAppointmentProcessDTO dto) {
+		
+		processList.stream().forEach(process ->{
+			if(process.getProcessType() == dto.getContactStatus()) {
+				Optional<AppointmentClosedInfo> closedInfoOP = appointmentClosedInfoRepository.findByAppointmentId(dto.getAppointmentId());
+				if(closedInfoOP.isPresent()) {
+					process.editClosedInfo(dto, closedInfoOP.get());
+				}else {
+					process.create(dto);
+				}
+			}
+		});
+		
+		changeAppointmentCommunicateStatus(dto.getAppointmentId(), dto.getContactStatus());
+	}
+
+	private void changeAppointmentCommunicateStatus(Long appointmentId, ContactStatusEnum contactStatus) {
+		Appointment appointment = appointmentService.findById(appointmentId);
+		appointment.setCommunicateStatus(contactStatus);
+		appointmentRepository.save(appointment);
+	}
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java
new file mode 100644
index 0000000..ee63d5a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java
@@ -0,0 +1,14 @@
+package com.pollex.pam.appointment.process;
+
+import com.pollex.pam.domain.AppointmentClosedInfo;
+import com.pollex.pam.enums.ContactStatusEnum;
+import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
+
+public interface AppointmentProcessInterface {
+	
+	AppointmentClosedInfo create(AbstractAppointmentProcessDTO dto);
+	AppointmentClosedInfo editClosedInfo(AbstractAppointmentProcessDTO dto
+			, AppointmentClosedInfo closedInfo);
+	ContactStatusEnum getProcessType();
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java
new file mode 100644
index 0000000..69dbd24
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java
@@ -0,0 +1,65 @@
+package com.pollex.pam.appointment.process;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.AppointmentClosedInfo;
+import com.pollex.pam.enums.ContactStatusEnum;
+import com.pollex.pam.repository.AppointmentClosedInfoRepository;
+import com.pollex.pam.service.AppointmentClosedInfoService;
+import com.pollex.pam.service.AppointmentService;
+import com.pollex.pam.service.SatisfactionService;
+import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
+import com.pollex.pam.service.dto.ClosedProcessDTO;
+
+@Service
+@Transactional
+public class ClosedProcess implements AppointmentProcessInterface{
+
+	@Autowired
+	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
+
+	@Autowired
+	AppointmentService appointmentService;
+
+	@Autowired
+	AppointmentClosedInfoService appointmentClosedInfoService;
+
+	@Autowired
+	SatisfactionService satisfactionService;
+
+	@Override
+	public AppointmentClosedInfo create(AbstractAppointmentProcessDTO processDTO) {
+		ClosedProcessDTO closeProcess = toClosedProcessDTO(processDTO);
+		AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
+		BeanUtils.copyProperties(closeProcess, closedInfo);
+		Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
+		satisfactionService.createAppointmentSatisfaction(appointment);
+		return appointmentClosedInfoRepository.save(closedInfo);
+	}
+
+	private ClosedProcessDTO toClosedProcessDTO(AbstractAppointmentProcessDTO processDTO) {
+		ClosedProcessDTO closeProcess = (ClosedProcessDTO)processDTO;
+		BeanUtils.copyProperties(processDTO, closeProcess);
+		return closeProcess;
+	}
+
+	@Override
+	public ContactStatusEnum getProcessType() {
+		return ContactStatusEnum.CLOSED;
+	}
+
+	@Override
+	public AppointmentClosedInfo editClosedInfo(
+			AbstractAppointmentProcessDTO abstractDTO
+			, AppointmentClosedInfo closedInfo) {
+		ClosedProcessDTO closeProcess =  toClosedProcessDTO(abstractDTO);
+		BeanUtils.copyProperties(closeProcess, closedInfo);
+		return appointmentClosedInfoRepository.save(closedInfo);
+	}
+
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java b/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java
new file mode 100644
index 0000000..f42257e
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java
@@ -0,0 +1,64 @@
+package com.pollex.pam.appointment.process;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.AppointmentClosedInfo;
+import com.pollex.pam.enums.ContactStatusEnum;
+import com.pollex.pam.repository.AppointmentClosedInfoRepository;
+import com.pollex.pam.service.AppointmentClosedInfoService;
+import com.pollex.pam.service.AppointmentService;
+import com.pollex.pam.service.SatisfactionService;
+import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
+import com.pollex.pam.service.dto.DoneProcessDTO;
+
+@Service
+@Transactional
+public class DoneProcess implements AppointmentProcessInterface{
+
+	@Autowired
+	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
+
+	@Autowired
+	AppointmentClosedInfoService appointmentClosedInfoService;
+
+	@Autowired
+	SatisfactionService satisfactionService;
+
+	@Autowired
+	AppointmentService appointmentService;
+
+	@Override
+	public AppointmentClosedInfo create(AbstractAppointmentProcessDTO processDTO) {
+		DoneProcessDTO doneProcess = toDoneProcessDTO(processDTO);
+		AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
+		BeanUtils.copyProperties(doneProcess, closedInfo);
+		Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
+		satisfactionService.createAppointmentSatisfaction(appointment);
+		return appointmentClosedInfoRepository.save(closedInfo);
+	}
+
+	@Override
+	public ContactStatusEnum getProcessType() {
+		return ContactStatusEnum.DONE;
+	}
+
+	@Override
+	public AppointmentClosedInfo editClosedInfo(
+			AbstractAppointmentProcessDTO abstractDTO
+			, AppointmentClosedInfo closedInfo) {
+		DoneProcessDTO doneProcess =  toDoneProcessDTO(abstractDTO);
+		BeanUtils.copyProperties(doneProcess, closedInfo);
+		return appointmentClosedInfoRepository.save(closedInfo);
+	}
+
+	private DoneProcessDTO toDoneProcessDTO(AbstractAppointmentProcessDTO abstractDTO) {
+		DoneProcessDTO doneProcess = (DoneProcessDTO)abstractDTO;
+		BeanUtils.copyProperties(abstractDTO, doneProcess);
+		return doneProcess;
+	}
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java b/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
index 6f79c28..60b33ca 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
@@ -1,5 +1,6 @@
 package com.pollex.pam.config;
 
+import com.pollex.pam.enums.SendEmailMsgMethod;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -18,6 +19,10 @@
     private String eServiceLoginUrl;
     private String eServiceLoginFunc;
     private String eServiceLoginSys;
+    private String frontEndDomain;
+    private SMS sms;
+    private Email email;
+    private String fileFolderPath;
 
     public boolean isMockLogin() {
         return mockLogin;
@@ -74,4 +79,141 @@
     public void seteServiceLoginSys(String eServiceLoginSys) {
         this.eServiceLoginSys = eServiceLoginSys;
     }
+
+    public String getFrontEndDomain() {
+        return frontEndDomain;
+    }
+
+    public void setFrontEndDomain(String frontEndDomain) {
+        this.frontEndDomain = frontEndDomain;
+    }
+
+    public SMS getSms() {
+        return sms;
+    }
+
+    public void setSms(SMS sms) {
+        this.sms = sms;
+    }
+
+    public Email getEmail() {
+        return email;
+    }
+
+    public void setEmail(Email email) {
+        this.email = email;
+    }
+
+    public static class SMS {
+        private String url;
+        private String sourceCode;
+        private String sender;
+        private String smsType;
+        private String subject;
+        private boolean sendNotifyMsg;
+
+        public String getUrl() {
+            return url;
+        }
+
+        public void setUrl(String url) {
+            this.url = url;
+        }
+
+        public String getSourceCode() {
+            return sourceCode;
+        }
+
+        public void setSourceCode(String sourceCode) {
+            this.sourceCode = sourceCode;
+        }
+
+        public String getSender() {
+            return sender;
+        }
+
+        public void setSender(String sender) {
+            this.sender = sender;
+        }
+
+        public String getSmsType() {
+            return smsType;
+        }
+
+        public void setSmsType(String smsType) {
+            this.smsType = smsType;
+        }
+
+        public String getSubject() {
+            return subject;
+        }
+
+        public void setSubject(String subject) {
+            this.subject = subject;
+        }
+
+        public boolean isSendNotifyMsg() {
+            return sendNotifyMsg;
+        }
+
+        public void setSendNotifyMsg(boolean sendNotifyMsg) {
+            this.sendNotifyMsg = sendNotifyMsg;
+        }
+    }
+
+    public static class Email {
+        private String url;
+        private String functionId;
+        private String senderEmail;
+        private boolean sendNotifyMsg;
+        private SendEmailMsgMethod method;
+
+        public String getUrl() {
+            return url;
+        }
+
+        public void setUrl(String url) {
+            this.url = url;
+        }
+
+        public String getFunctionId() {
+            return functionId;
+        }
+
+        public void setFunctionId(String functionId) {
+            this.functionId = functionId;
+        }
+
+        public String getSenderEmail() {
+            return senderEmail;
+        }
+
+        public void setSenderEmail(String senderEmail) {
+            this.senderEmail = senderEmail;
+        }
+
+        public boolean isSendNotifyMsg() {
+            return sendNotifyMsg;
+        }
+
+        public void setSendNotifyMsg(boolean sendNotifyMsg) {
+            this.sendNotifyMsg = sendNotifyMsg;
+        }
+
+        public SendEmailMsgMethod getMethod() {
+            return method;
+        }
+
+        public void setMethod(SendEmailMsgMethod method) {
+            this.method = method;
+        }
+    }
+	public String getFileFolderPath() {
+		return fileFolderPath;
+	}
+
+	public void setFileFolderPath(String fileFolderPath) {
+		this.fileFolderPath = fileFolderPath;
+	}
+
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/config/Constants.java b/pamapi/src/main/java/com/pollex/pam/config/Constants.java
index ead5fc8..87dd25b 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/Constants.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/Constants.java
@@ -11,5 +11,26 @@
     public static final String SYSTEM = "system";
     public static final String DEFAULT_LANGUAGE = "zh-tw";
 
+    /**
+     * �閰勗�mail�撱箇���(T)敺�憭抵�������
+     * �����摰2
+     */
+    public static final int APPOINTMENT_PENDING_PHONE_INTERVAL = 2;
+    public static final int APPOINTMENT_PENDING_EMAIL_INTERVAL = 2;
+
+    /**
+     * �閰勗�mail�撱箇���(T)敺�憭拇�◤閬������嚗憭拇甈⊥����策憿批��
+     * �敺�憭�(T+N+1)嚗停���甈∠策摰X�� 閰脤“���敹�瘜������閬���
+     */
+    public static final int APPOINTMENT_EXPIRING_PHONE_INTERVAL = APPOINTMENT_PENDING_PHONE_INTERVAL + 1;
+    public static final int APPOINTMENT_EXPIRING_EMAIL_INTERVAL = APPOINTMENT_PENDING_EMAIL_INTERVAL + 1;
+
+    /**
+     * �摰X��活���
+     */
+    public static final int SEND_EXPIRING_NOTIFY_LIMIT = 1;
+
+    public static final String SPRING_PROFILE_POLLEX_DEVELOPMENT = "pollex";
+
     private Constants() {}
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java b/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
index 6fca6d3..0b995e0 100644
--- a/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
+++ b/pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
@@ -75,13 +75,14 @@
             .deny()
         .and()
             .sessionManagement()
-            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
+            .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
         .and()
             .authorizeRequests()
             .antMatchers("/api/authenticate").permitAll()
             .antMatchers("/api/register").permitAll()
             .antMatchers("/api/activate").permitAll()
             .antMatchers("/api/testLogin/**").permitAll()
+            .antMatchers("/api/test/sendMsg/**").permitAll()
             .antMatchers("/api/otp/**").permitAll()
             .antMatchers("/api/login/validate/**").permitAll()
             .antMatchers("/api/eService/authenticate").permitAll()
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java b/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java
index 096f448..76d30ca 100644
--- a/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java
+++ b/pamapi/src/main/java/com/pollex/pam/domain/Appointment.java
@@ -2,14 +2,29 @@
 
 import java.io.Serializable;
 import java.time.Instant;
+import java.util.List;
 
-import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
 
-import com.pollex.pam.enums.AppointmentStatusEnum;
-import com.pollex.pam.enums.ContactStatusEnum;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import com.pollex.pam.enums.AppointmentStatusEnum;
+import com.pollex.pam.enums.ContactStatusEnum;
 
 @EntityListeners(AuditingEntityListener.class)
 @Entity
@@ -58,11 +73,11 @@
 
     @CreatedDate
 	@Column(name = "appointment_date", updatable = false)
-    private Instant appointmentDate;
+    private Instant appointmentDate = Instant.now();
 
-    @LastModifiedDate
     @Column(name = "last_modified_date")
-    private Instant lastModifiedDate;
+    @LastModifiedDate
+    private Instant lastModifiedDate = Instant.now();
 
 	@Column(name = "agent_no")
     private String agentNo;
@@ -82,6 +97,19 @@
     @Enumerated(value = EnumType.STRING)
     @Column(name = "status")
     private AppointmentStatusEnum status;
+    
+    @JoinColumn(name = "appointment_id")
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
+    private List<AppointmentMemo> appointmentMemoList;
+    
+//    @OneToOne(cascade = CascadeType.REMOVE,fetch=FetchType.EAGER)
+////    @JoinColumn(name = "form_authority_id", referencedColumnName = "id")
+//    @JoinColumn(name = "appointment_id", referencedColumnName = "id")
+//    private AppointmentClosedInfo closedInfo;
+    
+//    @OneToOne(cascade = CascadeType.REMOVE
+//    		, mappedBy = "appointment", fetch=FetchType.LAZY)
+//    private AppointmentClosedInfo closedInfo;
 
 	public Long getId() {
 		return id;
@@ -234,4 +262,24 @@
     public void setLastModifiedDate(Instant lastModifiedDate) {
         this.lastModifiedDate = lastModifiedDate;
     }
+
+	public List<AppointmentMemo> getAppointmentMemoList() {
+		return appointmentMemoList;
+	}
+
+	public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
+		this.appointmentMemoList = appointmentMemoList;
+	}
+
+//	public AppointmentClosedInfo getClosedInfo() {
+//		return closedInfo;
+//	}
+//
+//	public void setClosedInfo(AppointmentClosedInfo closedInfo) {
+//		this.closedInfo = closedInfo;
+//	}
+    
+    
+    
+    
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java
new file mode 100644
index 0000000..bc16a7a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java
@@ -0,0 +1,112 @@
+package com.pollex.pam.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "appointment_closed_info")
+public class AppointmentClosedInfo implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+	
+	@Column(name = "policyholder_identity_id")
+    private String policyholderIdentityId;
+    
+    @Column(name = "plan_code")
+	private String planCode;
+    
+    @Column(name = "policy_entry_date")
+	private Date policyEntryDate;
+    
+    @Column(name = "remark")
+	private String remark;
+    
+    @Column(name = "closed_reason")
+	private String closedReason;
+    
+    @Column(name = "closed_other_reason")
+	private String closedOtherReason;
+    
+    @Column(name = "appointment_id")
+	private Long appointmentId;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getPolicyholderIdentityId() {
+		return policyholderIdentityId;
+	}
+
+	public void setPolicyholderIdentityId(String policyholderIdentityId) {
+		this.policyholderIdentityId = policyholderIdentityId;
+	}
+
+	public String getPlanCode() {
+		return planCode;
+	}
+
+	public void setPlanCode(String planCode) {
+		this.planCode = planCode;
+	}
+
+	public Date getPolicyEntryDate() {
+		return policyEntryDate;
+	}
+
+	public void setPolicyEntryDate(Date policyEntryDate) {
+		this.policyEntryDate = policyEntryDate;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getClosedReason() {
+		return closedReason;
+	}
+
+	public void setClosedReason(String closedReason) {
+		this.closedReason = closedReason;
+	}
+
+	public String getClosedOtherReason() {
+		return closedOtherReason;
+	}
+
+	public void setClosedOtherReason(String closedOtherReason) {
+		this.closedOtherReason = closedOtherReason;
+	}
+
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+    
+    
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java
index 5966459..bb2a477 100644
--- a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java
+++ b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java
@@ -2,12 +2,17 @@
 
 import java.io.Serializable;
 import java.time.Instant;
+import java.util.List;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
 import javax.persistence.Table;
 
 import com.pollex.pam.enums.AppointmentStatusEnum;
@@ -84,6 +89,10 @@
     @Enumerated(value = EnumType.STRING)
     @Column(name = "status")
     private AppointmentStatusEnum status;
+    
+    @JoinColumn(name = "appointment_id")
+    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
+    private List<AppointmentMemo> appointmentMemoList;
 
     public Long getId() {
         return id;
@@ -243,4 +252,14 @@
     public void setStatus(AppointmentStatusEnum status) {
         this.status = status;
     }
+
+	public List<AppointmentMemo> getAppointmentMemoList() {
+		return appointmentMemoList;
+	}
+
+	public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
+		this.appointmentMemoList = appointmentMemoList;
+	}
+    
+    
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java
new file mode 100644
index 0000000..5f2f8f6
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java
@@ -0,0 +1,46 @@
+package com.pollex.pam.domain;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.time.Instant;
+
+@Entity
+@Table(name = "appointment_expiring_notify_record")
+public class AppointmentExpiringNotifyRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "appointment_id")
+    private Long appointmentId;
+
+    @Column(name = "send_time")
+    private Instant sendTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getAppointmentId() {
+        return appointmentId;
+    }
+
+    public void setAppointmentId(Long appointmentId) {
+        this.appointmentId = appointmentId;
+    }
+
+    public Instant getSendTime() {
+        return sendTime;
+    }
+
+    public void setSendTime(Instant sendTime) {
+        this.sendTime = sendTime;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java
new file mode 100644
index 0000000..1b6299a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java
@@ -0,0 +1,57 @@
+package com.pollex.pam.domain;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "appointment_memo")
+public class AppointmentMemo extends AbstractAuditingEntity implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+	
+	@Column(name = "content")
+    private String content;
+	
+	@Column(name = "appointment_id")
+    private Long appointmentId;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+	
+	
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java
new file mode 100644
index 0000000..10c6173
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java
@@ -0,0 +1,135 @@
+package com.pollex.pam.domain;
+
+import java.io.Serializable;
+import java.time.Instant;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+@Entity
+@Table(name = "appointment_notice_log")
+public class AppointmentNoticeLog implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+	@Column(name = "phone")
+    private String phone;
+
+	@Column(name = "email")
+    private String email;
+	
+	@Column(name = "appointment_id")
+    private Long appointmentId;
+	
+//	@Column(name = "type")
+//    private String type;
+	
+	@Column(name = "content")
+    private String content;
+	
+//	@CreatedBy
+//    @Column(name = "created_by", nullable = false, length = 50, updatable = false)
+//    @JsonIgnore
+//    private String createdBy;
+
+    @CreatedDate
+    @Column(name = "created_date", updatable = false)
+    private Instant createdDate = Instant.now();
+    
+    @Column(name = "interview_date")
+    private Date interviewDate;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+
+//	public String getType() {
+//		return type;
+//	}
+//
+//	public void setType(String type) {
+//		this.type = type;
+//	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+//	public String getCreatedBy() {
+//		return createdBy;
+//	}
+//
+//	public void setCreatedBy(String createdBy) {
+//		this.createdBy = createdBy;
+//	}
+
+	public Instant getCreatedDate() {
+		return createdDate;
+	}
+
+	public void setCreatedDate(Instant createdDate) {
+		this.createdDate = createdDate;
+	}
+
+	public Date getInterviewDate() {
+		return interviewDate;
+	}
+
+	public void setInterviewDate(Date interviewDate) {
+		this.interviewDate = interviewDate;
+	}
+	
+    
+    
+    
+    
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
index 60fcbf9..942a2e7 100644
--- a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
+++ b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
@@ -71,6 +71,9 @@
     @Column(name = "communication_style")
     private String communicationStyle;
 
+    @Column(name = "email")
+    private String email;
+
     public Long getId() {
         return id;
     }
@@ -164,7 +167,7 @@
     }
 
     public void setCompanyAddress(String companyAddress) {
-        companyAddress = companyAddress;
+        this.companyAddress = companyAddress;
     }
 
     public Long getSeniorityYear() {
@@ -230,6 +233,14 @@
         this.communicationStyle = communicationStyle;
     }
 
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
     @Override
     public String toString() {
         return "Consultant{" +
@@ -245,13 +256,14 @@
             ", gender=" + gender +
             ", phoneNumber='" + phoneNumber + '\'' +
             ", companyAddress='" + companyAddress + '\'' +
-            ", seniorityYear='" + seniorityYear + '\'' +
-            ", seniorityMonth='" + seniorityMonth + '\'' +
+            ", seniorityYear=" + seniorityYear +
+            ", seniorityMonth=" + seniorityMonth +
             ", concept='" + concept + '\'' +
             ", experience='" + experience + '\'' +
             ", award='" + award + '\'' +
             ", recommend=" + recommend +
             ", communicationStyle='" + communicationStyle + '\'' +
+            ", email='" + email + '\'' +
             '}';
     }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java b/pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java
index 4145922..ec68439 100644
--- a/pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java
+++ b/pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java
@@ -1,11 +1,20 @@
 package com.pollex.pam.domain;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
 import javax.persistence.*;
 import java.io.Serializable;
+import java.time.Instant;
 
+@EntityListeners(AuditingEntityListener.class)
 @Entity
 @Table(name = "customer_favorite_consultant")
-public class CustomerFavoriteConsultant extends AbstractAuditingEntity implements Serializable {
+public class CustomerFavoriteConsultant implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -20,6 +29,28 @@
 
     @Column(name = "customer_id")
     private Long customerId;
+
+    @CreatedBy
+    @Column(name = "created_by", updatable = false)
+    @JsonIgnore
+    private String createdBy;
+
+    @CreatedDate
+    @Column(name = "created_date", updatable = false)
+    @JsonIgnore
+    private Instant createdDate = Instant.now();
+
+    @LastModifiedBy
+    @Column(name = "last_modified_by")
+    @JsonIgnore
+    private String lastModifiedBy;
+
+    @Column(name = "last_modified_date")
+    @JsonIgnore
+    private Instant lastModifiedDate = Instant.now();
+
+    @Column(name = "view_time")
+    private Instant viewTime;
 
     public Long getId() {
         return id;
@@ -45,12 +76,57 @@
         this.customerId = customId;
     }
 
+    public Instant getViewTime() {
+        return viewTime;
+    }
+
+    public void setViewTime(Instant viewTime) {
+        this.viewTime = viewTime;
+    }
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    public Instant getCreatedDate() {
+        return createdDate;
+    }
+
+    public void setCreatedDate(Instant createdDate) {
+        this.createdDate = createdDate;
+    }
+
+    public String getLastModifiedBy() {
+        return lastModifiedBy;
+    }
+
+    public void setLastModifiedBy(String lastModifiedBy) {
+        this.lastModifiedBy = lastModifiedBy;
+    }
+
+    public Instant getLastModifiedDate() {
+        return lastModifiedDate;
+    }
+
+    public void setLastModifiedDate(Instant lastModifiedDate) {
+        this.lastModifiedDate = lastModifiedDate;
+    }
+
     @Override
     public String toString() {
         return "CustomerFavoriteConsultant{" +
             "id=" + id +
             ", consultant=" + consultant +
             ", customerId=" + customerId +
+            ", createdBy='" + createdBy + '\'' +
+            ", createdDate=" + createdDate +
+            ", lastModifiedBy='" + lastModifiedBy + '\'' +
+            ", lastModifiedDate=" + lastModifiedDate +
+            ", viewTime=" + viewTime +
             '}';
     }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java
new file mode 100644
index 0000000..c7f02d1
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java
@@ -0,0 +1,87 @@
+package com.pollex.pam.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import com.pollex.pam.enums.InterviewRecordStatusEnum;
+
+@Entity
+@Table(name = "interview_record")
+public class InterviewRecord extends AbstractAuditingEntity implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+	
+	@Column(name = "content")
+    private String content;
+	
+	@Column(name = "interview_date")
+    private Date interviewDate;
+	
+	@Column(name = "appointment_id")
+	private Long appointmentId;
+	
+	@Enumerated(EnumType.STRING)
+	@Column(name = "status")
+    private InterviewRecordStatusEnum status;
+	
+	
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public Date getInterviewDate() {
+		return interviewDate;
+	}
+
+	public void setInterviewDate(Date interviewDate) {
+		this.interviewDate = interviewDate;
+	}
+
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+
+	public InterviewRecordStatusEnum getStatus() {
+		return status;
+	}
+
+	public void setStatus(InterviewRecordStatusEnum status) {
+		this.status = status;
+	}
+	
+	
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java b/pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java
new file mode 100644
index 0000000..922994b
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java
@@ -0,0 +1,123 @@
+package com.pollex.pam.domain;
+
+import java.io.Serializable;
+import java.time.Instant;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.springframework.data.annotation.CreatedDate;
+
+import com.pollex.pam.enums.NotificationTypeEnum;
+import com.pollex.pam.enums.PersonalNotificationRoleEnum;
+
+@Entity
+@Table(name = "personal_notification")
+public class PersonalNotification implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+	
+	@Column(name = "title")
+    private String title;
+	
+	@Column(name = "content")
+    private String content;
+	
+	@Enumerated(EnumType.STRING)
+	@Column(name = "notification_type")
+    private NotificationTypeEnum notificationType;
+	
+	@Enumerated(EnumType.STRING)
+	@Column(name = "owner_role")
+    private PersonalNotificationRoleEnum ownerRole;
+	
+	@Column(name = "owner_id")
+    private Long ownerId;
+	
+	@CreatedDate
+	@Column(name = "created_date", updatable = false)
+    private Instant createdDate = Instant.now();
+	
+	@Column(name = "read_date")
+    private Instant readDate;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public NotificationTypeEnum getNotificationType() {
+		return notificationType;
+	}
+
+	public void setNotificationType(NotificationTypeEnum notificationType) {
+		this.notificationType = notificationType;
+	}
+
+	public PersonalNotificationRoleEnum getOwnerRole() {
+		return ownerRole;
+	}
+
+	public void setOwnerRole(PersonalNotificationRoleEnum ownerRole) {
+		this.ownerRole = ownerRole;
+	}
+
+	public Long getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public Instant getCreatedDate() {
+		return createdDate;
+	}
+
+	public void setCreatedDate(Instant createdDate) {
+		this.createdDate = createdDate;
+	}
+
+	public Instant getReadDate() {
+		return readDate;
+	}
+
+	public void setReadDate(Instant readDate) {
+		this.readDate = readDate;
+	}
+	
+	
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java b/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java
index 95a0944..530bc06 100644
--- a/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java
+++ b/pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java
@@ -12,6 +12,8 @@
 import javax.persistence.Id;
 import javax.persistence.Table;
 
+import com.pollex.pam.enums.PersonalNotificationRoleEnum;
+import com.pollex.pam.enums.SatisfactionTypeEnum;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedDate;
 
@@ -56,6 +58,10 @@
 
     @Column(name = "appointment_id")
     private Long appointmentId;
+
+    @Enumerated(EnumType.STRING)
+    @Column(name = "type")
+    private SatisfactionTypeEnum type;
 
 	public Long getId() {
 		return id;
@@ -120,4 +126,12 @@
     public void setAppointmentId(Long appointmentId) {
         this.appointmentId = appointmentId;
     }
+
+    public SatisfactionTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(SatisfactionTypeEnum type) {
+        this.type = type;
+    }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
index 696463c..934a167 100644
--- a/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
+++ b/pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
@@ -10,5 +10,14 @@
     RESERVED,
 
     @JsonProperty("contacted")
-    CONTACTED
+    CONTACTED,
+    
+    @JsonProperty("done")
+    DONE,
+    
+    @JsonProperty("closed")
+    CLOSED,
+    
+    @JsonProperty("cancel")
+    CANCEL
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java
new file mode 100644
index 0000000..9bc0ee8
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java
@@ -0,0 +1,6 @@
+package com.pollex.pam.enums;
+
+public enum InterviewRecordStatusEnum {
+	AVAILABLE,
+	DELETED
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java
new file mode 100644
index 0000000..a14a84d
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java
@@ -0,0 +1,6 @@
+package com.pollex.pam.enums;
+
+public enum NotificationTypeEnum {
+	SYSTEM,
+	ACTIVITY
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java
new file mode 100644
index 0000000..0f063c2
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java
@@ -0,0 +1,6 @@
+package com.pollex.pam.enums;
+
+public enum PersonalNotificationRoleEnum {
+	CUSTOMER,
+	CONSULTANT
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java b/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java
new file mode 100644
index 0000000..a15dfc0
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java
@@ -0,0 +1,6 @@
+package com.pollex.pam.enums;
+
+public enum SatisfactionTypeEnum {
+    APPOINTMENT,        // 撠“�����遛��漲
+    SYSTEM              // 撠像���遛��漲
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java b/pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java
new file mode 100644
index 0000000..42a10ce
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java
@@ -0,0 +1,6 @@
+package com.pollex.pam.enums;
+
+public enum SendEmailMsgMethod {
+    PAM_EMAIL_SERVICE,
+    POLLEX_GMAIL
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java
new file mode 100644
index 0000000..b5d23ad
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java
@@ -0,0 +1,15 @@
+package com.pollex.pam.repository;
+
+import java.util.Optional;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.pollex.pam.domain.AppointmentClosedInfo;
+
+@Repository
+public interface AppointmentClosedInfoRepository extends JpaRepository<AppointmentClosedInfo, Long>{
+
+	Optional<AppointmentClosedInfo> findByAppointmentId(Long apId);
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java
index b3499c6..61b5a04 100644
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java
+++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java
@@ -2,6 +2,9 @@
 
 import java.util.List;
 
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.enums.AppointmentStatusEnum;
+import com.pollex.pam.enums.ContactStatusEnum;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -11,4 +14,5 @@
 public interface AppointmentCustomerViewRepository extends JpaRepository<AppointmentCustomerView, Long>{
 	List<AppointmentCustomerView> findByAgentNo(String agentNo);
     List<AppointmentCustomerView> findByAgentNoAndCustomerId(String agentNo, Long customerId);
+    List<AppointmentCustomerView> findAllByCommunicateStatusAndStatus(ContactStatusEnum contactStatus, AppointmentStatusEnum status);
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java
new file mode 100644
index 0000000..61a559a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java
@@ -0,0 +1,12 @@
+package com.pollex.pam.repository;
+
+import com.pollex.pam.domain.AppointmentExpiringNotifyRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface AppointmentExpiringNotifyRecordRepository extends JpaRepository<AppointmentExpiringNotifyRecord, Long> {
+    List<AppointmentExpiringNotifyRecord> findAllByAppointmentId(Long appointmentId);
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java
new file mode 100644
index 0000000..1b14cc7
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java
@@ -0,0 +1,11 @@
+package com.pollex.pam.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.pollex.pam.domain.AppointmentMemo;
+
+@Repository
+public interface AppointmentMemoRepository extends JpaRepository<AppointmentMemo, Long>{
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java
new file mode 100644
index 0000000..e939258
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java
@@ -0,0 +1,15 @@
+package com.pollex.pam.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.pollex.pam.domain.AppointmentNoticeLog;
+
+@Repository
+public interface AppointmentNoticeLogRepository extends JpaRepository<AppointmentNoticeLog, Long>{
+
+	List<AppointmentNoticeLog> findByAppointmentId(Long appointmentId);
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java
index fe3bc8c..fe01955 100644
--- a/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java
+++ b/pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java
@@ -1,7 +1,10 @@
 package com.pollex.pam.repository;
 
 import java.util.List;
+import java.util.Optional;
 
+import com.pollex.pam.enums.AppointmentStatusEnum;
+import com.pollex.pam.enums.ContactStatusEnum;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -13,4 +16,8 @@
 	List<Appointment> findByAgentNo(String agentNo);
 
     List<Appointment> findByAgentNoAndCustomerId(String agentNo, Long customerId);
+
+    Optional<Appointment> findTopByAgentNoAndCustomerIdOrderByAppointmentDateDesc(String agentNo, Long customerId);
+
+    List<Appointment> findAllByCommunicateStatusAndStatus(ContactStatusEnum contactStatus, AppointmentStatusEnum status);
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java
new file mode 100644
index 0000000..1b2f8d4
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java
@@ -0,0 +1,18 @@
+package com.pollex.pam.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.pollex.pam.domain.InterviewRecord;
+import com.pollex.pam.enums.InterviewRecordStatusEnum;
+
+@Repository
+public interface InterviewRecordRepository extends JpaRepository<InterviewRecord, Long>{
+
+	List<InterviewRecord> findByAppointmentId(Long appointmentId);
+
+	List<InterviewRecord> findByAppointmentIdAndStatus(Long appointmentId, InterviewRecordStatusEnum status);
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java
new file mode 100644
index 0000000..e6e4027
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java
@@ -0,0 +1,16 @@
+package com.pollex.pam.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import com.pollex.pam.domain.PersonalNotification;
+import com.pollex.pam.enums.PersonalNotificationRoleEnum;
+
+@Repository
+public interface PersonalNotificationRepository extends JpaRepository<PersonalNotification, Long>{
+
+	List<PersonalNotification> findAllByOwnerRoleAndOwnerId(PersonalNotificationRoleEnum role, Long ownerId);
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java
index 229ac4b..fa37237 100644
--- a/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java
+++ b/pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java
@@ -3,6 +3,8 @@
 import java.util.List;
 import java.util.Optional;
 
+import com.pollex.pam.enums.SatisfactionStatusEnum;
+import com.pollex.pam.enums.SatisfactionTypeEnum;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -13,14 +15,17 @@
 @Repository
 public interface SatisfactionRepository extends JpaRepository<Satisfaction, Long>{
 
-	List<Satisfaction> findByAgentNo(String agentNo);
+	List<Satisfaction> findByAgentNoAndType(String agentNo, SatisfactionTypeEnum type);
 
 	List<Satisfaction> findByCustomerId(Long customerId);
 
-	Optional<Satisfaction> findOneByAppointmentId(Long appointmentId);
+	Optional<Satisfaction> findOneByAppointmentIdAndType(Long appointmentId, SatisfactionTypeEnum type);
 
-	@Query(value = "SELECT avg(score) FROM satisfaction where agent_no=:agent_no"
+    List<Satisfaction> findAllByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type);
+
+	@Query(value = "SELECT avg(score) FROM satisfaction where type='APPOINTMENT'"
+            + " and agent_no=:agent_no"
+			+ " and score is not null"
 			, nativeQuery = true)
-	Float getAgentScoreAvg(@Param("agent_no") String agentNo);
+	Optional<Float> getAgentScoreAvg(@Param("agent_no") String agentNo);
 }
-	
\ No newline at end of file
diff --git a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java b/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
index 9a90c5e..54391f0 100644
--- a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
+++ b/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
@@ -21,7 +21,6 @@
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
@@ -43,7 +42,7 @@
 @Component
 public class EServiceAuthenticationProvider {
 
-    private static final String E_SERVICE_LOGIN_SUCCESS_CODE = "0";
+    private static final String E_SERVICE_LOGIN_SUCCESS_CODE = "true";
     private static final Logger log = LoggerFactory.getLogger(EServiceAuthenticationProvider.class);
 
     @Autowired
@@ -70,7 +69,7 @@
                 EServiceResponse eServiceResponse = responseEntity.getBody();
                 log.debug("eService response = {}", eServiceResponse);
 
-                if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getCode())){
+                if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getIssuccess())){
                     loginRecordService.saveEServiceLoginSuccessRecord(account);
                     return getConsultantToken(account, credentials);
                 }
@@ -105,7 +104,7 @@
 
     private ResponseEntity<EServiceResponse> loginByEService(String account, String paxxword) throws JsonProcessingException, GeneralSecurityException {
         RestTemplate restTemplate = getTrustAllRestTemplate();
-        settingMessageConvertesToSpecifyType(restTemplate, MediaType.ALL);
+        settingMessageConvertersToSpecifyType(restTemplate, MediaType.ALL);
 
         String urlTemplate = UriComponentsBuilder.fromHttpUrl(applicationProperty.geteServiceLoginUrl())
             .queryParam("func", applicationProperty.geteServiceLoginFunc())
@@ -140,7 +139,7 @@
         return new RestTemplate(requestFactory);
     }
 
-    private void settingMessageConvertesToSpecifyType(RestTemplate restTemplate, MediaType mediaType) {
+    private void settingMessageConvertersToSpecifyType(RestTemplate restTemplate, MediaType mediaType) {
         List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
         converter.setSupportedMediaTypes(Collections.singletonList(mediaType));
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java
new file mode 100644
index 0000000..9931a44
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java
@@ -0,0 +1,22 @@
+package com.pollex.pam.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.pollex.pam.domain.AppointmentClosedInfo;
+import com.pollex.pam.repository.AppointmentClosedInfoRepository;
+import com.pollex.pam.web.rest.errors.AppointmentClosedInfoNotFoundException;
+
+@Service
+@Transactional
+public class AppointmentClosedInfoService {
+	
+	@Autowired
+	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
+	
+	public AppointmentClosedInfo findByAppointmentId(Long apId) {
+		return appointmentClosedInfoRepository.findByAppointmentId(apId)
+				.orElseThrow(AppointmentClosedInfoNotFoundException::new);
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java
new file mode 100644
index 0000000..6fdd613
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java
@@ -0,0 +1,60 @@
+package com.pollex.pam.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.AppointmentMemo;
+import com.pollex.pam.repository.AppointmentMemoRepository;
+import com.pollex.pam.repository.AppointmentRepository;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.dto.AppointmentMemoCreateDTO;
+import com.pollex.pam.service.dto.AppointmentMemoUpdateDTO;
+import com.pollex.pam.service.mapper.AppointmentMemoMapper;
+import com.pollex.pam.web.rest.errors.AppointmentMemoNotFoundException;
+import com.pollex.pam.web.rest.errors.AppointmentNotFoundException;
+
+@Service
+@Transactional
+public class AppointmentMemoService {
+	
+	@Autowired
+	AppointmentMemoRepository appointmentMemoRepository;
+	
+	@Autowired
+	AppointmentMemoMapper appointmentMemoMapper;
+	
+	@Autowired
+	AppointmentRepository appointmentRepository;
+
+	public AppointmentMemo create(AppointmentMemoCreateDTO memoDTO) {
+		AppointmentMemo memo = appointmentMemoMapper.toAppointmentMemo(memoDTO);
+		return appointmentMemoRepository.save(memo);
+	}
+
+	public void checkPermission(Long appointmentId) {
+		Appointment appointment = appointmentRepository.findById(appointmentId)
+				.orElseThrow(AppointmentNotFoundException::new);
+		if(!appointment.getAgentNo().equals(SecurityUtils.getAgentNo())) {
+			throw new IllegalAccessError("not have permission");
+		}
+	}
+
+	public AppointmentMemo update(AppointmentMemoUpdateDTO memoDTO) {
+		AppointmentMemo memo = appointmentMemoRepository
+				.findById(memoDTO.getId())
+				.orElseThrow(AppointmentMemoNotFoundException::new);
+		checkPermission(memo.getAppointmentId());
+		appointmentMemoMapper.copyToAppointmentMemo(memoDTO, memo);
+		return appointmentMemoRepository.save(memo);
+	}
+
+	public void delete(Long memoId) {
+		AppointmentMemo memo = appointmentMemoRepository
+				.findById(memoId)
+				.orElseThrow(AppointmentMemoNotFoundException::new);
+		checkPermission(memo.getAppointmentId());
+		appointmentMemoRepository.delete(memo);
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java
new file mode 100644
index 0000000..bfb0134
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java
@@ -0,0 +1,33 @@
+package com.pollex.pam.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.pollex.pam.domain.AppointmentNoticeLog;
+import com.pollex.pam.repository.AppointmentNoticeLogRepository;
+import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
+import com.pollex.pam.service.mapper.AppointmentNoticeSendMapper;
+
+@Service
+@Transactional
+public class AppointmentNoticeLogService {
+	
+	@Autowired
+	AppointmentNoticeLogRepository appointmentNoticeLogRepository;
+	
+	@Autowired
+	AppointmentNoticeSendMapper appointmentNoticeSendMapper;
+
+	public AppointmentNoticeLog create(AppointmentNoticeSendDTO noticeSendDTO) {
+		AppointmentNoticeLog appointmentNoticeLog = 
+				appointmentNoticeSendMapper.toAppointmentNoticeLog(noticeSendDTO);
+		return appointmentNoticeLogRepository.save(appointmentNoticeLog);
+	}
+	
+	public List<AppointmentNoticeLog> findByAppointmentId(Long appointmentId){
+		return appointmentNoticeLogRepository.findByAppointmentId(appointmentId);
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
index 0730d6d..fe55f38 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
@@ -1,14 +1,25 @@
 package com.pollex.pam.service;
 
 import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
-import com.pollex.pam.domain.Satisfaction;
-import com.pollex.pam.service.dto.AppointmentUpdateDTO;
+import com.pollex.pam.appointment.process.AppointmentProcess;
+import com.pollex.pam.config.ApplicationProperties;
+import com.pollex.pam.config.Constants;
+import com.pollex.pam.enums.SatisfactionTypeEnum;
+import com.pollex.pam.service.dto.*;
+import com.pollex.pam.web.rest.errors.SendEmailFailException;
+import com.pollex.pam.web.rest.errors.SendSMSFailException;
+import io.jsonwebtoken.lang.Assert;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -16,14 +27,16 @@
 import com.pollex.pam.domain.Appointment;
 import com.pollex.pam.domain.AppointmentCustomerView;
 import com.pollex.pam.enums.ContactStatusEnum;
+import com.pollex.pam.enums.InterviewRecordStatusEnum;
 import com.pollex.pam.repository.AppointmentCustomerViewRepository;
 import com.pollex.pam.repository.AppointmentRepository;
 import com.pollex.pam.security.SecurityUtils;
-import com.pollex.pam.service.dto.AppointmentCreateDTO;
-import com.pollex.pam.service.dto.AppointmentCustomerViewDTO;
 import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper;
 import com.pollex.pam.service.mapper.AppointmentDTOMapper;
 import com.pollex.pam.web.rest.errors.AppointmentNotFoundException;
+import org.springframework.util.StringUtils;
+import org.thymeleaf.context.Context;
+import org.thymeleaf.spring5.SpringTemplateEngine;
 
 import static com.pollex.pam.enums.AppointmentStatusEnum.AVAILABLE;
 import static com.pollex.pam.enums.AppointmentStatusEnum.DELETED;
@@ -34,7 +47,9 @@
 
     private static final Logger log = LoggerFactory.getLogger(AppointmentService.class);
 
-	@Autowired
+    private static final String NOTIFY_EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���";
+
+    @Autowired
 	AppointmentRepository appointmentRepository;
 
 	@Autowired
@@ -52,17 +67,35 @@
 	@Autowired
 	SatisfactionService satisfactionService;
 
-	public void customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) {
+    @Autowired
+    SendMsgService sendMsgService;
+
+    @Autowired
+    ApplicationProperties applicationProperties;
+
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
+
+    @Autowired
+    InterviewRecordService interviewRecordService;
+
+    @Autowired
+    AppointmentProcess abstractAppointmentProcess;
+
+    @Autowired
+    PersonalNotificationService personalNotificationService;
+
+	public Appointment customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) {
 		Appointment appointment = appointmentDTOMapper.toAppointment(appointmentCreateDTO);
         appointment.setStatus(AVAILABLE);
 		appointment.setCustomerId(SecurityUtils.getCustomerDBId());
 		appointment.setCommunicateStatus(ContactStatusEnum.RESERVED);
-		appointmentRepository.save(appointment);
+		return appointmentRepository.save(appointment);
 	}
 
-    public void updateAppointment(AppointmentUpdateDTO updateAppointmentDTO) {
+    public Appointment updateAppointment(AppointmentUpdateDTO updateAppointmentDTO) {
         Appointment appointment = appointmentRepository.findById(updateAppointmentDTO.getId()).get();
-
+        BeanUtils.copyProperties(updateAppointmentDTO, appointment);
         appointment.setPhone(updateAppointmentDTO.getPhone());
         appointment.setEmail(updateAppointmentDTO.getEmail());
         appointment.setContactType(updateAppointmentDTO.getContactType());
@@ -72,14 +105,19 @@
         appointment.setRequirement(updateAppointmentDTO.getRequirement());
         appointment.setHopeContactTime(updateAppointmentDTO.getHopeContactTime());
         appointment.setOtherRequirement(updateAppointmentDTO.getOtherRequirement());
+        appointment.setLastModifiedDate(Instant.now());
 
-        appointmentRepository.save(appointment);
+        return appointmentRepository.save(appointment);
     }
 
     public void markAppointmentDeleted(Long appointmentId) {
         Appointment appointment = appointmentRepository.findById(appointmentId).get();
         appointment.setStatus(DELETED);
+        appointment.setLastModifiedDate(Instant.now());
+        appointment.setCommunicateStatus(ContactStatusEnum.CANCEL);
         appointmentRepository.save(appointment);
+        personalNotificationService.createMarkAppointmentDeletedToConsultant(appointment);
+
     }
 
 	public List<Appointment> findByAgentNo(String agentNo) {
@@ -87,11 +125,11 @@
 	}
 
 	public Appointment markAsContacted(Long appointmentId) {
-
 		Appointment appointment = appointmentRepository.findById(appointmentId).get();
 		appointment.setCommunicateStatus(ContactStatusEnum.CONTACTED);
         appointment.setContactTime(Instant.now());
-		return appointmentRepository.save(appointment);
+        appointment.setLastModifiedDate(Instant.now());
+        return appointmentRepository.save(appointment);
 	}
 
 	public AppointmentCustomerViewDTO getAppointmentDetail(Long appointmentId) {
@@ -100,10 +138,16 @@
 
         AppointmentCustomerViewDTO dto = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment);
         setSatisfactionScore(dto, appointmentId);
+//        setInterviewRecordDTO(dto);
 		return dto;
 	}
 
-    public List<AppointmentCustomerViewDTO> getConsultantAvailableAppointments(String agentNo) {
+    public void setInterviewRecordDTO(AppointmentCustomerViewDTO dto) {
+    	List<InterviewRecordDTO> interviewRecords = interviewRecordService.findByAppointmentIdAndStatus(dto.getId(), InterviewRecordStatusEnum.AVAILABLE);
+    	dto.setInterviewRecordDTOs(interviewRecords);
+    }
+
+	public List<AppointmentCustomerViewDTO> getConsultantAvailableAppointments(String agentNo) {
         return appointmentCustomerViewRepository.findByAgentNo(agentNo).stream()
             .filter(appointment -> appointment.getStatus() == AVAILABLE)
             .map(appointmentCustomerView -> {
@@ -115,7 +159,7 @@
     }
 
     public void setSatisfactionScore(AppointmentCustomerViewDTO dto, Long appointmentId) {
-        satisfactionService.getByAppointmentId(appointmentId).ifPresent(satisfaction -> {
+        satisfactionService.getByAppointmentIdAndType(appointmentId, SatisfactionTypeEnum.APPOINTMENT).ifPresent(satisfaction -> {
             dto.setSatisfactionScore(satisfaction.getScore());
         });
     }
@@ -125,6 +169,10 @@
             .stream()
             .filter(appointmentCustomerView -> appointmentCustomerView.getStatus() == AVAILABLE)
             .collect(Collectors.toList());
+    }
+
+    public Optional<Appointment> findLatestAppointmentByAgentNoAndCustomerId(String agentNo, Long customerId) {
+        return appointmentRepository.findTopByAgentNoAndCustomerIdOrderByAppointmentDateDesc(agentNo, customerId);
     }
 
     public void recordConsultantReadTime(Long appointmentId) {
@@ -148,4 +196,124 @@
         consultantNotViewAppointments.forEach(appointment -> appointment.setConsultantViewTime(Instant.now()));
         appointmentRepository.saveAll(consultantNotViewAppointments);
     }
+
+    public void sendAppointmentNotify(Appointment appointment) {
+        Assert.notNull(appointment, "appointment entity cannot be null");
+
+        log.debug("is need send appointment notify msg? sms = {}, email = {}",
+            applicationProperties.getSms().isSendNotifyMsg(), applicationProperties.getEmail().isSendNotifyMsg());
+
+        log.debug("sending appointment notify, appointmentId = {}", appointment.getId());
+        sendAppointmentNotifyBySMS(appointment);
+        sendAppointmentNotifyByHtmlEmail(appointment);
+    }
+
+    private void sendAppointmentNotifyBySMS(Appointment appointment) {
+        String msg = getAppointmentNotifyWording(appointment);
+        String consultantMobile = consultantService.findByAgentNo(appointment.getAgentNo()).getPhoneNumber();
+
+        try {
+            if(!StringUtils.hasText(consultantMobile)) {
+                throw new SendSMSFailException("the consultant does not have mobile!");
+            }
+
+            sendMsgService.sendMsgBySMS(consultantMobile, msg);
+        } catch (SendSMSFailException e) {
+            log.warn("send appointment notify by sms was fail, appointment Id = {}", appointment.getId(), e);
+        }
+    }
+
+    private String getAppointmentNotifyWording(Appointment appointment) {
+        String normalContent;
+        if(StringUtils.hasText(appointment.getPhone())) {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像��������恥�����Ⅳ�" + appointment.getPhone();
+        }
+        else {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像������";
+        }
+
+        String urlContent = "嚗���雯��嚗�" + getAppointmentDetailUrl(appointment.getId()) + "����蒂摰�蝯∟赤隢�����";
+        return normalContent + urlContent;
+    }
+
+    private void sendAppointmentNotifyByHtmlEmail(Appointment appointment) {
+       String consultantEmail = consultantService.findByAgentNo(appointment.getAgentNo()).getEmail();
+        String customerMobile = appointment.getPhone();
+        String normalContent;
+
+        if(StringUtils.hasText(customerMobile)) {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像��������恥�����Ⅳ�" + customerMobile + "嚗�";
+        }
+        else {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像�������";
+        }
+
+        Context context = new Context();
+        context.setVariable("content", normalContent);
+        context.setVariable("urlHint", getAppointmentDetailUrl(appointment.getId()));
+        String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context);
+
+        try {
+            if(!StringUtils.hasText(consultantEmail)) {
+                throw new SendEmailFailException("the consultant does not have email!");
+            }
+
+            sendMsgService.sendMsgByEmail(consultantEmail, NOTIFY_EMAIL_SUBJECT, content, true);
+        } catch (SendEmailFailException e) {
+            log.warn("send appointment notify by email was fail, appointment Id = {}", appointment.getId(), e);
+        }
+    }
+
+    public String getAppointmentDetailUrl(Long appointmentId) {
+        return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId;
+    }
+
+    public Appointment findById(Long id) {
+    	return appointmentRepository.findById(id)
+    			.orElseThrow(AppointmentNotFoundException::new);
+    }
+
+	public void closeAppointment(AppointmentCloseDTO closeDTO) {
+		if(closeDTO.getContactStatus() == ContactStatusEnum.DONE) {
+			DoneProcessDTO dto = new DoneProcessDTO();
+			BeanUtils.copyProperties(closeDTO, dto);
+			abstractAppointmentProcess.process(dto);
+		}else if(closeDTO.getContactStatus() == ContactStatusEnum.CLOSED){
+			ClosedProcessDTO dto = new ClosedProcessDTO();
+			BeanUtils.copyProperties(closeDTO, dto);
+			abstractAppointmentProcess.process(dto);
+		}
+	}
+
+    public Long getConsultantPendingAppointmentSum(String agentNo) {
+        return appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AVAILABLE)
+                .stream()
+                .filter(appointment -> agentNo.equals(appointment.getAgentNo()))
+                .filter(appointment -> isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_PENDING_PHONE_INTERVAL, Constants.APPOINTMENT_PENDING_EMAIL_INTERVAL))
+                .count();
+    }
+
+    public AppointmentCustomerViewDTO getCustomerNewestExpiringAppointment(Long customerId) {
+        return appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AVAILABLE)
+                .stream()
+                .filter(appointment -> customerId.equals(appointment.getCustomerId()))
+                .filter(appointment -> isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_EXPIRING_PHONE_INTERVAL, Constants.APPOINTMENT_EXPIRING_EMAIL_INTERVAL))
+                .max(Comparator.comparing(AppointmentCustomerView::getAppointmentDate))
+                .map(appointmentCustomerView -> appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointmentCustomerView))
+                .orElse(null);
+    }
+
+    public boolean isAppointmentDateNotInIntervalFromNow(AppointmentCustomerView appointment, int phoneInterval, int emailInterval) {
+        final boolean isHavePhone = StringUtils.hasText(appointment.getPhone());
+        final boolean isHaveEmail = StringUtils.hasText(appointment.getEmail());
+
+        LocalDate appointmentDate = appointment.getAppointmentDate().atZone(ZoneId.systemDefault()).toLocalDate();
+        LocalDate nowDate = Instant.now().atZone(ZoneId.systemDefault()).toLocalDate();
+        long intervalDays = nowDate.toEpochDay() - appointmentDate.toEpochDay();
+
+        final boolean isAppointmentExpiringByPhone = isHavePhone && intervalDays >= phoneInterval;
+        final boolean isAppointmentExpiringByEmail = isHaveEmail && intervalDays >= emailInterval;
+
+        return isAppointmentExpiringByPhone || isAppointmentExpiringByEmail;
+    }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java
index dda2ade..8e14d66 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java
@@ -36,6 +36,15 @@
                     set.add(criteriaBuilder.greaterThanOrEqualTo(root.get("avgScore"), param.getAvgScore().intValue()));
                 }
 
+                if(StringUtils.isNotEmpty(param.getSeniority()) && !StringUtils.equals(UNLIMITED, param.getSeniority())) {
+                    if(YOUNG.equals(param.getSeniority())) {
+                        set.add(criteriaBuilder.lessThanOrEqualTo(root.get("seniorityYear"), 5));
+                    }
+                    else if(SENIOR.equals(param.getSeniority())) {
+                        set.add(criteriaBuilder.greaterThan(root.get("seniorityYear"), 5));
+                    }
+                }
+
                 Predicate[] predicates = new Predicate[set.size()];
                 predicates = set.toArray(predicates);
                 return criteriaBuilder.and(predicates);
@@ -56,38 +65,9 @@
                     set.add(criteriaBuilder.equal(root.get("gender"), param.getGender()));
                 }
 
-                if(Objects.nonNull(param.getAvgScore()) && param.getAvgScore().intValue() != 0) {
-                    set.add(criteriaBuilder.greaterThanOrEqualTo(root.get("avgScore"), param.getAvgScore().intValue()));
-                }
-
-                if(StringUtils.isNotEmpty(param.getSeniority()) && !StringUtils.equals(UNLIMITED, param.getSeniority())) {
-                    if(YOUNG.equals(param.getSeniority())) {
-                        set.add(criteriaBuilder.lessThanOrEqualTo(root.get("seniorityYear"), 5));
-                    }
-                    else if(SENIOR.equals(param.getSeniority())) {
-                        set.add(criteriaBuilder.greaterThan(root.get("seniorityYear"), 5));
-                    }
-                }
-
                 if(StringUtils.isNotEmpty(param.getArea())) {
-                    Predicate predicate1 = criteriaBuilder.like(root.get("serveArea"), "%" + param.getArea() + "%");
-                    Predicate predicate2 = criteriaBuilder.like(root.get("serveArea"), "%��%");
-
-                    Predicate finalPredicate = criteriaBuilder.or(predicate1, predicate2);
-                    set.add(finalPredicate);
+                    set.add(criteriaBuilder.like(root.get("serveArea"), "%" + param.getArea() + "%"));
                 }
-
-                List<String> allRequirements = Objects.nonNull(param.getRequirements()) ? param.getRequirements() : new ArrayList<>();
-                if(StringUtils.isNotEmpty(param.getOtherPopularTags())) {
-                    allRequirements.add(param.getOtherRequirement());
-                }
-                allRequirements.forEach(requirement -> set.add(criteriaBuilder.like(root.get("expertise"), "%" + requirement + "%")));
-
-                List<String> allPopularTags = Objects.nonNull(param.getPopularTags()) ? param.getPopularTags() : new ArrayList<>();
-                if(StringUtils.isNotEmpty(param.getOtherPopularTags())) {
-                    allPopularTags.add(param.getOtherPopularTags());
-                }
-                allPopularTags.forEach(popularTag -> set.add(criteriaBuilder.like(root.get("concept"), "%" + popularTag + "%")));
 
                 Predicate[] predicates = new Predicate[set.size()];
                 predicates = set.toArray(predicates);
diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
index adbb6ab..58c96d9 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
@@ -1,28 +1,49 @@
 package com.pollex.pam.service;
 
+import com.pollex.pam.config.ApplicationProperties;
+import com.pollex.pam.domain.Appointment;
 import com.pollex.pam.domain.AppointmentCustomerView;
 import com.pollex.pam.domain.Consultant;
 import com.pollex.pam.domain.CustomerFavoriteConsultant;
+import com.pollex.pam.domain.Satisfaction;
 import com.pollex.pam.enums.ContactStatusEnum;
 import com.pollex.pam.enums.LoginResult;
 import com.pollex.pam.repository.ConsultantRepository;
 import com.pollex.pam.repository.CustomerFavoriteConsultantRepository;
+import com.pollex.pam.repository.SatisfactionRepository;
 import com.pollex.pam.security.SecurityUtils;
 import com.pollex.pam.service.dto.*;
 import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper;
+import com.pollex.pam.service.mapper.ConsultantDTOMapper;
 import com.pollex.pam.service.mapper.ConsultantMapper;
+import com.pollex.pam.service.util.FileUtil;
 import com.pollex.pam.web.rest.errors.ConsultantNotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+import org.thymeleaf.context.Context;
+import org.thymeleaf.spring5.SpringTemplateEngine;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.time.Instant;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
+import static com.pollex.pam.consts.SeniorityQueryConst.*;
+import static com.pollex.pam.enums.ContactStatusEnum.*;
+
 @Service
+@Transactional
 public class ConsultantService {
 
     private static final Logger log = LoggerFactory.getLogger(ConsultantService.class);
@@ -48,43 +69,84 @@
     @Autowired
     SatisfactionService satisfactionService;
 
+    @Autowired
+    ConsultantDTOMapper consultantDTOMapper;
+
+    @Autowired
+    ApplicationProperties applicationProperty;
+
+    @Autowired
+	SendMsgService sendMsgService;
+
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
+
+    @Autowired
+    ApplicationProperties applicationProperties;
+
+    @Autowired
+    ConsultantService consultantService;
+
+    @Autowired
+    SatisfactionRepository satisfactionRepository;
+
+    @Autowired
+    PersonalNotificationService personalNotificationService;
+
     public List<CustomerFavoriteConsultantDTO> getMyConsultantList() {
         Long customerId = SecurityUtils.getCustomerDBId();
 
         return customerFavoriteConsultantRepository.findAllByCustomerId(customerId)
             .stream()
-            .map(customerFavoriteConsultantRelation -> {
-                Consultant consultant = customerFavoriteConsultantRelation.getConsultant();
+            .map(relation -> {
+                Consultant consultant = relation.getConsultant();
                 CustomerFavoriteConsultantDTO dto = consultantMapper.toCustomerFavoriteConsultantDto(consultant);
+                dto.setCreateTime(relation.getCreatedDate());
+                dto.setUpdateTime(relation.getCreatedDate());
+                dto.setCustomerViewTime(relation.getViewTime());
 
-                dto.setContactStatus(ContactStatusEnum.PICKED);
-                dto.setCreateTime(customerFavoriteConsultantRelation.getCreatedDate());
-
-                setAppointmentInfo(
+                setInfoByAvailableAppointment(
                     dto,
                     appointmentService.findAvailableByAgentNoAndCustomerId(consultant.getAgentNo(), customerId)
                 );
+
+                setFavoriteConsultantUpdatedTime(relation, dto);
 
                 return dto;
 
             }).collect(Collectors.toList());
     }
 
-    private void setAppointmentInfo(CustomerFavoriteConsultantDTO customerFavoriteConsultantDTO, List<AppointmentCustomerView> appointmentList) {
+	public void setFavoriteConsultantUpdatedTime(CustomerFavoriteConsultant relation,
+			CustomerFavoriteConsultantDTO dto) {
+		Consultant consultant = relation.getConsultant();
+		appointmentService.findLatestAppointmentByAgentNoAndCustomerId(consultant.getAgentNo(), relation.getCustomerId())
+		    .ifPresent(latestAppointment -> {
+		        dto.setUpdateTime(latestAppointment.getLastModifiedDate());
+		    });
+
+		if(dto.getUpdateTime().isBefore(relation.getCreatedDate())) {
+		    dto.setUpdateTime(relation.getCreatedDate());
+		}
+	}
+
+    private void setInfoByAvailableAppointment(CustomerFavoriteConsultantDTO customerFavoriteConsultantDTO, List<AppointmentCustomerView> appointmentList) {
         List<AppointmentCustomerView> appointments = appointmentList.stream()
             .sorted(Comparator.comparing(AppointmentCustomerView::getAppointmentDate).reversed())
             .collect(Collectors.toList());
 
         List<AppointmentCustomerViewDTO> appointmentCustomerViewDTOS = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointments);
-        appointmentCustomerViewDTOS.forEach(appointmentCustomerViewDTO -> {
-            appointmentService.setSatisfactionScore(appointmentCustomerViewDTO, appointmentCustomerViewDTO.getId());
-        });
         customerFavoriteConsultantDTO.setAppointments(appointmentCustomerViewDTOS);
 
         if (!appointments.isEmpty()) {
-            AppointmentCustomerView latestAppointment = appointments.get(0);
-            customerFavoriteConsultantDTO.setContactStatus(latestAppointment.getCommunicateStatus());
-            customerFavoriteConsultantDTO.setUpdateTime(latestAppointment.getLastModifiedDate());
+            AppointmentCustomerView latestAvailableAppointment = appointments.get(0);
+            ContactStatusEnum latestStatus = latestAvailableAppointment.getCommunicateStatus();
+            if(latestStatus != ContactStatusEnum.DONE && latestStatus != ContactStatusEnum.CLOSED)
+                customerFavoriteConsultantDTO.setContactStatus(latestStatus);
+            else
+                customerFavoriteConsultantDTO.setContactStatus(PICKED);
+        }else {
+        	customerFavoriteConsultantDTO.setContactStatus(PICKED);
         }
     }
 
@@ -98,8 +160,60 @@
     public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) {
         return consultantRepository.findAll(ConsultantQuerySpec.getStrictQuerySpec(param))
             .stream()
-            .map(consultantMapper::toDto)
+            .map(consultant -> {
+                int suitabilityScore = getStrictQuerySuitabilityScore(param, consultant);
+
+                ConsultantDTO dto = consultantMapper.toDto(consultant);
+                dto.setSuitability(suitabilityScore);
+
+                return dto;
+            })
             .collect(Collectors.toList());
+    }
+
+    private int getStrictQuerySuitabilityScore(StrictQueryConsultantParam param, Consultant consultant) {
+        Float queryAvgScore = param.getAvgScore();
+        String querySeniority = param.getSeniority();
+        List<String> queryRequirements = param.getRequirements();
+
+        int score = 0;
+        if(isConsultantGreaterThanScore(queryAvgScore, consultant.getAvgScore())) {
+            score += 30;
+        }
+
+        if(isConsultantInSeniority(querySeniority, consultant.getSeniorityYear())) {
+            score += 20;
+        }
+
+        if(isAllRequirementsIncludeConsultant(queryRequirements, consultant.getExpertise())) {
+            score += 50;
+        }
+
+        return score;
+    }
+
+    private boolean isAllRequirementsIncludeConsultant(List<String> queryRequirements, String consultantExpertise) {
+        return queryRequirements
+            .stream()
+            .allMatch(queryRequirement -> consultantExpertise.matches(".*"+queryRequirement+".*"));
+    }
+
+    private boolean isConsultantInSeniority(String querySeniority, Long consultantSeniorityYear) {
+        switch (querySeniority == null ? "" : querySeniority) {
+            case YOUNG:
+                return consultantSeniorityYear < 5;
+            case SENIOR:
+                return consultantSeniorityYear > 5;
+            case UNLIMITED:
+            case "":
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    private boolean isConsultantGreaterThanScore(Float queryAvgScore, Float consultantAvgScore) {
+        return Objects.isNull(queryAvgScore) || queryAvgScore < consultantAvgScore;
     }
 
     public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) {
@@ -164,4 +278,99 @@
         String agentNo = SecurityUtils.getAgentNo();
         appointmentService.recordAllAppointmentsView(agentNo);
     }
+
+    public void recordMyConsultantListView() {
+        Long customerId = SecurityUtils.getCustomerDBId();
+        List<CustomerFavoriteConsultant> notViewRelation = customerFavoriteConsultantRepository
+            .findAllByCustomerId(customerId)
+            .stream()
+            .filter(relation -> Objects.isNull(relation.getViewTime()))
+            .collect(Collectors.toList());
+
+        notViewRelation.forEach(relation -> {
+            relation.setViewTime(Instant.now());
+        });
+
+        customerFavoriteConsultantRepository.saveAll(notViewRelation);
+    }
+
+    public Consultant findByAgentNo(String agentNo) {
+        return consultantRepository.findOneByAgentNo(agentNo).get();
+    }
+
+	public Consultant editConsultant(ConsultantEditDTO editDTO) {
+		Consultant consultant = consultantRepository.findOneByAgentNo(editDTO.getAgentNo())
+				.orElseThrow(ConsultantNotFoundException::new);
+		consultantDTOMapper.copyToConsultant(editDTO, consultant);
+		FileUtil.base64ToFile(editDTO.getPhotoBase64(), editDTO.getPhotoFileName(), applicationProperty.getFileFolderPath());
+		consultantRepository.save(consultant);
+		personalNotificationService.createEditConsultantToConsultant(consultant);
+		return consultant;
+	}
+
+	public InputStream getAvatarImage(String agentNo) {
+		Consultant consultant = consultantRepository.findOneByAgentNo(agentNo)
+				.orElseThrow(ConsultantNotFoundException::new);
+		File file = new File(consultant.getPhotoPath());
+		try {
+			InputStream in = new FileInputStream(file);
+			return in;
+		} catch (FileNotFoundException e) {
+			log.error("agent photo not found , agentNo:"+agentNo,e);
+			return null;
+		}
+	}
+
+	public void sendSatisfactionToClient(Appointment appointment) {
+		String subject = "皛踵�漲憛怠神�";
+
+		if(StringUtils.hasText(appointment.getEmail())) {
+			String content = genSendSatisfactionEmailContent(appointment);
+			sendMsgService.sendMsgByEmail(appointment.getEmail(), subject, content, true);
+
+		}if(StringUtils.hasText(appointment.getPhone())) {
+			String content = genSendSatisfactionSMSContent(appointment);
+			sendMsgService.sendMsgBySMS(appointment.getPhone(), content);
+		}
+
+		personalNotificationService.createSendSatisfactionToClientToCustomer(appointment);
+	}
+
+	private String genSendSatisfactionSMSContent(Appointment appointment) {
+		String agentNo = appointment.getAgentNo();
+		Consultant consultant = consultantService.findByAgentNo(agentNo);
+		String contsultantName = consultant.getName();
+		String content = contsultantName+"憿批��憛怠神靽���像���遛��漲閰��"+getSendSatisfactionToClientUrl(appointment.getId());
+		return content;
+	}
+
+	private String genSendSatisfactionEmailContent(Appointment appointment) {
+		String agentNo = appointment.getAgentNo();
+		Consultant consultant = consultantService.findByAgentNo(agentNo);
+		Context context = new Context();
+        context.setVariable("consultantName", consultant.getName());
+        context.setVariable("appointmentUrl", getSendSatisfactionToClientUrl(appointment.getId()));
+        String content = springTemplateEngine.process("mail/writeSatisfactionNotice", context);
+		return content;
+	}
+
+	public String getSendSatisfactionToClientUrl(Long appointmentId) {
+        return applicationProperties.getFrontEndDomain() + "/?appointmentId=" + appointmentId;
+    }
+
+	public void setConsultantAvgScore(Satisfaction satisfaction) {
+		Optional<Float> avgScore = getAgentAvgScore(satisfaction.getAgentNo());
+
+        if(avgScore.isPresent()) {
+            BigDecimal bigDecimal = BigDecimal.valueOf(avgScore.get());
+
+            Consultant consultant = consultantRepository.findOneByAgentNo(satisfaction.getAgentNo()).get();
+            consultant.setAvgScore(bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue());
+            consultantRepository.save(consultant);
+        }
+	}
+
+	public Optional<Float> getAgentAvgScore(String agentNo) {
+		return satisfactionRepository.getAgentScoreAvg(agentNo);
+	}
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java b/pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java
new file mode 100644
index 0000000..40197b4
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java
@@ -0,0 +1,84 @@
+package com.pollex.pam.service;
+
+import java.util.List;
+
+import org.hibernate.boot.model.naming.IllegalIdentifierException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.InterviewRecord;
+import com.pollex.pam.enums.InterviewRecordStatusEnum;
+import com.pollex.pam.repository.InterviewRecordRepository;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.dto.InterviewRecordDTO;
+import com.pollex.pam.service.mapper.InterviewRecordMapper;
+import com.pollex.pam.web.rest.errors.InterviewRecordNotFoundException;
+
+@Service
+@Transactional
+public class InterviewRecordService {
+	
+	@Autowired
+	InterviewRecordRepository interviewRecordRepository;
+	
+	@Autowired
+	InterviewRecordMapper interviewRecordMapper;
+	
+	@Autowired
+	AppointmentService appointmentService;
+	
+	public InterviewRecord create(InterviewRecordDTO dto) {
+		if(dto.getId()!=null) {
+			throw new IllegalArgumentException();
+		}
+		
+		InterviewRecord record = interviewRecordMapper.toInterviewRecord(dto);
+		checkAuth(record);
+		record.setStatus(InterviewRecordStatusEnum.AVAILABLE);
+		interviewRecordRepository.save(record);
+		return record;
+	}
+	
+	public InterviewRecord update(InterviewRecordDTO dto) {
+		if(dto.getId()==null) {
+			throw new IllegalArgumentException();
+		}
+		
+		InterviewRecord record = findById(dto.getId());
+		checkAuth(record);
+		interviewRecordMapper.copyToInterviewRecord(dto, record);
+		interviewRecordRepository.save(record);
+		return record;
+	}
+	
+	public void checkAuth(InterviewRecord record) {
+		Appointment appointment = appointmentService.findById(record.getAppointmentId());
+		if(!appointment.getAgentNo().equals(SecurityUtils.getAgentNo())) {
+			throw new IllegalAccessError("The account can not edit the appointment");
+		}
+	}
+
+	public void delete(Long interviewRecordId) {
+		InterviewRecord record = findById(interviewRecordId);
+		record.setStatus(InterviewRecordStatusEnum.DELETED);
+		interviewRecordRepository.save(record);
+	}
+	
+	public InterviewRecord findById(Long id) {
+		return interviewRecordRepository.findById(id)
+		.orElseThrow(InterviewRecordNotFoundException::new);
+	}
+
+	public List<InterviewRecordDTO> findByAppointmentId(Long appointmentId) {
+		List<InterviewRecord> records = interviewRecordRepository.findByAppointmentId(appointmentId);
+		return interviewRecordMapper.toInterviewRecordDTO(records);
+	}
+
+	public List<InterviewRecordDTO> findByAppointmentIdAndStatus(Long appointmentId, InterviewRecordStatusEnum status) {
+		List<InterviewRecord> records = interviewRecordRepository.findByAppointmentIdAndStatus(appointmentId, status);
+		return interviewRecordMapper.toInterviewRecordDTO(records);
+	}
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/NoticeService.java b/pamapi/src/main/java/com/pollex/pam/service/NoticeService.java
new file mode 100644
index 0000000..5d9a908
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/NoticeService.java
@@ -0,0 +1,57 @@
+package com.pollex.pam.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.AppointmentNoticeLog;
+import com.pollex.pam.enums.ContactStatusEnum;
+import com.pollex.pam.repository.AppointmentRepository;
+import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
+
+@Service
+@Transactional
+public class NoticeService {
+	
+	@Autowired
+	AppointmentService appointmentService;
+	
+	@Autowired
+	SendMsgService sendMsgService;
+	
+	@Autowired
+	AppointmentNoticeLogService appointmentNoticeLogService;
+	
+	@Autowired
+	AppointmentRepository appointmentRepository;
+	
+	@Autowired
+    PersonalNotificationService personalNotificationService;
+	
+
+	public void sendNotice(AppointmentNoticeSendDTO dto) {
+		String subject = "靽���像�蝟餌絞�嚗���";
+		
+		if(StringUtils.hasText(dto.getEmail())) {
+			sendMsgService.sendMsgByEmail(dto.getEmail(), subject, dto.getMessage(), true);
+		}if(StringUtils.hasText(dto.getPhone())) {
+			sendMsgService.sendMsgBySMS(dto.getPhone(), dto.getMessage());
+		}
+		
+		List<AppointmentNoticeLog> noticeLogs = 
+				appointmentNoticeLogService.findByAppointmentId(dto.getAppointmentId());
+		if(noticeLogs.size()==0) {
+			Appointment appointment = appointmentService.findById(dto.getAppointmentId());
+			appointment.setCommunicateStatus(ContactStatusEnum.CONTACTED);
+			appointmentRepository.save(appointment);
+		}
+		
+		appointmentNoticeLogService.create(dto);
+		personalNotificationService.createSendNoticeToCustomer(dto.getAppointmentId());
+	}
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java b/pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java
new file mode 100644
index 0000000..3fa7b67
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java
@@ -0,0 +1,159 @@
+package com.pollex.pam.service;
+
+import java.time.Instant;
+import java.util.List;
+
+import javax.management.Notification;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.Consultant;
+import com.pollex.pam.domain.Customer;
+import com.pollex.pam.domain.PersonalNotification;
+import com.pollex.pam.domain.Satisfaction;
+import com.pollex.pam.enums.NotificationTypeEnum;
+import com.pollex.pam.enums.PersonalNotificationRoleEnum;
+import com.pollex.pam.repository.CustomerRepository;
+import com.pollex.pam.repository.PersonalNotificationRepository;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.dto.AppointmentUpdateDTO;
+
+@Service
+@Transactional
+public class PersonalNotificationService {
+
+	@Autowired
+	PersonalNotificationRepository personalNotificationRepository;
+
+	@Autowired
+	ConsultantService consultantService;
+
+	@Autowired
+	AppointmentService appointmentService;
+
+	@Autowired
+	CustomerService customerService;
+
+	@Autowired
+	CustomerRepository customerRepository;
+
+	@Autowired
+	SatisfactionService satisfactionService;
+
+	public List<PersonalNotification> getMyPersonalNotification(Long ownerId, PersonalNotificationRoleEnum role) {
+		return personalNotificationRepository.findAllByOwnerRoleAndOwnerId(role, ownerId);
+	}
+
+	public void createSendSatisfactionToClientToCustomer(Appointment appointment) {
+		PersonalNotification entity = new PersonalNotification();
+		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
+		String content = consultant.getName()+"憿批��憛怠神皛踵�漲閰��";
+		entity.setContent(content);
+		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
+		entity.setOwnerId(appointment.getCustomerId());
+		entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
+		entity.setTitle("憛怠神皛踵�漲");
+		personalNotificationRepository.save(entity);
+	}
+
+	public void createSendNoticeToCustomer(Long appointmentId) {
+		Appointment appointment = appointmentService.findById(appointmentId);
+		PersonalNotification entity = new PersonalNotification();
+		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
+		String content = "���� "+consultant.getName()+"憿批���赤�";
+		entity.setContent(content);
+		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
+		entity.setOwnerId(appointment.getCustomerId());
+		entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
+		entity.setTitle("憿批��赤�");
+		personalNotificationRepository.save(entity);
+	}
+
+    public void createNotFillAppointmentSatisfactionNumberToCustomer(Long customerId, int notFillSatisfactionSum) {
+        PersonalNotification entity = new PersonalNotification();
+
+        String content = "���� "+notFillSatisfactionSum+" 蝑“���遛��漲��閬‵撖�";
+        entity.setContent(content);
+        entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
+        entity.setOwnerId(customerId);
+        entity.setOwnerRole(PersonalNotificationRoleEnum.CUSTOMER);
+        entity.setTitle("摰X皛踵�漲");
+        personalNotificationRepository.save(entity);
+    }
+
+	public void createEditConsultantToConsultant(Consultant consultant) {
+		PersonalNotification entity = new PersonalNotification();
+		String content = "����犖撣唾�身摰歇�脰��";
+		entity.setContent(content);
+		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
+		entity.setOwnerId(consultant.getId());
+		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
+		entity.setTitle("霈撣唾����");
+		personalNotificationRepository.save(entity);
+	}
+
+	public void createMarkAppointmentDeletedToConsultant(Appointment appointment) {
+		PersonalNotification entity = new PersonalNotification();
+		Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
+		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
+		String content = customer.getName()+"摰X撌脣�������";
+		entity.setContent(content);
+		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
+		entity.setOwnerId(consultant.getId());
+		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
+		entity.setTitle("��������");
+		personalNotificationRepository.save(entity);
+	}
+
+	public void createUpdateAppointmentToConsultant(Appointment appointment) {
+		PersonalNotification entity = new PersonalNotification();
+		Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
+		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
+		String content = customer.getName()+"摰X撌脫���������";
+		entity.setContent(content);
+		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
+		entity.setOwnerId(consultant.getId());
+		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
+		entity.setTitle("��������");
+		personalNotificationRepository.save(entity);
+	}
+
+	public void createScorefactionToConsultant(Satisfaction satisfaction) {
+		PersonalNotification entity = new PersonalNotification();
+		Appointment appointment = appointmentService.findById(satisfaction.getAppointmentId());
+		Customer customer = customerRepository.findById(appointment.getCustomerId()).get();
+		Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
+		String content = customer.getName()+"摰X撌脣��脰�遛��漲閰��";
+		entity.setContent(content);
+		entity.setNotificationType(NotificationTypeEnum.ACTIVITY);
+		entity.setOwnerId(consultant.getId());
+		entity.setOwnerRole(PersonalNotificationRoleEnum.CONSULTANT);
+		entity.setTitle("摰X皛踵�漲");
+		personalNotificationRepository.save(entity);
+	}
+
+	public void readAllMyNotification() {
+		if(StringUtils.hasText(SecurityUtils.getAgentNo())) {
+			Long consultantId = consultantService.findByAgentNo(SecurityUtils.getAgentNo()).getId();
+			readAllNotification(PersonalNotificationRoleEnum.CONSULTANT, consultantId);
+		}else if(SecurityUtils.getCustomerDBId()!=null){
+			readAllNotification(PersonalNotificationRoleEnum.CUSTOMER, SecurityUtils.getCustomerDBId());
+		}
+	}
+
+	public void readAllNotification(PersonalNotificationRoleEnum ownerRole
+			, Long ownerId) {
+		List<PersonalNotification> allNotification = personalNotificationRepository.findAllByOwnerRoleAndOwnerId(ownerRole, ownerId);
+		Instant today = Instant.now();
+		allNotification.stream()
+		.filter(notification ->  notification.getReadDate()==null)
+		.forEach(notification ->{
+			notification.setReadDate(today);
+			personalNotificationRepository.saveAll(allNotification);
+		});
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java b/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java
index 9f8ee6c..1bf3c20 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java
@@ -1,28 +1,37 @@
 package com.pollex.pam.service;
 
-import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
+import com.pollex.pam.enums.SatisfactionTypeEnum;
+import com.pollex.pam.security.SecurityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.pollex.pam.domain.Appointment;
-import com.pollex.pam.domain.Consultant;
 import com.pollex.pam.domain.Satisfaction;
+import com.pollex.pam.enums.SatisfactionStatusEnum;
 import com.pollex.pam.repository.ConsultantRepository;
 import com.pollex.pam.repository.CustomerRepository;
 import com.pollex.pam.repository.SatisfactionRepository;
-import com.pollex.pam.service.dto.SatisfactionCustomerCreateDTO;
+import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
 import com.pollex.pam.service.dto.SatisfactionDTO;
 import com.pollex.pam.service.mapper.AppointmentMapper;
 import com.pollex.pam.service.mapper.SatisfactionDTOMapper;
 import com.pollex.pam.service.mapper.SatisfactionMapper;
+import com.pollex.pam.web.rest.errors.SatisfactionAlreadyExistException;
+import com.pollex.pam.web.rest.errors.SatisfactionNotFoundException;
+import org.springframework.util.Assert;
 
 @Service
 @Transactional
 public class SatisfactionService {
+
+    private static final Logger log = LoggerFactory.getLogger(SatisfactionService.class);
 
 	@Autowired
 	SatisfactionRepository satisfactionRepository;
@@ -38,50 +47,57 @@
 
 	@Autowired
 	CustomerRepository customerRepository;
-	
+
 	@Autowired
 	ConsultantRepository consultantRepository;
 
-	public Satisfaction createSatisfaction(Satisfaction satisfaction) {
+	@Autowired
+	ConsultantService consultantService;
+
+	@Autowired
+	PersonalNotificationService personalNotificationService;
+
+	public Satisfaction save(Satisfaction satisfaction) {
 		satisfaction = satisfactionRepository.save(satisfaction);
-		setConsultantAvgScore(satisfaction);
+        if(satisfaction.getType() == SatisfactionTypeEnum.APPOINTMENT) {
+            consultantService.setConsultantAvgScore(satisfaction);
+        }
 		return satisfaction;
 	}
 
+	public Satisfaction scorefaction(SatisfactionCustomerScoreDTO scoreDTO) {
+		Optional<Satisfaction> satisfactionOP = satisfactionRepository.findOneByAppointmentIdAndType(scoreDTO.getAppointmentId(), scoreDTO.getType());
+		Satisfaction satisfaction = satisfactionOP.orElseThrow(SatisfactionNotFoundException::new);
 
+        boolean isSameCustomer = satisfaction.getCustomerId().equals(SecurityUtils.getCustomerDBId());
+        Assert.isTrue(isSameCustomer, "The currently logged in customer has a different ID than the customer on Satisfaction");
 
-	private void setConsultantAvgScore(Satisfaction satisfaction) {
-		float avgScore = getAgentAvgScore(satisfaction);
-		Consultant consultant = consultantRepository.findOneByAgentNo(satisfaction.getAgentNo())
-				.get();
-		consultant.setAvgScore(avgScore);
-		consultantRepository.save(consultant);
+		satisfaction.setScore(scoreDTO.getScore());
+		satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
+		save(satisfaction);
+
+        if(satisfaction.getType() == SatisfactionTypeEnum.APPOINTMENT) {
+            personalNotificationService.createScorefactionToConsultant(satisfaction);
+        }
+        return satisfaction;
 	}
 
-
-
-	private float getAgentAvgScore(Satisfaction satisfaction) {
-		Float avgScore = satisfactionRepository.getAgentScoreAvg(satisfaction.getAgentNo());
-		BigDecimal bigDecimal = new BigDecimal(avgScore);  
-		return avgScore = bigDecimal.setScale(1,BigDecimal.ROUND_HALF_UP).floatValue();
+	public Satisfaction createAppointmentSatisfaction(Appointment appointment) {
+		boolean isexist = getByAppointmentIdAndType(appointment.getId(), SatisfactionTypeEnum.APPOINTMENT).isPresent();
+		if(isexist) {
+			throw new SatisfactionAlreadyExistException();
+		}
+		Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(appointment);
+		return save(satisfaction);
 	}
-	 
-	
+//
+//	public Satisfaction createSatisfaction(SatisfactionCustomerScoreDTO createDTO) {
+//		Satisfaction satisfaction = satisfactionDTOMapper.toSatisfaction(createDTO);
+//		return save(satisfaction);
+//	}
 
-	public Satisfaction createSatisfaction(Appointment appointment) {
-		Satisfaction satisfaction = appointmentMapper.toSatisfaction(appointment);
-		return createSatisfaction(satisfaction);
-	}
-
-	public Satisfaction createSatisfaction(SatisfactionCustomerCreateDTO createDTO) {
-		// todo : 撠璅�歇�蝯∠���銝府�隞交憓遛��漲閰��
-		// todo : ��撌梁���銝府�隞仿�脰����
-		Satisfaction satisfaction = satisfactionDTOMapper.toSatisfaction(createDTO);
-		return createSatisfaction(satisfaction);
-	}
-
-	public List<SatisfactionDTO> getByAgentNo(String agentNo) {
-		List<Satisfaction> satisfactionList = satisfactionRepository.findByAgentNo(agentNo);
+	public List<SatisfactionDTO> getByAgentNoAndType(String agentNo, SatisfactionTypeEnum type) {
+		List<Satisfaction> satisfactionList = satisfactionRepository.findByAgentNoAndType(agentNo, type);
 		return satisfactionMapper.toDTO(satisfactionList);
 	}
 
@@ -90,7 +106,29 @@
 		return satisfactionMapper.toDTO(satisfactionList);
 	}
 
-    public Optional<Satisfaction> getByAppointmentId(Long appointmentId) {
-        return satisfactionRepository.findOneByAppointmentId(appointmentId);
+    public Optional<Satisfaction> getByAppointmentIdAndType(Long appointmentId, SatisfactionTypeEnum type) {
+        return satisfactionRepository.findOneByAppointmentIdAndType(appointmentId, type);
+    }
+
+    public List<Satisfaction> getByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type) {
+        return satisfactionRepository.findAllByStatusAndType(status, type);
+    }
+
+	public List<Satisfaction> scoreAllfaction(List<SatisfactionCustomerScoreDTO> scoreDTO) {
+		List<Satisfaction> satisfactionList = new ArrayList<>();
+		scoreDTO.stream().forEach(dto ->{
+			satisfactionList.add(scorefaction(dto));
+		});
+		return satisfactionList;
+	}
+
+    public void createUnfilledSystemSatisfaction(Appointment appointment) {
+        Satisfaction satisfaction = new Satisfaction();
+        satisfaction.setAppointmentId(appointment.getId());
+        satisfaction.setCustomerId(SecurityUtils.getCustomerDBId());
+        satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED);
+        satisfaction.setType(SatisfactionTypeEnum.SYSTEM);
+
+        satisfactionRepository.save(satisfaction);
     }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java b/pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java
new file mode 100644
index 0000000..627aeb4
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java
@@ -0,0 +1,165 @@
+package com.pollex.pam.service;
+
+import com.pollex.pam.config.ApplicationProperties;
+import com.pollex.pam.config.Constants;
+import com.pollex.pam.domain.*;
+import com.pollex.pam.enums.AppointmentStatusEnum;
+import com.pollex.pam.enums.ContactStatusEnum;
+import com.pollex.pam.enums.SatisfactionStatusEnum;
+import com.pollex.pam.enums.SatisfactionTypeEnum;
+import com.pollex.pam.repository.AppointmentCustomerViewRepository;
+import com.pollex.pam.repository.AppointmentExpiringNotifyRecordRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+import org.thymeleaf.context.Context;
+import org.thymeleaf.spring5.SpringTemplateEngine;
+
+import java.time.Instant;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@Service
+@Transactional
+public class ScheduleTaskService {
+
+    private static final String NOT_CONTACTED_NOTIFY_SUBJECT = "�����脰�蝜恍�";
+    private static final Logger log = LoggerFactory.getLogger(ScheduleTaskService.class);
+
+    @Autowired
+    ConsultantService consultantService;
+
+    @Autowired
+    AppointmentService appointmentService;
+
+    @Autowired
+    AppointmentCustomerViewRepository appointmentCustomerViewRepository;
+
+    @Autowired
+    SendMsgService sendMsgService;
+
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
+
+    @Autowired
+    ApplicationProperties applicationProperties;
+
+    @Autowired
+    AppointmentExpiringNotifyRecordRepository appointmentExpiringNotifyRecordRepository;
+
+    @Autowired
+    SatisfactionService satisfactionService;
+
+    @Autowired
+    PersonalNotificationService personalNotificationService;
+
+    @Scheduled(cron = "0 30 8 * * *")
+    public void sendAppointmentPendingNotifyToConsultant() {
+        log.info("Starting send appointment pending notify to consultant");
+
+        Map<String, List<AppointmentCustomerView>> consultantWithPendingAppointments =
+            appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AppointmentStatusEnum.AVAILABLE)
+                .stream()
+                .filter(appointment ->
+                    appointmentService.isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_PENDING_PHONE_INTERVAL, Constants.APPOINTMENT_PENDING_EMAIL_INTERVAL)
+                )
+                .collect(Collectors.groupingBy(AppointmentCustomerView::getAgentNo));
+
+        consultantWithPendingAppointments.forEach((agentNo, pendingAppointments) -> {
+            int pendingAppointmentsSum = pendingAppointments.size();
+            Consultant consultant = consultantService.findByAgentNo(agentNo);
+            Optional<String> optionalPhone = Optional.ofNullable(consultant.getPhoneNumber()).filter(StringUtils::hasText);
+            Optional<String> optionalEmail = Optional.ofNullable(consultant.getEmail()).filter(StringUtils::hasText);
+
+            String emailContent = getAppointmentPendingNotifyEmailContent(pendingAppointmentsSum);
+
+            optionalPhone.ifPresent(phone -> {
+                sendMsgService.sendMsgBySMS(phone, String.format("����%s������脰�蝜恬������", pendingAppointmentsSum));
+            });
+            optionalEmail.ifPresent(email -> {
+                sendMsgService.sendMsgByEmail(email, NOT_CONTACTED_NOTIFY_SUBJECT, emailContent, true);
+            });
+        });
+
+        log.info("Sending appointment pending notify to consultant finish");
+    }
+
+    @Scheduled(cron = "0 30 8 * * *")
+    public void sendAppointmentExpiringNotifyToCustomer() {
+        log.info("Starting send appointment expiring notify to customer");
+
+        List<AppointmentCustomerView> allByCommunicateStatus =
+            appointmentCustomerViewRepository.findAllByCommunicateStatusAndStatus(ContactStatusEnum.RESERVED, AppointmentStatusEnum.AVAILABLE)
+                .stream()
+                .filter(appointment ->
+                    appointmentService.isAppointmentDateNotInIntervalFromNow(appointment, Constants.APPOINTMENT_EXPIRING_PHONE_INTERVAL, Constants.APPOINTMENT_EXPIRING_EMAIL_INTERVAL)
+                )
+                .filter(this::isAppointmentExpiringNotifyNotOnLimit)
+                .collect(Collectors.toList());
+
+        allByCommunicateStatus.forEach(appointment -> {
+            Consultant consultant = consultantService.findByAgentNo(appointment.getAgentNo());
+            Optional<String> optionalPhone = Optional.ofNullable(appointment.getPhone()).filter(StringUtils::hasText);
+            Optional<String> optionalEmail = Optional.ofNullable(appointment.getEmail()).filter(StringUtils::hasText);
+
+            optionalPhone.ifPresent(phone ->
+                sendMsgService.sendMsgBySMS(phone, String.format("敺甇�����%s憿批�迤敹�葉嚗������蒂���隞“������雯��嚗�%s"
+                    , consultant.getName(), getAppointmentExpiringNotifyUrl(appointment.getId())))
+            );
+            optionalEmail.ifPresent(email ->
+                sendMsgService.sendMsgByEmail(email, NOT_CONTACTED_NOTIFY_SUBJECT, getAppointmentExpiringNotifyEmail(consultant.getName(), getAppointmentExpiringNotifyUrl(appointment.getId())), true)
+            );
+
+            AppointmentExpiringNotifyRecord record = new AppointmentExpiringNotifyRecord();
+            record.setAppointmentId(appointment.getId());
+            record.setSendTime(Instant.now());
+
+            appointmentExpiringNotifyRecordRepository.save(record);
+        });
+
+        log.info("Sending appointment expiring notify to customer finish");
+    }
+
+    // todo ��蝣箄�府����, otis todo=134497
+    @Scheduled(cron = "0 30 8 * * *")
+    public void sendNotFillAppointmentSatisfactionToPersonalNotification() {
+        Map<Long, List<Satisfaction>> customerNotFillSatisfactions =
+            satisfactionService.getByStatusAndType(SatisfactionStatusEnum.UNFILLED, SatisfactionTypeEnum.APPOINTMENT)
+                .stream()
+                .collect(Collectors.groupingBy(Satisfaction::getCustomerId));
+
+        customerNotFillSatisfactions.forEach((customerId, notFillSatisfactions) ->
+            personalNotificationService.createNotFillAppointmentSatisfactionNumberToCustomer(customerId, notFillSatisfactions.size())
+        );
+    }
+
+    private boolean isAppointmentExpiringNotifyNotOnLimit(AppointmentCustomerView appointment) {
+        int sendNotifyToCustomerRecordSum =
+            appointmentExpiringNotifyRecordRepository.findAllByAppointmentId(appointment.getId()).size();
+
+        return sendNotifyToCustomerRecordSum < Constants.SEND_EXPIRING_NOTIFY_LIMIT;
+    }
+
+    private String getAppointmentExpiringNotifyUrl(Long appointmentId) {
+        return applicationProperties.getFrontEndDomain() + "?notContactAppointmentId=" + appointmentId;
+    }
+
+    private String getAppointmentPendingNotifyEmailContent(int sum) {
+        Context context = new Context();
+        context.setVariable("pendingAppointmentSum", sum);
+        return springTemplateEngine.process("mail/appointmentPendingNotifyEmail", context);
+    }
+
+    private String getAppointmentExpiringNotifyEmail(String consultantName, String notifyUrl) {
+        Context context = new Context();
+        context.setVariable("consultantName", consultantName);
+        context.setVariable("notifyUrl", notifyUrl);
+        return springTemplateEngine.process("mail/appointmentExpiringNotifyEmail", context);
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
new file mode 100644
index 0000000..a5be71e
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
@@ -0,0 +1,172 @@
+package com.pollex.pam.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.pollex.pam.config.ApplicationProperties;
+import com.pollex.pam.config.ApplicationProperties.Email;
+import com.pollex.pam.config.ApplicationProperties.SMS;
+import com.pollex.pam.config.Constants;
+import com.pollex.pam.enums.SendEmailMsgMethod;
+import com.pollex.pam.repository.ConsultantRepository;
+import com.pollex.pam.service.dto.*;
+import com.pollex.pam.service.util.HttpRequestUtil;
+import com.pollex.pam.web.rest.errors.SendEmailFailException;
+import com.pollex.pam.web.rest.errors.SendSMSFailException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.Profiles;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.thymeleaf.spring5.SpringTemplateEngine;
+import tech.jhipster.config.JHipsterConstants;
+
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.Base64.Encoder;
+
+@Service
+public class SendMsgService {
+
+    private static final Logger log = LoggerFactory.getLogger(SendMsgService.class);
+    private final Encoder encoder = Base64.getEncoder();
+
+    private static final String SEND_SMS_SUCCESS_CODE = "1";
+
+    @Autowired
+    ApplicationProperties applicationProperties;
+
+    @Autowired
+    ConsultantRepository consultantRepository;
+
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
+
+    @Autowired
+    Environment environment;
+
+    @Autowired
+    MailService mailService;
+
+    public SendSMSResponse sendMsgBySMS(String toMobile, String content) throws SendSMSFailException {
+
+        SMS smsProperties = applicationProperties.getSms();
+        if(!smsProperties.isSendNotifyMsg()) {
+//    		return getMockSMSResponse();
+            return null;
+        }
+
+        SendSMSRequest sendSMSRequest = new SendSMSRequest();
+        sendSMSRequest.setpKey(UUID.randomUUID().toString());
+        sendSMSRequest.setSourceCode(smsProperties.getSourceCode());
+        sendSMSRequest.setSender(smsProperties.getSender());
+        sendSMSRequest.setMsgTypeSet(smsProperties.getSmsType());
+        sendSMSRequest.setSendTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:00")));
+        sendSMSRequest.setSubject(encoder.encodeToString(smsProperties.getSubject().getBytes(StandardCharsets.UTF_8)));
+        sendSMSRequest.setActivityId("");
+
+        SMSDetail smsDetail = new SMSDetail();
+        smsDetail.setMobile(toMobile);
+        smsDetail.setContent(encoder.encodeToString(content.getBytes(StandardCharsets.UTF_8)));
+
+        sendSMSRequest.setDetail(Collections.singletonList(smsDetail));
+
+        try {
+            ResponseEntity<SendSMSResponse> responseEntity = HttpRequestUtil.postWithJson(smsProperties.getUrl(), sendSMSRequest, SendSMSResponse.class);
+            SendSMSResponse response = responseEntity.getBody();
+
+            log.debug("response status code = {}", responseEntity.getStatusCode());
+            log.debug("smsResponse = {}", responseEntity.getBody());
+
+            if(!SEND_SMS_SUCCESS_CODE.equals(response.getReturnCode())) {
+                throw new SendSMSFailException("sms service return code = " + response.getReturnCode() + ", error_msg = " + response.getErrorMsg());
+            }
+
+            return responseEntity.getBody();
+        } catch (SendSMSFailException e) {
+            throw e;
+        } catch (Exception e) {
+            log.warn("send sms fail by other reason!", e);
+            throw new SendSMSFailException("send sms fail by other reason!");
+        }
+    }
+
+//    private SendSMSResponse getMockSMSResponse() {
+//    	SendSMSResponse mock = new SendSMSResponse();
+//    	mock.set
+//		return null;
+//	}
+
+	public String sendMsgByEmail(String to, String subject, String content, boolean htmlFormat) throws SendEmailFailException{
+        return sendMsgByEmail(to, subject, content, htmlFormat, Collections.emptyList(), Collections.emptyList());
+    }
+
+    public String sendMsgByEmail(String toAddress, String subject, String content, boolean htmlFormat, List<String> toCCAddress,
+        List<String> attachments) throws SendEmailFailException {
+    	String fromAddress = applicationProperties.getEmail().getSenderEmail();
+
+        SendMailRequest sendMailRequest = new SendMailRequest();
+        sendMailRequest.setSendMailAddresses(Collections.singletonList(toAddress));
+        sendMailRequest.setFrom(fromAddress);
+        sendMailRequest.setContent(content);
+        sendMailRequest.setSubject(subject);
+        sendMailRequest.setSendCCMailAddresses(toCCAddress);
+        sendMailRequest.setAttachments(attachments);
+        sendMailRequest.setHtmlFormat(htmlFormat);
+        sendMailRequest.setFunctionId(applicationProperties.getEmail().getFunctionId());
+
+        return sendMsgByEmail(sendMailRequest);
+    }
+
+    public String sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{
+        final Email emailProperties = applicationProperties.getEmail();
+
+        if(!emailProperties.isSendNotifyMsg()) {
+            return null;
+        }
+
+        if(emailProperties.getMethod() == SendEmailMsgMethod.POLLEX_GMAIL) {
+            return sendMsgByPollexGmail(sendMailRequest);
+        }
+        else if(emailProperties.getMethod() == SendEmailMsgMethod.PAM_EMAIL_SERVICE) {
+            return sendMsgByPamEmailService(sendMailRequest);
+        }
+
+        return null;
+    }
+
+    private String sendMsgByPollexGmail(SendMailRequest sendMailRequest) {
+        String subject = sendMailRequest.getSubject();
+        String content = sendMailRequest.getContent();
+        boolean isHtml = sendMailRequest.isHtmlFormat();
+        sendMailRequest.getSendMailAddresses().forEach(receiver -> mailService.sendEmail(receiver, subject, content, false, isHtml));
+
+        return null;
+    }
+
+    private String sendMsgByPamEmailService(SendMailRequest sendMailRequest) {
+        final Email emailProperties = applicationProperties.getEmail();
+        try {
+            ResponseEntity<String> responseEntity =
+                HttpRequestUtil.postWithJson(emailProperties.getUrl(), sendMailRequest, String.class);
+            log.debug("responseEntity = {}", responseEntity);
+
+            String rawResponseString = responseEntity.getBody();
+            SendMailResponse sendMailResponse = new ObjectMapper().readValue(rawResponseString, SendMailResponse.class);
+            log.debug("sendMailResponse = {}", sendMailResponse);
+
+            if (sendMailResponse == null || sendMailResponse.getData() == null || !"ADDED".equalsIgnoreCase(sendMailResponse.getData().getMessageStatus())) {
+                throw new SendEmailFailException("send email service return error msg! raw response string= " + rawResponseString);
+            }
+
+            return responseEntity.getBody();
+        } catch (SendEmailFailException e) {
+            throw e;
+        } catch (Exception e) {
+            log.warn("send email fail by other reason", e);
+            throw new SendEmailFailException("send email failed!");
+        }
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java
new file mode 100644
index 0000000..13b270d
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java
@@ -0,0 +1,37 @@
+package com.pollex.pam.service.dto;
+
+import com.pollex.pam.enums.ContactStatusEnum;
+
+public abstract class AbstractAppointmentProcessDTO{
+	
+	private ContactStatusEnum contactStatus;
+	private Long appointmentId;
+//	private Long closedInfoId;
+
+	public ContactStatusEnum getContactStatus() {
+		return contactStatus;
+	}
+
+	public void setContactStatus(ContactStatusEnum contactStatus) {
+		this.contactStatus = contactStatus;
+	}
+
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+
+//	public Long getClosedInfoId() {
+//		return closedInfoId;
+//	}
+//
+//	public void setClosedInfoId(Long closedInfoId) {
+//		this.closedInfoId = closedInfoId;
+//	}
+
+	
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java
new file mode 100644
index 0000000..bc9a8e2
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java
@@ -0,0 +1,77 @@
+package com.pollex.pam.service.dto;
+
+import java.util.Date;
+
+import com.pollex.pam.enums.ContactStatusEnum;
+
+public class AppointmentCloseDTO{
+	
+//	private Long closedInfoId;
+	private String policyholderIdentityId;
+	private String planCode;
+	private Date policyEntryDate;
+	private String remark;
+	private String closedReason;
+	private String closedOtherReason;
+	private ContactStatusEnum contactStatus;
+	private Long appointmentId;
+	
+	public String getPolicyholderIdentityId() {
+		return policyholderIdentityId;
+	}
+	public void setPolicyholderIdentityId(String policyholderIdentityId) {
+		this.policyholderIdentityId = policyholderIdentityId;
+	}
+	public String getPlanCode() {
+		return planCode;
+	}
+	public void setPlanCode(String planCode) {
+		this.planCode = planCode;
+	}
+	public Date getPolicyEntryDate() {
+		return policyEntryDate;
+	}
+	public void setPolicyEntryDate(Date policyEntryDate) {
+		this.policyEntryDate = policyEntryDate;
+	}
+	public String getRemark() {
+		return remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+	public String getClosedReason() {
+		return closedReason;
+	}
+	public void setClosedReason(String closedReason) {
+		this.closedReason = closedReason;
+	}
+	public String getClosedOtherReason() {
+		return closedOtherReason;
+	}
+	public void setClosedOtherReason(String closedOtherReason) {
+		this.closedOtherReason = closedOtherReason;
+	}
+	public ContactStatusEnum getContactStatus() {
+		return contactStatus;
+	}
+	public void setContactStatus(ContactStatusEnum contactStatus) {
+		this.contactStatus = contactStatus;
+	}
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+//	public Long getClosedInfoId() {
+//		return closedInfoId;
+//	}
+//	public void setClosedInfoId(Long closedInfoId) {
+//		this.closedInfoId = closedInfoId;
+//	}
+	
+	
+	
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java
index 5605843..6c3f3fb 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java
@@ -1,7 +1,12 @@
 package com.pollex.pam.service.dto;
 
 import java.time.Instant;
+import java.util.List;
 
+import com.pollex.pam.domain.AppointmentClosedInfo;
+import com.pollex.pam.domain.AppointmentMemo;
+import com.pollex.pam.domain.AppointmentNoticeLog;
+import com.pollex.pam.domain.InterviewRecord;
 import com.pollex.pam.enums.ContactStatusEnum;
 
 public class AppointmentCustomerViewDTO {
@@ -26,6 +31,10 @@
     private Instant consultantReadTime;
     private Instant contactTime;
     private Float satisfactionScore;
+    private List<AppointmentMemo> appointmentMemoList;
+    private List<InterviewRecordDTO> interviewRecordDTOs;
+    private List<AppointmentNoticeLog> appointmentNoticeLogs;
+    private AppointmentClosedInfo appointmentClosedInfo;
 
 	public Long getId() {
 		return id;
@@ -147,4 +156,32 @@
     public void setSatisfactionScore(Float satisfactionScore) {
         this.satisfactionScore = satisfactionScore;
     }
+	public List<AppointmentMemo> getAppointmentMemoList() {
+		return appointmentMemoList;
+	}
+	public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
+		this.appointmentMemoList = appointmentMemoList;
+	}
+	public List<InterviewRecordDTO> getInterviewRecordDTOs() {
+		return interviewRecordDTOs;
+	}
+	public void setInterviewRecordDTOs(List<InterviewRecordDTO> interviewRecordDTOs) {
+		this.interviewRecordDTOs = interviewRecordDTOs;
+	}
+	public List<AppointmentNoticeLog> getAppointmentNoticeLogs() {
+		return appointmentNoticeLogs;
+	}
+	public void setAppointmentNoticeLogs(List<AppointmentNoticeLog> appointmentNoticeLogs) {
+		this.appointmentNoticeLogs = appointmentNoticeLogs;
+	}
+	public AppointmentClosedInfo getAppointmentClosedInfo() {
+		return appointmentClosedInfo;
+	}
+	public void setAppointmentClosedInfo(AppointmentClosedInfo appointmentClosedInfo) {
+		this.appointmentClosedInfo = appointmentClosedInfo;
+	}
+	
+	
+    
+    
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java
new file mode 100644
index 0000000..1750480
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java
@@ -0,0 +1,22 @@
+package com.pollex.pam.service.dto;
+
+public class AppointmentMemoCreateDTO {
+	
+    private String content;
+    private Long appointmentId;
+    
+	public String getContent() {
+		return content;
+	}
+	public void setContent(String content) {
+		this.content = content;
+	}
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+    
+    
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java
new file mode 100644
index 0000000..262838a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java
@@ -0,0 +1,27 @@
+package com.pollex.pam.service.dto;
+
+public class AppointmentMemoUpdateDTO{
+	
+	private Long id;
+	private String content;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+	
+	
+	
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java
new file mode 100644
index 0000000..2256fc8
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java
@@ -0,0 +1,53 @@
+package com.pollex.pam.service.dto;
+
+import java.util.Date;
+
+public class AppointmentNoticeSendDTO {
+	
+	private String message;
+	private Long appointmentId;
+	private String email;
+	private String phone;
+//	private String noticeType;
+	private Date interviewDate;
+	
+	public String getMessage() {
+		return message;
+	}
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+//	public String getNoticeType() {
+//		return noticeType;
+//	}
+//	public void setNoticeType(String noticeType) {
+//		this.noticeType = noticeType;
+//	}
+	public String getEmail() {
+		return email;
+	}
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	public String getPhone() {
+		return phone;
+	}
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+	public Date getInterviewDate() {
+		return interviewDate;
+	}
+	public void setInterviewDate(Date interviewDate) {
+		this.interviewDate = interviewDate;
+	}
+	
+	
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java
new file mode 100644
index 0000000..9b18da4
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java
@@ -0,0 +1,29 @@
+package com.pollex.pam.service.dto;
+
+public class ClosedProcessDTO extends AbstractAppointmentProcessDTO{
+	
+	private String remark;
+	private String closedReason;
+	private String closedOtherReason;
+	
+	public String getRemark() {
+		return remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+	public String getClosedReason() {
+		return closedReason;
+	}
+	public void setClosedReason(String closedReason) {
+		this.closedReason = closedReason;
+	}
+	public String getClosedOtherReason() {
+		return closedOtherReason;
+	}
+	public void setClosedOtherReason(String closedOtherReason) {
+		this.closedOtherReason = closedOtherReason;
+	}
+	
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
index dbe0181..f847769 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
@@ -20,7 +20,7 @@
     private Instant updateTime;
     private String role;
     private String seniority;
-    private Long latestAppointmentId;
+    private int suitability;
 
     public boolean isNewConsultant() {
         if(updateTime != null){
@@ -106,11 +106,11 @@
         this.newConsultant = newConsultant;
     }
 
-    public Long getLatestAppointmentId() {
-        return latestAppointmentId;
+    public int getSuitability() {
+        return suitability;
     }
 
-    public void setLatestAppointmentId(Long latestAppointmentId) {
-        this.latestAppointmentId = latestAppointmentId;
+    public void setSuitability(int suitability) {
+        this.suitability = suitability;
     }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
index bcd1d92..ea92f3f 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
@@ -3,6 +3,8 @@
 import java.time.Instant;
 import java.util.List;
 
+import com.pollex.pam.enums.GenderEnum;
+
 public class ConsultantDetailDTO {
 
     private String name;
@@ -16,12 +18,14 @@
     private String companyAddress;
     private Instant latestLoginTime;
     private String seniority;
-    private Number suitability;
     private Number evaluation;
     private List<String> expertise;
     private String concept;
-    private List<String> experiences;
+    private String experiences;
     private String awards;
+    private GenderEnum gender;
+    private String communicationStyle;
+    private String email;
 
     public String getName() {
         return name;
@@ -111,14 +115,6 @@
         this.seniority = seniority;
     }
 
-    public Number getSuitability() {
-        return suitability;
-    }
-
-    public void setSuitability(Number suitability) {
-        this.suitability = suitability;
-    }
-
     public Number getEvaluation() {
         return evaluation;
     }
@@ -143,11 +139,11 @@
         this.concept = concept;
     }
 
-    public List<String> getExperiences() {
+    public String getExperiences() {
         return experiences;
     }
 
-    public void setExperiences(List<String> experiences) {
+    public void setExperiences(String experiences) {
         this.experiences = experiences;
     }
 
@@ -158,4 +154,31 @@
     public void setAwards(String awards) {
         this.awards = awards;
     }
+
+	public GenderEnum getGender() {
+		return gender;
+	}
+
+	public void setGender(GenderEnum gender) {
+		this.gender = gender;
+	}
+
+	public String getCommunicationStyle() {
+		return communicationStyle;
+	}
+
+	public void setCommunicationStyle(String communicationStyle) {
+		this.communicationStyle = communicationStyle;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+
+
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java
new file mode 100644
index 0000000..0489a1d
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java
@@ -0,0 +1,139 @@
+package com.pollex.pam.service.dto;
+
+import java.util.List;
+
+import com.pollex.pam.enums.GenderEnum;
+
+public class ConsultantEditDTO {
+	
+//	private Long id;
+    private String name;
+    private List<String> expertise;
+    private String title;
+    private String role;
+    private String serveArea;
+    private GenderEnum gender;
+    private String phoneNumber;
+    private String companyAddress;
+    private Long seniorityYear;
+    private Long seniorityMonth;
+    private String concept;
+    private String experiences;
+    private String awards;
+    private String communicationStyle;
+    private String photoBase64;
+    private String photoFileName;
+    private String agentNo;
+    
+//	public Long getId() {
+//		return id;
+//	}
+//	public void setId(Long id) {
+//		this.id = id;
+//	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public List<String> getExpertise() {
+		return expertise;
+	}
+	public void setExpertise(List<String> expertise) {
+		this.expertise = expertise;
+	}
+	public String getTitle() {
+		return title;
+	}
+	public void setTitle(String title) {
+		this.title = title;
+	}
+	public String getRole() {
+		return role;
+	}
+	public void setRole(String role) {
+		this.role = role;
+	}
+	public String getServeArea() {
+		return serveArea;
+	}
+	public void setServeArea(String serveArea) {
+		this.serveArea = serveArea;
+	}
+	public GenderEnum getGender() {
+		return gender;
+	}
+	public void setGender(GenderEnum gender) {
+		this.gender = gender;
+	}
+	public String getPhoneNumber() {
+		return phoneNumber;
+	}
+	public void setPhoneNumber(String phoneNumber) {
+		this.phoneNumber = phoneNumber;
+	}
+	public String getCompanyAddress() {
+		return companyAddress;
+	}
+	public void setCompanyAddress(String companyAddress) {
+		this.companyAddress = companyAddress;
+	}
+	public Long getSeniorityYear() {
+		return seniorityYear;
+	}
+	public void setSeniorityYear(Long seniorityYear) {
+		this.seniorityYear = seniorityYear;
+	}
+	public Long getSeniorityMonth() {
+		return seniorityMonth;
+	}
+	public void setSeniorityMonth(Long seniorityMonth) {
+		this.seniorityMonth = seniorityMonth;
+	}
+	public String getConcept() {
+		return concept;
+	}
+	public void setConcept(String concept) {
+		this.concept = concept;
+	}
+	public String getExperiences() {
+		return experiences;
+	}
+	public void setExperiences(String experiences) {
+		this.experiences = experiences;
+	}
+	public String getAwards() {
+		return awards;
+	}
+	public void setAwards(String awards) {
+		this.awards = awards;
+	}
+	public String getCommunicationStyle() {
+		return communicationStyle;
+	}
+	public void setCommunicationStyle(String communicationStyle) {
+		this.communicationStyle = communicationStyle;
+	}
+	public String getPhotoBase64() {
+		return photoBase64;
+	}
+	public void setPhotoBase64(String photoBase64) {
+		this.photoBase64 = photoBase64;
+	}
+	public String getPhotoFileName() {
+		return "consultant_"+this.getAgentNo()+".jpg";
+	}
+	public String getAgentNo() {
+		return agentNo;
+	}
+	public void setAgentNo(String agentNo) {
+		this.agentNo = agentNo;
+	}
+	
+    
+    
+    
+    
+    
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java
index 3142151..bdcdfd6 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java
@@ -9,8 +9,6 @@
 
 public class CustomerFavoriteConsultantDTO {
 
-    @JsonProperty("new")
-    private boolean newConsultant;
     private String agentNo;
     private String name;
     private String img;
@@ -19,17 +17,10 @@
     private ContactStatusEnum contactStatus;
     private Instant createTime;
     private Instant updateTime;
+    private Instant customerViewTime;
     private String role;
     private String seniority;
     private List<AppointmentCustomerViewDTO> appointments;
-
-    public boolean isNewConsultant() {
-        if(createTime != null){
-            Instant nowTimestamp = Instant.now();
-            return ChronoUnit.DAYS.between(createTime, nowTimestamp) < 3;
-        }
-        return false;
-    }
 
     public String getAgentNo() {
         return agentNo;
@@ -95,6 +86,14 @@
         this.updateTime = updateTime;
     }
 
+    public Instant getCustomerViewTime() {
+        return customerViewTime;
+    }
+
+    public void setCustomerViewTime(Instant customerViewTime) {
+        this.customerViewTime = customerViewTime;
+    }
+
     public String getRole() {
         return role;
     }
@@ -109,10 +108,6 @@
 
     public void setSeniority(String seniority) {
         this.seniority = seniority;
-    }
-
-    public void setNewConsultant(boolean newConsultant) {
-        this.newConsultant = newConsultant;
     }
 
     public List<AppointmentCustomerViewDTO> getAppointments() {
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java
new file mode 100644
index 0000000..2c9881a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java
@@ -0,0 +1,39 @@
+package com.pollex.pam.service.dto;
+
+import java.util.Date;
+
+public class DoneProcessDTO extends AbstractAppointmentProcessDTO{
+	
+	private String policyholderIdentityId;
+	private String planCode;
+	private Date policyEntryDate;
+	private String remark;
+	
+	public String getPolicyholderIdentityId() {
+		return policyholderIdentityId;
+	}
+	public void setPolicyholderIdentityId(String policyholderIdentityId) {
+		this.policyholderIdentityId = policyholderIdentityId;
+	}
+	public String getPlanCode() {
+		return planCode;
+	}
+	public void setPlanCode(String planCode) {
+		this.planCode = planCode;
+	}
+	public Date getPolicyEntryDate() {
+		return policyEntryDate;
+	}
+	public void setPolicyEntryDate(Date policyEntryDate) {
+		this.policyEntryDate = policyEntryDate;
+	}
+	public String getRemark() {
+		return remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+	
+	
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
index 76471f5..a8c443d 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
@@ -5,10 +5,12 @@
 import java.util.List;
 
 public class FastQueryConsultantParam {
+
     private GenderEnum gender;
     private List<String> communicationStyles;
     private Number avgScore;
     private String status;
+    private String seniority;
 
     public GenderEnum getGender() {
         return gender;
@@ -41,4 +43,12 @@
     public void setStatus(String status) {
         this.status = status;
     }
+
+    public String getSeniority() {
+        return seniority;
+    }
+
+    public void setSeniority(String seniority) {
+        this.seniority = seniority;
+    }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java
new file mode 100644
index 0000000..83c3a7b
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java
@@ -0,0 +1,69 @@
+package com.pollex.pam.service.dto;
+
+import java.time.Instant;
+import java.util.Date;
+
+public class InterviewRecordDTO {
+	
+	private Long id;
+	private String content;
+	private Instant createdDate;
+    private Instant lastModifiedDate;
+    private String createdBy;
+    private String lastModifiedBy;
+    private Date interviewDate;
+    private Long appointmentId;
+    
+	public Long getId() {
+		return id;
+	}
+	public void setId(Long id) {
+		this.id = id;
+	}
+	public String getContent() {
+		return content;
+	}
+	public void setContent(String content) {
+		this.content = content;
+	}
+	public Instant getCreatedDate() {
+		return createdDate;
+	}
+	public void setCreatedDate(Instant createdDate) {
+		this.createdDate = createdDate;
+	}
+	public Instant getLastModifiedDate() {
+		return lastModifiedDate;
+	}
+	public void setLastModifiedDate(Instant lastModifiedDate) {
+		this.lastModifiedDate = lastModifiedDate;
+	}
+	public String getCreatedBy() {
+		return createdBy;
+	}
+	public void setCreatedBy(String createdBy) {
+		this.createdBy = createdBy;
+	}
+	public String getLastModifiedBy() {
+		return lastModifiedBy;
+	}
+	public void setLastModifiedBy(String lastModifiedBy) {
+		this.lastModifiedBy = lastModifiedBy;
+	}
+	public Date getInterviewDate() {
+		return interviewDate;
+	}
+	public void setInterviewDate(Date interviewDate) {
+		this.interviewDate = interviewDate;
+	}
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+    
+    
+    
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java
new file mode 100644
index 0000000..8cbc3da
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java
@@ -0,0 +1,26 @@
+package com.pollex.pam.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class SMSDetail {
+    private String mobile;
+    private String content;
+
+    @JsonProperty("mobile")
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    @JsonProperty("content")
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerCreateDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerCreateDTO.java
deleted file mode 100644
index 8866364..0000000
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerCreateDTO.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.pollex.pam.service.dto;
-
-public class SatisfactionCustomerCreateDTO {
-	
-	private Long appointmentId;
-	private Float score;
-	
-	public Long getAppointmentId() {
-		return appointmentId;
-	}
-	public void setAppointmentId(Long appointmentId) {
-		this.appointmentId = appointmentId;
-	}
-	public Float getScore() {
-		return score;
-	}
-	public void setScore(Float score) {
-		this.score = score;
-	}
-	
-	
-}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java
new file mode 100644
index 0000000..1cbf0e3
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java
@@ -0,0 +1,29 @@
+package com.pollex.pam.service.dto;
+
+import com.pollex.pam.enums.SatisfactionTypeEnum;
+
+public class SatisfactionCustomerScoreDTO {
+
+	private Long appointmentId;
+	private Float score;
+    private SatisfactionTypeEnum type;
+
+	public Long getAppointmentId() {
+		return appointmentId;
+	}
+	public void setAppointmentId(Long appointmentId) {
+		this.appointmentId = appointmentId;
+	}
+	public Float getScore() {
+		return score;
+	}
+	public void setScore(Float score) {
+		this.score = score;
+	}
+    public SatisfactionTypeEnum getType() {
+        return type;
+    }
+    public void setType(SatisfactionTypeEnum type) {
+        this.type = type;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java
index 5a6c4ae..152a82d 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java
@@ -3,6 +3,7 @@
 import java.time.Instant;
 
 import com.pollex.pam.enums.SatisfactionStatusEnum;
+import com.pollex.pam.enums.SatisfactionTypeEnum;
 
 public class SatisfactionDTO {
 
@@ -16,7 +17,8 @@
     private Long appointmentId;
     private String customerName;
     private String agentName;
-    
+    private SatisfactionTypeEnum type;
+
 	public Long getId() {
 		return id;
 	}
@@ -77,6 +79,10 @@
 	public void setAgentName(String agentName) {
 		this.agentName = agentName;
 	}
-	
-
+    public SatisfactionTypeEnum getType() {
+        return type;
+    }
+    public void setType(SatisfactionTypeEnum type) {
+        this.type = type;
+    }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java
new file mode 100644
index 0000000..2470a67
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java
@@ -0,0 +1,103 @@
+package com.pollex.pam.service.dto;
+
+import java.util.List;
+
+public class SendMailRequest {
+
+    /**
+     * �隞嗉��
+     */
+    private List<String> sendMailAddresses;
+    /**
+     * ��
+     */
+    private List<String> sendCCMailAddresses;
+    /**
+     * 銝駁��
+     */
+    private String subject;
+    /**
+     * ����
+     */
+    private String content;
+    /**
+     * 撖辣��
+     */
+    private String from;
+    /**
+     * ��辣頝臬��
+     */
+    private List<String> attachments;
+    /**
+     * �� html format
+     */
+    private boolean htmlFormat;
+    /**
+     * �摰儔閮���� (������������神甇餃�pos)
+     */
+    private String functionId;
+
+    public List<String> getSendMailAddresses() {
+        return sendMailAddresses;
+    }
+
+    public void setSendMailAddresses(List<String> sendMailAddresses) {
+        this.sendMailAddresses = sendMailAddresses;
+    }
+
+    public List<String> getSendCCMailAddresses() {
+        return sendCCMailAddresses;
+    }
+
+    public void setSendCCMailAddresses(List<String> sendCCMailAddresses) {
+        this.sendCCMailAddresses = sendCCMailAddresses;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public List<String> getAttachments() {
+        return attachments;
+    }
+
+    public void setAttachments(List<String> attachments) {
+        this.attachments = attachments;
+    }
+
+    public boolean isHtmlFormat() {
+        return htmlFormat;
+    }
+
+    public void setHtmlFormat(boolean htmlFormat) {
+        this.htmlFormat = htmlFormat;
+    }
+
+    public String getFunctionId() {
+        return functionId;
+    }
+
+    public void setFunctionId(String functionId) {
+        this.functionId = functionId;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java
new file mode 100644
index 0000000..aee72f7
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java
@@ -0,0 +1,43 @@
+package com.pollex.pam.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class SendMailResponse {
+    private Data data;
+
+    public Data getData() {
+        return data;
+    }
+
+    public void setData(Data data) {
+        this.data = data;
+    }
+
+    @JsonIgnoreProperties(ignoreUnknown = true)
+    public static class Data {
+        private String messageStatus;
+
+        public String getMessageStatus() {
+            return messageStatus;
+        }
+
+        public void setMessageStatus(String messageStatus) {
+            this.messageStatus = messageStatus;
+        }
+
+        @Override
+        public String toString() {
+            return "Data{" +
+                "messageStatus='" + messageStatus + '\'' +
+                '}';
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "SendMailResponse{" +
+            "data=" + data +
+            '}';
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java
new file mode 100644
index 0000000..de3aa42
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java
@@ -0,0 +1,99 @@
+package com.pollex.pam.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+public class SendSMSRequest {
+
+    private String pKey;
+    private String sourceCode;
+    private String sender;
+    private String sendTime;
+    private String subject;
+    private String activityId;
+    private String mmsPath;
+    private String msgTypeSet;
+    private List<SMSDetail> detail;
+
+    @JsonProperty("p_key")
+    public String getpKey() {
+        return pKey;
+    }
+
+    public void setpKey(String pKey) {
+        this.pKey = pKey;
+    }
+
+    @JsonProperty("source_code")
+    public String getSourceCode() {
+        return sourceCode;
+    }
+
+    public void setSourceCode(String sourceCode) {
+        this.sourceCode = sourceCode;
+    }
+
+    @JsonProperty("sender")
+    public String getSender() {
+        return sender;
+    }
+
+    public void setSender(String sender) {
+        this.sender = sender;
+    }
+
+    @JsonProperty("send_time")
+    public String getSendTime() {
+        return sendTime;
+    }
+
+    public void setSendTime(String sendTime) {
+        this.sendTime = sendTime;
+    }
+
+    @JsonProperty("subject")
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    @JsonProperty("activity_id")
+    public String getActivityId() {
+        return activityId;
+    }
+
+    public void setActivityId(String activityId) {
+        this.activityId = activityId;
+    }
+
+    @JsonProperty("mms_path")
+    public String getMmsPath() {
+        return mmsPath;
+    }
+
+    public void setMmsPath(String mmsPath) {
+        this.mmsPath = mmsPath;
+    }
+
+    @JsonProperty("msg_type_set")
+    public String getMsgTypeSet() {
+        return msgTypeSet;
+    }
+
+    public void setMsgTypeSet(String msgTypeSet) {
+        this.msgTypeSet = msgTypeSet;
+    }
+
+    @JsonProperty("detail")
+    public List<SMSDetail> getDetail() {
+        return detail;
+    }
+
+    public void setDetail(List<SMSDetail> detail) {
+        this.detail = detail;
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java b/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java
new file mode 100644
index 0000000..9073766
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java
@@ -0,0 +1,60 @@
+package com.pollex.pam.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class SendSMSResponse {
+
+    @JsonProperty("p_key")
+    private String pKey;
+
+    @JsonProperty("return_code")
+    private String returnCode;
+
+    @JsonProperty("msg_batchNo")
+    private String msgBatchNo;
+
+    @JsonProperty("error_msg")
+    private String errorMsg;
+
+    public String getpKey() {
+        return pKey;
+    }
+
+    public void setpKey(String pKey) {
+        this.pKey = pKey;
+    }
+
+    public String getReturnCode() {
+        return returnCode;
+    }
+
+    public void setReturnCode(String returnCode) {
+        this.returnCode = returnCode;
+    }
+
+    public String getMsgBatchNo() {
+        return msgBatchNo;
+    }
+
+    public void setMsgBatchNo(String msgBatchNo) {
+        this.msgBatchNo = msgBatchNo;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    @Override
+    public String toString() {
+        return "SendSMSResponse{" +
+            "pKey='" + pKey + '\'' +
+            ", returnCode='" + returnCode + '\'' +
+            ", msgBatchNo='" + msgBatchNo + '\'' +
+            ", errorMsg='" + errorMsg + '\'' +
+            '}';
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java b/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
index a62c19d..7a7afcf 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
@@ -7,7 +7,7 @@
 public class StrictQueryConsultantParam {
 
     private GenderEnum gender;
-    private Number avgScore;
+    private Float avgScore;
     private String status;
     private String area;
     private List<String> requirements;
@@ -24,11 +24,11 @@
         this.gender = gender;
     }
 
-    public Number getAvgScore() {
+    public Float getAvgScore() {
         return avgScore;
     }
 
-    public void setAvgScore(Number avgScore) {
+    public void setAvgScore(Float avgScore) {
         this.avgScore = avgScore;
     }
 
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java
index c56b19b..4389195 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java
@@ -3,19 +3,49 @@
 import static java.util.stream.Collectors.toList;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import com.pollex.pam.domain.AppointmentClosedInfo;
 import com.pollex.pam.domain.AppointmentCustomerView;
+import com.pollex.pam.domain.AppointmentNoticeLog;
+import com.pollex.pam.repository.AppointmentClosedInfoRepository;
+import com.pollex.pam.service.AppointmentClosedInfoService;
+import com.pollex.pam.service.AppointmentNoticeLogService;
+import com.pollex.pam.service.AppointmentService;
 import com.pollex.pam.service.dto.AppointmentCustomerViewDTO;
 
 @Service
 public class AppointmentCustomerViewMapper {
-
+	
+	@Autowired
+	AppointmentService appointmentService;
+	
+	@Autowired
+	AppointmentNoticeLogService appointmentNoticeLogService;
+	
+	@Autowired
+	AppointmentClosedInfoRepository appointmentClosedInfoRepository;
+	
+	@Transactional
 	public AppointmentCustomerViewDTO toAppointmentCustomerViewDTO(AppointmentCustomerView source) {
 		AppointmentCustomerViewDTO target = new AppointmentCustomerViewDTO();
 		BeanUtils.copyProperties(source, target);
+		target.setAppointmentMemoList(source.getAppointmentMemoList());
+		appointmentService.setInterviewRecordDTO(target);
+		List<AppointmentNoticeLog> noticeLogs = appointmentNoticeLogService.findByAppointmentId(source.getId());
+		target.setAppointmentNoticeLogs(noticeLogs);
+		Optional<AppointmentClosedInfo> appointmentClosedInfoOP = appointmentClosedInfoRepository
+				.findByAppointmentId(source.getId());
+		if(appointmentClosedInfoOP.isPresent()) {
+			target.setAppointmentClosedInfo(appointmentClosedInfoOP.get());
+		}
+		appointmentService.setSatisfactionScore(target, source.getId());
+		
 		return target;
 	}
 
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java
index 5df4740..5526738 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java
@@ -4,6 +4,7 @@
 
 import java.util.List;
 
+import com.pollex.pam.enums.SatisfactionTypeEnum;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -13,7 +14,6 @@
 import com.pollex.pam.enums.SatisfactionStatusEnum;
 import com.pollex.pam.repository.AppointmentRepository;
 import com.pollex.pam.service.dto.AppointmentDTO;
-import com.pollex.pam.service.dto.SatisfactionCustomerCreateDTO;
 
 @Service
 public class AppointmentMapper {
@@ -32,17 +32,19 @@
 				.map(s -> toAppointmentDTO(s)).collect(toList());
 	}
 
-	public Satisfaction toSatisfaction(Appointment appointment) {
+	public Satisfaction toAppointmentSatisfaction(Appointment appointment) {
 		Satisfaction target = new Satisfaction();
         target.setAppointmentId(appointment.getId());
 		target.setAgentNo(appointment.getAgentNo());
 		target.setCustomerId(appointment.getCustomerId());
+        target.setType(SatisfactionTypeEnum.APPOINTMENT);
+		target.setStatus(SatisfactionStatusEnum.UNFILLED);
 		return target;
 	}
 
-	public Satisfaction toSatisfaction(Long appointmentId) {
+	public Satisfaction toAppointmentSatisfaction(Long appointmentId) {
 		Appointment appointment = appointmentRepository.findById(appointmentId).get();
-		return toSatisfaction(appointment);
+		return toAppointmentSatisfaction(appointment);
 	}
 
 
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java
new file mode 100644
index 0000000..aaae2e9
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java
@@ -0,0 +1,23 @@
+package com.pollex.pam.service.mapper;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import com.pollex.pam.domain.AppointmentMemo;
+import com.pollex.pam.service.dto.AppointmentMemoCreateDTO;
+import com.pollex.pam.service.dto.AppointmentMemoUpdateDTO;
+
+@Service
+public class AppointmentMemoMapper {
+	
+	public AppointmentMemo toAppointmentMemo(AppointmentMemoCreateDTO source) {
+		AppointmentMemo target = new AppointmentMemo();
+		BeanUtils.copyProperties(source, target);
+		return target;
+	}
+
+	public AppointmentMemo copyToAppointmentMemo(AppointmentMemoUpdateDTO source, AppointmentMemo target) {
+		BeanUtils.copyProperties(source, target);
+		return target;
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java
new file mode 100644
index 0000000..69a8cb1
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java
@@ -0,0 +1,21 @@
+package com.pollex.pam.service.mapper;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import com.pollex.pam.domain.AppointmentNoticeLog;
+import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
+
+@Service
+public class AppointmentNoticeSendMapper {
+	
+	public AppointmentNoticeLog toAppointmentNoticeLog(AppointmentNoticeSendDTO source) {
+		AppointmentNoticeLog target = new AppointmentNoticeLog();
+		BeanUtils.copyProperties(source, target);
+//		target.setAppointmentId(source.getAppointmentId());
+		target.setContent(source.getMessage());
+//		target.setEmail(source.getEmail());
+//		target.setPhone(source.getPhone());
+		return target;
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java
new file mode 100644
index 0000000..48987fc
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java
@@ -0,0 +1,29 @@
+package com.pollex.pam.service.mapper;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.pollex.pam.config.ApplicationProperties;
+import com.pollex.pam.domain.Consultant;
+import com.pollex.pam.service.dto.ConsultantEditDTO;
+import com.pollex.pam.service.util.FileUtil;
+import com.pollex.pam.service.util.StringUtils;
+
+@Service
+public class ConsultantDTOMapper {
+
+	@Autowired
+    ApplicationProperties applicationProperty;
+
+	public void copyToConsultant(ConsultantEditDTO source, Consultant target) {
+		BeanUtils.copyProperties(source, target);
+		target.setPhotoPath(FileUtil.toPath(source.getPhotoFileName(), applicationProperty.getFileFolderPath()));
+		String expertise = StringUtils.convertToString(source.getExpertise(), ",");
+		target.setExpertise(expertise);
+		target.setAward(source.getAwards());
+		target.setExperience(source.getExperiences());
+	}
+
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
index fd0ac35..a04507a 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
@@ -5,6 +5,7 @@
 import com.pollex.pam.service.dto.ConsultantDetailDTO;
 import com.pollex.pam.service.dto.CustomerFavoriteConsultantDTO;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -41,15 +42,17 @@
         consultantDTO.setImg(source.getPhotoPath());
         consultantDTO.setRole(source.getRole());
 
+        consultantDTO.setSuitability(0);
         consultantDTO.setContactStatus(null);
         consultantDTO.setUpdateTime(null);
-        consultantDTO.setLatestAppointmentId(null);
+//        consultantDTO.setLatestAppointmentId(null);
 
         return consultantDTO;
     }
 
     public ConsultantDetailDTO toDetailDto(Consultant source) {
         ConsultantDetailDTO consultantDetailDTO = new ConsultantDetailDTO();
+        BeanUtils.copyProperties(source, consultantDetailDTO);
         consultantDetailDTO.setName(source.getName());
         consultantDetailDTO.setAgentNo(source.getAgentNo());
         consultantDetailDTO.setRole(source.getRole());
@@ -63,10 +66,9 @@
         consultantDetailDTO.setAwards(source.getAward());
         consultantDetailDTO.setImg(source.getPhotoPath());
         consultantDetailDTO.setExpertise(splitStringWithChar(source.getExpertise()));
-        consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience()));
+        consultantDetailDTO.setExperiences(source.getExperience());
 
-        // todo 瘙箏����漲
-        consultantDetailDTO.setSuitability(50);
+        // todo ��蝣箄�垣閰W漲銵函
         consultantDetailDTO.setEvaluation(50);
 
         return consultantDetailDTO;
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java
new file mode 100644
index 0000000..d611c2f
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java
@@ -0,0 +1,37 @@
+package com.pollex.pam.service.mapper;
+
+import static java.util.stream.Collectors.toList;
+
+import java.util.List;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import com.pollex.pam.domain.InterviewRecord;
+import com.pollex.pam.service.dto.InterviewRecordDTO;
+
+@Service
+public class InterviewRecordMapper {
+
+	public InterviewRecord toInterviewRecord(InterviewRecordDTO source) {
+		InterviewRecord target = new InterviewRecord();
+		BeanUtils.copyProperties(source, target);
+		return target;
+	}
+
+	public void copyToInterviewRecord(InterviewRecordDTO source, InterviewRecord target) {
+		BeanUtils.copyProperties(source, target);
+	}
+
+	public List<InterviewRecordDTO> toInterviewRecordDTO(List<InterviewRecord> records) {
+		return records.stream()
+				.map(s-> toInterviewRecordDTO(s))
+				.collect(toList());
+	}
+	
+	public InterviewRecordDTO toInterviewRecordDTO(InterviewRecord source) {
+		InterviewRecordDTO target = new InterviewRecordDTO();
+		BeanUtils.copyProperties(source, target);
+		return target;
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java
index a16cae7..fe1eaa2 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java
@@ -5,22 +5,22 @@
 
 import com.pollex.pam.domain.Satisfaction;
 import com.pollex.pam.enums.SatisfactionStatusEnum;
-import com.pollex.pam.service.dto.SatisfactionCustomerCreateDTO;
+// import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
 
 @Service
 public class SatisfactionDTOMapper {
-	
+
 	@Autowired
 	AppointmentMapper appointmentMapper;
-	
-	public Satisfaction toSatisfaction(SatisfactionCustomerCreateDTO source) {
-		Satisfaction satisfaction = appointmentMapper.toSatisfaction(source.getAppointmentId());
-		satisfaction.setScore(source.getScore());
-		if(satisfaction.getScore()!=null) {
-			satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
-		}else {
-			satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED);
-		}
-		return satisfaction;
-	}
+
+//	public Satisfaction toSatisfaction(SatisfactionCustomerScoreDTO source) {
+//		Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(source.getAppointmentId());
+//		satisfaction.setScore(source.getScore());
+//		if(satisfaction.getScore()!=null) {
+//			satisfaction.setStatus(SatisfactionStatusEnum.FILLED);
+//		}else {
+//			satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED);
+//		}
+//		return satisfaction;
+//	}
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java
index 97669a7..8a757a4 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java
@@ -3,6 +3,7 @@
 import static java.util.stream.Collectors.toList;
 
 import java.util.List;
+import java.util.Objects;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,19 +18,19 @@
 
 @Service
 public class SatisfactionMapper {
-	
+
 	@Autowired
 	ConsultantRepository consultantRepository;
-	
+
 	@Autowired
 	CustomerRepository customerRepository;
-	
+
 	public SatisfactionDTO toDTO(Satisfaction source) {
 		SatisfactionDTO target = new SatisfactionDTO();
 		BeanUtils.copyProperties(source, target);
 		target.setScore(source.getScore());
-		Consultant consultant= consultantRepository.findOneByAgentNo(source.getAgentNo()).get();
-		target.setAgentName(consultant.getName());
+		Consultant consultant= consultantRepository.findOneByAgentNo(source.getAgentNo()).orElse(null);
+		target.setAgentName(Objects.isNull(consultant) ? null : consultant.getName());
 		Customer customer = customerRepository.findById(source.getCustomerId()).get();
 		target.setCustomerName(customer.getName());
 		return target;
diff --git a/pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java b/pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java
new file mode 100644
index 0000000..dcfdff7
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java
@@ -0,0 +1,69 @@
+package com.pollex.pam.service.util;
+
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Base64;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FileUtil {
+
+	private static final Logger log = LoggerFactory.getLogger(FileUtil.class);
+
+	public static File base64ToFile(String base64, String fileName, String folderPath) {
+		if(base64 == null){
+            return new File(folderPath);
+        }
+        File  dir=new File(folderPath);
+        dir.setWritable(true);
+        dir.setReadable(true);
+        if (!dir.exists() && !dir.isDirectory()) {
+                dir.mkdirs();
+        }
+		return base64ToFile(base64, toPath(fileName, folderPath));
+	}
+	
+	public static File base64ToFile(String base64, String path) {
+		if(base64 == null){
+            return new File(path);
+        }
+
+		BufferedOutputStream bos = null;
+
+        try {
+            byte[] bytes = Base64.getDecoder().decode(base64);
+            File file=new File(path);
+            file.setWritable(true);
+            file.setReadable(true);
+            bos = new BufferedOutputStream(new FileOutputStream(file));
+            bos.write(bytes);
+
+
+            return file;
+        } catch (Exception e) {
+        	log.error("upload file base64 to file error",e);
+        } finally {
+            if (bos != null) {
+                try {
+                    bos.close();
+                } catch (IOException e) {
+                	log.error("upload file base64 to file error",e);
+                }
+            }
+        }
+
+        return null;
+	}
+
+	public static boolean isFileExisted(String fileName, String folderPath) {
+		return new File(toPath(fileName, folderPath)).isFile();
+	}
+	
+	public static String toPath(String fileName, String folderPath) {
+		return folderPath + "/" + fileName;
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java b/pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java
new file mode 100644
index 0000000..48cc43b
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java
@@ -0,0 +1,114 @@
+package com.pollex.pam.service.util;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContexts;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.*;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+import javax.net.ssl.SSLContext;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.Map;
+import java.util.Set;
+
+public final class HttpRequestUtil {
+    private static final Logger log = LoggerFactory.getLogger(HttpRequestUtil.class);
+
+    private HttpRequestUtil() {}
+
+    public static <T> ResponseEntity<T> getWithJson(String url, Class<T> responseType)
+        throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException
+    {
+        return getWithJson(url, responseType, null);
+    }
+
+    public static <T> ResponseEntity<T> getWithJson(String url, Class<T> responseType, Map<String, String> addedHeaders)
+        throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException
+    {
+        RestTemplate restTemplate = getTrustAllRestTemplate();
+        HttpHeaders headers = new HttpHeaders();
+        setHeaders(headers, addedHeaders);
+
+        HttpEntity<String> httpEntity = new HttpEntity<>(headers);
+
+        log.debug("HttpRequestUtil get url: {}", url);
+        log.debug("httpEntity = {}", httpEntity);
+        return restTemplate.exchange(url, HttpMethod.GET, httpEntity, responseType);
+    }
+
+    public static ResponseEntity<String> postWithJson(String url, Object jsonData, Map<String, String> headers)
+        throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException
+    {
+        return postWithJson(url, jsonData, String.class, headers);
+    }
+
+    public static ResponseEntity<String> postWithJson(String url, Object jsonData)
+        throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException
+    {
+        return postWithJson(url, jsonData, String.class, null);
+    }
+
+    public static <T> ResponseEntity<T> postWithJson(String url, Object jsonData, Class<T> responseType)
+        throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException
+    {
+        return postWithJson(url, jsonData, responseType, null);
+    }
+
+    public static <T> ResponseEntity<T> postWithJson(String url, Object jsonData, Class<T> responseType, Map<String, String> addedHeaders)
+        throws JsonProcessingException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
+
+        String parameters = new ObjectMapper().writeValueAsString(jsonData);
+        // ���摨阡��脰��log����
+        if(parameters.length() < 1000){
+            log.debug("parameters : {}",parameters);
+        }
+
+        RestTemplate restTemplate = getTrustAllRestTemplate();
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        setHeaders(headers, addedHeaders);
+
+        HttpEntity<String> entity = new HttpEntity<>(parameters, headers);
+
+        log.debug("rest post with json, url = {}", url);
+        return restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
+    }
+
+    private static void setHeaders(HttpHeaders headers, Map<String, String> addedHeaders) {
+        if(addedHeaders != null && addedHeaders.size() > 0) {
+            Set<String> keys = addedHeaders.keySet();
+            for (String key : keys) {
+                String headerValue = addedHeaders.get(key);
+                headers.set(key, headerValue);
+                log.info("http cust header key: {}", key);
+                log.info("http cust header headerValue: {}", headerValue);
+            }
+        }
+    }
+
+    private static RestTemplate getTrustAllRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
+        SSLContext sslContext = SSLContexts.custom()
+            .loadTrustMaterial(null, (X509Certificate[] x509Certs, String s) -> true)
+            .build();
+        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
+        CloseableHttpClient httpClient = HttpClients.custom()
+            .setSSLSocketFactory(csf)
+            .build();
+        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
+        requestFactory.setHttpClient(httpClient);
+        requestFactory.setConnectTimeout(300000);
+        requestFactory.setReadTimeout(300000);
+        return new RestTemplate(requestFactory);
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java b/pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java
new file mode 100644
index 0000000..fd2350a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java
@@ -0,0 +1,18 @@
+package com.pollex.pam.service.util;
+
+import java.util.List;
+
+public class StringUtils {
+    
+    public static String convertToString(List<String> source
+    		, String separator) {
+        StringBuilder result = new StringBuilder();
+        for (String sourceString : source) {
+        	result.append(sourceString+separator);
+        }
+        result.deleteCharAt(result.length()-1);
+        return result.toString();
+    }
+
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java
new file mode 100644
index 0000000..c7a6afa
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java
@@ -0,0 +1,45 @@
+package com.pollex.pam.web.rest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.pollex.pam.domain.AppointmentMemo;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.AppointmentMemoService;
+import com.pollex.pam.service.dto.AppointmentMemoCreateDTO;
+import com.pollex.pam.service.dto.AppointmentMemoUpdateDTO;
+
+@RestController
+@RequestMapping("/api/appointment/memo")
+public class AppointmentMemoResource {
+	
+	@Autowired
+	AppointmentMemoService appointmentMemoService;
+	
+	@PostMapping("/create")
+	public ResponseEntity<AppointmentMemo> createMemo(@RequestBody AppointmentMemoCreateDTO memoDTO) {
+		appointmentMemoService.checkPermission(memoDTO.getAppointmentId());
+		AppointmentMemo memo = appointmentMemoService.create(memoDTO);
+		return new ResponseEntity<>(memo, HttpStatus.OK);
+	}
+	
+	@PostMapping("/update")
+	public ResponseEntity<AppointmentMemo> updateMemo(@RequestBody AppointmentMemoUpdateDTO memoDTO) {
+		AppointmentMemo memo = appointmentMemoService.update(memoDTO);
+		return new ResponseEntity<>(memo, HttpStatus.OK);
+	}
+	
+	@DeleteMapping("/{memoId}")
+	public void deleteMemo(@PathVariable Long memoId) {
+		appointmentMemoService.delete(memoId);
+	}
+	
+	
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java
index 1704d11..6a8e6b7 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java
@@ -1,14 +1,20 @@
 package com.pollex.pam.web.rest;
 
-import com.pollex.pam.service.dto.AppointmentUpdateDTO;
+import com.pollex.pam.appointment.process.AppointmentProcess;
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.SendMsgService;
+import com.pollex.pam.service.dto.*;
+
+import com.pollex.pam.service.mapper.AppointmentMapper;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import com.pollex.pam.service.AppointmentService;
+import com.pollex.pam.service.PersonalNotificationService;
 import com.pollex.pam.service.SatisfactionService;
-import com.pollex.pam.service.dto.AppointmentCreateDTO;
-import com.pollex.pam.service.dto.AppointmentCustomerViewDTO;
 
 @RestController
 @RequestMapping("/api/appointment")
@@ -17,12 +23,25 @@
 	@Autowired
 	AppointmentService appointmentService;
 
+    @Autowired
+    AppointmentMapper appointmentMapper;
+
 	@Autowired
 	SatisfactionService satisfactionService;
 
+    @Autowired
+    SendMsgService sendMsgService;
+
+    @Autowired
+    AppointmentProcess abstractAppointmentProcess;
+
+    @Autowired
+    PersonalNotificationService personalNotificationService;
+
     @PutMapping("")
-    public ResponseEntity<Void> updateAppointment(@RequestBody AppointmentUpdateDTO appointment) {
-        appointmentService.updateAppointment(appointment);
+    public ResponseEntity<Void> updateAppointment(@RequestBody AppointmentUpdateDTO dto) {
+    	Appointment appointment = appointmentService.updateAppointment(dto);
+        personalNotificationService.createUpdateAppointmentToConsultant(appointment);
         return ResponseEntity.noContent().build();
     }
 
@@ -33,14 +52,19 @@
     }
 
 	@PostMapping("/customer/create")
-	public void clientCreateAppointment(@RequestBody AppointmentCreateDTO appointmentCreateDTO) {
-		appointmentService.customerCreateAppointment(appointmentCreateDTO);
-	}
+	public AppointmentDTO clientCreateAppointment(@RequestBody AppointmentCreateDTO appointmentCreateDTO) {
+        Appointment appointment = appointmentService.customerCreateAppointment(appointmentCreateDTO);
+        appointmentService.sendAppointmentNotify(appointment);
+        satisfactionService.createUnfilledSystemSatisfaction(appointment);
+
+        return appointmentMapper.toAppointmentDTO(appointment);
+    }
 
 	@PostMapping("/markAsContacted/{appointmentId}")
-	public void markAsContacted(@PathVariable Long appointmentId) {
+	public AppointmentCustomerViewDTO markAsContacted(@PathVariable Long appointmentId) {
 		appointmentService.markAsContacted(appointmentId);
-	}
+	    return appointmentService.getAppointmentDetail(appointmentId);
+    }
 
 	@GetMapping("/getDetail/{appointmentId}")
 	public AppointmentCustomerViewDTO getAppointmentDetail(@PathVariable Long appointmentId) {
@@ -52,4 +76,42 @@
         appointmentService.recordConsultantReadTime(appointmentId);
         return ResponseEntity.noContent().build();
     }
+
+	@PostMapping("/close")
+    public ResponseEntity<Void> closeAppointment(@RequestBody AppointmentCloseDTO closeDTO) {
+		appointmentService.closeAppointment(closeDTO);
+        return ResponseEntity.noContent().build();
+    }
+
+    @GetMapping("/customer/expiring/newest")
+    public ResponseEntity<AppointmentCustomerViewDTO> getNewestExpiringAppointment() {
+        Long customerId = SecurityUtils.getCustomerDBId();
+        AppointmentCustomerViewDTO customerNewestExpiringAppointment = appointmentService.getCustomerNewestExpiringAppointment(customerId);
+
+        return new ResponseEntity<>(customerNewestExpiringAppointment, HttpStatus.OK);
+    }
+
+    @GetMapping("/consultant/pending/sum")
+    public ResponseEntity<Long> getConsultantPendingAppointmentSum() {
+        String agentNo = SecurityUtils.getAgentNo();
+        return new ResponseEntity<>(appointmentService.getConsultantPendingAppointmentSum(agentNo), HttpStatus.OK);
+    }
+
+//	@PostMapping("/close/info/edit")
+//    public ResponseEntity<Void> editAppointmentClosedInfo(@RequestBody AppointmentCloseDTO closeDTO) {
+//
+//		if(closeDTO.getContactStatus() == ContactStatusEnum.DONE) {
+//			DoneProcessDTO dto = new DoneProcessDTO();
+//			BeanUtils.copyProperties(closeDTO, dto);
+//			abstractAppointmentProcess.editClosedInfo(dto);
+//		}else if(closeDTO.getContactStatus() == ContactStatusEnum.CLOSED){
+//			ClosedProcessDTO dto = new ClosedProcessDTO();
+//			BeanUtils.copyProperties(closeDTO, dto);
+//			abstractAppointmentProcess.editClosedInfo(dto);
+//		}else {
+//			return ResponseEntity.notFound().build();
+//		}
+//
+//        return ResponseEntity.noContent().build();
+//    }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java
index 19f5000..3af2eaf 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java
@@ -1,5 +1,9 @@
 package com.pollex.pam.web.rest;
 
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.Consultant;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.AppointmentService;
 import com.pollex.pam.service.ConsultantService;
 import com.pollex.pam.service.dto.*;
 import org.apache.commons.compress.utils.IOUtils;
@@ -11,9 +15,12 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 @RestController
@@ -22,11 +29,20 @@
 
     @Autowired
     ConsultantService consultantService;
+    
+    @Autowired
+    AppointmentService appointmentService;
 
     @GetMapping("/favorite")
     public ResponseEntity<List<CustomerFavoriteConsultantDTO>> getMyConsultantList() {
         List<CustomerFavoriteConsultantDTO> myConsultants = consultantService.getMyConsultantList();
         return new ResponseEntity<>(myConsultants, HttpStatus.OK);
+    }
+
+    @PostMapping("/favorite/view")
+    public ResponseEntity<Void> recordMyConsultantListView() {
+        consultantService.recordMyConsultantListView();
+        return ResponseEntity.noContent().build();
     }
 
     @GetMapping("/recommend")
@@ -71,15 +87,23 @@
     	return consultantService.getMyAppointment();
     }
 
-    @GetMapping(value = "/avatar/{fileName}", produces = MediaType.IMAGE_JPEG_VALUE)
-    public ResponseEntity<byte[]> getAvatarImage(@PathVariable String fileName) throws IOException {
-        try {
-            Resource resource = new ClassPathResource("static/consultant/" + fileName);
-            InputStream in = resource.getInputStream();
-            return new ResponseEntity<>(IOUtils.toByteArray(in), HttpStatus.OK);
-        } catch (FileNotFoundException e) {
-            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
-        }
+    @GetMapping(value = "/avatar/{agentNo}", produces = MediaType.IMAGE_JPEG_VALUE)
+    public ResponseEntity<byte[]> getAvatarImage(@PathVariable String agentNo) throws IOException {
+//        try {
+//            Resource resource = new ClassPathResource("static/consultant/" + fileName);
+//            InputStream in = resource.getInputStream();
+//            return new ResponseEntity<>(IOUtils.toByteArray(in), HttpStatus.OK);
+//        } catch (FileNotFoundException e) {
+//            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+//        }
+    	InputStream in = consultantService.getAvatarImage(agentNo);
+    	if(in!=null) {
+    		return new ResponseEntity<>(IOUtils.toByteArray(in), HttpStatus.OK);
+    	}else {
+    		return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+    	}
+    	
+    	
     }
 
     @PostMapping("/record/allAppointmentsView")
@@ -87,4 +111,23 @@
         consultantService.recordAllAppointmentsView();
         return ResponseEntity.noContent().build();
     }
+    
+    @PostMapping("/edit")
+    public ResponseEntity<Consultant> editConsultant(@RequestBody ConsultantEditDTO editDTO) {
+    	if(!editDTO.getAgentNo().equals(SecurityUtils.getAgentNo())) {
+    		throw new IllegalAccessError();
+    	}
+    	Consultant editResult = consultantService.editConsultant(editDTO);
+        return new ResponseEntity<>(editResult, HttpStatus.OK);
+    }
+    
+    @PostMapping("/sendSatisfactionToClient/{appointmentId}")
+    public ResponseEntity<Void> sendSatisfactionToClient(@PathVariable Long appointmentId) {
+    	Appointment appointment = appointmentService.findById(appointmentId);
+    	if(!appointment.getAgentNo().equals(SecurityUtils.getAgentNo())) {
+    		throw new IllegalAccessError();
+    	}
+    	consultantService.sendSatisfactionToClient(appointment);
+    	return ResponseEntity.noContent().build();
+    }
 }
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java
new file mode 100644
index 0000000..730c020
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java
@@ -0,0 +1,36 @@
+package com.pollex.pam.web.rest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.pollex.pam.domain.InterviewRecord;
+import com.pollex.pam.service.InterviewRecordService;
+import com.pollex.pam.service.dto.InterviewRecordDTO;
+
+@RestController
+@RequestMapping("/api/interview_record")
+public class InterviewRecordResource {
+	
+	@Autowired
+	InterviewRecordService interviewRecordService;
+	
+	@PostMapping("/create")
+	public InterviewRecord create(@RequestBody InterviewRecordDTO dto) {
+		return interviewRecordService.create(dto);
+	}
+	
+	@PostMapping("/update")
+	public InterviewRecord update(@RequestBody InterviewRecordDTO dto) {
+		return interviewRecordService.update(dto);
+	}
+	
+	@DeleteMapping("/{interviewRecordId}")
+	public void delete(@PathVariable Long interviewRecordId) {
+		interviewRecordService.delete(interviewRecordId);
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java
new file mode 100644
index 0000000..f1bde12
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java
@@ -0,0 +1,35 @@
+package com.pollex.pam.web.rest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.domain.AppointmentNoticeLog;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.AppointmentService;
+import com.pollex.pam.service.NoticeService;
+import com.pollex.pam.service.dto.AppointmentNoticeSendDTO;
+
+@RestController
+@RequestMapping("/api/notice")
+public class NoticeResource {
+	
+	@Autowired
+	NoticeService noticeService;
+	
+	@Autowired
+	AppointmentService appointmentService;
+	
+	@PostMapping("/send")
+	public void sendNotice(@RequestBody AppointmentNoticeSendDTO dto) {
+		Appointment appointment = appointmentService.findById(dto.getAppointmentId());
+		if(!appointment.getAgentNo().equals(SecurityUtils.getAgentNo())) {
+			throw new IllegalAccessError("The user do not have access permission");
+		}
+		noticeService.sendNotice(dto);
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java
new file mode 100644
index 0000000..ee805b5
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java
@@ -0,0 +1,55 @@
+package com.pollex.pam.web.rest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.pollex.pam.domain.Consultant;
+import com.pollex.pam.domain.PersonalNotification;
+import com.pollex.pam.enums.NotificationTypeEnum;
+import com.pollex.pam.enums.PersonalNotificationRoleEnum;
+import com.pollex.pam.repository.PersonalNotificationRepository;
+import com.pollex.pam.security.SecurityUtils;
+import com.pollex.pam.service.ConsultantService;
+import com.pollex.pam.service.PersonalNotificationService;
+
+@RestController
+@RequestMapping("/api/personal_notification")
+public class PersonalNotificationResource {
+	
+	@Autowired
+	PersonalNotificationService personalNotificationService;
+	
+	@Autowired
+	PersonalNotificationRepository personalNotificationRepository;
+	
+	@Autowired
+	ConsultantService consultantService;
+	
+	@GetMapping("/getMyPersonalNotification")
+	public ResponseEntity<List<PersonalNotification>> getMyPersonalNotification() {
+		List<PersonalNotification> personalNotificationList = new ArrayList<>();
+		if(StringUtils.hasText(SecurityUtils.getAgentNo())) {
+			Consultant consultant = consultantService.findByAgentNo(SecurityUtils.getAgentNo());
+			personalNotificationList = personalNotificationService.getMyPersonalNotification(consultant.getId(), PersonalNotificationRoleEnum.CONSULTANT);
+		}else if(SecurityUtils.getCustomerDBId()!=null){
+			personalNotificationList = personalNotificationService.getMyPersonalNotification(SecurityUtils.getCustomerDBId(), PersonalNotificationRoleEnum.CUSTOMER);
+		}
+		return new ResponseEntity<>(personalNotificationList, HttpStatus.OK);
+	}
+	
+	@PostMapping("/readAllMyNotification")
+	public void readAll() {
+		personalNotificationService.readAllMyNotification();
+	}
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java
index e6fa885..92baf43 100644
--- a/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java
@@ -2,44 +2,47 @@
 
 import java.util.List;
 
+import com.pollex.pam.enums.SatisfactionTypeEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.pollex.pam.domain.Appointment;
 import com.pollex.pam.domain.Satisfaction;
 import com.pollex.pam.security.SecurityUtils;
 import com.pollex.pam.service.SatisfactionService;
-import com.pollex.pam.service.dto.SatisfactionCustomerCreateDTO;
+import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO;
 import com.pollex.pam.service.dto.SatisfactionDTO;
-import com.pollex.pam.service.dto.SatisfactionUpdateDTO;
 
 @RestController
 @RequestMapping("/api/satisfaction")
 public class SatisfactionResource {
-	
+
 	private final Logger log = LoggerFactory.getLogger(SatisfactionResource.class);
 
-	
+
 	@Autowired
 	SatisfactionService satisfactionService;
-	
-	@PostMapping("/create")
-	public Satisfaction createSatisfaction(@RequestBody SatisfactionCustomerCreateDTO createDTO) {
-		return satisfactionService.createSatisfaction(createDTO);
+
+	@PostMapping("/score")
+	public Satisfaction scorefaction(@RequestBody SatisfactionCustomerScoreDTO scoreDTO) {
+		return satisfactionService.scorefaction(scoreDTO);
 	}
-	
+
+	@PostMapping("/score/all")
+	public List<Satisfaction> scoreAllfaction(@RequestBody List<SatisfactionCustomerScoreDTO> scoreDTO) {
+		return satisfactionService.scoreAllfaction(scoreDTO);
+	}
+
 	@GetMapping("/getMySatisfaction")
 	public List<SatisfactionDTO> getMySatisfaction(){
 		if(StringUtils.hasText(SecurityUtils.getAgentNo())) {
-			return satisfactionService.getByAgentNo(SecurityUtils.getAgentNo());
+			return satisfactionService.getByAgentNoAndType(SecurityUtils.getAgentNo(), SatisfactionTypeEnum.APPOINTMENT);
 		}else if(SecurityUtils.getCustomerDBId()!=null){
 			return satisfactionService.getByCustomerId(SecurityUtils.getCustomerDBId());
 		}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java
new file mode 100644
index 0000000..8920b48
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java
@@ -0,0 +1,60 @@
+package com.pollex.pam.web.rest;
+
+import com.pollex.pam.service.AppointmentService;
+import com.pollex.pam.service.SendMsgService;
+import com.pollex.pam.service.dto.SendSMSResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.thymeleaf.context.Context;
+import org.thymeleaf.spring5.SpringTemplateEngine;
+
+@Deprecated
+@RestController
+@RequestMapping("/api/test/sendMsg")
+public class TestSendMsgResource {
+
+    private static final String NOTIFY_EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���";
+
+    @Autowired
+    SendMsgService sendMsgService;
+
+    @Autowired
+    AppointmentService appointmentService;
+
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
+
+    @GetMapping("/bySMS")
+    public ResponseEntity<SendSMSResponse> bySMS(@RequestParam String toMobile, @RequestParam String content) throws Exception {
+        return ResponseEntity.ok(sendMsgService.sendMsgBySMS(toMobile, content));
+    }
+
+//    @GetMapping("/byEmail")
+//    public ResponseEntity<String> byEmail(
+//        @RequestParam String from,
+//        @RequestParam String to,
+//        @RequestParam String subject,
+//        @RequestParam String content,
+//        @RequestParam boolean htmlFormat
+//    ) {
+//        return ResponseEntity.ok(sendMsgService.sendMsgByEmail(from, to, subject, content, htmlFormat));
+//    }
+//
+//    @GetMapping("/byHtmlEmail")
+//    public ResponseEntity<String> byHtmlEmail(
+//        @RequestParam String from,
+//        @RequestParam String to
+//    ) {
+//        return ResponseEntity.ok(testSendMsgByHtmlTemplateEmail(from, to));
+//    }
+
+//    private String testSendMsgByHtmlTemplateEmail(String from, String to) {
+//        Context context = new Context();
+//        context.setVariable("content", "閬芣��“��憟踝����蝑�靽���像������\n");
+//        context.setVariable("urlHint", appointmentService.getAppointmentDetailUrl(0L));
+//
+//        String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context);
+//        return sendMsgService.sendMsgByEmail(from, to, NOTIFY_EMAIL_SUBJECT, content, true);
+//    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java
new file mode 100644
index 0000000..e1e00c8
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java
@@ -0,0 +1,13 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Appointment close info not found")
+public class AppointmentClosedInfoNotFoundException extends RuntimeException{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java
new file mode 100644
index 0000000..b02f14e
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java
@@ -0,0 +1,13 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Appointment memo not found")
+public class AppointmentMemoNotFoundException extends RuntimeException{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java
new file mode 100644
index 0000000..c3a426d
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java
@@ -0,0 +1,14 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "InterviewRecord not found")
+public class InterviewRecordNotFoundException extends RuntimeException{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java
new file mode 100644
index 0000000..a2a02f0
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java
@@ -0,0 +1,8 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "not found any expiring appointment")
+public class NotFoundExpiringAppointmentException extends RuntimeException {
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java
new file mode 100644
index 0000000..013590a
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java
@@ -0,0 +1,13 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR, reason = "Satisfaction already exist")
+public class SatisfactionAlreadyExistException extends RuntimeException{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java
new file mode 100644
index 0000000..e504c34
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java
@@ -0,0 +1,13 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Satisfaction not found")
+public class SatisfactionNotFoundException extends RuntimeException{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java
new file mode 100644
index 0000000..b43324b
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java
@@ -0,0 +1,12 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR, reason = "send email failed")
+public class SendEmailFailException extends RuntimeException {
+    public SendEmailFailException() {}
+    public SendEmailFailException(String message) {
+        super(message);
+    }
+}
diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java
new file mode 100644
index 0000000..0b721ab
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java
@@ -0,0 +1,12 @@
+package com.pollex.pam.web.rest.errors;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR, reason = "send sms failed")
+public class SendSMSFailException extends RuntimeException{
+    public SendSMSFailException(){}
+    public SendSMSFailException(String message) {
+        super(message);
+    }
+}
diff --git a/pamapi/src/main/resources/config/application-dev.yml b/pamapi/src/main/resources/config/application-dev.yml
index f81590c..e612913 100644
--- a/pamapi/src/main/resources/config/application-dev.yml
+++ b/pamapi/src/main/resources/config/application-dev.yml
@@ -32,8 +32,8 @@
       indent-output: true
   datasource:
     type: com.zaxxer.hikari.HikariDataSource
-    url: jdbc:postgresql://dev.pollex.com.tw:5433/pam
-    #url: jdbc:postgresql://localhost:5432/omo?currentSchema=omo
+    url: jdbc:postgresql://dev.pollex.com.tw:5433/pam_p2
+    #url: jdbc:postgresql://localhost:5432/omo?currentSchema=public
     username: pamadmin
     password: pamadmin
     hikari:
@@ -45,10 +45,16 @@
     # Remove 'faker' if you do not want the sample data to be loaded automatically
     contexts: dev, faker
   mail:
-    host: localhost
-    port: 25
-    username:
-    password:
+    host: smtp.gmail.com
+    port: 587
+    username: pollex.testing@gmail.com
+    password: ilismmmhtscppxft
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true
   messages:
     cache-duration: PT1S # 1 second, see the ISO 8601 standard
   thymeleaf:
@@ -119,3 +125,18 @@
   e-service-login-url: https://eserviceuat.pcalife.com.tw/sso/chatbotValidate
   e-service-login-func: ValidateUsrLogin
   e-service-login-sys: epos
+  front-end-domain: http://localhost:3000
+  sms:
+    send-notify-msg: false
+    url: https://localhost:8081/testSMS
+    source-code: ePos
+    sender: POS
+    sms-type: '0017'
+    subject: '慦�像��'
+  email:
+    send-notify-msg: false
+    url: https://localhost:8081/testEmail
+    function-id: epos
+    sender-email: noreply@pcalife.com.tw
+    method: 'POLLEX_GMAIL'
+  file-folder-path: C://pam_file
diff --git a/pamapi/src/main/resources/config/application-pollex.yml b/pamapi/src/main/resources/config/application-pollex.yml
index 005cba7..e6a2ae8 100644
--- a/pamapi/src/main/resources/config/application-pollex.yml
+++ b/pamapi/src/main/resources/config/application-pollex.yml
@@ -43,10 +43,16 @@
     # Remove 'faker' if you do not want the sample data to be loaded automatically
     contexts: pollex, faker
   mail:
-    host: localhost
-    port: 25
-    username:
-    password:
+    host: smtp.gmail.com
+    port: 587
+    username: pollex.testing@gmail.com
+    password: ilismmmhtscppxft
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls:
+            enable: true
   messages:
     cache-duration: PT1S # 1 second, see the ISO 8601 standard
   thymeleaf:
@@ -117,3 +123,18 @@
   e-service-login-url: https://eserviceuat.pcalife.com.tw/sso/chatbotValidate
   e-service-login-func: ValidateUsrLogin
   e-service-login-sys: epos
+  front-end-domain: http://dev.pollex.com.tw:5566/pam
+  sms:
+    send-notify-msg: false
+    url: https://localhost:8081/testSMS
+    source-code: ePos
+    sender: POS
+    sms-type: '0017'
+    subject: '慦�像��'
+  email:
+    send-notify-msg: true
+    url: https://localhost:8081/testEmail
+    function-id: epos
+    sender-email: noreply@pcalife.com.tw
+    method: 'POLLEX_GMAIL'
+  file-folder-path: C://pam_file
diff --git a/pamapi/src/main/resources/config/application-prod.yml b/pamapi/src/main/resources/config/application-prod.yml
index bb30d3f..f4185f4 100644
--- a/pamapi/src/main/resources/config/application-prod.yml
+++ b/pamapi/src/main/resources/config/application-prod.yml
@@ -131,4 +131,26 @@
 # https://www.jhipster.tech/common-application-properties/
 # ===================================================================
 
-# application:
+application:
+  mock-login: false
+  otp-web-service-url: https://vtwlifeopensysuat.pru.intranet.asia/pcalife-otp/ws/otpWebService?wsdl
+  otp-web-service-password: es20!%Pass
+  otp-web-service-system-type: epos
+  e-service-login-url: https://eserviceuat.pcalife.com.tw/sso/chatbotValidate
+  e-service-login-func: ValidateUsrLogin
+  e-service-login-sys: epos
+  front-end-domain: https://vtwlifeopensysuat.pru.intranet.asia/pam
+  sms:
+    send-notify-msg: true
+    url: https://vtwlifeopensysuat.pru.intranet.asia/MesgQueueMgmnt/rest/smsSendMsgResource
+    source-code: ePos
+    sender: POS
+    sms-type: '0017'
+    subject: '慦�像��'
+  email:
+    send-notify-msg: true
+    url: https://vtwlifeopensysuat.pru.intranet.asia/tsgw/mq/mqSendMail
+    function-id: epos
+    sender-email: noreply@pcalife.com.tw
+    method: 'PAM_EMAIL_SERVICE'
+  file-folder-path: /sfs_omo/AgentPhoto/
diff --git a/pamapi/src/main/resources/config/application-sit.yml b/pamapi/src/main/resources/config/application-sit.yml
index f2bfc56..6f0da19 100644
--- a/pamapi/src/main/resources/config/application-sit.yml
+++ b/pamapi/src/main/resources/config/application-sit.yml
@@ -117,3 +117,18 @@
   e-service-login-url: https://eserviceuat.pcalife.com.tw/sso/chatbotValidate
   e-service-login-func: ValidateUsrLogin
   e-service-login-sys: epos
+  front-end-domain: https://vtwlifeopensyssit.pru.intranet.asia/pam
+  sms:
+    send-notify-msg: true
+    url: https://vtwlifeopensysuat.pru.intranet.asia/MesgQueueMgmnt/rest/smsSendMsgResource
+    source-code: ePos
+    sender: POS
+    sms-type: '0017'
+    subject: '慦�像��'
+  email:
+    send-notify-msg: true
+    url: https://vtwlifeopensysuat.pru.intranet.asia/tsgw/mq/mqSendMail
+    function-id: epos
+    sender-email: noreply@pcalife.com.tw
+    method: 'PAM_EMAIL_SERVICE'
+  file-folder-path: /sfs_omo/AgentPhoto/
diff --git a/pamapi/src/main/resources/config/application-uat.yml b/pamapi/src/main/resources/config/application-uat.yml
index 58ac9bb..e97aa15 100644
--- a/pamapi/src/main/resources/config/application-uat.yml
+++ b/pamapi/src/main/resources/config/application-uat.yml
@@ -117,3 +117,18 @@
   e-service-login-url: https://eserviceuat.pcalife.com.tw/sso/chatbotValidate
   e-service-login-func: ValidateUsrLogin
   e-service-login-sys: epos
+  front-end-domain: https://vtwlifeopensysuat.pru.intranet.asia/pam
+  sms:
+    send-notify-msg: true
+    url: https://vtwlifeopensysuat.pru.intranet.asia/MesgQueueMgmnt/rest/smsSendMsgResource
+    source-code: ePos
+    sender: POS
+    sms-type: '0017'
+    subject: '慦�像��'
+  email:
+    send-notify-msg: true
+    url: https://vtwlifeopensysuat.pru.intranet.asia/tsgw/mq/mqSendMail
+    function-id: epos
+    sender-email: noreply@pcalife.com.tw
+    method: 'PAM_EMAIL_SERVICE'
+  file-folder-path: /sfs_omo/AgentPhoto/
diff --git a/pamapi/src/main/resources/i18n/messages.properties b/pamapi/src/main/resources/i18n/messages.properties
index 9cbf924..8f0b474 100644
--- a/pamapi/src/main/resources/i18n/messages.properties
+++ b/pamapi/src/main/resources/i18n/messages.properties
@@ -19,3 +19,12 @@
 email.reset.greeting=Dear {0}
 email.reset.text1=For your pamapi account a password reset was requested, please click on the URL below to reset it:
 email.reset.text2=Regards,
+
+# satisfaction write email
+email.write.satisfaction.content={0}\u9867\u554F\u8ACB\u60A8\u586B\u5BEB\u4FDD\u8AA0\u5A92\u5408\u5E73\u53F0\u7684\u6EFF\u610F\u5EA6\u8A55\u6BD4{1}
+
+# appointment pending notify email
+email.write.appointment.pending.content=\u60a8\u6709{0}\u5247\u9810\u7d04\u55ae\u672a\u9032\u884c\u806f\u7e6b\uff0c\u8acb\u76e1\u901f\u8655\u7406
+
+# appointment expiring notify email
+email.write.appointment.expiring.content=\u5f88\u62b1\u6b49\uff01\u60a8\u9810\u7d04{0}\u9867\u554f\u6b63\u5fd9\u788c\u4e2d\uff0c\u8acb\u60a8\u53d6\u6d88\u9810\u7d04\u4e26\u6539\u9078\u5176\u4ed6\u9867\u554f\uff0c\u8acb\u9ede\u64ca\u7db2\u5740\uff1a{1}
diff --git a/pamapi/src/main/resources/i18n/messages_zh_TW.properties b/pamapi/src/main/resources/i18n/messages_zh_TW.properties
index f1bcd2b..f53d7c1 100644
--- a/pamapi/src/main/resources/i18n/messages_zh_TW.properties
+++ b/pamapi/src/main/resources/i18n/messages_zh_TW.properties
@@ -19,3 +19,13 @@
 email.reset.greeting=\u89AA\u611B\u7684 {0}
 email.reset.text1=\u60A8\u7684 pamapi \u5E33\u865F\u88AB\u8981\u6C42\u91CD\u65B0\u8A2D\u5B9A\u5BC6\u78BC\uFF0C\u8ACB\u9EDE\u4E0B\u5217\u7DB2\u5740\u8A2D\u5B9A:
 email.reset.text2=\u795D\u60A8\u4F7F\u7528\u6109\u5FEB\uFF0C
+
+# satisfaction write email
+email.write.satisfaction.content={0}\u9867\u554F\u8ACB\u60A8\u586B\u5BEB\u4FDD\u8AA0\u5A92\u5408\u5E73\u53F0\u7684\u6EFF\u610F\u5EA6\u8A55\u6BD4{1}
+
+# appointment pending notify email
+email.write.appointment.pending.content=\u60a8\u6709{0}\u5247\u9810\u7d04\u55ae\u672a\u9032\u884c\u806f\u7e6b\uff0c\u8acb\u76e1\u901f\u8655\u7406
+
+# appointment expiring notify email
+email.write.appointment.expiring.content=\u5f88\u62b1\u6b49\uff01\u60a8\u9810\u7d04{0}\u9867\u554f\u6b63\u5fd9\u788c\u4e2d\uff0c\u8acb\u60a8\u53d6\u6d88\u9810\u7d04\u4e26\u6539\u9078\u5176\u4ed6\u9867\u554f\uff0c\u8acb\u9ede\u64ca\u7db2\u5740\uff1a{1}
+
diff --git a/pamapi/src/main/resources/static/consultant/avatar1.jpg b/pamapi/src/main/resources/static/consultant/consultant_A183619275.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar1.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_A183619275.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar7.jpg b/pamapi/src/main/resources/static/consultant/consultant_AG0101234567.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar7.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_AG0101234567.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar5.jpg b/pamapi/src/main/resources/static/consultant/consultant_AG0109051204.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar5.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_AG0109051204.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar2.jpg b/pamapi/src/main/resources/static/consultant/consultant_AGAM11249699.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar2.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_AGAM11249699.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar6.jpg b/pamapi/src/main/resources/static/consultant/consultant_B282677963.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar6.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_B282677963.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar4.jpg b/pamapi/src/main/resources/static/consultant/consultant_D265260662.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar4.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_D265260662.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar9.jpg b/pamapi/src/main/resources/static/consultant/consultant_J149388015.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar9.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_J149388015.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar10.jpg b/pamapi/src/main/resources/static/consultant/consultant_R221444250.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar10.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_R221444250.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar8.jpg b/pamapi/src/main/resources/static/consultant/consultant_X147309614.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar8.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_X147309614.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/static/consultant/avatar3.jpg b/pamapi/src/main/resources/static/consultant/consultant_Z152717443.jpg
similarity index 100%
rename from pamapi/src/main/resources/static/consultant/avatar3.jpg
rename to pamapi/src/main/resources/static/consultant/consultant_Z152717443.jpg
Binary files differ
diff --git a/pamapi/src/main/resources/templates/mail/appointmentExpiringNotifyEmail.html b/pamapi/src/main/resources/templates/mail/appointmentExpiringNotifyEmail.html
new file mode 100644
index 0000000..bec1a0b
--- /dev/null
+++ b/pamapi/src/main/resources/templates/mail/appointmentExpiringNotifyEmail.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" lang="zh">
+<head>
+  <title>��������</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<p th:text="#{email.write.appointment.expiring.content(${consultantName}, ${notifyUrl})}">敺甇����xx憿批�迤敹�葉 , 隢�����蒂���隞“���</p>
+</body>
+</html>
+
diff --git a/pamapi/src/main/resources/templates/mail/appointmentNotifyEmail.html b/pamapi/src/main/resources/templates/mail/appointmentNotifyEmail.html
new file mode 100644
index 0000000..6a13d27
--- /dev/null
+++ b/pamapi/src/main/resources/templates/mail/appointmentNotifyEmail.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" lang="zh">
+  <head>
+    <title>�����</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+  <body>
+    <p th:text="${content}">閬芣��“��憟踝����蝑�靽�犖憯賢��像������</p>
+    <p>
+      隢��雯��嚗�
+      <a th:href="${urlHint}" th:text="${urlHint}">Url Position</a>
+      ����蒂摰�蝯∟赤隢�����
+    </p>
+  </body>
+</html>
diff --git a/pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html b/pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html
new file mode 100644
index 0000000..29902c7
--- /dev/null
+++ b/pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" lang="zh">
+<head>
+  <title>��������</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<p th:text="#{email.write.appointment.pending.content(${pendingAppointmentSum})}">���������脰�蝜恬������</p>
+</body>
+</html>
+
diff --git a/pamapi/src/main/resources/templates/mail/writeSatisfactionNotice.html b/pamapi/src/main/resources/templates/mail/writeSatisfactionNotice.html
new file mode 100644
index 0000000..b442fe7
--- /dev/null
+++ b/pamapi/src/main/resources/templates/mail/writeSatisfactionNotice.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" lang="zh">
+  <head>
+    <title>皛踵�漲憛怠神�</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+  <body>
+    <p th:text="#{email.write.satisfaction.content(${consultantName},${appointmentUrl})}">憿批��憛怠神靽���像���遛��漲閰��</p>
+  </body>
+</html>

--
Gitblit v1.8.0