{"version":3,"file":"AuthManagementSection.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/AuthManagementSection.tsx"],"sourcesContent":["import { Member } from '@stytch/core/public';\nimport React, { useState } from 'react';\nimport { useSWRConfig } from 'swr';\n\nimport { Button } from '../components/Button';\nimport { Checkbox } from '../components/Checkbox';\nimport { FlexBox } from '../components/FlexBox';\nimport { Modal, useModalState } from '../components/Modal';\nimport { SettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Typography } from '../components/Typography';\nimport { memberGetKey } from '../utils/memberGetKey';\nimport { useMutateWithToast } from '../utils/useMutateWithToast';\nimport { useRbac } from '../utils/useRbac';\nimport { useSelf } from '../utils/useSelf';\nimport { useStytchClient } from '../utils/useStytchClient';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\n\nexport const AuthManagementSection = ({ member }: { member: Member }) => {\n  const { isSelf } = useSelf();\n  const isMemberSelf = isSelf(member.member_id);\n\n  const { data: canDeleteMemberMfaPhonePerm } = useRbac('stytch.member', 'update.info.delete.mfa-phone');\n  const { data: canDeleteMemberMfaTotpPerm } = useRbac('stytch.member', 'update.info.delete.mfa-totp');\n  const { data: canDeleteMemberPasswordPerm } = useRbac('stytch.member', 'update.info.delete.password');\n  const { data: canRevokeMemberSessionsPerm } = useRbac('stytch.member', 'revoke-sessions');\n\n  const { data: canDeleteSelfMfaPhonePerm } = useRbac('stytch.self', 'update.info.delete.mfa-phone');\n  const { data: canDeleteSelfMfaTotpPerm } = useRbac('stytch.self', 'update.info.delete.mfa-totp');\n  const { data: canDeleteSelfPasswordPerm } = useRbac('stytch.self', 'update.info.delete.password');\n  const { data: canRevokeSelfSessionsPerm } = useRbac('stytch.self', 'revoke-sessions');\n\n  const canDeleteMfaPhonePerm = canDeleteMemberMfaPhonePerm || (canDeleteSelfMfaPhonePerm && isMemberSelf);\n  const canDeleteMfaTotpPerm = canDeleteMemberMfaTotpPerm || (canDeleteSelfMfaTotpPerm && isMemberSelf);\n\n  const memberHasMfaPhone = !!member.mfa_phone_number;\n  const memberHasTotp = !!member.totp_registration_id;\n\n  const canDeleteMfaPhone = canDeleteMfaPhonePerm && memberHasMfaPhone;\n  const canDeleteMfaTotp = canDeleteMfaTotpPerm && memberHasTotp;\n  const canDeletePassword = canDeleteMemberPasswordPerm || (canDeleteSelfPasswordPerm && isMemberSelf);\n  const canRevokeSessions = canRevokeMemberSessionsPerm || (canRevokeSelfSessionsPerm && isMemberSelf);\n\n  const canPerformAnyAction = canDeleteMfaPhone || canDeleteMfaTotp || canDeletePassword || canRevokeSessions;\n\n  const client = useStytchClient();\n  const { mutate: mutateSWR } = useSWRConfig();\n\n  const { mutate: deleteMfaTotp } = useMutateWithToast(async (memberId: string) => {\n    await mutateSWR(\n      memberGetKey(memberId),\n      async () => {\n        const result = await client.organization.members.deleteMFATOTP(memberId);\n        return result.member;\n      },\n      {\n        populateCache: true,\n        revalidate: false,\n      },\n    );\n  });\n  const { open: openResetMfaTotpModal, ...resetMfaTotpModalProps } = useModalState(() => {\n    return deleteMfaTotp(member.member_id);\n  });\n\n  const { mutate: deleteMfaPhoneNumber } = useMutateWithToast(async (memberId: string) => {\n    await mutateSWR(\n      memberGetKey(memberId),\n      async () => {\n        const result = await client.organization.members.deleteMFAPhoneNumber(memberId);\n        return result.member;\n      },\n      {\n        populateCache: true,\n        revalidate: false,\n      },\n    );\n  });\n  const { open: openResetMfaPhoneNumberModal, ...resetMfaPhoneNumberModalProps } = useModalState(() => {\n    return deleteMfaPhoneNumber(member.member_id);\n  });\n\n  const [sendPasswordReset, setSendPasswordReset] = useState(false);\n  const { mutate: resetPassword } = useMutateWithToast(async (memberId: string) => {\n    await mutateSWR(\n      memberGetKey(memberId),\n      async () => {\n        const result = member.member_password_id\n          ? (await client.organization.members.deletePassword(member.member_password_id)).member\n          : member;\n\n        if (sendPasswordReset) {\n          await client.passwords.resetByEmailStart({\n            email_address: member.email_address,\n            organization_id: member.organization_id,\n          });\n        }\n\n        return result;\n      },\n      {\n        populateCache: true,\n        revalidate: false,\n      },\n    );\n  });\n  const { open: openResetPasswordModal, ...resetPasswordModalProps } = useModalState(() => {\n    return resetPassword(member.member_id);\n  });\n\n  const { mutate: revokeSessions } = useMutateWithToast(async (memberId: string) => {\n    await mutateSWR(memberGetKey(memberId), async () => {\n      await client.session.revokeForMember({ member_id: memberId });\n    });\n  });\n  const { open: openRevokeSessionsModal, ...revokeSessionsModalProps } = useModalState(() => {\n    return revokeSessions(member.member_id);\n  });\n\n  const { useBlockNavigation } = useMemberManagementRouterController();\n\n  return canPerformAnyAction ? (\n    <SettingsContainer title=\"Authentication management\" useBlockNavigation={useBlockNavigation}>\n      <FlexBox flexDirection=\"column\" gap={2}>\n        {(canDeleteMfaPhone || canDeleteMfaTotp) && (\n          <SettingsSection title=\"MFA\">\n            <Typography variant=\"body2\">\n              Reset the Member’s MFA enrollment. If necessary, the Member will have to re-enroll in MFA the next time\n              they login.\n            </Typography>\n            <FlexBox gap={1}>\n              {canDeleteMfaTotp && (\n                <>\n                  <Modal\n                    {...resetMfaTotpModalProps}\n                    title=\"Reset Member’s TOTP enrollment\"\n                    confirmButtonText=\"Reset TOTP\"\n                    warning\n                  >\n                    <Typography>\n                      Reset the Member’s TOTP enrollment. If necessary, the Member will have to re-enroll in MFA the\n                      next time they login.\n                    </Typography>\n                  </Modal>\n                  <Button compact variant=\"ghost\" onClick={openResetMfaTotpModal}>\n                    Reset TOTP\n                  </Button>\n                </>\n              )}\n              {canDeleteMfaPhone && (\n                <>\n                  <Modal\n                    {...resetMfaPhoneNumberModalProps}\n                    title=\"Reset Member’s SMS OTP enrollment\"\n                    confirmButtonText=\"Reset SMS OTP\"\n                    warning\n                  >\n                    <Typography>\n                      Reset the Member’s SMS OTP enrollment. If necessary, the Member will have to re-enroll in MFA the\n                      next time they login.\n                    </Typography>\n                  </Modal>\n                  <Button compact variant=\"ghost\" onClick={openResetMfaPhoneNumberModal}>\n                    Reset SMS OTP\n                  </Button>\n                </>\n              )}\n            </FlexBox>\n          </SettingsSection>\n        )}\n        {canDeletePassword && (\n          <SettingsSection title=\"Password\">\n            <Modal\n              {...resetPasswordModalProps}\n              title=\"Ask Member to reset their password?\"\n              confirmButtonText=\"Reset password\"\n              warning\n            >\n              <Typography>\n                Delete the member’s current password and optionally trigger a password reset email by checking the box\n                below.\n              </Typography>\n              <Typography>\n                The Member will need to set a new password or use a passwordless authentication method (if allowed by\n                your auth policy) in order to login again.\n              </Typography>\n              <Checkbox\n                label=\"Trigger password reset email\"\n                checked={sendPasswordReset}\n                onClick={(checked) => {\n                  setSendPasswordReset(checked);\n                }}\n              />\n            </Modal>\n            <Typography variant=\"body2\">\n              Forcing a password reset will delete the Member’s current password and send a reset password email.\n            </Typography>\n            <Button compact variant=\"ghost\" onClick={openResetPasswordModal}>\n              Reset password\n            </Button>\n          </SettingsSection>\n        )}\n        {canRevokeSessions && (\n          <SettingsSection title=\"Sessions\">\n            <Modal\n              {...revokeSessionsModalProps}\n              title=\"Revoke Member’s active sessions\"\n              confirmButtonText=\"Revoke all sessions\"\n              warning\n            >\n              <Typography>\n                The Member will be force logged out and all their active sessions will be revoked.\n              </Typography>\n            </Modal>\n            <Typography variant=\"body2\">Force logout this Member. All active sessions will be revoked.</Typography>\n            <Button compact variant=\"ghost\" onClick={openRevokeSessionsModal}>\n              Revoke all sessions\n            </Button>\n          </SettingsSection>\n        )}\n      </FlexBox>\n    </SettingsContainer>\n  ) : null;\n};\n"],"names":["AuthManagementSection","member","isSelf","useSelf","isMemberSelf","member_id","data","canDeleteMemberMfaPhonePerm","useRbac","canDeleteMemberMfaTotpPerm","canDeleteMemberPasswordPerm","canRevokeMemberSessionsPerm","canDeleteSelfMfaPhonePerm","canDeleteSelfMfaTotpPerm","canDeleteSelfPasswordPerm","canRevokeSelfSessionsPerm","canDeleteMfaPhonePerm","canDeleteMfaTotpPerm","memberHasMfaPhone","mfa_phone_number","memberHasTotp","totp_registration_id","canDeleteMfaPhone","canDeleteMfaTotp","canDeletePassword","canRevokeSessions","canPerformAnyAction","client","useStytchClient","mutate","mutateSWR","useSWRConfig","deleteMfaTotp","useMutateWithToast","memberId","memberGetKey","result","organization","members","deleteMFATOTP","populateCache","revalidate","open","openResetMfaTotpModal","resetMfaTotpModalProps","useModalState","deleteMfaPhoneNumber","deleteMFAPhoneNumber","openResetMfaPhoneNumberModal","resetMfaPhoneNumberModalProps","sendPasswordReset","setSendPasswordReset","useState","resetPassword","member_password_id","deletePassword","passwords","resetByEmailStart","email_address","organization_id","openResetPasswordModal","resetPasswordModalProps","revokeSessions","session","revokeForMember","openRevokeSessionsModal","revokeSessionsModalProps","useBlockNavigation","useMemberManagementRouterController","React","SettingsContainer","title","FlexBox","flexDirection","gap","SettingsSection","Typography","variant","Modal","confirmButtonText","warning","Button","compact","onClick","Checkbox","label","checked"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBO,MAAMA,qBAAAA,GAAwB,CAAC,EAAEC,MAAM,EAAsB,GAAA;IAClE,MAAM,EAAEC,MAAM,EAAE,GAAGC,OAAAA,EAAAA;IACnB,MAAMC,YAAAA,GAAeF,MAAAA,CAAOD,MAAAA,CAAOI,SAAS,CAAA;AAE5C,IAAA,MAAM,EAAEC,IAAAA,EAAMC,2BAA2B,EAAE,GAAGC,QAAQ,eAAA,EAAiB,8BAAA,CAAA;AACvE,IAAA,MAAM,EAAEF,IAAAA,EAAMG,0BAA0B,EAAE,GAAGD,QAAQ,eAAA,EAAiB,6BAAA,CAAA;AACtE,IAAA,MAAM,EAAEF,IAAAA,EAAMI,2BAA2B,EAAE,GAAGF,QAAQ,eAAA,EAAiB,6BAAA,CAAA;AACvE,IAAA,MAAM,EAAEF,IAAAA,EAAMK,2BAA2B,EAAE,GAAGH,QAAQ,eAAA,EAAiB,iBAAA,CAAA;AAEvE,IAAA,MAAM,EAAEF,IAAAA,EAAMM,yBAAyB,EAAE,GAAGJ,QAAQ,aAAA,EAAe,8BAAA,CAAA;AACnE,IAAA,MAAM,EAAEF,IAAAA,EAAMO,wBAAwB,EAAE,GAAGL,QAAQ,aAAA,EAAe,6BAAA,CAAA;AAClE,IAAA,MAAM,EAAEF,IAAAA,EAAMQ,yBAAyB,EAAE,GAAGN,QAAQ,aAAA,EAAe,6BAAA,CAAA;AACnE,IAAA,MAAM,EAAEF,IAAAA,EAAMS,yBAAyB,EAAE,GAAGP,QAAQ,aAAA,EAAe,iBAAA,CAAA;IAEnE,MAAMQ,qBAAAA,GAAwBT,+BAAgCK,yBAAAA,IAA6BR,YAAAA;IAC3F,MAAMa,oBAAAA,GAAuBR,8BAA+BI,wBAAAA,IAA4BT,YAAAA;AAExF,IAAA,MAAMc,iBAAAA,GAAoB,CAAC,CAACjB,MAAAA,CAAOkB,gBAAgB;AACnD,IAAA,MAAMC,aAAAA,GAAgB,CAAC,CAACnB,MAAAA,CAAOoB,oBAAoB;AAEnD,IAAA,MAAMC,oBAAoBN,qBAAAA,IAAyBE,iBAAAA;AACnD,IAAA,MAAMK,mBAAmBN,oBAAAA,IAAwBG,aAAAA;IACjD,MAAMI,iBAAAA,GAAoBd,+BAAgCI,yBAAAA,IAA6BV,YAAAA;IACvF,MAAMqB,iBAAAA,GAAoBd,+BAAgCI,yBAAAA,IAA6BX,YAAAA;IAEvF,MAAMsB,mBAAAA,GAAsBJ,iBAAAA,IAAqBC,gBAAAA,IAAoBC,iBAAAA,IAAqBC,iBAAAA;AAE1F,IAAA,MAAME,MAAAA,GAASC,eAAAA,EAAAA;AACf,IAAA,MAAM,EAAEC,MAAAA,EAAQC,SAAS,EAAE,GAAGC,YAAAA,EAAAA;AAE9B,IAAA,MAAM,EAAEF,MAAAA,EAAQG,aAAa,EAAE,GAAGC,mBAAmB,OAAOC,QAAAA,GAAAA;QAC1D,MAAMJ,SAAAA,CACJK,aAAaD,QAAAA,CAAAA,EACb,UAAA;YACE,MAAME,MAAAA,GAAS,MAAMT,MAAAA,CAAOU,YAAY,CAACC,OAAO,CAACC,aAAa,CAACL,QAAAA,CAAAA;AAC/D,YAAA,OAAOE,OAAOnC,MAAM;QACtB,CAAA,EACA;YACEuC,aAAAA,EAAe,IAAA;YACfC,UAAAA,EAAY;AACd,SAAA,CAAA;AAEJ,IAAA,CAAA,CAAA;AACA,IAAA,MAAM,EAAEC,IAAAA,EAAMC,qBAAqB,EAAE,GAAGC,sBAAAA,EAAwB,GAAGC,aAAAA,CAAc,IAAA;QAC/E,OAAOb,aAAAA,CAAc/B,OAAOI,SAAS,CAAA;AACvC,IAAA,CAAA,CAAA;AAEA,IAAA,MAAM,EAAEwB,MAAAA,EAAQiB,oBAAoB,EAAE,GAAGb,mBAAmB,OAAOC,QAAAA,GAAAA;QACjE,MAAMJ,SAAAA,CACJK,aAAaD,QAAAA,CAAAA,EACb,UAAA;YACE,MAAME,MAAAA,GAAS,MAAMT,MAAAA,CAAOU,YAAY,CAACC,OAAO,CAACS,oBAAoB,CAACb,QAAAA,CAAAA;AACtE,YAAA,OAAOE,OAAOnC,MAAM;QACtB,CAAA,EACA;YACEuC,aAAAA,EAAe,IAAA;YACfC,UAAAA,EAAY;AACd,SAAA,CAAA;AAEJ,IAAA,CAAA,CAAA;AACA,IAAA,MAAM,EAAEC,IAAAA,EAAMM,4BAA4B,EAAE,GAAGC,6BAAAA,EAA+B,GAAGJ,aAAAA,CAAc,IAAA;QAC7F,OAAOC,oBAAAA,CAAqB7C,OAAOI,SAAS,CAAA;AAC9C,IAAA,CAAA,CAAA;AAEA,IAAA,MAAM,CAAC6C,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGC,CAAAA,CAAS,KAAA,CAAA;AAC3D,IAAA,MAAM,EAAEvB,MAAAA,EAAQwB,aAAa,EAAE,GAAGpB,mBAAmB,OAAOC,QAAAA,GAAAA;QAC1D,MAAMJ,SAAAA,CACJK,aAAaD,QAAAA,CAAAA,EACb,UAAA;AACE,YAAA,MAAME,SAASnC,MAAAA,CAAOqD,kBAAkB,GACpC,CAAC,MAAM3B,MAAAA,CAAOU,YAAY,CAACC,OAAO,CAACiB,cAAc,CAACtD,MAAAA,CAAOqD,kBAAkB,CAAA,EAAGrD,MAAM,GACpFA,MAAAA;AAEJ,YAAA,IAAIiD,iBAAAA,EAAmB;AACrB,gBAAA,MAAMvB,MAAAA,CAAO6B,SAAS,CAACC,iBAAiB,CAAC;AACvCC,oBAAAA,aAAAA,EAAezD,OAAOyD,aAAa;AACnCC,oBAAAA,eAAAA,EAAiB1D,OAAO0D;AAC1B,iBAAA,CAAA;AACF,YAAA;YAEA,OAAOvB,MAAAA;QACT,CAAA,EACA;YACEI,aAAAA,EAAe,IAAA;YACfC,UAAAA,EAAY;AACd,SAAA,CAAA;AAEJ,IAAA,CAAA,CAAA;AACA,IAAA,MAAM,EAAEC,IAAAA,EAAMkB,sBAAsB,EAAE,GAAGC,uBAAAA,EAAyB,GAAGhB,aAAAA,CAAc,IAAA;QACjF,OAAOQ,aAAAA,CAAcpD,OAAOI,SAAS,CAAA;AACvC,IAAA,CAAA,CAAA;AAEA,IAAA,MAAM,EAAEwB,MAAAA,EAAQiC,cAAc,EAAE,GAAG7B,mBAAmB,OAAOC,QAAAA,GAAAA;QAC3D,MAAMJ,SAAAA,CAAUK,aAAaD,QAAAA,CAAAA,EAAW,UAAA;AACtC,YAAA,MAAMP,MAAAA,CAAOoC,OAAO,CAACC,eAAe,CAAC;gBAAE3D,SAAAA,EAAW6B;AAAS,aAAA,CAAA;AAC7D,QAAA,CAAA,CAAA;AACF,IAAA,CAAA,CAAA;AACA,IAAA,MAAM,EAAEQ,IAAAA,EAAMuB,uBAAuB,EAAE,GAAGC,wBAAAA,EAA0B,GAAGrB,aAAAA,CAAc,IAAA;QACnF,OAAOiB,cAAAA,CAAe7D,OAAOI,SAAS,CAAA;AACxC,IAAA,CAAA,CAAA;IAEA,MAAM,EAAE8D,kBAAkB,EAAE,GAAGC,mCAAAA,EAAAA;AAE/B,IAAA,OAAO1C,oCACL2C,EAAA,CAAA,aAAA,CAACC,iBAAAA,EAAAA;QAAkBC,KAAAA,EAAM,2BAAA;QAA4BJ,kBAAAA,EAAoBA;qBACvEE,EAAA,CAAA,aAAA,CAACG,OAAAA,EAAAA;QAAQC,aAAAA,EAAc,QAAA;QAASC,GAAAA,EAAK;AAClC,KAAA,EAACpD,CAAAA,iBAAAA,IAAqBC,gBAAe,mBACpC8C,EAAA,CAAA,aAAA,CAACM,eAAAA,EAAAA;QAAgBJ,KAAAA,EAAM;qBACrBF,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AAAQ,KAAA,EAAA,qHAAA,CAAA,gBAI5BR,EAAA,CAAA,aAAA,CAACG,OAAAA,EAAAA;QAAQE,GAAAA,EAAK;AACXnD,KAAAA,EAAAA,gBAAAA,kBACC8C,kDACEA,EAAA,CAAA,aAAA,CAACS,KAAAA,EAAAA;AACE,QAAA,GAAGlC,sBAAsB;QAC1B2B,KAAAA,EAAM,gCAAA;QACNQ,iBAAAA,EAAkB,YAAA;QAClBC,OAAAA,EAAAA;qBAEAX,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA,IAAAA,EAAW,wIAKdP,EAAA,CAAA,aAAA,CAACY,MAAAA,EAAAA;QAAOC,OAAAA,EAAAA,IAAAA;QAAQL,OAAAA,EAAQ,OAAA;QAAQM,OAAAA,EAASxC;OAAuB,YAAA,CAAA,CAAA,EAKnErB,iBAAAA,kBACC+C,kDACEA,EAAA,CAAA,aAAA,CAACS,KAAAA,EAAAA;AACE,QAAA,GAAG7B,6BAA6B;QACjCsB,KAAAA,EAAM,mCAAA;QACNQ,iBAAAA,EAAkB,eAAA;QAClBC,OAAAA,EAAAA;qBAEAX,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA,IAAAA,EAAW,2IAKdP,EAAA,CAAA,aAAA,CAACY,MAAAA,EAAAA;QAAOC,OAAAA,EAAAA,IAAAA;QAAQL,OAAAA,EAAQ,OAAA;QAAQM,OAAAA,EAASnC;AAA8B,KAAA,EAAA,eAAA,CAAA,CAAA,CAAA,CAAA,EAQhFxB,mCACC6C,EAAA,CAAA,aAAA,CAACM,eAAAA,EAAAA;QAAgBJ,KAAAA,EAAM;qBACrBF,EAAA,CAAA,aAAA,CAACS,KAAAA,EAAAA;AACE,QAAA,GAAGjB,uBAAuB;QAC3BU,KAAAA,EAAM,qCAAA;QACNQ,iBAAAA,EAAkB,gBAAA;QAClBC,OAAAA,EAAAA;AAEA,KAAA,gBAAAX,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA,IAAAA,EAAW,+GAAA,CAAA,gBAIZP,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA,IAAAA,EAAW,mKAIZP,EAAA,CAAA,aAAA,CAACe,QAAAA,EAAAA;QACCC,KAAAA,EAAM,8BAAA;QACNC,OAAAA,EAASpC,iBAAAA;AACTiC,QAAAA,OAAAA,EAAS,CAACG,OAAAA,GAAAA;YACRnC,oBAAAA,CAAqBmC,OAAAA,CAAAA;AACvB,QAAA;uBAGJjB,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AAAQ,KAAA,EAAA,qGAAA,CAAA,gBAG5BR,EAAA,CAAA,aAAA,CAACY,MAAAA,EAAAA;QAAOC,OAAAA,EAAAA,IAAAA;QAAQL,OAAAA,EAAQ,OAAA;QAAQM,OAAAA,EAASvB;AAAwB,KAAA,EAAA,gBAAA,CAAA,CAAA,EAKpEnC,mCACC4C,EAAA,CAAA,aAAA,CAACM,eAAAA,EAAAA;QAAgBJ,KAAAA,EAAM;qBACrBF,EAAA,CAAA,aAAA,CAACS,KAAAA,EAAAA;AACE,QAAA,GAAGZ,wBAAwB;QAC5BK,KAAAA,EAAM,iCAAA;QACNQ,iBAAAA,EAAkB,qBAAA;QAClBC,OAAAA,EAAAA;qBAEAX,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA,IAAAA,EAAW,sGAIdP,EAAA,CAAA,aAAA,CAACO,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AAAQ,KAAA,EAAA,gEAAA,CAAA,gBAC5BR,EAAA,CAAA,aAAA,CAACY,MAAAA,EAAAA;QAAOC,OAAAA,EAAAA,IAAAA;QAAQL,OAAAA,EAAQ,OAAA;QAAQM,OAAAA,EAASlB;OAAyB,qBAAA,CAAA,CAAA,CAAA,CAAA,GAOxE,IAAA;AACN;;;;"}